From cf8b74de164f322a78ea51921b236213805e6f79 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Mon, 29 Jan 2024 21:04:18 +0000 Subject: [PATCH 01/46] Editor: Update the WordPress packages to the Gutenberg 16.7 RC2 version. This patch, somewhat small brings a lot to WordPress. This includes features like: - DataViews. - Customization tools like box shadow, background size and repeat. - UI improvements in the site editor. - Preferences sharing between the post and site editors. - Unified panels and editors between post and site editors. - Improved template mode in the post editor. - Iterations to multiple interactive blocks. - Preparing the blocks and UI for pattern overrides. - and a lot more. Props luisherranz, gziolo, isabel_brison, costdev, jonsurrell, peterwilsoncc, get_dave, antonvlasenko, desrosj. See #60315. git-svn-id: https://develop.svn.wordpress.org/trunk@57377 602fd350-edb4-49c9-b593-d223f7449a82 --- Gruntfile.js | 4 +- package-lock.json | 7003 +++++++---------- package.json | 143 +- .../assets/script-loader-packages.min.php | 2 +- src/wp-includes/blocks/audio/block.json | 4 +- src/wp-includes/blocks/avatar/block.json | 6 +- src/wp-includes/blocks/block.php | 20 + src/wp-includes/blocks/block/block.json | 6 +- src/wp-includes/blocks/blocks-json.php | 263 +- src/wp-includes/blocks/button/block.json | 5 +- src/wp-includes/blocks/calendar.php | 8 +- src/wp-includes/blocks/categories.php | 6 +- src/wp-includes/blocks/code/block.json | 4 +- .../blocks/comments-title/block.json | 2 +- src/wp-includes/blocks/cover/block.json | 9 +- src/wp-includes/blocks/details/block.json | 4 +- src/wp-includes/blocks/embed/block.json | 4 +- src/wp-includes/blocks/file.php | 55 +- src/wp-includes/blocks/file/block.json | 9 +- src/wp-includes/blocks/footnotes.php | 31 +- src/wp-includes/blocks/footnotes/block.json | 3 +- src/wp-includes/blocks/gallery.php | 15 + src/wp-includes/blocks/gallery/block.json | 12 +- src/wp-includes/blocks/group/block.json | 8 +- src/wp-includes/blocks/heading/block.json | 10 +- src/wp-includes/blocks/image.php | 141 +- src/wp-includes/blocks/image/block.json | 19 +- .../blocks/legacy-widget/block.json | 1 + src/wp-includes/blocks/list-item/block.json | 13 +- src/wp-includes/blocks/loginout/block.json | 8 + src/wp-includes/blocks/missing/block.json | 2 +- src/wp-includes/blocks/navigation-link.php | 131 +- .../blocks/navigation-link/block.json | 3 +- src/wp-includes/blocks/navigation.php | 1239 ++- src/wp-includes/blocks/navigation/block.json | 4 +- src/wp-includes/blocks/paragraph/block.json | 8 +- src/wp-includes/blocks/pattern.php | 23 +- src/wp-includes/blocks/pattern/block.json | 3 +- .../blocks/post-featured-image.php | 31 + .../blocks/post-featured-image/block.json | 4 + .../blocks/post-navigation-link.php | 20 +- .../blocks/post-navigation-link/block.json | 8 + .../blocks/post-template/block.json | 1 - src/wp-includes/blocks/post-terms.php | 17 +- src/wp-includes/blocks/post-title.php | 2 +- src/wp-includes/blocks/post-title/block.json | 4 +- .../blocks/preformatted/block.json | 5 +- src/wp-includes/blocks/pullquote/block.json | 16 +- .../blocks/query-pagination-next.php | 6 +- .../blocks/query-pagination-numbers.php | 2 +- .../query-pagination-numbers/block.json | 2 +- .../blocks/query-pagination-previous.php | 6 +- src/wp-includes/blocks/query-title/block.json | 4 +- src/wp-includes/blocks/query.php | 104 +- src/wp-includes/blocks/query/block.json | 3 +- src/wp-includes/blocks/quote/block.json | 14 +- src/wp-includes/blocks/search.php | 90 +- src/wp-includes/blocks/search/block.json | 5 - src/wp-includes/blocks/site-title/block.json | 6 +- src/wp-includes/blocks/social-link.php | 10 +- src/wp-includes/blocks/table/block.json | 19 +- src/wp-includes/blocks/template-part.php | 18 +- .../blocks/template-part/block.json | 3 +- src/wp-includes/blocks/verse/block.json | 8 +- src/wp-includes/blocks/video/block.json | 4 +- .../blocks/widget-group/block.json | 1 + src/wp-includes/script-loader.php | 8 +- .../fixtures/core__quote__style-1.server.html | 2 +- .../fixtures/core__quote__style-2.server.html | 2 +- .../includes/unregister-blocks-hooks.php | 6 + tools/webpack/blocks.js | 141 +- tools/webpack/modules.js | 93 + tools/webpack/packages.js | 131 +- tools/webpack/shared.js | 42 +- webpack.config.js | 2 + 75 files changed, 4946 insertions(+), 5125 deletions(-) create mode 100644 tools/webpack/modules.js diff --git a/Gruntfile.js b/Gruntfile.js index 06a37e67e0991..43e7bd02efd09 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1566,7 +1566,9 @@ module.exports = function(grunt) { */ grunt.registerTask( 'verify:source-maps', function() { const ignoredFiles = [ - 'build/wp-includes/js/dist/components.js' + 'build/wp-includes/js/dist/components.js', + 'build/wp-includes/js/dist/block-editor.js', + 'build/wp-includes/js/dist/block-editor.min.js' ]; const files = buildFiles.reduce( ( acc, path ) => { // Skip excluded paths and any path that isn't a file. diff --git a/package-lock.json b/package-lock.json index d89116899ce05..8d53eab8e8554 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,70 +11,72 @@ "dependencies": { "@emotion/is-prop-valid": "0.8.8", "@emotion/memoize": "0.7.4", - "@wordpress/a11y": "3.42.13", - "@wordpress/annotations": "2.42.13", - "@wordpress/api-fetch": "6.39.13", - "@wordpress/autop": "3.42.13", - "@wordpress/blob": "3.42.13", - "@wordpress/block-directory": "4.19.16", - "@wordpress/block-editor": "12.10.14", - "@wordpress/block-library": "8.19.16", - "@wordpress/block-serialization-default-parser": "4.42.13", - "@wordpress/blocks": "12.19.13", - "@wordpress/commands": "0.13.14", - "@wordpress/components": "25.8.14", - "@wordpress/compose": "6.19.13", - "@wordpress/core-commands": "0.11.14", - "@wordpress/core-data": "6.19.14", - "@wordpress/customize-widgets": "4.19.16", - "@wordpress/data": "9.12.13", - "@wordpress/data-controls": "3.11.13", - "@wordpress/date": "4.42.13", - "@wordpress/deprecated": "3.42.13", - "@wordpress/dom": "3.42.13", - "@wordpress/dom-ready": "3.42.13", - "@wordpress/edit-post": "7.19.16", - "@wordpress/edit-site": "5.19.16", - "@wordpress/edit-widgets": "5.19.16", - "@wordpress/editor": "13.19.14", - "@wordpress/element": "5.19.13", - "@wordpress/escape-html": "2.42.13", - "@wordpress/format-library": "4.19.14", - "@wordpress/hooks": "3.42.13", - "@wordpress/html-entities": "3.42.13", - "@wordpress/i18n": "4.42.13", - "@wordpress/icons": "9.33.13", - "@wordpress/interactivity": "2.3.13", - "@wordpress/interface": "5.19.14", - "@wordpress/is-shallow-equal": "4.42.13", - "@wordpress/keyboard-shortcuts": "4.19.13", - "@wordpress/keycodes": "3.42.13", - "@wordpress/list-reusable-blocks": "4.19.14", - "@wordpress/media-utils": "4.33.13", - "@wordpress/notices": "4.10.13", - "@wordpress/nux": "8.4.14", - "@wordpress/patterns": "1.3.14", - "@wordpress/plugins": "6.10.14", - "@wordpress/preferences": "3.19.14", - "@wordpress/preferences-persistence": "1.34.13", - "@wordpress/primitives": "3.40.13", - "@wordpress/priority-queue": "2.42.13", - "@wordpress/private-apis": "0.24.13", - "@wordpress/redux-routine": "4.42.13", - "@wordpress/reusable-blocks": "4.19.14", - "@wordpress/rich-text": "6.19.13", - "@wordpress/router": "0.11.13", - "@wordpress/server-side-render": "4.19.14", - "@wordpress/shortcode": "3.42.13", - "@wordpress/style-engine": "1.25.13", - "@wordpress/sync": "0.4.13", - "@wordpress/token-list": "2.42.13", - "@wordpress/undo-manager": "0.2.13", - "@wordpress/url": "3.43.13", - "@wordpress/viewport": "5.19.13", - "@wordpress/warning": "2.42.13", - "@wordpress/widgets": "3.19.14", - "@wordpress/wordcount": "3.42.13", + "@wordpress/a11y": "3.50.0", + "@wordpress/annotations": "2.50.0", + "@wordpress/api-fetch": "6.47.0", + "@wordpress/autop": "3.50.0", + "@wordpress/blob": "3.50.0", + "@wordpress/block-directory": "4.27.1", + "@wordpress/block-editor": "12.18.1", + "@wordpress/block-library": "8.27.1", + "@wordpress/block-serialization-default-parser": "4.50.0", + "@wordpress/blocks": "12.27.1", + "@wordpress/commands": "0.21.0", + "@wordpress/components": "25.16.0", + "@wordpress/compose": "6.27.0", + "@wordpress/core-commands": "0.19.1", + "@wordpress/core-data": "6.27.1", + "@wordpress/customize-widgets": "4.27.1", + "@wordpress/data": "9.20.0", + "@wordpress/data-controls": "3.19.0", + "@wordpress/dataviews": "0.4.0", + "@wordpress/date": "4.50.0", + "@wordpress/deprecated": "3.50.0", + "@wordpress/dom": "3.50.0", + "@wordpress/dom-ready": "3.50.0", + "@wordpress/edit-post": "7.27.1", + "@wordpress/edit-site": "5.27.1", + "@wordpress/edit-widgets": "5.27.1", + "@wordpress/editor": "13.27.1", + "@wordpress/element": "5.27.0", + "@wordpress/escape-html": "2.50.0", + "@wordpress/format-library": "4.27.1", + "@wordpress/hooks": "3.50.0", + "@wordpress/html-entities": "3.50.0", + "@wordpress/i18n": "4.50.0", + "@wordpress/icons": "9.41.0", + "@wordpress/interactivity": "4.0.0", + "@wordpress/interactivity-router": "1.0.0", + "@wordpress/interface": "5.27.0", + "@wordpress/is-shallow-equal": "4.50.0", + "@wordpress/keyboard-shortcuts": "4.27.0", + "@wordpress/keycodes": "3.50.0", + "@wordpress/list-reusable-blocks": "4.27.0", + "@wordpress/media-utils": "4.41.0", + "@wordpress/notices": "4.18.0", + "@wordpress/nux": "8.12.0", + "@wordpress/patterns": "1.11.1", + "@wordpress/plugins": "6.18.0", + "@wordpress/preferences": "3.27.0", + "@wordpress/preferences-persistence": "1.42.0", + "@wordpress/primitives": "3.48.0", + "@wordpress/priority-queue": "2.50.0", + "@wordpress/private-apis": "0.32.0", + "@wordpress/redux-routine": "4.50.0", + "@wordpress/reusable-blocks": "4.27.1", + "@wordpress/rich-text": "6.27.0", + "@wordpress/router": "0.19.0", + "@wordpress/server-side-render": "4.27.1", + "@wordpress/shortcode": "3.50.0", + "@wordpress/style-engine": "1.33.1", + "@wordpress/sync": "0.12.0", + "@wordpress/token-list": "2.50.0", + "@wordpress/undo-manager": "0.10.0", + "@wordpress/url": "3.51.0", + "@wordpress/viewport": "5.27.0", + "@wordpress/warning": "2.50.0", + "@wordpress/widgets": "3.27.1", + "@wordpress/wordcount": "3.50.0", "backbone": "1.5.0", "clipboard": "2.0.11", "core-js-url-browser": "3.6.4", @@ -98,6 +100,7 @@ "polyfill-library": "4.8.0", "react": "18.2.0", "react-dom": "18.2.0", + "react-is": "18.2.0", "regenerator-runtime": "0.14.0", "tslib": "2.6.2", "underscore": "1.13.6", @@ -108,12 +111,12 @@ "@lodder/grunt-postcss": "^3.1.1", "@playwright/test": "1.32.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.5", - "@wordpress/babel-preset-default": "7.26.13", - "@wordpress/dependency-extraction-webpack-plugin": "4.25.13", - "@wordpress/e2e-test-utils": "10.13.13", - "@wordpress/e2e-test-utils-playwright": "0.10.13", - "@wordpress/prettier-config": "2.25.13", - "@wordpress/scripts": "26.13.13", + "@wordpress/babel-preset-default": "7.34.0", + "@wordpress/dependency-extraction-webpack-plugin": "5.1.0", + "@wordpress/e2e-test-utils": "10.21.0", + "@wordpress/e2e-test-utils-playwright": "0.18.0", + "@wordpress/prettier-config": "3.7.0", + "@wordpress/scripts": "27.1.0", "autoprefixer": "10.4.16", "chalk": "5.3.0", "check-node-version": "4.2.1", @@ -186,16 +189,16 @@ } }, "node_modules/@ariakit/core": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.2.7.tgz", - "integrity": "sha512-Hs0N1EMYq88WW4v9xnSIHNR38TvbQuoUX6FYFmeLCZSTIXQBiET7lr1DQXwOOmdEtRtlxQ5HsxbTkxeOkPv+eg==" + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.3.11.tgz", + "integrity": "sha512-+MnOeqnA4FLI/7vqsZLbZQHHN4ofd9kvkNjz44fNi0gqmD+ZbMWiDkFAvZII75dYnxYw5ZPpWjA4waK22VBWig==" }, "node_modules/@ariakit/react": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.2.12.tgz", - "integrity": "sha512-4rAgMyUURHW78EKgRCanhyRUtsiYCOxO65BBHF4mg3tZsDeOvu9kBG5IAXX8mUgakTcyr0EKXuOtGThaj7gobA==", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.3.14.tgz", + "integrity": "sha512-h71BPMZ2eW+E2ESbdYxSAEMR1DozYzd5eHE5IOzGd9Egi5u7EZxqmuW4CXVXZ1Y6vbaDMV3SudgPh7iHS/ArFw==", "dependencies": { - "@ariakit/react-core": "0.2.12" + "@ariakit/react-core": "0.3.14" }, "funding": { "type": "opencollective", @@ -207,11 +210,11 @@ } }, "node_modules/@ariakit/react-core": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.2.12.tgz", - "integrity": "sha512-3KSKlX10nnhCvjsbPW0CAnqG+6grryfwnMkeJJ/h34FSV7hEfUMexmIjKBVZyfBG08Xj8NjSK8kkx9c3ChkXeA==", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.3.14.tgz", + "integrity": "sha512-16Qj6kDPglpdWtU5roY9q+G66naOjauTY5HvUIaL2aLY0187ATaRrABIKoMMzTtJyhvsud4jFlzivz+/zCQ8yw==", "dependencies": { - "@ariakit/core": "0.2.7", + "@ariakit/core": "0.3.11", "@floating-ui/dom": "^1.0.0", "use-sync-external-store": "^1.2.0" }, @@ -3646,19 +3649,11 @@ "node": ">= 8" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -3666,80 +3661,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@pkgr/utils/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pkgr/utils/node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pkgr/utils/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@pkgr/utils/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@pkgr/utils/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@playwright/test": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.32.0.tgz", @@ -3889,9 +3810,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", "dev": true }, "node_modules/@popperjs/core": { @@ -3904,9 +3825,9 @@ } }, "node_modules/@preact/signals": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-1.2.1.tgz", - "integrity": "sha512-hRPvp1C2ooDzOHqfnhdpHgoIFDbYFAXLhoid3+jSItuPPD/J0r/UsiWKv/8ZO/oEhjRaP0M5niuRYsWqmY2GEA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-1.2.2.tgz", + "integrity": "sha512-ColCqdo4cRP18bAuIR4Oik5rDpiyFtPIJIygaYPMEAwTnl4buWkBOflGBSzhYyPyJfKpkwlekrvK+1pzQ2ldWw==", "dependencies": { "@preact/signals-core": "^1.4.0" }, @@ -3919,9 +3840,9 @@ } }, "node_modules/@preact/signals-core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.5.0.tgz", - "integrity": "sha512-U2diO1Z4i1n2IoFgMYmRdHWGObNrcuTRxyNEn7deSq2cru0vj0583HYQZHsAqcs7FE+hQyX3mjIV7LAfHCvy8w==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.5.1.tgz", + "integrity": "sha512-dE6f+WCX5ZUDwXzUIWNMhhglmuLpqJhuy3X3xHrhZYI0Hm2LyQwOu0l9mdPiWrVNsE+Q7txOnJPgtIqHCYoBVA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -4115,35 +4036,6 @@ "@babel/runtime": "^7.13.10" } }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz", - "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.2" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.2.tgz", - "integrity": "sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-slot": "1.0.1" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", @@ -4298,53 +4190,6 @@ } } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", - "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz", - "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-escape-keydown": "1.0.2" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.4.tgz", - "integrity": "sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-menu": "2.0.4", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, "node_modules/@radix-ui/react-focus-guards": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", @@ -4356,21 +4201,6 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.2.tgz", - "integrity": "sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, "node_modules/@radix-ui/react-id": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", @@ -4383,97 +4213,6 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-menu": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.4.tgz", - "integrity": "sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-collection": "1.0.2", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-direction": "1.0.0", - "@radix-ui/react-dismissable-layer": "1.0.3", - "@radix-ui/react-focus-guards": "1.0.0", - "@radix-ui/react-focus-scope": "1.0.2", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-popper": "1.1.1", - "@radix-ui/react-portal": "1.0.2", - "@radix-ui/react-presence": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-roving-focus": "1.0.3", - "@radix-ui/react-slot": "1.0.1", - "@radix-ui/react-use-callback-ref": "1.0.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz", - "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "0.7.2", - "@radix-ui/react-arrow": "1.0.2", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-layout-effect": "1.0.0", - "@radix-ui/react-use-rect": "1.0.0", - "@radix-ui/react-use-size": "1.0.0", - "@radix-ui/rect": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/react-popper/node_modules/@floating-ui/core": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", - "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==" - }, - "node_modules/@radix-ui/react-popper/node_modules/@floating-ui/dom": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", - "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", - "dependencies": { - "@floating-ui/core": "^0.7.3" - } - }, - "node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz", - "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==", - "dependencies": { - "@floating-ui/dom": "^0.5.3", - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz", - "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.2" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, "node_modules/@radix-ui/react-presence": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", @@ -4488,52 +4227,6 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", - "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.3.tgz", - "integrity": "sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-collection": "1.0.2", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-direction": "1.0.0", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-controllable-state": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", - "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", @@ -4557,18 +4250,6 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz", - "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, "node_modules/@radix-ui/react-use-layout-effect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", @@ -4580,38 +4261,6 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", - "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz", - "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", - "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, "node_modules/@react-spring/animated": { "version": "9.7.1", "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.1.tgz", @@ -5523,9 +5172,9 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "dependencies": { "@types/connect": "*", @@ -5533,27 +5182,27 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -5587,9 +5236,9 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -5599,14 +5248,15 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/glob": { @@ -5628,10 +5278,26 @@ "@types/node": "*" } }, + "node_modules/@types/gradient-parser": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@types/gradient-parser/-/gradient-parser-0.1.3.tgz", + "integrity": "sha512-XDbrTSBlQV9nxE1GiDL3FaOPy4G/KaJkhDutBX48Kg8CYZMBARyyDFGCWfWJn4pobmInmwud1xxH7VJMAr0CKQ==" + }, + "node_modules/@types/highlight-words-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/highlight-words-core/-/highlight-words-core-1.2.1.tgz", + "integrity": "sha512-9VZUA5omXBfn+hDxFjUDu1FOJTBM3LmvqfDey+Z6Aa8B8/JmF5SMj6FBrjfgJ/Q3YXOZd3qyTDfJyMZSs/wCUA==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, "dependencies": { "@types/node": "*" @@ -5707,9 +5373,9 @@ "dev": true }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "node_modules/@types/minimatch": { @@ -5732,8 +5398,16 @@ "node_modules/@types/node": { "version": "14.14.20", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", - "dev": true + "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==" + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -5759,15 +5433,15 @@ "optional": true }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "node_modules/@types/react": { @@ -5800,34 +5474,53 @@ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/semver": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", - "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, "dependencies": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } }, + "node_modules/@types/simple-peer": { + "version": "9.11.8", + "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.8.tgz", + "integrity": "sha512-rvqefdp2rvIA6wiomMgKWd2UZNPe6LM2EV5AuY3CPQJF+8TbdrL5TjYdMf0VAjGczzlkH4l1NjDkihwbj3Xodw==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "dependencies": { "@types/node": "*" @@ -5919,9 +5612,9 @@ } }, "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "dependencies": { "@types/node": "*" @@ -5953,16 +5646,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", - "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz", + "integrity": "sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/type-utils": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/type-utils": "6.19.1", + "@typescript-eslint/utils": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -5988,15 +5681,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", - "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz", + "integrity": "sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4" }, "engines": { @@ -6016,13 +5709,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", - "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0" + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6033,13 +5726,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", - "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz", + "integrity": "sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/utils": "6.19.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -6060,9 +5753,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", - "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6073,16 +5766,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", - "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -6099,18 +5793,42 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", - "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz", + "integrity": "sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", "semver": "^7.5.4" }, "engines": { @@ -6125,12 +5843,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", - "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/types": "6.19.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -6316,34 +6034,42 @@ } }, "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, + "engines": { + "node": ">=14.15.0" + }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, - "dependencies": { - "envinfo": "^7.7.3" + "engines": { + "node": ">=14.15.0" }, "peerDependencies": { - "webpack-cli": "4.x.x" + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, + "engines": { + "node": ">=14.15.0" + }, "peerDependencies": { - "webpack-cli": "4.x.x" + "webpack": "5.x.x", + "webpack-cli": "5.x.x" }, "peerDependenciesMeta": { "webpack-dev-server": { @@ -6352,28 +6078,28 @@ } }, "node_modules/@wordpress/a11y": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-3.42.13.tgz", - "integrity": "sha512-57KH89dbt8ipimoBGezKQHLvwSsJHW/W4HpvzZFqnPHvnlNNYoVC9UuqiBavxdB2WkzMPmNYFKsM7kOInEdyTA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-3.50.0.tgz", + "integrity": "sha512-eQiPGnxqiL1LgnHztFG0RGSFZ5phwR8B8Fr4lbJsFalsc9R/tOcjewvf2KN0yi2UlRA5ssAeiTP+tYmeAqtOHQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/dom-ready": "^3.42.13", - "@wordpress/i18n": "^4.42.13" + "@wordpress/dom-ready": "^3.50.0", + "@wordpress/i18n": "^4.50.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/annotations": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/annotations/-/annotations-2.42.13.tgz", - "integrity": "sha512-S/bCU8AOYzVMKBSMMtmoB9Dw1kiOS3KNfFzdCLpiyzNhfqXPWp7ciM5WJTHJRdzobeTOh1CIJ6x5WHhBqO/t8w==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/annotations/-/annotations-2.50.0.tgz", + "integrity": "sha512-E9cu8xuGvIRw3LVtuS+XSzAXVBF41sgvxpVJAz/5FEibzxUHPy8flu5tTKf+mi4WGZxC4AJGNP1bhZRj7cynZQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/data": "^9.12.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/rich-text": "^6.19.13", + "@wordpress/data": "^9.20.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/rich-text": "^6.27.0", "rememo": "^4.0.2", "uuid": "^9.0.1" }, @@ -6385,22 +6111,22 @@ } }, "node_modules/@wordpress/api-fetch": { - "version": "6.39.13", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.39.13.tgz", - "integrity": "sha512-DFaiNq5bEOVqYDpcqXqdxjyBDboeElma6e7FNSX2APVZZt/8xxeb4eI9X0877i6B15G5blyHsjSit5rq88iqtg==", + "version": "6.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.47.0.tgz", + "integrity": "sha512-NA/jWDXoVtJmiVBYhlxts2UrgKJpJM+zTGzLCfRQCZUzpJYm3LonB8x+uCQ78nEyxCY397Esod3jnbquYjOr0Q==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.42.13", - "@wordpress/url": "^3.43.13" + "@wordpress/i18n": "^4.50.0", + "@wordpress/url": "^3.51.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/autop": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-3.42.13.tgz", - "integrity": "sha512-vQjEvJaYZ5OyMJ6IdbVL/RUqOy/VTe6E1BCkdRW8amJTm8koTkbBbOFWSsVoXh6jFoq2mDAqC7Tt2vL0yMA4rQ==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-3.50.0.tgz", + "integrity": "sha512-4E0vq2MvSOVDKXs4OulIbTdKU6S5O9QjT4qc63rAd0uiKGBYV12ViPzmwbJ6k38zOO0PKdcwlVCj55Gq4aoPDw==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6409,9 +6135,9 @@ } }, "node_modules/@wordpress/babel-plugin-import-jsx-pragma": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.26.0.tgz", - "integrity": "sha512-XZCTBqEmOlM87/6wkgtHhnHaj8cJPOY5avyjKtMDwoBbcXAmHUknbphZG7KEWIiVIilyxKyHnsTxjTplkqTtCQ==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.33.0.tgz", + "integrity": "sha512-CjzruFKWgzU/mO/nnQJ2l9UlzZQpqS60UC6l2vNdJ9oD2nKHR5Oou6kNic3QhWDVJrBf2JUiJJ0TC280bykXmA==", "dev": true, "engines": { "node": ">=14" @@ -6421,9 +6147,9 @@ } }, "node_modules/@wordpress/babel-preset-default": { - "version": "7.26.13", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.26.13.tgz", - "integrity": "sha512-kW9sg3lwbrhYzVR24n7cUEC2Sx1Pj4UNnITbXqVmxnVok0CK7IkvstMlbtLDbULh9o2f92OPNMwdAStErEjT7g==", + "version": "7.34.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.34.0.tgz", + "integrity": "sha512-yjFOllyTktFHtcIEgU3ghXBn8lItzr5mPLf0xdSpe0cHceFYL1hT1oprhgRL+olZweaO96Yfm0qUCCKQfJBWsA==", "dev": true, "dependencies": { "@babel/core": "^7.16.0", @@ -6432,27 +6158,27 @@ "@babel/preset-env": "^7.16.0", "@babel/preset-typescript": "^7.16.0", "@babel/runtime": "^7.16.0", - "@wordpress/babel-plugin-import-jsx-pragma": "^4.25.13", - "@wordpress/browserslist-config": "^5.25.13", - "@wordpress/element": "^5.19.13", - "@wordpress/warning": "^2.42.13", - "browserslist": "^4.21.9", - "core-js": "^3.31.0" + "@wordpress/babel-plugin-import-jsx-pragma": "^4.33.0", + "@wordpress/browserslist-config": "^5.33.0", + "@wordpress/warning": "^2.50.0", + "browserslist": "^4.21.10", + "core-js": "^3.31.0", + "react": "^18.2.0" }, "engines": { "node": ">=14" } }, "node_modules/@wordpress/base-styles": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.34.0.tgz", - "integrity": "sha512-LYiNFWl+6yJDVQ7hSNJu2kVuM1p3C3aTB769lXnMSxi3gubzxqjZqz9i9XQ3UjO9EFiDSvgbOXa8YhvTUfNnkQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.41.0.tgz", + "integrity": "sha512-MjPAZeAqvyskDXDp2wGZ0DjtYOQLOydI1WqVIZS4wnIdhsQWQD//VMeXgLrcmCzNyQg+iKTx3o+BzmXVTOD0+w==", "dev": true }, "node_modules/@wordpress/blob": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-3.42.13.tgz", - "integrity": "sha512-W5TaJK9Vl8LInjdxRRq5hE08r34JKybVjm7UuSIPOppNErLu9g6edcGHsv3b/7f5so3TcSnPsLfDkPgwSFTjXA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-3.50.0.tgz", + "integrity": "sha512-QvBhsW9WPdsOJhJ0BxzZ83i+cH/gAdjJ1iHY4Rkb02qbZEz4jhdvucGQf2oVnWwvAsFiFPKWk7CwAM5XjoahCA==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6461,29 +6187,30 @@ } }, "node_modules/@wordpress/block-directory": { - "version": "4.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-4.19.16.tgz", - "integrity": "sha512-7YOqeZt8ExyMidbblzht7x5jnfpZVD6N69VuDrvdlB/8eB7gl62tKZdNXHwWoZccSWJb+xUTZL01k2HpJulcPQ==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-4.27.1.tgz", + "integrity": "sha512-O1qm9AumFZbEOI41HoUDyAaL+cOwjtzW4/8JADbNVmnKXj9bQE8CKbTvbsjin7BUEvM+IdYWzEXkY3KkgxBmTg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/edit-post": "^7.19.16", - "@wordpress/editor": "^13.19.14", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/plugins": "^6.10.14", - "@wordpress/url": "^3.43.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/edit-post": "^7.27.1", + "@wordpress/editor": "^13.27.1", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/plugins": "^6.18.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0", "change-case": "^4.1.2" }, "engines": { @@ -6495,44 +6222,43 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "12.10.14", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-12.10.14.tgz", - "integrity": "sha512-x56FPZZfJPk/Vd1aKIdpBIllrUuAVgwom+mYH0OohCmUzCBp1Eg8Urg5nshZpiLXpHt2dXycQCLu2Mpb+YpOJw==", + "version": "12.18.1", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-12.18.1.tgz", + "integrity": "sha512-kZPqOO0ogS3y3HcStGRowLKJk66cv9zzQtLcx7YNokYrceqnOWEYddhv+OWRz7h/qmkEBHgZfUCEgCQm2Dulnw==", "dependencies": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", "@emotion/styled": "^11.6.0", "@react-spring/web": "^9.4.5", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/blocks": "^12.19.13", - "@wordpress/commands": "^0.13.14", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/shortcode": "^3.42.13", - "@wordpress/style-engine": "^1.25.13", - "@wordpress/token-list": "^2.42.13", - "@wordpress/url": "^3.43.13", - "@wordpress/warning": "^2.42.13", - "@wordpress/wordcount": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/blocks": "^12.27.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/style-engine": "^1.33.1", + "@wordpress/token-list": "^2.50.0", + "@wordpress/url": "^3.51.0", + "@wordpress/warning": "^2.50.0", + "@wordpress/wordcount": "^3.50.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.7.0", @@ -6540,12 +6266,14 @@ "diff": "^4.0.2", "dom-scroll-into-view": "^1.2.1", "fast-deep-equal": "^3.1.3", - "inherits": "^2.0.3", + "memize": "^2.1.0", + "postcss": "^8.4.21", + "postcss-prefixwrap": "^1.41.0", + "postcss-urlrebase": "^1.0.0", "react-autosize-textarea": "^7.1.0", "react-easy-crop": "^4.5.1", "rememo": "^4.0.2", - "remove-accents": "^0.5.0", - "traverse": "^0.6.6" + "remove-accents": "^0.5.0" }, "engines": { "node": ">=12" @@ -6556,41 +6284,43 @@ } }, "node_modules/@wordpress/block-library": { - "version": "8.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-8.19.16.tgz", - "integrity": "sha512-6NqTHjEYk3X+jzw6JS3pOgVYl2HPlr0iAI3Ch9sdOxozAm1+VrE5DKeM//rf9QpR7wWJ6je4F/eNjZ2WJIYTfw==", + "version": "8.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-8.27.1.tgz", + "integrity": "sha512-dadyMsUM4A1b4FM3qlL9LwToJHYmVCCiL8Ir471C1N8v8LoZJjaGr5GvJTw61rSF6dy9951IvLl4+HxlGQPUew==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/autop": "^3.42.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interactivity": "^2.3.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/primitives": "^3.40.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/reusable-blocks": "^4.19.14", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/server-side-render": "^4.19.14", - "@wordpress/url": "^3.43.13", - "@wordpress/viewport": "^5.19.13", - "@wordpress/wordcount": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/autop": "^3.50.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interactivity": "^4.0.0", + "@wordpress/interactivity-router": "^1.0.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/patterns": "^1.11.1", + "@wordpress/primitives": "^3.48.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/reusable-blocks": "^4.27.1", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/server-side-render": "^4.27.1", + "@wordpress/url": "^3.51.0", + "@wordpress/viewport": "^5.27.0", + "@wordpress/wordcount": "^3.50.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.7.0", @@ -6610,9 +6340,9 @@ } }, "node_modules/@wordpress/block-serialization-default-parser": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.42.13.tgz", - "integrity": "sha512-+ggjHxrjbpIwknsfKy18HXOVGWHeFykxlElE9dYVspJvr734mMMTQuIeL5WM+vZUy5NWv0oHF0VykX0MHyy60w==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.50.0.tgz", + "integrity": "sha512-ihf2vr+w2zHBOvYTPQZXDiR2IMvso8yJJtzKIHA2ZEgVQ+VVLb4X86n34hfWXtPA3i2KDW+t1WCtq56aNq3Zag==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6621,32 +6351,33 @@ } }, "node_modules/@wordpress/blocks": { - "version": "12.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-12.19.13.tgz", - "integrity": "sha512-KdNcYb5Cr4sgzOkJM+KpPZeLLFr8e06CkRDp0EQk7VGSsoScXpqIcMEtMcKNQp1XPuJ6npMr/BacC5qNjyHA1A==", + "version": "12.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-12.27.1.tgz", + "integrity": "sha512-9uZtuTG6+fiFV2bLn8b1gzv4BgMpBu4SDQGnvzc5f9U5GL5oYns3PP8vXDOwM2cK1DEmqPsohQWhRnz8QYZDtw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/autop": "^3.42.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/block-serialization-default-parser": "^4.42.13", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/shortcode": "^3.42.13", + "@wordpress/autop": "^3.50.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/block-serialization-default-parser": "^4.50.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/shortcode": "^3.50.0", "change-case": "^4.1.2", "colord": "^2.7.0", - "deepmerge": "^4.3.0", "fast-deep-equal": "^3.1.3", "hpq": "^1.3.0", "is-plain-object": "^5.0.0", "memize": "^2.1.0", + "react-is": "^18.2.0", "rememo": "^4.0.2", "remove-accents": "^0.5.0", "showdown": "^1.9.1", @@ -6661,27 +6392,27 @@ } }, "node_modules/@wordpress/browserslist-config": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.26.0.tgz", - "integrity": "sha512-rpkxAnPOc4HuxKZBwZ1iV1oC0Rd21azzBDyS8OoVUW6V8DAv4eYfHNFGkyds7Z+nI6dI15Rl7xJYJhHJKVaJvg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.33.0.tgz", + "integrity": "sha512-dv1ZlpqGk8gaSBJPP/Z/1uOuxjtP0EBsHVKInLRu6FWLTJkK8rnCeC3xJT3/2TtJ0rasLC79RoytfhXTOODVwg==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/@wordpress/commands": { - "version": "0.13.14", - "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-0.13.14.tgz", - "integrity": "sha512-aSOuRbsr+YYFvRbkXaubHdlAtf/xpG1mUWXEw9VMWCag77hiK6vk04Xb3N8ad8eo8am0N/iRgn8V8IS4LyBTyA==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-0.21.0.tgz", + "integrity": "sha512-MzMUGCT9cQXto1jrA5lHAtnieTyAhcuNIxfyxlcE+316KNQfbyD8bc7KOzSV2sxXD/rfHuCxvHjfomFyyP+4kA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^25.8.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/private-apis": "^0.24.13", + "@wordpress/components": "^25.16.0", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/private-apis": "^0.32.0", "classnames": "^2.3.1", "cmdk": "^0.2.0", "rememo": "^4.0.2" @@ -6695,11 +6426,11 @@ } }, "node_modules/@wordpress/components": { - "version": "25.8.14", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-25.8.14.tgz", - "integrity": "sha512-wRQSRlLXsL4bEd1JhCQPSdIb0bO4WDAloQufeyIbXUIK9CDgN/jmkv+vrgKrpP3Nqu1sBAFzW1qd9WEXfSBgXw==", + "version": "25.16.0", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-25.16.0.tgz", + "integrity": "sha512-voQuMsO5JbH+JW33TnWurwwvpSb8IQ4XU5wyVMubX4TUwadt+/2ToNJbZIDXoaJPei7vbM81Ft+pH+zGlN8CyA==", "dependencies": { - "@ariakit/react": "^0.2.12", + "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", "@emotion/cache": "^11.7.1", "@emotion/css": "^11.7.1", @@ -6708,25 +6439,26 @@ "@emotion/styled": "^11.6.0", "@emotion/utils": "^1.0.0", "@floating-ui/react-dom": "^2.0.1", - "@radix-ui/react-dropdown-menu": "2.0.4", + "@types/gradient-parser": "0.1.3", + "@types/highlight-words-core": "1.2.1", "@use-gesture/react": "^10.2.24", - "@wordpress/a11y": "^3.42.13", - "@wordpress/compose": "^6.19.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/primitives": "^3.40.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/warning": "^2.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/primitives": "^3.48.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/warning": "^2.50.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.7.0", @@ -6758,21 +6490,21 @@ } }, "node_modules/@wordpress/compose": { - "version": "6.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.19.13.tgz", - "integrity": "sha512-3HDdccND+EoEr7tHQ75eCDh07e5TdFh0KFIdWGweq9gU5Z/tssRW8QEyU9J+xEz+DTL/hvFilQ681f58eUZi1g==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.27.0.tgz", + "integrity": "sha512-jbEQQ2znRyJTwUNR4m5BKaDyIsuK9TMZx0SKqP+FTfGqT3y7scOnQrHpK0kZdPji++/1cBbn3gSPBLCEmtmHRw==", "dependencies": { "@babel/runtime": "^7.16.0", "@types/mousetrap": "^1.6.8", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/priority-queue": "^2.42.13", - "@wordpress/undo-manager": "^0.2.13", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/priority-queue": "^2.50.0", + "@wordpress/undo-manager": "^0.10.0", "change-case": "^4.1.2", - "clipboard": "^2.0.8", + "clipboard": "^2.0.11", "mousetrap": "^1.6.5", "use-memo-one": "^1.1.1" }, @@ -6784,21 +6516,21 @@ } }, "node_modules/@wordpress/core-commands": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-0.11.14.tgz", - "integrity": "sha512-f2DA9lUji96OC5UD85Gbv2vz14R0TR+FSXzXAa68F/EBPFkiaxs2huhruhRvZKbasxugk/vjTBbQuwZ8rinROA==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-0.19.1.tgz", + "integrity": "sha512-gmgiVtb17PEZgyH+UikE0B0Q6n22fXdscnu1lb/fBIKMgK10Jke4edin5qCbBINyqxykthkKvZO6VYpNjgcSHA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/commands": "^0.13.14", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/router": "^0.11.13", - "@wordpress/url": "^3.43.13" + "@wordpress/block-editor": "^12.18.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/router": "^0.19.0", + "@wordpress/url": "^3.51.0" }, "engines": { "node": ">=12" @@ -6809,25 +6541,26 @@ } }, "node_modules/@wordpress/core-data": { - "version": "6.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-6.19.14.tgz", - "integrity": "sha512-wdstu/qMBKwXnFRX4wMeTkxvHsOgbXm7ZJ0Lgtj+jE86O086Ook7suxacOdMcCaAKNCfMqoGBHtjsNQk3SWE1Q==", + "version": "6.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-6.27.1.tgz", + "integrity": "sha512-Nbm0xkgkkyk67f2GtnlS5udxYqBQcLGoDIhWjNY2m+uguM/Fr4cv6QGIyb1tIcwEBIrZcAaAsS/eA1yro5ygHw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/sync": "^0.4.13", - "@wordpress/undo-manager": "^0.2.13", - "@wordpress/url": "^3.43.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/sync": "^0.12.0", + "@wordpress/undo-manager": "^0.10.0", + "@wordpress/url": "^3.51.0", "change-case": "^4.1.2", "equivalent-key-map": "^0.2.2", "fast-deep-equal": "^3.1.3", @@ -6844,31 +6577,31 @@ } }, "node_modules/@wordpress/customize-widgets": { - "version": "4.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-4.19.16.tgz", - "integrity": "sha512-UK4RrEBFwdn8WcY7qXXbRcncuWXLMpB9gjiBVhwPmM5m1//A0wsOQu2kAkZeACuhYoEJ/N6g4yZh2ZnldJVR3w==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-4.27.1.tgz", + "integrity": "sha512-iRKhFIT98NI2p7Ga25YiMI9A0FOm0vWyq2vwd3/Qahm5wOlBmOJHRxAOhnY7MRWhqZQE8a9Mb63o/7Kupct0tw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/block-library": "^8.19.16", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interface": "^5.19.14", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/widgets": "^3.19.14", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/block-library": "^8.27.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interface": "^5.27.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/widgets": "^3.27.1", "classnames": "^2.3.1", "fast-deep-equal": "^3.1.3" }, @@ -6881,25 +6614,24 @@ } }, "node_modules/@wordpress/data": { - "version": "9.12.13", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.12.13.tgz", - "integrity": "sha512-8SIsPFrnQ1LIZRWseOF+9uQ9thy8oB7NSOq+bkRCo+qldagooBTZUFp8Y++evFbPOotmTy6XGSPYf7HV9qBHVw==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.20.0.tgz", + "integrity": "sha512-3cm2te6NUj/X1zzmRO+WhueCanjocniX6sJFVzkg5mGXme6wFI8iSOnGPKlMkGcZGd0fVei1ydBKaIUMjrPBTQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/compose": "^6.19.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/priority-queue": "^2.42.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/redux-routine": "^4.42.13", + "@wordpress/compose": "^6.27.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/priority-queue": "^2.50.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/redux-routine": "^4.50.0", "deepmerge": "^4.3.0", "equivalent-key-map": "^0.2.2", "is-plain-object": "^5.0.0", "is-promise": "^4.0.0", "redux": "^4.1.2", "rememo": "^4.0.2", - "turbo-combine-reducers": "^1.0.2", "use-memo-one": "^1.1.1" }, "engines": { @@ -6910,14 +6642,39 @@ } }, "node_modules/@wordpress/data-controls": { - "version": "3.11.13", - "resolved": "https://registry.npmjs.org/@wordpress/data-controls/-/data-controls-3.11.13.tgz", - "integrity": "sha512-BW7yBPePnS5SVMVTTWeHG1U4RwV4X46NVOvX4/Vvq8CBjLmvqbiXZZxLMYI4xBi1y6+XRDjORHXP3WMJzwTdEg==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@wordpress/data-controls/-/data-controls-3.19.0.tgz", + "integrity": "sha512-ceUK8kB8r8s8XFYlYWGVLuaoDJx5IAXND6q7B6MX1gKndqnSNi1766Q9iAEwOT9eVMai0lDLNq7mdK2ktVh4bw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13" + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@wordpress/dataviews": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-0.4.0.tgz", + "integrity": "sha512-fVw+VBntjUMBQKhmJnlajw1jyS572D2VNGhD+TXJKk+fshPwpb8oM4Y71g+2V/f9X/DnIn0VmVKPFt3m/CJxVw==", + "dependencies": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "^3.50.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/primitives": "^3.48.0", + "@wordpress/private-apis": "^0.32.0", + "classnames": "^2.3.1", + "remove-accents": "^0.5.0" }, "engines": { "node": ">=12" @@ -6927,12 +6684,12 @@ } }, "node_modules/@wordpress/date": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-4.42.13.tgz", - "integrity": "sha512-SrJL7WbnQwSmogyNiFA+ZKNuECPvneCZOVzC/76DIV7seVDbpdJky/3UAkQLMgvYzym5PK3A8vkENPgAykrh3g==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-4.50.0.tgz", + "integrity": "sha512-FhfaG6YRXWmni66RjwhCB7rQNlLJ05+qTa/jXrj2UNWDNv/sfZ6Ky+b/rKrrUnLaIs9pGiW1195cSxsAS4EY3w==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/deprecated": "^3.42.13", + "@wordpress/deprecated": "^3.50.0", "moment": "^2.29.4", "moment-timezone": "^0.5.40" }, @@ -6941,49 +6698,48 @@ } }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { - "version": "4.25.13", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-4.25.13.tgz", - "integrity": "sha512-ke3CkU9wWgMpAsf5E1zG7aN/pr9P3qdDaIOgU2kXbjSLxrbhgBeK4mCgT/uxCJu0uqaieYkZWRcNmxXKMbF9hw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-5.1.0.tgz", + "integrity": "sha512-W2W+9JNAaGirAtGDSf83pjEKb63DLhgpJGgvMOpEPoRPtucgO6CCm3uMoNkJTpKoxJQ2tSZEymAhF/YdLm+ScQ==", "dev": true, "dependencies": { - "json2php": "^0.0.7", - "webpack-sources": "^3.2.2" + "json2php": "^0.0.7" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "webpack": "^4.8.3 || ^5.0.0" + "webpack": "^5.0.0" } }, "node_modules/@wordpress/deprecated": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-3.42.13.tgz", - "integrity": "sha512-Jxivx5eTKhjVNW1/rqShM1dzDKm/9wKp9jPlF58uAXpQSIaH8Q09D6Pgzi72DsDyefL8SV/QllLQbo0bVenydg==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-3.50.0.tgz", + "integrity": "sha512-DL01l0Wlo3df9OcSGHP11Ot/nq0HytbdmD+iPkiCCRI6Xctepbs/DzRR2CO3qLrJkWn6RReFwZWZZjzI7lZUqg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.42.13" + "@wordpress/hooks": "^3.50.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/dom": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-3.42.13.tgz", - "integrity": "sha512-E7TnWuSOrxY5sn57+6Bf5v7JAL9PmNrOljf8Jj7FDsRdH6tCXf8BDqyIBz53cmzv/bsWOklQKIOeU/BQoEItHw==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-3.50.0.tgz", + "integrity": "sha512-rMnV1ysGOHbKnmjLQYwGkT1co1iEkC3YsKrEObP8mklw1R7rbCy7fc2brIz7kqcHU1DRyg/+7wOCMkg8a/EV/Q==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/deprecated": "^3.42.13" + "@wordpress/deprecated": "^3.50.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/dom-ready": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-3.42.13.tgz", - "integrity": "sha512-mtqstqT1YFfIGl8rQipG9d8UwvGIZUP4Y8E1Tq3V9CAMV6ChJEYCZIGs/asHjqJSebNnXEWUEzQKAbPnIhnW3Q==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-3.50.0.tgz", + "integrity": "sha512-97tJpat1emXnwfGlJMiG6p37CpHJXDLmM/SIbsGJ0Oj8P4/TXbTuE9DNT1H8B1wKe5zD7kICjp48y91ugmgSrQ==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6992,15 +6748,15 @@ } }, "node_modules/@wordpress/e2e-test-utils": { - "version": "10.13.13", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils/-/e2e-test-utils-10.13.13.tgz", - "integrity": "sha512-QibCpLfRW6Stm5BDd1zxc0eqX3uOE1yINPs8K7esUIHL8AqnCPEJUPa86NnOIaA2t8E52f+bhlTxzM7ZsaffoQ==", + "version": "10.21.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils/-/e2e-test-utils-10.21.0.tgz", + "integrity": "sha512-Oh62GkqAKBIyD0IO3/Oa0l42yL/jbpTRDyh8H+t6gZbHWYTDvEGEr/LOqI9bk5Lwk7Jt5jpN6136FDwyMzHSXw==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/url": "^3.43.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/url": "^3.51.0", "change-case": "^4.1.2", "form-data": "^4.0.0", "node-fetch": "^2.6.0" @@ -7014,19 +6770,20 @@ } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "0.10.13", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.10.13.tgz", - "integrity": "sha512-5zqIsG6Nn6N0DBlK9GyvYKxUrK7dEBHFInRnIqqfimWAQmz07iBCJU34njs9lQi+/GzKfXS+2XgBI7dDQnbfwQ==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.18.0.tgz", + "integrity": "sha512-Z8uH1dUzy/STQjOU6eb9nquVK4RC1rUx0gXY/GN1IVNDJvGN/yJxT/gNKmfiL7KpmHvNp2Q5M4bnUT9uiNcM+Q==", "dev": true, "dependencies": { - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/url": "^3.43.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/url": "^3.51.0", "change-case": "^4.1.2", "form-data": "^4.0.0", "get-port": "^5.1.1", "lighthouse": "^10.4.0", - "mime": "^3.0.0" + "mime": "^3.0.0", + "web-vitals": "^3.5.0" }, "engines": { "node": ">=12" @@ -7035,79 +6792,6 @@ "@playwright/test": ">=1" } }, - "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@wordpress/api-fetch": { - "version": "6.40.0", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.40.0.tgz", - "integrity": "sha512-sNk6vZW02ldci1EpNIjmm61323x/0n2Ra/cDHuehZf8avOH/OV0zF0dXxttT8M9Fncz+XZDSIHopm76dU3Phug==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.43.0", - "@wordpress/url": "^3.44.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@wordpress/hooks": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.43.0.tgz", - "integrity": "sha512-SHSiyFUEsggihl0pDvY1l72q+fHMDyFHtIR3GCt0uV2ifctvoa/PIYdVwrxpGQaGdNEV25XCZ4kNldqJmfTddw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@wordpress/i18n": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.43.0.tgz", - "integrity": "sha512-XHU/vGgI+pgjJU9WzWDHke1u948z8i3OPpKUNdxc/gMcTkKaKM4D8DW1+VMSQHyU6pneP8+ph7EF+1RIehP3lQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.43.0", - "gettext-parser": "^1.3.1", - "memize": "^2.1.0", - "sprintf-js": "^1.1.1", - "tannin": "^1.2.0" - }, - "bin": { - "pot-to-php": "tools/pot-to-php.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@wordpress/keycodes": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.43.0.tgz", - "integrity": "sha512-B6rYPiKFdQTlnJfm93R+usQnjEODUX/K4+hMvY5ZZOinvxe7KyU/xyFGz7gRrS8WmIEYcJowqSmAlGgVs4XwKQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.43.0", - "change-case": "^4.1.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@wordpress/url": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.44.0.tgz", - "integrity": "sha512-QNtTPFg/cGHTJLOvOtQCvCgn5quFQgJml8A88I05o4dyUH/tc92rb8LNXi0qcVz/z4JPrx2g3+Ki8heYellP4A==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.0", - "remove-accents": "^0.5.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -7149,41 +6833,41 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "7.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-7.19.16.tgz", - "integrity": "sha512-PK0XVHLrn6Bg47O8sq7UIBykJOJGF2xsbkOjhRVniD+6EYdYifpGYHTC9nHogEfw691xcz+vAqS87D01x3SfEQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-7.27.1.tgz", + "integrity": "sha512-cXwDCU23AbkQhOYueAYN/g5USSX4BBvB2MueAJUc5iusL9boJzowAkkxRoGBBt5KZiSfseTGsHepmtEGG7X0Fg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/block-library": "^8.19.16", - "@wordpress/blocks": "^12.19.13", - "@wordpress/commands": "^0.13.14", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-commands": "^0.11.14", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/editor": "^13.19.14", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interface": "^5.19.14", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/plugins": "^6.10.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/url": "^3.43.13", - "@wordpress/viewport": "^5.19.13", - "@wordpress/warning": "^2.42.13", - "@wordpress/widgets": "^3.19.14", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/block-library": "^8.27.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-commands": "^0.19.1", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/editor": "^13.27.1", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interface": "^5.27.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/plugins": "^6.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0", + "@wordpress/viewport": "^5.27.0", + "@wordpress/warning": "^2.50.0", + "@wordpress/widgets": "^3.27.1", "classnames": "^2.3.1", "memize": "^2.1.0", "rememo": "^4.0.2" @@ -7197,54 +6881,55 @@ } }, "node_modules/@wordpress/edit-site": { - "version": "5.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-5.19.16.tgz", - "integrity": "sha512-shraoCd4LCNngtBn9E7U6Na/l+zrU0nTXztgZSuVsqSGktAgHBi7pXMUTsCGqO/vp9fnmW9LU3tQ9XgLEogjkg==", + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-5.27.1.tgz", + "integrity": "sha512-jl8nuCP4BwdI2PiYTQHDxUqXRIdDYV8PpMHkPEXPRrLPe/uJ6YnQqFj4zJb+0sGcDSBcUqEjZwfpd0evnqGiQw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/block-library": "^8.19.16", - "@wordpress/blocks": "^12.19.13", - "@wordpress/commands": "^0.13.14", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-commands": "^0.11.14", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/editor": "^13.19.14", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interface": "^5.19.14", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/patterns": "^1.3.14", - "@wordpress/plugins": "^6.10.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/primitives": "^3.40.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/reusable-blocks": "^4.19.14", - "@wordpress/router": "^0.11.13", - "@wordpress/style-engine": "^1.25.13", - "@wordpress/url": "^3.43.13", - "@wordpress/viewport": "^5.19.13", - "@wordpress/widgets": "^3.19.14", - "@wordpress/wordcount": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/block-library": "^8.27.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-commands": "^0.19.1", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/dataviews": "^0.4.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/editor": "^13.27.1", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interface": "^5.27.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/patterns": "^1.11.1", + "@wordpress/plugins": "^6.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/primitives": "^3.48.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/reusable-blocks": "^4.27.1", + "@wordpress/router": "^0.19.0", + "@wordpress/style-engine": "^1.33.1", + "@wordpress/url": "^3.51.0", + "@wordpress/viewport": "^5.27.0", + "@wordpress/widgets": "^3.27.1", + "@wordpress/wordcount": "^3.50.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.9.2", "deepmerge": "^4.3.0", - "downloadjs": "^1.4.7", "fast-deep-equal": "^3.1.3", "is-plain-object": "^5.0.0", "memize": "^2.1.0", @@ -7261,38 +6946,39 @@ } }, "node_modules/@wordpress/edit-widgets": { - "version": "5.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-5.19.16.tgz", - "integrity": "sha512-1yTkLHQjf/LEmxlw2y0bqgkZcqO2Gs0H8QK1JHEJdHrAK+R5nBd55Jq4Wb2IU+QsUAaGvQzuF+FfHAA4YkLUwQ==", + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-5.27.1.tgz", + "integrity": "sha512-MTiIujW4KGTbJrlyglzIfm19rIVqK+Ny1rcBV8A1AM2rJc2vOjFyzlkGH+MkesrUHu4R4CUwzFyCRrPC/+VImA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/block-library": "^8.19.16", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interface": "^5.19.14", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/patterns": "^1.3.14", - "@wordpress/plugins": "^6.10.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/reusable-blocks": "^4.19.14", - "@wordpress/url": "^3.43.13", - "@wordpress/widgets": "^3.19.14", - "classnames": "^2.3.1" + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/block-library": "^8.27.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interface": "^5.27.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/patterns": "^1.11.1", + "@wordpress/plugins": "^6.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/reusable-blocks": "^4.27.1", + "@wordpress/url": "^3.51.0", + "@wordpress/widgets": "^3.27.1", + "classnames": "^2.3.1", + "rememo": "^4.0.2" }, "engines": { "node": ">=12" @@ -7303,40 +6989,41 @@ } }, "node_modules/@wordpress/editor": { - "version": "13.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-13.19.14.tgz", - "integrity": "sha512-t1RFJl0Bf+qJpBHtiUl0qoxJjpNNGcpSZLejnhR97+i32l/4ewg8+z69zwFtW4ChNQjLnAFnpQZ5pT/CqkkKpQ==", + "version": "13.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-13.27.1.tgz", + "integrity": "sha512-n8DwCqEGqXyPg/+2YBsoaUR9rWbXwB/YexbPdmRwCpWPzxPFDOz/nHBZwez1E24ty50YsBW8NTkXUaarpPkHJQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/patterns": "^1.3.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/reusable-blocks": "^4.19.14", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/server-side-render": "^4.19.14", - "@wordpress/url": "^3.43.13", - "@wordpress/wordcount": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/patterns": "^1.11.1", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/reusable-blocks": "^4.27.1", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/server-side-render": "^4.27.1", + "@wordpress/url": "^3.51.0", + "@wordpress/wordcount": "^3.50.0", "classnames": "^2.3.1", "date-fns": "^2.28.0", "memize": "^2.1.0", @@ -7353,14 +7040,14 @@ } }, "node_modules/@wordpress/element": { - "version": "5.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.19.13.tgz", - "integrity": "sha512-8VSGNrJkSf0coC2xciFBFodVa6eQOLPKMThVAz1eIDtQwbAcFo9001tjkMXgyhcn/FMoxdhaGGOxg4VeUvgJSw==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.27.0.tgz", + "integrity": "sha512-IA5LTAfx5bDNXULPmctcNb/04i4JcnIReG0RAuPgrZ8lbMZWUxGFymh10PEQjs7ZJ++qGsI6E+6JISpjkRaDQQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", - "@wordpress/escape-html": "^2.42.13", + "@wordpress/escape-html": "^2.50.0", "change-case": "^4.1.2", "is-plain-object": "^5.0.0", "react": "^18.2.0", @@ -7371,9 +7058,9 @@ } }, "node_modules/@wordpress/escape-html": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.42.13.tgz", - "integrity": "sha512-0I7loSc8M1vjqg6vXb6lCumaGzbbAeoI26NEpATcEq24MLgd8+UiidyHII4UNgdloRoq1Jj3e83AjDhFpAVfAg==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.50.0.tgz", + "integrity": "sha512-hBvoMCEZocziZDGCmBanSO+uupnd054mxd7FQ6toQ4UnsZ4JwXSmEC72W2Ed+cRGB1DeJDD0dY9iC0b4xkumsQ==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7382,16 +7069,16 @@ } }, "node_modules/@wordpress/eslint-plugin": { - "version": "16.0.13", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-16.0.13.tgz", - "integrity": "sha512-Qk5Y7ifT0lfOOx5RQrEGa/DSw01CP+D2bCKr20SXLt3KDstViBlqjBiI1Yxv7EeS+AvaNbQO5M8Mm4B5mUB3kQ==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-17.7.0.tgz", + "integrity": "sha512-JSFaCogE0WlZpl0SV4q8DK8G6jwDjEzXRzOsgesWilea4OuVp1KxCamkddTorRNM3QAbjrGuPJ4NYaGrNG9QsA==", "dev": true, "dependencies": { "@babel/eslint-parser": "^7.16.0", "@typescript-eslint/eslint-plugin": "^6.4.1", "@typescript-eslint/parser": "^6.4.1", - "@wordpress/babel-preset-default": "^7.26.13", - "@wordpress/prettier-config": "^2.25.13", + "@wordpress/babel-preset-default": "^7.34.0", + "@wordpress/prettier-config": "^3.7.0", "cosmiconfig": "^7.0.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", @@ -7412,7 +7099,7 @@ "peerDependencies": { "@babel/core": ">=7", "eslint": ">=8", - "prettier": ">=2", + "prettier": ">=3", "typescript": ">=4" }, "peerDependenciesMeta": { @@ -7425,9 +7112,9 @@ } }, "node_modules/@wordpress/eslint-plugin/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -7440,22 +7127,23 @@ } }, "node_modules/@wordpress/format-library": { - "version": "4.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-4.19.14.tgz", - "integrity": "sha512-NyJ1nmb6PODE5hXM9oOEBlYA48k6c2DlGcUTXkSzDcdLPRVinTeWDfPL4kpze30JcQPv9m6Y5/EfWp48bDnByA==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-4.27.1.tgz", + "integrity": "sha512-+jdmGf8cPk6jCZcndI/kqeaf6YYQCIjBYTgBJsUUOP92HTIDq6pAECH8XqBX2n2V+QX4WirXwBvjkZ5IgjPVvg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/url": "^3.43.13" + "@wordpress/a11y": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/url": "^3.51.0" }, "engines": { "node": ">=12" @@ -7466,9 +7154,9 @@ } }, "node_modules/@wordpress/hooks": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.42.13.tgz", - "integrity": "sha512-KITkyj2DhbbBevqLzGx4GCtq8XX/GjkMWe0NP7SkcX9d4rkEdON96eKwwoMUD6keL03Tijg87kIYZAU5Xsr8bA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.50.0.tgz", + "integrity": "sha512-YIhwT1y0ss7Byfz46NBx08EUmXzWMu+g5DCY7FMuDNhwxSEoZMB8edKMiwNmFk4mFKBCnXM1d5FeONUPIUkJwg==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7477,9 +7165,9 @@ } }, "node_modules/@wordpress/html-entities": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-3.42.13.tgz", - "integrity": "sha512-015rUF0FOSGXbUBq+sc++vo3UTGZZkl23z7tGxrTTXZG10AjcTVd3oMnpvffJeiBjrtEAJz/gq3QKpFXihvmww==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-3.50.0.tgz", + "integrity": "sha512-DBRgShv6FLtDpapoTgmEx//6uHeq+mk5zKhAWAAqu6+/6LqOm/TCoUTxb0E2xtHh4oRBgU5nYC92pObRaczFdQ==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7488,12 +7176,12 @@ } }, "node_modules/@wordpress/i18n": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.42.13.tgz", - "integrity": "sha512-4zYz5BbueJ3c19DYhO7cXf9GF2K5Fysd+c2r0rcE0lr2RqMqmyDdL49930L7XJw+mT4ql8g/8p+i3FOzPCsg9A==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.50.0.tgz", + "integrity": "sha512-FkA2se6HMQm4eFC+/kTWvWQqs51VxpZuvY2MlWUp/L1r1d/dMBHXu049x86+/+6yk3ZNqiK5h6j6Z76dvPHZ4w==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.42.13", + "@wordpress/hooks": "^3.50.0", "gettext-parser": "^1.3.1", "memize": "^2.1.0", "sprintf-js": "^1.1.1", @@ -7507,48 +7195,60 @@ } }, "node_modules/@wordpress/icons": { - "version": "9.33.13", - "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-9.33.13.tgz", - "integrity": "sha512-4M34sMRIlyL7a3CDRI7rAfysZQm2VW1ptB4aGDf5tVMXd//hCRkj/OGE++AYkTYQNckli9uqhTkv2xoOOw1F6Q==", + "version": "9.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-9.41.0.tgz", + "integrity": "sha512-L4fp9ZdxGBpMk3o2YqABgiPHNoHyu9Enid7JNkCdWP8iUgk7dEiDvo/XoiWPTAeNbF6W8Nqu54635mq01es0NQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/element": "^5.19.13", - "@wordpress/primitives": "^3.40.13" + "@wordpress/element": "^5.27.0", + "@wordpress/primitives": "^3.48.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/interactivity": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-2.3.13.tgz", - "integrity": "sha512-WNmw/r+G1XllTZwKwpRDFJoGPm8cRztbU+MJhAogKzUOcrCu4Bp8xArroPSzlKr3aUuEquT/3WsWsFmHsSHYjg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-4.0.0.tgz", + "integrity": "sha512-+KIzJVcz5Z0a/CeMBY7DEFsXCeEd+/gDYgQwWY7W7/nUwr5frT4X+i760Yv8J40JN8IMaQeKStcGEcm62C7jjg==", + "dependencies": { + "@preact/signals": "^1.2.2", + "deepsignal": "^1.4.0", + "preact": "^10.19.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@wordpress/interactivity-router": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-1.0.0.tgz", + "integrity": "sha512-q+ulJGYFCX+CGTdGHraZvbpB+jsv0tYSEEV6mWsKU7ujj+NelPa5ngL9XbyGTAOEZqOauWQ/4H3SP9k25u6iQg==", "dependencies": { - "@preact/signals": "^1.1.3", - "deepsignal": "^1.3.6", - "preact": "^10.13.2" + "@wordpress/interactivity": "^4.0.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/interface": { - "version": "5.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-5.19.14.tgz", - "integrity": "sha512-WsIsSKJuhAcXD3YbmUoncL1JZ6hKAJXs7Lb/bjrOJxCts/YOy5yMF3/I05r8f1Tfw/pS8wlHMRjIXH/gvnvWVA==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-5.27.0.tgz", + "integrity": "sha512-ZybF4tuuuFOgGsB0n9u5ajrWKf/PYaS8d2yu2T+6ukliLnXI6AMMCXvM534H0VZa7DMLjMYKRXtfs7QqR/p95Q==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/plugins": "^6.10.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/viewport": "^5.19.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/plugins": "^6.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/viewport": "^5.27.0", "classnames": "^2.3.1" }, "engines": { @@ -7560,9 +7260,9 @@ } }, "node_modules/@wordpress/is-shallow-equal": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-4.42.13.tgz", - "integrity": "sha512-C3Pdan4alanyaQJ4Ucg7GZvkgDv7mXQZXe0xIYmKUNCnohS3wcFXmaLE6VGvf3I2OhRz8WLh5uxno/suJ8cyRw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-4.50.0.tgz", + "integrity": "sha512-lX0fMa1f/TwWYYF+Oj0MG2Eze4Bb+vsnhXX6X1l+Ri3PG34wWGonjq729qHbJRDwm8o1y9GeswCgESIpuAm9wg==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7571,9 +7271,9 @@ } }, "node_modules/@wordpress/jest-console": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.14.0.tgz", - "integrity": "sha512-o7EZZ+StfLg/qgTRn47O0WY2V1I+xNJCiN13a/fHZtXdRgPJ9qajf7tkDYz+MKPf8MhdMfHhgIr9sQrWhLCzDA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.21.0.tgz", + "integrity": "sha512-o2vZRlwwJ6WoxRwnFFT5iZzfdc2d9MZvrtwB093RWPNcyK5qVtApji4VN/ieHijB4bjEHGalm0UKfKpt0EDlUQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", @@ -7587,12 +7287,12 @@ } }, "node_modules/@wordpress/jest-preset-default": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.14.0.tgz", - "integrity": "sha512-eGenm5xUpPcsgWMSFXYWg+RQlcAZa6zo7sT9bBK8HVIGqORTr3TTtWeHVGFL48UooL5PibUc+GxQdlW97YOwlQ==", + "version": "11.21.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.21.0.tgz", + "integrity": "sha512-XAztKOROu02iBsz+Qosv/RYuPWB1XwwlU+FiA5Y68tRztrqFy4b/il+DFg4Jue/zXF7UECWUvosd5ow/GmKa6Q==", "dev": true, "dependencies": { - "@wordpress/jest-console": "^7.14.0", + "@wordpress/jest-console": "^7.21.0", "babel-jest": "^29.6.2" }, "engines": { @@ -7604,14 +7304,14 @@ } }, "node_modules/@wordpress/keyboard-shortcuts": { - "version": "4.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-4.19.13.tgz", - "integrity": "sha512-5u/pMERHn1b17d3HqDWWulJp08MLlNG1idsuJiLzbQBrYW3wLPd23fPG1QObUSH/texVDvi/W4/9N4hsbZlXEg==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-4.27.0.tgz", + "integrity": "sha512-mpYhaSAMHXbRMp9hP08LejX/u1nLQaZONhwGSytqIhN1DQwpBbNbmV8ZNm1dnevUsYqEfPVVov6HFyPxYQ6m4w==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/keycodes": "^3.42.13", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/keycodes": "^3.50.0", "rememo": "^4.0.2" }, "engines": { @@ -7622,29 +7322,29 @@ } }, "node_modules/@wordpress/keycodes": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.42.13.tgz", - "integrity": "sha512-3lGlnYj+ky5OOnFjTW6NSxFFeNk/ESUF2Gbhz888HV+QF55SPvRfb+G7kjAzxRomIpdwACYsn80PdqabxLVqgw==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.50.0.tgz", + "integrity": "sha512-ykWpyCbgwcaT8i5kSfotYtd2oOHyMDpWEYR73InYrzEhl7pnS3wD7hi/KfeKLvMfYhbysUXlCVr6q/oH+qK/DQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.42.13", - "change-case": "^4.1.2" + "@wordpress/i18n": "^4.50.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/list-reusable-blocks": { - "version": "4.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-4.19.14.tgz", - "integrity": "sha512-GuorU374D0Ft7RtIZWWc7ltIkV3ThjU/u+LwbNzh5y7iaVs4l64qvqopqoj/IoRVdahpnLEO3MNxj9InlUiNeg==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-4.27.0.tgz", + "integrity": "sha512-szDQnIdU34yIvNel+Kk1oBOugiqwXNm4jF77T90kaWB/SIQFW80CFYoIjIYQc63r9v3wi0D483KpXoci1AUSeQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", "change-case": "^4.1.2" }, "engines": { @@ -7656,28 +7356,28 @@ } }, "node_modules/@wordpress/media-utils": { - "version": "4.33.13", - "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-4.33.13.tgz", - "integrity": "sha512-+QJvDbBEtjMC6V2kJ04dEZkmElDneueW6HxGcx9lD786N0pcHwHZCnY9mLN+Tg/2f6Y8/9u0emvbFFuX0FLE8w==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-4.41.0.tgz", + "integrity": "sha512-wCxk8DAhmZ/3/a+oPRrieGurMOKDrYoDnnA0jhTm2D45kvn9y+NfnNBvLo2q1Is1ZiVTtNq54IRUXcdOjZgR9A==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13" + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/notices": { - "version": "4.10.13", - "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-4.10.13.tgz", - "integrity": "sha512-6U0im51yJFXLLMzL6zZ+eyeJIeY2cyiUCDdziJSI1ZrsfV2ml9o4nB3EYYOxZBaVvJg66vY3wIQ/osMFwTW6xg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-4.18.0.tgz", + "integrity": "sha512-Y2XpY6niJ7NuqPBtGYvDYSPCfw/y4yxv60ahu1kYd8r5BamKSchTYwKSnV0yrx/IUfNO04VAsNq9NCUQG12pRA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/data": "^9.12.13" + "@wordpress/a11y": "^3.50.0", + "@wordpress/data": "^9.20.0" }, "engines": { "node": ">=12" @@ -7687,9 +7387,9 @@ } }, "node_modules/@wordpress/npm-package-json-lint-config": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.28.0.tgz", - "integrity": "sha512-lxrs1F4scwDuF8AJLK+SHtLWuhRVjzvl8EW/++ZQWRt7op99m41QQUqUwwCQC09cDcYlGddXeAczRijx5eLREg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.35.0.tgz", + "integrity": "sha512-QmkhYM4/s+2r3RuolVRRmoUa5o3lFgcHA6I3A9akaSVGZr//4p2p+iXOGmNub9njgGlj7j8SAPN8GUsCO/VqZQ==", "dev": true, "engines": { "node": ">=14" @@ -7699,18 +7399,18 @@ } }, "node_modules/@wordpress/nux": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-8.4.14.tgz", - "integrity": "sha512-JcxUtWOzl7lTuv39BWRwzwPDvVEhFECGzK819i3kExbTjmsVHCHtsdB7khPrdAYZOm2GXzR1le+/UFfkGuHS2Q==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-8.12.0.tgz", + "integrity": "sha512-fMnm9f+lmaCV5YoRHjqQNVU0P+FxthY8Lt84ZW1owlPjpJqdYZX/bKtp+bfWFgR3/Th26/uO4WxZqQzj8V1Pjg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", "rememo": "^4.0.2" }, "engines": { @@ -7722,25 +7422,26 @@ } }, "node_modules/@wordpress/patterns": { - "version": "1.3.14", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-1.3.14.tgz", - "integrity": "sha512-eaZWZlaF/MlxqDY7KYzL8cApY4b4f89wuqHVSmjv52UfvaqxW0vd09ddX+jwkcXysDHFzwM63takIIVZwYn9Lg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-1.11.1.tgz", + "integrity": "sha512-fC05YOVXcCJA5iAqxgkoMuDR01TcOCgIBYuQdoLgmYMowaV060CHf4qRh79J7979ed/WHjg2UQR6sA5eJx+Z+Q==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/url": "^3.43.13" + "@wordpress/a11y": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0", + "nanoid": "^3.3.4" }, "engines": { "node": ">=16.0.0" @@ -7751,17 +7452,17 @@ } }, "node_modules/@wordpress/plugins": { - "version": "6.10.14", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-6.10.14.tgz", - "integrity": "sha512-Duxh0OxpSuUFTMHa500iitrD21/JeTklc8/Hf3ApCpn4SdDzFR4IrwUdoJk0jGDY79cTwBVeWts5GhObbJByng==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-6.18.0.tgz", + "integrity": "sha512-m2BRJ5BApIMwT2Ck5E5yD8pS3RiIoOvWhzsYWrRqRfwjRhc6K46BreCbkiHgduBaFgzDIWpujlUHkYtdl27RoQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/is-shallow-equal": "^4.42.13", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/is-shallow-equal": "^4.50.0", "memize": "^2.0.1" }, "engines": { @@ -7773,12 +7474,12 @@ } }, "node_modules/@wordpress/postcss-plugins-preset": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.27.0.tgz", - "integrity": "sha512-4hk8UWfJvv21u/Et0NypfR1r22LVWGXMit3QM0MD7d6XQ4dNNbzqW2c9TfM36SdcR9KY5PZ8d5V1IrkheNUb/w==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.34.0.tgz", + "integrity": "sha512-OLQBSLE2q11Ik+WdcO2QfGr/O4X/zJYOGXNsychx/EaMamLzJInFcRL6kGbPX41zPINhadq5x2vFIZI2EC+Uyg==", "dev": true, "dependencies": { - "@wordpress/base-styles": "^4.34.0", + "@wordpress/base-styles": "^4.41.0", "autoprefixer": "^10.2.5" }, "engines": { @@ -7789,17 +7490,20 @@ } }, "node_modules/@wordpress/preferences": { - "version": "3.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-3.19.14.tgz", - "integrity": "sha512-xLu+G22Vlm4KajE/Eimq8qLzBoxMZ7BJLp8WobFC3yyzdU9R785dug9t9et4r45NxWJr8aVWkFzhEBzAadHjnA==", + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-3.27.0.tgz", + "integrity": "sha512-LMhOHX5FI4CJHv2YhtpiEtHfLqL/pjKAMja/v7skkHPlrh64Sgzi/gep016/My5SjcR64JUD1Na2U2j/BnrBNQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/components": "^25.8.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/private-apis": "^0.32.0", "classnames": "^2.3.1" }, "engines": { @@ -7811,36 +7515,36 @@ } }, "node_modules/@wordpress/preferences-persistence": { - "version": "1.34.13", - "resolved": "https://registry.npmjs.org/@wordpress/preferences-persistence/-/preferences-persistence-1.34.13.tgz", - "integrity": "sha512-23bUN1WdJ9mtfU51uoPBrSwbYHaW2zG+HDlH+leZURdPe48jbWSA8LRPwni5z3Kc9zh8D0vXkvt0hg1/RcNgUQ==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@wordpress/preferences-persistence/-/preferences-persistence-1.42.0.tgz", + "integrity": "sha512-n/VBhZHUEXWoBGsvHUf5uq6b872Lzn+cenfB2ex/etcWLXiVUkEl3rlzocyS50g2YoNQg/zQOn1hoSh+AgCm8Q==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13" + "@wordpress/api-fetch": "^6.47.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/prettier-config": { - "version": "2.25.13", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-2.25.13.tgz", - "integrity": "sha512-iz58o0X91E24j0VFtzwn5qG84w+s4VlRCuZWa/lPL6pfGtOSw30c60wCrYKCA1IWIIAWdpRAYfEh7errPyKiPQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-3.7.0.tgz", + "integrity": "sha512-JRTc5p7UxtcPkqdSDXSFJoJnVuS510uiRVz8anXEl5nuOx5p+SJAzi9QPrxTgOE8bN3wRABH4eIhfOcta4CFdg==", "dev": true, "engines": { "node": ">=14" }, "peerDependencies": { - "prettier": ">=2" + "prettier": ">=3" } }, "node_modules/@wordpress/primitives": { - "version": "3.40.13", - "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-3.40.13.tgz", - "integrity": "sha512-dYYrPceV8w78AHJfPe5wkxnT7P0tG/4yDcr9/HvznFHkzQFnW8kG8Nci20RV/+ENxfNiuWqfWyICI2y7myIoGw==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-3.48.0.tgz", + "integrity": "sha512-uBoMxpl+FiZF6aRXH/+Hwol4EAL6QqlNSaGF1IzEwklFzdRF1m5wTM4vh21w8Bq7lgxiuAqyueY7X5u32v+zPw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/element": "^5.19.13", + "@wordpress/element": "^5.27.0", "classnames": "^2.3.1" }, "engines": { @@ -7848,9 +7552,9 @@ } }, "node_modules/@wordpress/priority-queue": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-2.42.13.tgz", - "integrity": "sha512-vrkjBcJnuzhpfWLFF4LfdNVrM3s73KW3KOZBTuN6oizJVYKyQaaPSLmDdORuXFc017MMasO5N/fYk/qJyll5bg==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-2.50.0.tgz", + "integrity": "sha512-21E842EVFYUd1ZrNTLAW57IyloDCUZr6h1Te6BgqKoeKOEteoTQwA9BemMzZJUiThUSZymW94ot0Omb+C8VX2g==", "dependencies": { "@babel/runtime": "^7.16.0", "requestidlecallback": "^0.3.0" @@ -7860,9 +7564,9 @@ } }, "node_modules/@wordpress/private-apis": { - "version": "0.24.13", - "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.24.13.tgz", - "integrity": "sha512-RgvGB6VQpPnEGU8Y61tzpgPFYDRAW28+2gcdOXYiqSVdZfGBL6+hBs5bMbLSJYRU9G5pl5q4Eb0lHlkMgHW5FA==", + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.32.0.tgz", + "integrity": "sha512-P7nxI/bGMDQhtlTfSe1Y2SDfrd20K5UMnTHbq+hmIkzBGRpNPbdGeNu2bZaZtIvmXk1OCR0Fkef+e6QqkOfYPg==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7871,9 +7575,9 @@ } }, "node_modules/@wordpress/redux-routine": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-4.42.13.tgz", - "integrity": "sha512-R+8W8CcjhHXPRlfPCdtElO2lsZzObR6DWvO49BjfJcKs0QPvKaO3ofjsadRgv+gg1+nXiE7rH6LmHbZ4eLanGw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-4.50.0.tgz", + "integrity": "sha512-giHjQYhmFDCpeNEnsZKP0JNPBnpuQwsoxLmHAUUSNFWAmd4rtnNnG6M8HuqOLmgYTvEa8Hlx3Bl+reTGvrtI2g==", "dependencies": { "@babel/runtime": "^7.16.0", "is-plain-object": "^5.0.0", @@ -7888,22 +7592,22 @@ } }, "node_modules/@wordpress/reusable-blocks": { - "version": "4.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-4.19.14.tgz", - "integrity": "sha512-WhQNDtq2ohGlGlodNyEbvMux631D+7jRABwodvoC42dVJyHR3lH1O8uhnQeKyPl91YWLxJ6+mHmrPInEo2fAcQ==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-4.27.1.tgz", + "integrity": "sha512-Q+mzjIZqoSLwFihpQzn4kApxj3/Rp+vLDPc2cUm41+L6belpSqXxvxrcB5gr/wjStTQKCLzZRptgvt/fG90OdQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/url": "^3.43.13" + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0" }, "engines": { "node": ">=12" @@ -7914,19 +7618,19 @@ } }, "node_modules/@wordpress/rich-text": { - "version": "6.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.19.13.tgz", - "integrity": "sha512-7kCbTLiy+dIOToBktkrftCfVLsqCN0dY9uE6rz/TRsKS6+pnF6fUhqHLBV5OFf0tttKjHykSj5ixFDejqWCvrQ==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.27.0.tgz", + "integrity": "sha512-B7t++SldcI4nb+lO2m9oEdyD8y2FbH5DKY5F2G3xpcEnw4EKSt4SsTzeclMQ/2zzlEHPRKU/IR29SeOIJ1H8JQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/keycodes": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/keycodes": "^3.50.0", "memize": "^2.1.0", "rememo": "^4.0.2" }, @@ -7938,14 +7642,14 @@ } }, "node_modules/@wordpress/router": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-0.11.13.tgz", - "integrity": "sha512-OZyuFOuX6nW5fQ1kq250EqCCA1Ad6KSH0wlaC68kCF06VFft2JNiATba7rC9Uq3ozM9HjPCtkbJ1dAW4PQdS1g==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-0.19.0.tgz", + "integrity": "sha512-S2z4WrgrfMNAl6amIjekGV1V6XGnjolYmRgUH/VTN45CQUV/o5ABo04xI/L3uvUnaRpH022n/yQX5H1p1kKhdA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/element": "^5.19.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/url": "^3.43.13", + "@wordpress/element": "^5.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0", "history": "^5.1.0" }, "engines": { @@ -7956,28 +7660,28 @@ } }, "node_modules/@wordpress/scripts": { - "version": "26.13.13", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-26.13.13.tgz", - "integrity": "sha512-G2K56PmjRPI0ddgmrnopp3AVMLACqfrFvz+NyGbYCPWQoYL3xnphrS+w3uPwuxcuBtgR34yr+xCvrMnJsY3Wag==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-27.1.0.tgz", + "integrity": "sha512-jewyOxqaNrsct5R1NXv2lT8CA70vzrvpdZHYERCcH9LzKuvrcc32Telm9Jqso6ay1ZgHeIbjHSCd2+r2sBG7hw==", "dev": true, "dependencies": { "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.2", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", "@svgr/webpack": "^8.0.1", - "@wordpress/babel-preset-default": "^7.26.13", - "@wordpress/browserslist-config": "^5.25.13", - "@wordpress/dependency-extraction-webpack-plugin": "^4.25.13", - "@wordpress/e2e-test-utils-playwright": "^0.10.13", - "@wordpress/eslint-plugin": "^16.0.13", - "@wordpress/jest-preset-default": "^11.13.13", - "@wordpress/npm-package-json-lint-config": "^4.27.13", - "@wordpress/postcss-plugins-preset": "^4.26.13", - "@wordpress/prettier-config": "^2.25.13", - "@wordpress/stylelint-config": "^21.25.13", + "@wordpress/babel-preset-default": "^7.34.0", + "@wordpress/browserslist-config": "^5.33.0", + "@wordpress/dependency-extraction-webpack-plugin": "^5.1.0", + "@wordpress/e2e-test-utils-playwright": "^0.18.0", + "@wordpress/eslint-plugin": "^17.7.0", + "@wordpress/jest-preset-default": "^11.21.0", + "@wordpress/npm-package-json-lint-config": "^4.35.0", + "@wordpress/postcss-plugins-preset": "^4.34.0", + "@wordpress/prettier-config": "^3.7.0", + "@wordpress/stylelint-config": "^21.33.0", "adm-zip": "^0.5.9", "babel-jest": "^29.6.2", "babel-loader": "^8.2.3", - "browserslist": "^4.21.9", + "browserslist": "^4.21.10", "chalk": "^4.0.0", "check-node-version": "^4.1.0", "clean-webpack-plugin": "^3.0.0", @@ -7992,7 +7696,7 @@ "fast-glob": "^3.2.7", "filenamify": "^4.2.0", "jest": "^29.6.2", - "jest-dev-server": "^6.0.2", + "jest-dev-server": "^9.0.1", "jest-environment-jsdom": "^29.6.2", "jest-environment-node": "^29.6.2", "markdownlint-cli": "^0.31.1", @@ -8001,12 +7705,12 @@ "minimist": "^1.2.0", "npm-package-json-lint": "^6.4.0", "npm-packlist": "^3.0.0", - "playwright-core": "1.32.0", + "playwright-core": "1.39.0", "postcss": "^8.4.5", "postcss-loader": "^6.2.1", - "prettier": "npm:wp-prettier@3.0.3-beta-3", + "prettier": "npm:wp-prettier@3.0.3", "puppeteer-core": "^13.2.0", - "react-refresh": "^0.10.0", + "react-refresh": "^0.14.0", "read-pkg-up": "^7.0.1", "resolve-bin": "^0.4.0", "sass": "^1.35.2", @@ -8015,24 +7719,184 @@ "stylelint": "^14.2.0", "terser-webpack-plugin": "^5.3.9", "url-loader": "^4.1.1", - "webpack": "^5.47.1", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-cli": "^4.9.1", - "webpack-dev-server": "^4.4.0" + "webpack": "^5.88.2", + "webpack-bundle-analyzer": "^4.9.1", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^4.15.1" }, "bin": { "wp-scripts": "bin/wp-scripts.js" }, "engines": { - "node": ">=14", + "node": ">=18", "npm": ">=6.14.4" }, "peerDependencies": { - "@playwright/test": "^1.32.0", + "@playwright/test": "^1.39.0", "react": "^18.0.0", "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", + "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", + "dev": true, + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wordpress/scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/@wordpress/scripts/node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -8256,11 +8120,23 @@ "node": ">=8" } }, + "node_modules/@wordpress/scripts/node_modules/playwright-core": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@wordpress/scripts/node_modules/prettier": { "name": "wp-prettier", - "version": "3.0.3-beta-3", - "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3-beta-3.tgz", - "integrity": "sha512-R3+TD7j0rnqEpMgylrUrHdi1W6ypwh4QGeFOZQ9YjP9WvNnZzBAS71yry1h7xIcG/bVaNKBCoWNqbqJY6vkOKQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3.tgz", + "integrity": "sha512-X4UlrxDTH8oom9qXlcjnydsjAOD2BmB6yFmvS4Z2zdTzqqpRWb+fbqrH412+l+OUXmbzJlSXjlMFYPgYG12IAA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -8272,15 +8148,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@wordpress/scripts/node_modules/react-refresh": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.10.0.tgz", - "integrity": "sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@wordpress/scripts/node_modules/read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", @@ -8329,6 +8196,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@wordpress/scripts/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/@wordpress/scripts/node_modules/source-map-loader": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", @@ -8372,20 +8248,20 @@ } }, "node_modules/@wordpress/server-side-render": { - "version": "4.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-4.19.14.tgz", - "integrity": "sha512-As3Xc3TDM0R0siAFaldobRdZnPfQQMXvlQxalFJgs/kSoYOmcdc46mR5Wgmfn7r0Kc/Z5uOHLbvm4mWekE0a2A==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-4.27.1.tgz", + "integrity": "sha512-hovofyT0z75NSK/CSkkSbbTdkq9Afc1MKbEVGXTGpqq5sKOa7IAcxWjzmh8byTgT8x7GEaAyHZUr31p4l0CGnQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/url": "^3.43.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/url": "^3.51.0", "fast-deep-equal": "^3.1.3" }, "engines": { @@ -8397,9 +8273,9 @@ } }, "node_modules/@wordpress/shortcode": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-3.42.13.tgz", - "integrity": "sha512-pq+xdRdND7vEuqskPoZx+VAOHsmatqHcox3dElFU5lxlx/3fvKC7NIrFCn+glxFGGxO5hY5JfUOC70x8tm7uMA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-3.50.0.tgz", + "integrity": "sha512-RnlqS2OsNUaI6VOLwyUiaL3trAJcWjtoiW21BjIXODbTkEreRJgBJnch7wdFpGimJmKIWBwRD8jQ4hdTND8xVw==", "dependencies": { "@babel/runtime": "^7.16.0", "memize": "^2.0.1" @@ -8409,9 +8285,9 @@ } }, "node_modules/@wordpress/style-engine": { - "version": "1.25.13", - "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-1.25.13.tgz", - "integrity": "sha512-4ixhGNVNrtt6zppLWnPCKSl4O4X+TO48PbLEbLDvN2NvUK1Yp1wChiX+NFIBa1dJp1zDlrxaTjttCqC1bs3MUA==", + "version": "1.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-1.33.1.tgz", + "integrity": "sha512-mkur1jw3Trz76iwxU6DalTFsJyF5P/NTdU9xniMT8bo1H9HspgKrzqXAaxkTL9F9BXkyiYs+ctVekJYRUKlgcw==", "dependencies": { "@babel/runtime": "^7.16.0", "change-case": "^4.1.2" @@ -8421,9 +8297,9 @@ } }, "node_modules/@wordpress/stylelint-config": { - "version": "21.26.0", - "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.26.0.tgz", - "integrity": "sha512-xTnvoNk9aCdRl1ntBxnmhdmghwzRNurp5Y9LjUCwrYutxnj8t/CCKhPyjgIgHxz+RwKgnpGKupKLVvuHxu1CzQ==", + "version": "21.33.0", + "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.33.0.tgz", + "integrity": "sha512-DwjXrjRBva0tkYILvDV7rjl3VaKXxvchlxnFfFs6l2DWL/Qo31CJ+f2rVw4XSWuuWxY1EsyIn9tOBS9URloWTQ==", "dev": true, "dependencies": { "stylelint-config-recommended": "^6.0.0", @@ -8437,12 +8313,18 @@ } }, "node_modules/@wordpress/sync": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-0.4.13.tgz", - "integrity": "sha512-3Lq7MENUpCaSvR6WOLOovNmRMXGmFcdnbMjSZlHh0sx3ycWbKpXlGyfQWJ20MZRiO/qTOOrj4VW4GejqqJSEZw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-0.12.0.tgz", + "integrity": "sha512-45gU1Gu/ys3zqYO4dDQf6eG5gGgJK9nXa62IUtUWFXIH4FN29XlvGppMVK/zzhJwejF/XnDuT7mQuVEFCZGswA==", "dependencies": { "@babel/runtime": "^7.16.0", + "@types/simple-peer": "^9.11.5", + "@wordpress/url": "^3.51.0", + "import-locals": "^2.0.0", + "lib0": "^0.2.42", + "simple-peer": "^9.11.0", "y-indexeddb": "~9.0.11", + "y-protocols": "^1.0.5", "y-webrtc": "~10.2.5", "yjs": "~13.6.6" }, @@ -8451,9 +8333,9 @@ } }, "node_modules/@wordpress/token-list": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-2.42.13.tgz", - "integrity": "sha512-eAKU/5U7c/Acqcqnurpp79lrwCAm+Tb8PfSBTmtGs1fJsR1xtJh4d6IZw5MLDFiqLuVRT65ec3T4Sjqb6N4CMQ==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-2.50.0.tgz", + "integrity": "sha512-LTjXkoljQpJIHqs0isTUzIc1fMu68y0N9HcDIdsCMGkmKptWUCETtb+DItnraxDDLuyWNuTYf840S83a3XAVRA==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -8462,21 +8344,21 @@ } }, "node_modules/@wordpress/undo-manager": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.2.13.tgz", - "integrity": "sha512-SFIYRs65GEjr0eeh7BZcETaH32qQVm78aFMZXnYTHzBmTXxoJ98XRgEGWXRJU92RXBcjom+1gARKChJoV5dlNw==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.10.0.tgz", + "integrity": "sha512-ODDqAL6BSvD+J7FV+sQTAaVHiPChh/4KBnKg8pb2ogg+Weq6VynthxDxGpQnN8FcMKB9ZoyS3SNIl8pVXLKIwA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/is-shallow-equal": "^4.42.13" + "@wordpress/is-shallow-equal": "^4.50.0" }, "engines": { "node": ">=12" } }, "node_modules/@wordpress/url": { - "version": "3.43.13", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.43.13.tgz", - "integrity": "sha512-GrIkGZoCgd+87CyAjgGzShoI6m/Kvknmc6syqrN34J1LdrEE+vPNMjM+NvUVvyPdvgG7/iFzRM8D/ZEUvaTm9A==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.51.0.tgz", + "integrity": "sha512-OjucjlP1763gfKbe8lv/k3RCisyX8AfNBrhASk7JqxAj6rFhb1ZZO7YmAgB2m+WoGB5v7fkOli0FZyDqISdYyg==", "dependencies": { "@babel/runtime": "^7.16.0", "remove-accents": "^0.5.0" @@ -8486,14 +8368,14 @@ } }, "node_modules/@wordpress/viewport": { - "version": "5.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-5.19.13.tgz", - "integrity": "sha512-xYWTcaQLhZrDZA0lpl9TivbU4RPw+CUfuRc3NEBiQY0GDDfuLe8n1Pb9AkmAP5PLNyxZhHjKLBGojfchOGhzdg==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-5.27.0.tgz", + "integrity": "sha512-ET8X3Ln0K6wrBba+u0AjBD/mP02SuvwhK/EVaI3uAhNlGnkx+J3PdtShbu63lHmp0SG+J27CDjEqfcZ6CdAnfA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13" + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0" }, "engines": { "node": ">=12" @@ -8503,30 +8385,30 @@ } }, "node_modules/@wordpress/warning": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.42.13.tgz", - "integrity": "sha512-SYi37xiR7Wq4Vde4JBkCYJIyfUQzyuABrwh7aon1XwcUhWP072tv4/LKP6F+zWYC5M8pPdRqjznxgwZ2mNzcyw==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.50.0.tgz", + "integrity": "sha512-y7Zf48roDfiPgbRAWGXDwN3C8sfbEdneGq+HvXCW6rIeGYnDLdEkpX9i7RfultkFFPVeSP3FpMKVMkto2nbqzA==", "engines": { "node": ">=12" } }, "node_modules/@wordpress/widgets": { - "version": "3.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-3.19.14.tgz", - "integrity": "sha512-nFyXrCBVp24joFa96sAdNwkWnnf23t960ebnoW+Wk+lMT0PsGfGjiMIRmtks2cfqbQuQYFdO/8go+DSE54ekAg==", + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-3.27.1.tgz", + "integrity": "sha512-KrN24nN4B5nNnzV572yeEQnvqf2p3rKBjA9mTSK7Ei5nY1yvuFQn/LxiihbqqSJikliEMkh/cZ152JvIx5j6JA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/notices": "^4.10.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/notices": "^4.18.0", "classnames": "^2.3.1" }, "peerDependencies": { @@ -8535,9 +8417,9 @@ } }, "node_modules/@wordpress/wordcount": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-3.42.13.tgz", - "integrity": "sha512-yapganGNO/9JjfWTcMNECjIOKlnLOJR2VTh4UFBL/lSi2GM1AE7bjnXsV2pD0H/3mwdhAomRCUV6BA3nG5UUfA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-3.50.0.tgz", + "integrity": "sha512-lRfIX3B9ha//bqsUihym2BnOiAsdDQr22vdy0wZIpm5G2tFvTddCKHy0YClf52IJK0z61WqbNuF9hrvzWWxL+g==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -8582,27 +8464,6 @@ "node": ">= 0.6" } }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -8974,9 +8835,9 @@ } }, "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "node_modules/array-includes": { @@ -9303,12 +9164,28 @@ } }, "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { - "follow-redirects": "^1.14.7" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, "node_modules/axobject-query": { @@ -9720,15 +9597,6 @@ "tweetnacl": "^0.14.3" } }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -10212,13 +10080,11 @@ "dev": true }, "node_modules/bonjour-service": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", - "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -10229,18 +10095,6 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -10410,21 +10264,6 @@ "semver": "^7.0.0" } }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -11255,9 +11094,9 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "node_modules/colors": { @@ -11453,25 +11292,17 @@ } }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "optional": true, "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -11661,10 +11492,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", - "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==", - "deprecated": "core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure.", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.1.tgz", + "integrity": "sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -12252,6 +12082,12 @@ "node": "*" } }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -12582,13 +12418,13 @@ } }, "node_modules/deepsignal": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/deepsignal/-/deepsignal-1.3.6.tgz", - "integrity": "sha512-yjd+vtiznL6YaMptOsKnEKkPr60OEApa+LRe+Qe6Ile/RfCOrELKk/YM3qVpXFZiyOI3Ng67GDEyjAlqVc697g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/deepsignal/-/deepsignal-1.4.0.tgz", + "integrity": "sha512-x0XUMT48s+xQRLc2fPFfxnYLCJ46vffw47OQ5NcHFzacOjfW5eA0NrEmI0bhQHL6MgUHkBVT4TIiWTVwzTEwpg==", "peerDependencies": { "@preact/signals": "^1.1.4", - "@preact/signals-core": "^1.3.1", - "@preact/signals-react": "^1.3.3", + "@preact/signals-core": "^1.5.1", + "@preact/signals-react": "^1.3.8 || ^2.0.0", "preact": "^10.16.0" }, "peerDependenciesMeta": { @@ -12606,206 +12442,6 @@ } } }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-browser/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/default-browser/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-browser/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-browser/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-browser/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -13189,16 +12825,10 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -13419,11 +13049,6 @@ "node": ">=4" } }, - "node_modules/downloadjs": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz", - "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==" - }, "node_modules/downshift": { "version": "6.1.12", "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.12.tgz", @@ -13596,9 +13221,9 @@ } }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -13956,9 +13581,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { "array-includes": "^3.1.7", @@ -13977,7 +13602,7 @@ "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -14017,9 +13642,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "27.6.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz", + "integrity": "sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.10.0" @@ -14154,9 +13779,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "46.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.9.0.tgz", - "integrity": "sha512-UQuEtbqLNkPf5Nr/6PPRCtr9xypXY+g8y/Q7gPa0YK7eDhh0y2lWprXRnaYbW7ACgIUvpDKy9X2bZqxtGzBG9Q==", + "version": "46.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", + "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", "dev": true, "dependencies": { "@es-joy/jsdoccomment": "~0.41.0", @@ -14167,13 +13792,13 @@ "esquery": "^1.5.0", "is-builtin-module": "^3.2.1", "semver": "^7.5.4", - "spdx-expression-parse": "^3.0.1" + "spdx-expression-parse": "^4.0.0" }, "engines": { "node": ">=16" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { @@ -14188,6 +13813,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", @@ -14240,23 +13875,24 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", - "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "synckit": "^0.8.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/prettier" + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", + "eslint-config-prettier": "*", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -15104,24 +14740,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -16069,6 +15687,15 @@ "node": ">= 0.10" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -16104,9 +15731,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "dev": true, "funding": [ { @@ -16309,9 +15936,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", "dev": true }, "node_modules/fs.realpath": { @@ -18156,6 +17783,11 @@ "react-is": "^16.7.0" } }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -18799,6 +18431,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-locals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-locals/-/import-locals-2.0.0.tgz", + "integrity": "sha512-1/bPE89IZhyf7dr5Pkz7b4UyVXy5pEt7PTEfye15UEn3AK8+2zwcDCfKk9Pwun4ltfhOSszOrReSsFcDKw/yoA==" + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -18969,12 +18606,12 @@ } }, "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/intl-messageformat": { @@ -19022,9 +18659,9 @@ "dev": true }, "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "dev": true, "engines": { "node": ">= 10" @@ -19347,39 +18984,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-jpg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", @@ -20607,18 +20211,21 @@ } }, "node_modules/jest-dev-server": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-6.2.0.tgz", - "integrity": "sha512-ZWh8CuvxwjhYfvw4tGeftziqIvw/26R6AG3OTgNTQeXul8aZz48RQjDpnlDwnWX53jxJJl9fcigqIdSU5lYZuw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-9.0.2.tgz", + "integrity": "sha512-Zc/JB0IlNNrpXkhBw+h86cGrde/Mey52KvF+FER2eyrtYJTHObOwW7Iarxm3rPyTKby5+3Y2QZtl8pRz/5GCxg==", "dev": true, "dependencies": { "chalk": "^4.1.2", "cwd": "^0.10.0", "find-process": "^1.4.7", "prompts": "^2.4.2", - "spawnd": "^6.2.0", + "spawnd": "^9.0.2", "tree-kill": "^1.2.2", - "wait-on": "^6.0.1" + "wait-on": "^7.2.0" + }, + "engines": { + "node": ">=16" } }, "node_modules/jest-dev-server/node_modules/ansi-styles": { @@ -20680,9 +20287,9 @@ } }, "node_modules/jest-dev-server/node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -20701,22 +20308,22 @@ } }, "node_modules/jest-dev-server/node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", + "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", "dev": true, "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", + "axios": "^1.6.1", + "joi": "^17.11.0", "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" + "minimist": "^1.2.8", + "rxjs": "^7.8.1" }, "bin": { "wait-on": "bin/wait-on" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/jest-diff": { @@ -22131,15 +21738,15 @@ } }, "node_modules/joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "version": "17.12.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.0.tgz", + "integrity": "sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw==", "dev": true, "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.4", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, @@ -22745,6 +22352,16 @@ "node": ">=0.10" } }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, "node_modules/lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -22777,9 +22394,9 @@ } }, "node_modules/lib0": { - "version": "0.2.87", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.87.tgz", - "integrity": "sha512-TbB63XJixvNToW2IHWAFsCJj9tVnajmwjE14p69i51Rx8byOQd2IP4ourE8v4d7vhyO++nVm1sQk3ePslfbucg==", + "version": "0.2.88", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.88.tgz", + "integrity": "sha512-KyroiEvCeZcZEMx5Ys+b4u4eEBbA1ch7XUaBhYpwa/nPMrzTjUhI4RfcytmQfYoTBPcdyx+FX6WFNIoNuJzJfQ==", "dependencies": { "isomorphic.js": "^0.2.4" }, @@ -24332,12 +23949,12 @@ } }, "node_modules/memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "dependencies": { - "fs-monkey": "^1.0.3" + "fs-monkey": "^1.0.4" }, "engines": { "node": ">= 4.0.0" @@ -24465,21 +24082,21 @@ } }, "node_modules/mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "mime-db": "1.45.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -24604,10 +24221,13 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minimist-options": { "version": "4.1.0", @@ -24748,9 +24368,9 @@ "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" }, "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, "engines": { "node": ">=10" @@ -24785,7 +24405,6 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, "funding": [ { "type": "github", @@ -26408,8 +26027,7 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -26601,7 +26219,6 @@ "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -27057,6 +26674,14 @@ "postcss": "^8.2.15" } }, + "node_modules/postcss-prefixwrap": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/postcss-prefixwrap/-/postcss-prefixwrap-1.44.0.tgz", + "integrity": "sha512-h9MJGaIvT5hnzFc7Vuo+2ulBw6ecmmfcd8SKKH2TziUzcIA04gUoXIbptuM+tR+htmsQIKNEluiQlmCQ2p5a2g==", + "peerDependencies": { + "postcss": "*" + } + }, "node_modules/postcss-reduce-initial": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", @@ -27357,16 +26982,26 @@ "postcss": "^8.2.15" } }, + "node_modules/postcss-urlrebase": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-urlrebase/-/postcss-urlrebase-1.3.0.tgz", + "integrity": "sha512-LOFN43n1IewKriXiypMNNinXeptttSyGGRLPbBMdQzuTvvCEo5mz/gG06y/HqrkN7p3ayHQf2R2bTBv639FOaQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.3.0" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/preact": { - "version": "10.19.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.1.tgz", - "integrity": "sha512-ZSsUr6EFlwWH0btdXMj6+X+hJAZ1v+aUzKlfwBGokKB1ZO6Shz+D16LxQhM8f+E/UgkKbVe2tsWXtGTUMCkGpQ==", + "version": "10.19.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.3.tgz", + "integrity": "sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -27448,12 +27083,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -27496,6 +27125,11 @@ "react-is": "^16.13.1" } }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -27981,9 +27615,9 @@ "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==" }, "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-refresh": { "version": "0.14.0", @@ -27994,30 +27628,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/react-remove-scroll-bar": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", @@ -28806,124 +28416,6 @@ "node": ">=0.10.0" } }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/run-applescript/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/run-applescript/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -29346,11 +28838,12 @@ "dev": true }, "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "dependencies": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" }, "engines": { @@ -29676,6 +29169,15 @@ "node": ">=0.10.0" } }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/showdown": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", @@ -29834,14 +29336,14 @@ } }, "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, "engines": { "node": ">= 10" @@ -30199,7 +29701,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -30266,14 +29767,28 @@ "dev": true }, "node_modules/spawnd": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-6.2.0.tgz", - "integrity": "sha512-qX/I4lQy4KgVEcNle0kuc4FxFWHISzBhZW1YemPfwmrmQjyZmfTK/OhBKkhrD2ooAaFZEm1maEBLE6/6enwt+g==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-9.0.2.tgz", + "integrity": "sha512-nl8DVHEDQ57IcKakzpjanspVChkMpGLuVwMR/eOn9cXE55Qr6luD2Kn06sA0ootRMdgrU4tInN6lA6ohTNvysw==", "dev": true, "dependencies": { - "exit": "^0.1.2", - "signal-exit": "^3.0.7", + "signal-exit": "^4.1.0", "tree-kill": "^1.2.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/spawnd/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/spdx-correct": { @@ -30339,9 +29854,9 @@ } }, "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -31462,13 +30977,13 @@ "dev": true }, "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -31822,18 +31337,6 @@ "ms": "^2.1.1" } }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -31922,9 +31425,9 @@ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" }, "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "engines": { "node": ">=6" @@ -31951,14 +31454,6 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "dev": true }, - "node_modules/traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -32003,9 +31498,9 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -32073,11 +31568,6 @@ "node": "*" } }, - "node_modules/turbo-combine-reducers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/turbo-combine-reducers/-/turbo-combine-reducers-1.0.2.tgz", - "integrity": "sha512-gHbdMZlA6Ym6Ur5pSH/UWrNQMIM9IqTH6SoL1DbHpqEdQ8i+cFunSmSlFykPt0eGQwZ4d/XTHOl74H0/kFBVWw==" - }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -32414,15 +31904,6 @@ "node": ">=0.10.0" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -32583,19 +32064,6 @@ } } }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/use-lilius": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/use-lilius/-/use-lilius-2.0.3.tgz", @@ -32859,15 +32327,6 @@ "node": ">= 6" } }, - "node_modules/wait-on/node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wait-on/node_modules/rxjs": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", @@ -32922,6 +32381,12 @@ "node": ">= 8" } }, + "node_modules/web-vitals": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.1.tgz", + "integrity": "sha512-xQ9lvIpfLxUj0eSmT79ZjRoU5wIRfIr7pNukL7ZE4EcWZSmfZQqOlhuAGfkVa3EFmzPHZhWhXfm2i5ys+THVPg==", + "dev": true + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -32976,20 +32441,23 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", + "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "html-escaper": "^2.0.2", + "is-plain-object": "^5.0.0", "opener": "^1.5.2", - "sirv": "^1.0.7", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { @@ -32999,55 +32467,6 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -33057,66 +32476,55 @@ "node": ">= 10" } }, - "node_modules/webpack-bundle-analyzer/node_modules/has-flag": { + "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "node": ">=10" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", "colorette": "^2.0.14", - "commander": "^7.0.0", + "commander": "^10.0.1", "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", "webpack-merge": "^5.7.3" }, "bin": { "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=10.13.0" + "node": ">=14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x" + "webpack": "5.x.x" }, "peerDependenciesMeta": { "@webpack-cli/generators": { "optional": true }, - "@webpack-cli/migrate": { - "optional": true - }, "webpack-bundle-analyzer": { "optional": true }, @@ -33126,12 +32534,12 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=14" } }, "node_modules/webpack-cli/node_modules/cross-spawn": { @@ -33157,6 +32565,18 @@ "node": ">=8" } }, + "node_modules/webpack-cli/node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/webpack-cli/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -33235,37 +32655,16 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -33276,9 +32675,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, "dependencies": { "@types/bonjour": "^3.5.9", @@ -33287,7 +32686,7 @@ "@types/serve-index": "^1.9.1", "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", @@ -33300,6 +32699,7 @@ "html-entities": "^2.3.2", "http-proxy-middleware": "^2.0.3", "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", "rimraf": "^3.0.2", @@ -33309,7 +32709,7 @@ "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "ws": "^8.13.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" @@ -33325,6 +32725,9 @@ "webpack": "^4.37.0 || ^5.0.0" }, "peerDependenciesMeta": { + "webpack": { + "optional": true + }, "webpack-cli": { "optional": true } @@ -33380,15 +32783,15 @@ } }, "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -33399,9 +32802,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -33438,12 +32841,13 @@ } }, "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -33679,9 +33083,9 @@ "integrity": "sha512-Ba9tGNYxXwaqKEi9sJJvPMKuo063umUPsHN0JJsjrs2j8KDSzkWLMZGZ+MH1Jf1Fq4OWZ5HsESJID6nRza2ang==" }, "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "node_modules/wrap-ansi": { @@ -33720,7 +33124,7 @@ "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8.3.0" }, @@ -33833,13 +33237,13 @@ } }, "node_modules/y-webrtc": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/y-webrtc/-/y-webrtc-10.2.5.tgz", - "integrity": "sha512-ZyBNvTI5L28sQ2PQI0T/JvyWgvuTq05L21vGkIlcvNLNSJqAaLCBJRe3FHEqXoaogqWmRcEAKGfII4ErNXMnNw==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/y-webrtc/-/y-webrtc-10.2.6.tgz", + "integrity": "sha512-1kZ4YYwksFZi8+l8mTebVX9vW6Q5MnqxMkvNU700X5dBE38usurt/JgeXSIQRpK3NwUYYb9y63Jn9FMpMH6/vA==", "dependencies": { "lib0": "^0.2.42", "simple-peer": "^9.11.0", - "y-protocols": "^1.0.5" + "y-protocols": "^1.0.6" }, "bin": { "y-webrtc-signaling": "bin/server.js" @@ -33852,7 +33256,31 @@ "url": "https://github.com/sponsors/dmonad" }, "optionalDependencies": { - "ws": "^7.2.0" + "ws": "^8.14.2" + }, + "peerDependencies": { + "yjs": "^13.6.8" + } + }, + "node_modules/y-webrtc/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "optional": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/y18n": { @@ -33911,11 +33339,11 @@ } }, "node_modules/yjs": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.8.tgz", - "integrity": "sha512-ZPq0hpJQb6f59B++Ngg4cKexDJTvfOgeiv0sBc4sUm8CaBWH7OQC4kcCgrqbjJ/B2+6vO49exvTmYfdlPtcjbg==", + "version": "13.6.11", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.11.tgz", + "integrity": "sha512-FvRRJKX9u270dOLkllGF/UDCWwmIv2Z+ucM4v1QO1TuxdmoiMnSUXH1HAcOKOrkBEhQtPTkxep7tD2DrQB+l0g==", "dependencies": { - "lib0": "^0.2.74" + "lib0": "^0.2.86" }, "engines": { "node": ">=16.0.0", @@ -33957,24 +33385,24 @@ } }, "@ariakit/core": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.2.7.tgz", - "integrity": "sha512-Hs0N1EMYq88WW4v9xnSIHNR38TvbQuoUX6FYFmeLCZSTIXQBiET7lr1DQXwOOmdEtRtlxQ5HsxbTkxeOkPv+eg==" + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.3.11.tgz", + "integrity": "sha512-+MnOeqnA4FLI/7vqsZLbZQHHN4ofd9kvkNjz44fNi0gqmD+ZbMWiDkFAvZII75dYnxYw5ZPpWjA4waK22VBWig==" }, "@ariakit/react": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.2.12.tgz", - "integrity": "sha512-4rAgMyUURHW78EKgRCanhyRUtsiYCOxO65BBHF4mg3tZsDeOvu9kBG5IAXX8mUgakTcyr0EKXuOtGThaj7gobA==", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.3.14.tgz", + "integrity": "sha512-h71BPMZ2eW+E2ESbdYxSAEMR1DozYzd5eHE5IOzGd9Egi5u7EZxqmuW4CXVXZ1Y6vbaDMV3SudgPh7iHS/ArFw==", "requires": { - "@ariakit/react-core": "0.2.12" + "@ariakit/react-core": "0.3.14" } }, "@ariakit/react-core": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.2.12.tgz", - "integrity": "sha512-3KSKlX10nnhCvjsbPW0CAnqG+6grryfwnMkeJJ/h34FSV7hEfUMexmIjKBVZyfBG08Xj8NjSK8kkx9c3ChkXeA==", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.3.14.tgz", + "integrity": "sha512-16Qj6kDPglpdWtU5roY9q+G66naOjauTY5HvUIaL2aLY0187ATaRrABIKoMMzTtJyhvsud4jFlzivz+/zCQ8yw==", "requires": { - "@ariakit/core": "0.2.7", + "@ariakit/core": "0.3.11", "@floating-ui/dom": "^1.0.0", "use-sync-external-store": "^1.2.0" } @@ -36496,71 +35924,11 @@ "fastq": "^1.6.0" } }, - "@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true - }, - "open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "requires": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - } - } + "@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true }, "@playwright/test": { "version": "1.32.0", @@ -36642,9 +36010,9 @@ } }, "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", "dev": true }, "@popperjs/core": { @@ -36653,17 +36021,17 @@ "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, "@preact/signals": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-1.2.1.tgz", - "integrity": "sha512-hRPvp1C2ooDzOHqfnhdpHgoIFDbYFAXLhoid3+jSItuPPD/J0r/UsiWKv/8ZO/oEhjRaP0M5niuRYsWqmY2GEA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-1.2.2.tgz", + "integrity": "sha512-ColCqdo4cRP18bAuIR4Oik5rDpiyFtPIJIygaYPMEAwTnl4buWkBOflGBSzhYyPyJfKpkwlekrvK+1pzQ2ldWw==", "requires": { "@preact/signals-core": "^1.4.0" } }, "@preact/signals-core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.5.0.tgz", - "integrity": "sha512-U2diO1Z4i1n2IoFgMYmRdHWGObNrcuTRxyNEn7deSq2cru0vj0583HYQZHsAqcs7FE+hQyX3mjIV7LAfHCvy8w==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.5.1.tgz", + "integrity": "sha512-dE6f+WCX5ZUDwXzUIWNMhhglmuLpqJhuy3X3xHrhZYI0Hm2LyQwOu0l9mdPiWrVNsE+Q7txOnJPgtIqHCYoBVA==" }, "@puppeteer/browsers": { "version": "0.5.0", @@ -36802,27 +36170,6 @@ "@babel/runtime": "^7.13.10" } }, - "@radix-ui/react-arrow": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz", - "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.2" - } - }, - "@radix-ui/react-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.2.tgz", - "integrity": "sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-slot": "1.0.1" - } - }, "@radix-ui/react-compose-refs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", @@ -36935,42 +36282,6 @@ } } }, - "@radix-ui/react-direction": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", - "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-dismissable-layer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz", - "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-escape-keydown": "1.0.2" - } - }, - "@radix-ui/react-dropdown-menu": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.4.tgz", - "integrity": "sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-menu": "2.0.4", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.0" - } - }, "@radix-ui/react-focus-guards": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", @@ -36979,17 +36290,6 @@ "@babel/runtime": "^7.13.10" } }, - "@radix-ui/react-focus-scope": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.2.tgz", - "integrity": "sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.0" - } - }, "@radix-ui/react-id": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", @@ -36999,83 +36299,6 @@ "@radix-ui/react-use-layout-effect": "1.0.0" } }, - "@radix-ui/react-menu": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.4.tgz", - "integrity": "sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-collection": "1.0.2", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-direction": "1.0.0", - "@radix-ui/react-dismissable-layer": "1.0.3", - "@radix-ui/react-focus-guards": "1.0.0", - "@radix-ui/react-focus-scope": "1.0.2", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-popper": "1.1.1", - "@radix-ui/react-portal": "1.0.2", - "@radix-ui/react-presence": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-roving-focus": "1.0.3", - "@radix-ui/react-slot": "1.0.1", - "@radix-ui/react-use-callback-ref": "1.0.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" - } - }, - "@radix-ui/react-popper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz", - "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==", - "requires": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "0.7.2", - "@radix-ui/react-arrow": "1.0.2", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-layout-effect": "1.0.0", - "@radix-ui/react-use-rect": "1.0.0", - "@radix-ui/react-use-size": "1.0.0", - "@radix-ui/rect": "1.0.0" - }, - "dependencies": { - "@floating-ui/core": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", - "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==" - }, - "@floating-ui/dom": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", - "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", - "requires": { - "@floating-ui/core": "^0.7.3" - } - }, - "@floating-ui/react-dom": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz", - "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==", - "requires": { - "@floating-ui/dom": "^0.5.3", - "use-isomorphic-layout-effect": "^1.1.1" - } - } - } - }, - "@radix-ui/react-portal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz", - "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.2" - } - }, "@radix-ui/react-presence": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", @@ -37086,41 +36309,6 @@ "@radix-ui/react-use-layout-effect": "1.0.0" } }, - "@radix-ui/react-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", - "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" - } - }, - "@radix-ui/react-roving-focus": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.3.tgz", - "integrity": "sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-collection": "1.0.2", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-direction": "1.0.0", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-primitive": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-controllable-state": "1.0.0" - } - }, - "@radix-ui/react-slot": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", - "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0" - } - }, "@radix-ui/react-use-callback-ref": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", @@ -37138,15 +36326,6 @@ "@radix-ui/react-use-callback-ref": "1.0.0" } }, - "@radix-ui/react-use-escape-keydown": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz", - "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" - } - }, "@radix-ui/react-use-layout-effect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", @@ -37155,32 +36334,6 @@ "@babel/runtime": "^7.13.10" } }, - "@radix-ui/react-use-rect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", - "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.0" - } - }, - "@radix-ui/react-use-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz", - "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.0" - } - }, - "@radix-ui/rect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", - "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, "@react-spring/animated": { "version": "9.7.1", "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.1.tgz", @@ -37834,9 +36987,9 @@ } }, "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "requires": { "@types/connect": "*", @@ -37844,27 +36997,27 @@ } }, "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "requires": { "@types/node": "*" } }, "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "requires": { "@types/express-serve-static-core": "*", @@ -37898,9 +37051,9 @@ "dev": true }, "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "requires": { "@types/body-parser": "*", @@ -37910,14 +37063,15 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "@types/glob": { @@ -37939,10 +37093,26 @@ "@types/node": "*" } }, + "@types/gradient-parser": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@types/gradient-parser/-/gradient-parser-0.1.3.tgz", + "integrity": "sha512-XDbrTSBlQV9nxE1GiDL3FaOPy4G/KaJkhDutBX48Kg8CYZMBARyyDFGCWfWJn4pobmInmwud1xxH7VJMAr0CKQ==" + }, + "@types/highlight-words-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/highlight-words-core/-/highlight-words-core-1.2.1.tgz", + "integrity": "sha512-9VZUA5omXBfn+hDxFjUDu1FOJTBM3LmvqfDey+Z6Aa8B8/JmF5SMj6FBrjfgJ/Q3YXOZd3qyTDfJyMZSs/wCUA==" + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, "requires": { "@types/node": "*" @@ -38018,9 +37188,9 @@ "dev": true }, "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "@types/minimatch": { @@ -38043,8 +37213,16 @@ "@types/node": { "version": "14.14.20", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", - "dev": true + "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==" + }, + "@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } }, "@types/normalize-package-data": { "version": "2.4.1", @@ -38070,15 +37248,15 @@ "optional": true }, "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", "dev": true }, "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "@types/react": { @@ -38111,34 +37289,53 @@ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/semver": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", - "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "requires": { "@types/express": "*" } }, "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, "requires": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } }, + "@types/simple-peer": { + "version": "9.11.8", + "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.8.tgz", + "integrity": "sha512-rvqefdp2rvIA6wiomMgKWd2UZNPe6LM2EV5AuY3CPQJF+8TbdrL5TjYdMf0VAjGczzlkH4l1NjDkihwbj3Xodw==", + "requires": { + "@types/node": "*" + } + }, "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "requires": { "@types/node": "*" @@ -38227,9 +37424,9 @@ } }, "@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "requires": { "@types/node": "*" @@ -38261,16 +37458,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", - "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz", + "integrity": "sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/type-utils": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/type-utils": "6.19.1", + "@typescript-eslint/utils": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -38280,83 +37477,104 @@ } }, "@typescript-eslint/parser": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", - "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz", + "integrity": "sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", - "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", "dev": true, "requires": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0" + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" } }, "@typescript-eslint/type-utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", - "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz", + "integrity": "sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/utils": "6.19.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", - "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", - "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", "dev": true, "requires": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", - "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz", + "integrity": "sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", - "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/types": "6.19.1", "eslint-visitor-keys": "^3.4.1" }, "dependencies": { @@ -38528,78 +37746,75 @@ } }, "@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true }, "@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true }, "@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true }, "@wordpress/a11y": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-3.42.13.tgz", - "integrity": "sha512-57KH89dbt8ipimoBGezKQHLvwSsJHW/W4HpvzZFqnPHvnlNNYoVC9UuqiBavxdB2WkzMPmNYFKsM7kOInEdyTA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-3.50.0.tgz", + "integrity": "sha512-eQiPGnxqiL1LgnHztFG0RGSFZ5phwR8B8Fr4lbJsFalsc9R/tOcjewvf2KN0yi2UlRA5ssAeiTP+tYmeAqtOHQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/dom-ready": "^3.42.13", - "@wordpress/i18n": "^4.42.13" + "@wordpress/dom-ready": "^3.50.0", + "@wordpress/i18n": "^4.50.0" } }, "@wordpress/annotations": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/annotations/-/annotations-2.42.13.tgz", - "integrity": "sha512-S/bCU8AOYzVMKBSMMtmoB9Dw1kiOS3KNfFzdCLpiyzNhfqXPWp7ciM5WJTHJRdzobeTOh1CIJ6x5WHhBqO/t8w==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/annotations/-/annotations-2.50.0.tgz", + "integrity": "sha512-E9cu8xuGvIRw3LVtuS+XSzAXVBF41sgvxpVJAz/5FEibzxUHPy8flu5tTKf+mi4WGZxC4AJGNP1bhZRj7cynZQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/data": "^9.12.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/rich-text": "^6.19.13", + "@wordpress/data": "^9.20.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/rich-text": "^6.27.0", "rememo": "^4.0.2", "uuid": "^9.0.1" } }, "@wordpress/api-fetch": { - "version": "6.39.13", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.39.13.tgz", - "integrity": "sha512-DFaiNq5bEOVqYDpcqXqdxjyBDboeElma6e7FNSX2APVZZt/8xxeb4eI9X0877i6B15G5blyHsjSit5rq88iqtg==", + "version": "6.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.47.0.tgz", + "integrity": "sha512-NA/jWDXoVtJmiVBYhlxts2UrgKJpJM+zTGzLCfRQCZUzpJYm3LonB8x+uCQ78nEyxCY397Esod3jnbquYjOr0Q==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.42.13", - "@wordpress/url": "^3.43.13" + "@wordpress/i18n": "^4.50.0", + "@wordpress/url": "^3.51.0" } }, "@wordpress/autop": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-3.42.13.tgz", - "integrity": "sha512-vQjEvJaYZ5OyMJ6IdbVL/RUqOy/VTe6E1BCkdRW8amJTm8koTkbBbOFWSsVoXh6jFoq2mDAqC7Tt2vL0yMA4rQ==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-3.50.0.tgz", + "integrity": "sha512-4E0vq2MvSOVDKXs4OulIbTdKU6S5O9QjT4qc63rAd0uiKGBYV12ViPzmwbJ6k38zOO0PKdcwlVCj55Gq4aoPDw==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/babel-plugin-import-jsx-pragma": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.26.0.tgz", - "integrity": "sha512-XZCTBqEmOlM87/6wkgtHhnHaj8cJPOY5avyjKtMDwoBbcXAmHUknbphZG7KEWIiVIilyxKyHnsTxjTplkqTtCQ==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.33.0.tgz", + "integrity": "sha512-CjzruFKWgzU/mO/nnQJ2l9UlzZQpqS60UC6l2vNdJ9oD2nKHR5Oou6kNic3QhWDVJrBf2JUiJJ0TC280bykXmA==", "dev": true }, "@wordpress/babel-preset-default": { - "version": "7.26.13", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.26.13.tgz", - "integrity": "sha512-kW9sg3lwbrhYzVR24n7cUEC2Sx1Pj4UNnITbXqVmxnVok0CK7IkvstMlbtLDbULh9o2f92OPNMwdAStErEjT7g==", + "version": "7.34.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.34.0.tgz", + "integrity": "sha512-yjFOllyTktFHtcIEgU3ghXBn8lItzr5mPLf0xdSpe0cHceFYL1hT1oprhgRL+olZweaO96Yfm0qUCCKQfJBWsA==", "dev": true, "requires": { "@babel/core": "^7.16.0", @@ -38608,94 +37823,94 @@ "@babel/preset-env": "^7.16.0", "@babel/preset-typescript": "^7.16.0", "@babel/runtime": "^7.16.0", - "@wordpress/babel-plugin-import-jsx-pragma": "^4.25.13", - "@wordpress/browserslist-config": "^5.25.13", - "@wordpress/element": "^5.19.13", - "@wordpress/warning": "^2.42.13", - "browserslist": "^4.21.9", - "core-js": "^3.31.0" + "@wordpress/babel-plugin-import-jsx-pragma": "^4.33.0", + "@wordpress/browserslist-config": "^5.33.0", + "@wordpress/warning": "^2.50.0", + "browserslist": "^4.21.10", + "core-js": "^3.31.0", + "react": "^18.2.0" } }, "@wordpress/base-styles": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.34.0.tgz", - "integrity": "sha512-LYiNFWl+6yJDVQ7hSNJu2kVuM1p3C3aTB769lXnMSxi3gubzxqjZqz9i9XQ3UjO9EFiDSvgbOXa8YhvTUfNnkQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.41.0.tgz", + "integrity": "sha512-MjPAZeAqvyskDXDp2wGZ0DjtYOQLOydI1WqVIZS4wnIdhsQWQD//VMeXgLrcmCzNyQg+iKTx3o+BzmXVTOD0+w==", "dev": true }, "@wordpress/blob": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-3.42.13.tgz", - "integrity": "sha512-W5TaJK9Vl8LInjdxRRq5hE08r34JKybVjm7UuSIPOppNErLu9g6edcGHsv3b/7f5so3TcSnPsLfDkPgwSFTjXA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-3.50.0.tgz", + "integrity": "sha512-QvBhsW9WPdsOJhJ0BxzZ83i+cH/gAdjJ1iHY4Rkb02qbZEz4jhdvucGQf2oVnWwvAsFiFPKWk7CwAM5XjoahCA==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/block-directory": { - "version": "4.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-4.19.16.tgz", - "integrity": "sha512-7YOqeZt8ExyMidbblzht7x5jnfpZVD6N69VuDrvdlB/8eB7gl62tKZdNXHwWoZccSWJb+xUTZL01k2HpJulcPQ==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-4.27.1.tgz", + "integrity": "sha512-O1qm9AumFZbEOI41HoUDyAaL+cOwjtzW4/8JADbNVmnKXj9bQE8CKbTvbsjin7BUEvM+IdYWzEXkY3KkgxBmTg==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/edit-post": "^7.19.16", - "@wordpress/editor": "^13.19.14", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/plugins": "^6.10.14", - "@wordpress/url": "^3.43.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/edit-post": "^7.27.1", + "@wordpress/editor": "^13.27.1", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/plugins": "^6.18.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0", "change-case": "^4.1.2" } }, "@wordpress/block-editor": { - "version": "12.10.14", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-12.10.14.tgz", - "integrity": "sha512-x56FPZZfJPk/Vd1aKIdpBIllrUuAVgwom+mYH0OohCmUzCBp1Eg8Urg5nshZpiLXpHt2dXycQCLu2Mpb+YpOJw==", + "version": "12.18.1", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-12.18.1.tgz", + "integrity": "sha512-kZPqOO0ogS3y3HcStGRowLKJk66cv9zzQtLcx7YNokYrceqnOWEYddhv+OWRz7h/qmkEBHgZfUCEgCQm2Dulnw==", "requires": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", "@emotion/styled": "^11.6.0", "@react-spring/web": "^9.4.5", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/blocks": "^12.19.13", - "@wordpress/commands": "^0.13.14", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/shortcode": "^3.42.13", - "@wordpress/style-engine": "^1.25.13", - "@wordpress/token-list": "^2.42.13", - "@wordpress/url": "^3.43.13", - "@wordpress/warning": "^2.42.13", - "@wordpress/wordcount": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/blocks": "^12.27.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/style-engine": "^1.33.1", + "@wordpress/token-list": "^2.50.0", + "@wordpress/url": "^3.51.0", + "@wordpress/warning": "^2.50.0", + "@wordpress/wordcount": "^3.50.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.7.0", @@ -38703,50 +37918,54 @@ "diff": "^4.0.2", "dom-scroll-into-view": "^1.2.1", "fast-deep-equal": "^3.1.3", - "inherits": "^2.0.3", + "memize": "^2.1.0", + "postcss": "^8.4.21", + "postcss-prefixwrap": "^1.41.0", + "postcss-urlrebase": "^1.0.0", "react-autosize-textarea": "^7.1.0", "react-easy-crop": "^4.5.1", "rememo": "^4.0.2", - "remove-accents": "^0.5.0", - "traverse": "^0.6.6" + "remove-accents": "^0.5.0" } }, "@wordpress/block-library": { - "version": "8.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-8.19.16.tgz", - "integrity": "sha512-6NqTHjEYk3X+jzw6JS3pOgVYl2HPlr0iAI3Ch9sdOxozAm1+VrE5DKeM//rf9QpR7wWJ6je4F/eNjZ2WJIYTfw==", + "version": "8.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-8.27.1.tgz", + "integrity": "sha512-dadyMsUM4A1b4FM3qlL9LwToJHYmVCCiL8Ir471C1N8v8LoZJjaGr5GvJTw61rSF6dy9951IvLl4+HxlGQPUew==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/autop": "^3.42.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interactivity": "^2.3.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/primitives": "^3.40.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/reusable-blocks": "^4.19.14", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/server-side-render": "^4.19.14", - "@wordpress/url": "^3.43.13", - "@wordpress/viewport": "^5.19.13", - "@wordpress/wordcount": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/autop": "^3.50.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interactivity": "^4.0.0", + "@wordpress/interactivity-router": "^1.0.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/patterns": "^1.11.1", + "@wordpress/primitives": "^3.48.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/reusable-blocks": "^4.27.1", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/server-side-render": "^4.27.1", + "@wordpress/url": "^3.51.0", + "@wordpress/viewport": "^5.27.0", + "@wordpress/wordcount": "^3.50.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.7.0", @@ -38759,40 +37978,41 @@ } }, "@wordpress/block-serialization-default-parser": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.42.13.tgz", - "integrity": "sha512-+ggjHxrjbpIwknsfKy18HXOVGWHeFykxlElE9dYVspJvr734mMMTQuIeL5WM+vZUy5NWv0oHF0VykX0MHyy60w==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.50.0.tgz", + "integrity": "sha512-ihf2vr+w2zHBOvYTPQZXDiR2IMvso8yJJtzKIHA2ZEgVQ+VVLb4X86n34hfWXtPA3i2KDW+t1WCtq56aNq3Zag==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/blocks": { - "version": "12.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-12.19.13.tgz", - "integrity": "sha512-KdNcYb5Cr4sgzOkJM+KpPZeLLFr8e06CkRDp0EQk7VGSsoScXpqIcMEtMcKNQp1XPuJ6npMr/BacC5qNjyHA1A==", + "version": "12.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-12.27.1.tgz", + "integrity": "sha512-9uZtuTG6+fiFV2bLn8b1gzv4BgMpBu4SDQGnvzc5f9U5GL5oYns3PP8vXDOwM2cK1DEmqPsohQWhRnz8QYZDtw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/autop": "^3.42.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/block-serialization-default-parser": "^4.42.13", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/shortcode": "^3.42.13", + "@wordpress/autop": "^3.50.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/block-serialization-default-parser": "^4.50.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/shortcode": "^3.50.0", "change-case": "^4.1.2", "colord": "^2.7.0", - "deepmerge": "^4.3.0", "fast-deep-equal": "^3.1.3", "hpq": "^1.3.0", "is-plain-object": "^5.0.0", "memize": "^2.1.0", + "react-is": "^18.2.0", "rememo": "^4.0.2", "remove-accents": "^0.5.0", "showdown": "^1.9.1", @@ -38801,35 +38021,35 @@ } }, "@wordpress/browserslist-config": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.26.0.tgz", - "integrity": "sha512-rpkxAnPOc4HuxKZBwZ1iV1oC0Rd21azzBDyS8OoVUW6V8DAv4eYfHNFGkyds7Z+nI6dI15Rl7xJYJhHJKVaJvg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.33.0.tgz", + "integrity": "sha512-dv1ZlpqGk8gaSBJPP/Z/1uOuxjtP0EBsHVKInLRu6FWLTJkK8rnCeC3xJT3/2TtJ0rasLC79RoytfhXTOODVwg==", "dev": true }, "@wordpress/commands": { - "version": "0.13.14", - "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-0.13.14.tgz", - "integrity": "sha512-aSOuRbsr+YYFvRbkXaubHdlAtf/xpG1mUWXEw9VMWCag77hiK6vk04Xb3N8ad8eo8am0N/iRgn8V8IS4LyBTyA==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-0.21.0.tgz", + "integrity": "sha512-MzMUGCT9cQXto1jrA5lHAtnieTyAhcuNIxfyxlcE+316KNQfbyD8bc7KOzSV2sxXD/rfHuCxvHjfomFyyP+4kA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^25.8.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/private-apis": "^0.24.13", + "@wordpress/components": "^25.16.0", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/private-apis": "^0.32.0", "classnames": "^2.3.1", "cmdk": "^0.2.0", "rememo": "^4.0.2" } }, "@wordpress/components": { - "version": "25.8.14", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-25.8.14.tgz", - "integrity": "sha512-wRQSRlLXsL4bEd1JhCQPSdIb0bO4WDAloQufeyIbXUIK9CDgN/jmkv+vrgKrpP3Nqu1sBAFzW1qd9WEXfSBgXw==", + "version": "25.16.0", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-25.16.0.tgz", + "integrity": "sha512-voQuMsO5JbH+JW33TnWurwwvpSb8IQ4XU5wyVMubX4TUwadt+/2ToNJbZIDXoaJPei7vbM81Ft+pH+zGlN8CyA==", "requires": { - "@ariakit/react": "^0.2.12", + "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", "@emotion/cache": "^11.7.1", "@emotion/css": "^11.7.1", @@ -38838,25 +38058,26 @@ "@emotion/styled": "^11.6.0", "@emotion/utils": "^1.0.0", "@floating-ui/react-dom": "^2.0.1", - "@radix-ui/react-dropdown-menu": "2.0.4", + "@types/gradient-parser": "0.1.3", + "@types/highlight-words-core": "1.2.1", "@use-gesture/react": "^10.2.24", - "@wordpress/a11y": "^3.42.13", - "@wordpress/compose": "^6.19.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/primitives": "^3.40.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/warning": "^2.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/primitives": "^3.48.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/warning": "^2.50.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.7.0", @@ -38881,63 +38102,64 @@ } }, "@wordpress/compose": { - "version": "6.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.19.13.tgz", - "integrity": "sha512-3HDdccND+EoEr7tHQ75eCDh07e5TdFh0KFIdWGweq9gU5Z/tssRW8QEyU9J+xEz+DTL/hvFilQ681f58eUZi1g==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.27.0.tgz", + "integrity": "sha512-jbEQQ2znRyJTwUNR4m5BKaDyIsuK9TMZx0SKqP+FTfGqT3y7scOnQrHpK0kZdPji++/1cBbn3gSPBLCEmtmHRw==", "requires": { "@babel/runtime": "^7.16.0", "@types/mousetrap": "^1.6.8", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/priority-queue": "^2.42.13", - "@wordpress/undo-manager": "^0.2.13", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/priority-queue": "^2.50.0", + "@wordpress/undo-manager": "^0.10.0", "change-case": "^4.1.2", - "clipboard": "^2.0.8", + "clipboard": "^2.0.11", "mousetrap": "^1.6.5", "use-memo-one": "^1.1.1" } }, "@wordpress/core-commands": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-0.11.14.tgz", - "integrity": "sha512-f2DA9lUji96OC5UD85Gbv2vz14R0TR+FSXzXAa68F/EBPFkiaxs2huhruhRvZKbasxugk/vjTBbQuwZ8rinROA==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-0.19.1.tgz", + "integrity": "sha512-gmgiVtb17PEZgyH+UikE0B0Q6n22fXdscnu1lb/fBIKMgK10Jke4edin5qCbBINyqxykthkKvZO6VYpNjgcSHA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/commands": "^0.13.14", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/router": "^0.11.13", - "@wordpress/url": "^3.43.13" + "@wordpress/block-editor": "^12.18.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/router": "^0.19.0", + "@wordpress/url": "^3.51.0" } }, "@wordpress/core-data": { - "version": "6.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-6.19.14.tgz", - "integrity": "sha512-wdstu/qMBKwXnFRX4wMeTkxvHsOgbXm7ZJ0Lgtj+jE86O086Ook7suxacOdMcCaAKNCfMqoGBHtjsNQk3SWE1Q==", + "version": "6.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-6.27.1.tgz", + "integrity": "sha512-Nbm0xkgkkyk67f2GtnlS5udxYqBQcLGoDIhWjNY2m+uguM/Fr4cv6QGIyb1tIcwEBIrZcAaAsS/eA1yro5ygHw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/sync": "^0.4.13", - "@wordpress/undo-manager": "^0.2.13", - "@wordpress/url": "^3.43.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/sync": "^0.12.0", + "@wordpress/undo-manager": "^0.10.0", + "@wordpress/url": "^3.51.0", "change-case": "^4.1.2", "equivalent-key-map": "^0.2.2", "fast-deep-equal": "^3.1.3", @@ -38947,126 +38169,143 @@ } }, "@wordpress/customize-widgets": { - "version": "4.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-4.19.16.tgz", - "integrity": "sha512-UK4RrEBFwdn8WcY7qXXbRcncuWXLMpB9gjiBVhwPmM5m1//A0wsOQu2kAkZeACuhYoEJ/N6g4yZh2ZnldJVR3w==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-4.27.1.tgz", + "integrity": "sha512-iRKhFIT98NI2p7Ga25YiMI9A0FOm0vWyq2vwd3/Qahm5wOlBmOJHRxAOhnY7MRWhqZQE8a9Mb63o/7Kupct0tw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/block-library": "^8.19.16", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interface": "^5.19.14", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/widgets": "^3.19.14", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/block-library": "^8.27.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interface": "^5.27.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/widgets": "^3.27.1", "classnames": "^2.3.1", "fast-deep-equal": "^3.1.3" } }, "@wordpress/data": { - "version": "9.12.13", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.12.13.tgz", - "integrity": "sha512-8SIsPFrnQ1LIZRWseOF+9uQ9thy8oB7NSOq+bkRCo+qldagooBTZUFp8Y++evFbPOotmTy6XGSPYf7HV9qBHVw==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.20.0.tgz", + "integrity": "sha512-3cm2te6NUj/X1zzmRO+WhueCanjocniX6sJFVzkg5mGXme6wFI8iSOnGPKlMkGcZGd0fVei1ydBKaIUMjrPBTQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/compose": "^6.19.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/is-shallow-equal": "^4.42.13", - "@wordpress/priority-queue": "^2.42.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/redux-routine": "^4.42.13", + "@wordpress/compose": "^6.27.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/is-shallow-equal": "^4.50.0", + "@wordpress/priority-queue": "^2.50.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/redux-routine": "^4.50.0", "deepmerge": "^4.3.0", "equivalent-key-map": "^0.2.2", "is-plain-object": "^5.0.0", "is-promise": "^4.0.0", "redux": "^4.1.2", "rememo": "^4.0.2", - "turbo-combine-reducers": "^1.0.2", "use-memo-one": "^1.1.1" } }, "@wordpress/data-controls": { - "version": "3.11.13", - "resolved": "https://registry.npmjs.org/@wordpress/data-controls/-/data-controls-3.11.13.tgz", - "integrity": "sha512-BW7yBPePnS5SVMVTTWeHG1U4RwV4X46NVOvX4/Vvq8CBjLmvqbiXZZxLMYI4xBi1y6+XRDjORHXP3WMJzwTdEg==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@wordpress/data-controls/-/data-controls-3.19.0.tgz", + "integrity": "sha512-ceUK8kB8r8s8XFYlYWGVLuaoDJx5IAXND6q7B6MX1gKndqnSNi1766Q9iAEwOT9eVMai0lDLNq7mdK2ktVh4bw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13" + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0" + } + }, + "@wordpress/dataviews": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-0.4.0.tgz", + "integrity": "sha512-fVw+VBntjUMBQKhmJnlajw1jyS572D2VNGhD+TXJKk+fshPwpb8oM4Y71g+2V/f9X/DnIn0VmVKPFt3m/CJxVw==", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "^3.50.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/primitives": "^3.48.0", + "@wordpress/private-apis": "^0.32.0", + "classnames": "^2.3.1", + "remove-accents": "^0.5.0" } }, "@wordpress/date": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-4.42.13.tgz", - "integrity": "sha512-SrJL7WbnQwSmogyNiFA+ZKNuECPvneCZOVzC/76DIV7seVDbpdJky/3UAkQLMgvYzym5PK3A8vkENPgAykrh3g==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-4.50.0.tgz", + "integrity": "sha512-FhfaG6YRXWmni66RjwhCB7rQNlLJ05+qTa/jXrj2UNWDNv/sfZ6Ky+b/rKrrUnLaIs9pGiW1195cSxsAS4EY3w==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/deprecated": "^3.42.13", + "@wordpress/deprecated": "^3.50.0", "moment": "^2.29.4", "moment-timezone": "^0.5.40" } }, "@wordpress/dependency-extraction-webpack-plugin": { - "version": "4.25.13", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-4.25.13.tgz", - "integrity": "sha512-ke3CkU9wWgMpAsf5E1zG7aN/pr9P3qdDaIOgU2kXbjSLxrbhgBeK4mCgT/uxCJu0uqaieYkZWRcNmxXKMbF9hw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-5.1.0.tgz", + "integrity": "sha512-W2W+9JNAaGirAtGDSf83pjEKb63DLhgpJGgvMOpEPoRPtucgO6CCm3uMoNkJTpKoxJQ2tSZEymAhF/YdLm+ScQ==", "dev": true, "requires": { - "json2php": "^0.0.7", - "webpack-sources": "^3.2.2" + "json2php": "^0.0.7" } }, "@wordpress/deprecated": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-3.42.13.tgz", - "integrity": "sha512-Jxivx5eTKhjVNW1/rqShM1dzDKm/9wKp9jPlF58uAXpQSIaH8Q09D6Pgzi72DsDyefL8SV/QllLQbo0bVenydg==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-3.50.0.tgz", + "integrity": "sha512-DL01l0Wlo3df9OcSGHP11Ot/nq0HytbdmD+iPkiCCRI6Xctepbs/DzRR2CO3qLrJkWn6RReFwZWZZjzI7lZUqg==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.42.13" + "@wordpress/hooks": "^3.50.0" } }, "@wordpress/dom": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-3.42.13.tgz", - "integrity": "sha512-E7TnWuSOrxY5sn57+6Bf5v7JAL9PmNrOljf8Jj7FDsRdH6tCXf8BDqyIBz53cmzv/bsWOklQKIOeU/BQoEItHw==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-3.50.0.tgz", + "integrity": "sha512-rMnV1ysGOHbKnmjLQYwGkT1co1iEkC3YsKrEObP8mklw1R7rbCy7fc2brIz7kqcHU1DRyg/+7wOCMkg8a/EV/Q==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/deprecated": "^3.42.13" + "@wordpress/deprecated": "^3.50.0" } }, "@wordpress/dom-ready": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-3.42.13.tgz", - "integrity": "sha512-mtqstqT1YFfIGl8rQipG9d8UwvGIZUP4Y8E1Tq3V9CAMV6ChJEYCZIGs/asHjqJSebNnXEWUEzQKAbPnIhnW3Q==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-3.50.0.tgz", + "integrity": "sha512-97tJpat1emXnwfGlJMiG6p37CpHJXDLmM/SIbsGJ0Oj8P4/TXbTuE9DNT1H8B1wKe5zD7kICjp48y91ugmgSrQ==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/e2e-test-utils": { - "version": "10.13.13", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils/-/e2e-test-utils-10.13.13.tgz", - "integrity": "sha512-QibCpLfRW6Stm5BDd1zxc0eqX3uOE1yINPs8K7esUIHL8AqnCPEJUPa86NnOIaA2t8E52f+bhlTxzM7ZsaffoQ==", + "version": "10.21.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils/-/e2e-test-utils-10.21.0.tgz", + "integrity": "sha512-Oh62GkqAKBIyD0IO3/Oa0l42yL/jbpTRDyh8H+t6gZbHWYTDvEGEr/LOqI9bk5Lwk7Jt5jpN6136FDwyMzHSXw==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/url": "^3.43.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/url": "^3.51.0", "change-case": "^4.1.2", "form-data": "^4.0.0", "node-fetch": "^2.6.0" @@ -39086,76 +38325,22 @@ } }, "@wordpress/e2e-test-utils-playwright": { - "version": "0.10.13", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.10.13.tgz", - "integrity": "sha512-5zqIsG6Nn6N0DBlK9GyvYKxUrK7dEBHFInRnIqqfimWAQmz07iBCJU34njs9lQi+/GzKfXS+2XgBI7dDQnbfwQ==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.18.0.tgz", + "integrity": "sha512-Z8uH1dUzy/STQjOU6eb9nquVK4RC1rUx0gXY/GN1IVNDJvGN/yJxT/gNKmfiL7KpmHvNp2Q5M4bnUT9uiNcM+Q==", "dev": true, "requires": { - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/url": "^3.43.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/url": "^3.51.0", "change-case": "^4.1.2", "form-data": "^4.0.0", "get-port": "^5.1.1", "lighthouse": "^10.4.0", - "mime": "^3.0.0" + "mime": "^3.0.0", + "web-vitals": "^3.5.0" }, "dependencies": { - "@wordpress/api-fetch": { - "version": "6.40.0", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.40.0.tgz", - "integrity": "sha512-sNk6vZW02ldci1EpNIjmm61323x/0n2Ra/cDHuehZf8avOH/OV0zF0dXxttT8M9Fncz+XZDSIHopm76dU3Phug==", - "dev": true, - "requires": { - "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.43.0", - "@wordpress/url": "^3.44.0" - } - }, - "@wordpress/hooks": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.43.0.tgz", - "integrity": "sha512-SHSiyFUEsggihl0pDvY1l72q+fHMDyFHtIR3GCt0uV2ifctvoa/PIYdVwrxpGQaGdNEV25XCZ4kNldqJmfTddw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.16.0" - } - }, - "@wordpress/i18n": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.43.0.tgz", - "integrity": "sha512-XHU/vGgI+pgjJU9WzWDHke1u948z8i3OPpKUNdxc/gMcTkKaKM4D8DW1+VMSQHyU6pneP8+ph7EF+1RIehP3lQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.43.0", - "gettext-parser": "^1.3.1", - "memize": "^2.1.0", - "sprintf-js": "^1.1.1", - "tannin": "^1.2.0" - } - }, - "@wordpress/keycodes": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.43.0.tgz", - "integrity": "sha512-B6rYPiKFdQTlnJfm93R+usQnjEODUX/K4+hMvY5ZZOinvxe7KyU/xyFGz7gRrS8WmIEYcJowqSmAlGgVs4XwKQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.43.0", - "change-case": "^4.1.2" - } - }, - "@wordpress/url": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.44.0.tgz", - "integrity": "sha512-QNtTPFg/cGHTJLOvOtQCvCgn5quFQgJml8A88I05o4dyUH/tc92rb8LNXi0qcVz/z4JPrx2g3+Ki8heYellP4A==", - "dev": true, - "requires": { - "@babel/runtime": "^7.16.0", - "remove-accents": "^0.5.0" - } - }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -39176,95 +38361,96 @@ } }, "@wordpress/edit-post": { - "version": "7.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-7.19.16.tgz", - "integrity": "sha512-PK0XVHLrn6Bg47O8sq7UIBykJOJGF2xsbkOjhRVniD+6EYdYifpGYHTC9nHogEfw691xcz+vAqS87D01x3SfEQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-7.27.1.tgz", + "integrity": "sha512-cXwDCU23AbkQhOYueAYN/g5USSX4BBvB2MueAJUc5iusL9boJzowAkkxRoGBBt5KZiSfseTGsHepmtEGG7X0Fg==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/block-library": "^8.19.16", - "@wordpress/blocks": "^12.19.13", - "@wordpress/commands": "^0.13.14", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-commands": "^0.11.14", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/editor": "^13.19.14", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interface": "^5.19.14", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/plugins": "^6.10.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/url": "^3.43.13", - "@wordpress/viewport": "^5.19.13", - "@wordpress/warning": "^2.42.13", - "@wordpress/widgets": "^3.19.14", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/block-library": "^8.27.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-commands": "^0.19.1", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/editor": "^13.27.1", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interface": "^5.27.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/plugins": "^6.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0", + "@wordpress/viewport": "^5.27.0", + "@wordpress/warning": "^2.50.0", + "@wordpress/widgets": "^3.27.1", "classnames": "^2.3.1", "memize": "^2.1.0", "rememo": "^4.0.2" } }, "@wordpress/edit-site": { - "version": "5.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-5.19.16.tgz", - "integrity": "sha512-shraoCd4LCNngtBn9E7U6Na/l+zrU0nTXztgZSuVsqSGktAgHBi7pXMUTsCGqO/vp9fnmW9LU3tQ9XgLEogjkg==", + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-5.27.1.tgz", + "integrity": "sha512-jl8nuCP4BwdI2PiYTQHDxUqXRIdDYV8PpMHkPEXPRrLPe/uJ6YnQqFj4zJb+0sGcDSBcUqEjZwfpd0evnqGiQw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/block-library": "^8.19.16", - "@wordpress/blocks": "^12.19.13", - "@wordpress/commands": "^0.13.14", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-commands": "^0.11.14", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/editor": "^13.19.14", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interface": "^5.19.14", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/patterns": "^1.3.14", - "@wordpress/plugins": "^6.10.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/primitives": "^3.40.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/reusable-blocks": "^4.19.14", - "@wordpress/router": "^0.11.13", - "@wordpress/style-engine": "^1.25.13", - "@wordpress/url": "^3.43.13", - "@wordpress/viewport": "^5.19.13", - "@wordpress/widgets": "^3.19.14", - "@wordpress/wordcount": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/block-library": "^8.27.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-commands": "^0.19.1", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/dataviews": "^0.4.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/editor": "^13.27.1", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interface": "^5.27.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/patterns": "^1.11.1", + "@wordpress/plugins": "^6.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/primitives": "^3.48.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/reusable-blocks": "^4.27.1", + "@wordpress/router": "^0.19.0", + "@wordpress/style-engine": "^1.33.1", + "@wordpress/url": "^3.51.0", + "@wordpress/viewport": "^5.27.0", + "@wordpress/widgets": "^3.27.1", + "@wordpress/wordcount": "^3.50.0", "change-case": "^4.1.2", "classnames": "^2.3.1", "colord": "^2.9.2", "deepmerge": "^4.3.0", - "downloadjs": "^1.4.7", "fast-deep-equal": "^3.1.3", "is-plain-object": "^5.0.0", "memize": "^2.1.0", @@ -39274,75 +38460,77 @@ } }, "@wordpress/edit-widgets": { - "version": "5.19.16", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-5.19.16.tgz", - "integrity": "sha512-1yTkLHQjf/LEmxlw2y0bqgkZcqO2Gs0H8QK1JHEJdHrAK+R5nBd55Jq4Wb2IU+QsUAaGvQzuF+FfHAA4YkLUwQ==", + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-5.27.1.tgz", + "integrity": "sha512-MTiIujW4KGTbJrlyglzIfm19rIVqK+Ny1rcBV8A1AM2rJc2vOjFyzlkGH+MkesrUHu4R4CUwzFyCRrPC/+VImA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/block-library": "^8.19.16", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/interface": "^5.19.14", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/patterns": "^1.3.14", - "@wordpress/plugins": "^6.10.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/reusable-blocks": "^4.19.14", - "@wordpress/url": "^3.43.13", - "@wordpress/widgets": "^3.19.14", - "classnames": "^2.3.1" + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/block-library": "^8.27.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/interface": "^5.27.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/patterns": "^1.11.1", + "@wordpress/plugins": "^6.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/reusable-blocks": "^4.27.1", + "@wordpress/url": "^3.51.0", + "@wordpress/widgets": "^3.27.1", + "classnames": "^2.3.1", + "rememo": "^4.0.2" } }, "@wordpress/editor": { - "version": "13.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-13.19.14.tgz", - "integrity": "sha512-t1RFJl0Bf+qJpBHtiUl0qoxJjpNNGcpSZLejnhR97+i32l/4ewg8+z69zwFtW4ChNQjLnAFnpQZ5pT/CqkkKpQ==", + "version": "13.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-13.27.1.tgz", + "integrity": "sha512-n8DwCqEGqXyPg/+2YBsoaUR9rWbXwB/YexbPdmRwCpWPzxPFDOz/nHBZwez1E24ty50YsBW8NTkXUaarpPkHJQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/date": "^4.42.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/dom": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/keyboard-shortcuts": "^4.19.13", - "@wordpress/keycodes": "^3.42.13", - "@wordpress/media-utils": "^4.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/patterns": "^1.3.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/reusable-blocks": "^4.19.14", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/server-side-render": "^4.19.14", - "@wordpress/url": "^3.43.13", - "@wordpress/wordcount": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/commands": "^0.21.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/date": "^4.50.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/dom": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/keyboard-shortcuts": "^4.27.0", + "@wordpress/keycodes": "^3.50.0", + "@wordpress/media-utils": "^4.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/patterns": "^1.11.1", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/reusable-blocks": "^4.27.1", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/server-side-render": "^4.27.1", + "@wordpress/url": "^3.51.0", + "@wordpress/wordcount": "^3.50.0", "classnames": "^2.3.1", "date-fns": "^2.28.0", "memize": "^2.1.0", @@ -39352,14 +38540,14 @@ } }, "@wordpress/element": { - "version": "5.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.19.13.tgz", - "integrity": "sha512-8VSGNrJkSf0coC2xciFBFodVa6eQOLPKMThVAz1eIDtQwbAcFo9001tjkMXgyhcn/FMoxdhaGGOxg4VeUvgJSw==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.27.0.tgz", + "integrity": "sha512-IA5LTAfx5bDNXULPmctcNb/04i4JcnIReG0RAuPgrZ8lbMZWUxGFymh10PEQjs7ZJ++qGsI6E+6JISpjkRaDQQ==", "requires": { "@babel/runtime": "^7.16.0", "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", - "@wordpress/escape-html": "^2.42.13", + "@wordpress/escape-html": "^2.50.0", "change-case": "^4.1.2", "is-plain-object": "^5.0.0", "react": "^18.2.0", @@ -39367,24 +38555,24 @@ } }, "@wordpress/escape-html": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.42.13.tgz", - "integrity": "sha512-0I7loSc8M1vjqg6vXb6lCumaGzbbAeoI26NEpATcEq24MLgd8+UiidyHII4UNgdloRoq1Jj3e83AjDhFpAVfAg==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.50.0.tgz", + "integrity": "sha512-hBvoMCEZocziZDGCmBanSO+uupnd054mxd7FQ6toQ4UnsZ4JwXSmEC72W2Ed+cRGB1DeJDD0dY9iC0b4xkumsQ==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/eslint-plugin": { - "version": "16.0.13", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-16.0.13.tgz", - "integrity": "sha512-Qk5Y7ifT0lfOOx5RQrEGa/DSw01CP+D2bCKr20SXLt3KDstViBlqjBiI1Yxv7EeS+AvaNbQO5M8Mm4B5mUB3kQ==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-17.7.0.tgz", + "integrity": "sha512-JSFaCogE0WlZpl0SV4q8DK8G6jwDjEzXRzOsgesWilea4OuVp1KxCamkddTorRNM3QAbjrGuPJ4NYaGrNG9QsA==", "dev": true, "requires": { "@babel/eslint-parser": "^7.16.0", "@typescript-eslint/eslint-plugin": "^6.4.1", "@typescript-eslint/parser": "^6.4.1", - "@wordpress/babel-preset-default": "^7.26.13", - "@wordpress/prettier-config": "^2.25.13", + "@wordpress/babel-preset-default": "^7.34.0", + "@wordpress/prettier-config": "^3.7.0", "cosmiconfig": "^7.0.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", @@ -39400,9 +38588,9 @@ }, "dependencies": { "globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -39411,47 +38599,48 @@ } }, "@wordpress/format-library": { - "version": "4.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-4.19.14.tgz", - "integrity": "sha512-NyJ1nmb6PODE5hXM9oOEBlYA48k6c2DlGcUTXkSzDcdLPRVinTeWDfPL4kpze30JcQPv9m6Y5/EfWp48bDnByA==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-4.27.1.tgz", + "integrity": "sha512-+jdmGf8cPk6jCZcndI/kqeaf6YYQCIjBYTgBJsUUOP92HTIDq6pAECH8XqBX2n2V+QX4WirXwBvjkZ5IgjPVvg==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/rich-text": "^6.19.13", - "@wordpress/url": "^3.43.13" + "@wordpress/a11y": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/rich-text": "^6.27.0", + "@wordpress/url": "^3.51.0" } }, "@wordpress/hooks": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.42.13.tgz", - "integrity": "sha512-KITkyj2DhbbBevqLzGx4GCtq8XX/GjkMWe0NP7SkcX9d4rkEdON96eKwwoMUD6keL03Tijg87kIYZAU5Xsr8bA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.50.0.tgz", + "integrity": "sha512-YIhwT1y0ss7Byfz46NBx08EUmXzWMu+g5DCY7FMuDNhwxSEoZMB8edKMiwNmFk4mFKBCnXM1d5FeONUPIUkJwg==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/html-entities": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-3.42.13.tgz", - "integrity": "sha512-015rUF0FOSGXbUBq+sc++vo3UTGZZkl23z7tGxrTTXZG10AjcTVd3oMnpvffJeiBjrtEAJz/gq3QKpFXihvmww==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-3.50.0.tgz", + "integrity": "sha512-DBRgShv6FLtDpapoTgmEx//6uHeq+mk5zKhAWAAqu6+/6LqOm/TCoUTxb0E2xtHh4oRBgU5nYC92pObRaczFdQ==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/i18n": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.42.13.tgz", - "integrity": "sha512-4zYz5BbueJ3c19DYhO7cXf9GF2K5Fysd+c2r0rcE0lr2RqMqmyDdL49930L7XJw+mT4ql8g/8p+i3FOzPCsg9A==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.50.0.tgz", + "integrity": "sha512-FkA2se6HMQm4eFC+/kTWvWQqs51VxpZuvY2MlWUp/L1r1d/dMBHXu049x86+/+6yk3ZNqiK5h6j6Z76dvPHZ4w==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.42.13", + "@wordpress/hooks": "^3.50.0", "gettext-parser": "^1.3.1", "memize": "^2.1.0", "sprintf-js": "^1.1.1", @@ -39459,57 +38648,66 @@ } }, "@wordpress/icons": { - "version": "9.33.13", - "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-9.33.13.tgz", - "integrity": "sha512-4M34sMRIlyL7a3CDRI7rAfysZQm2VW1ptB4aGDf5tVMXd//hCRkj/OGE++AYkTYQNckli9uqhTkv2xoOOw1F6Q==", + "version": "9.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-9.41.0.tgz", + "integrity": "sha512-L4fp9ZdxGBpMk3o2YqABgiPHNoHyu9Enid7JNkCdWP8iUgk7dEiDvo/XoiWPTAeNbF6W8Nqu54635mq01es0NQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/element": "^5.19.13", - "@wordpress/primitives": "^3.40.13" + "@wordpress/element": "^5.27.0", + "@wordpress/primitives": "^3.48.0" } }, "@wordpress/interactivity": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-2.3.13.tgz", - "integrity": "sha512-WNmw/r+G1XllTZwKwpRDFJoGPm8cRztbU+MJhAogKzUOcrCu4Bp8xArroPSzlKr3aUuEquT/3WsWsFmHsSHYjg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-4.0.0.tgz", + "integrity": "sha512-+KIzJVcz5Z0a/CeMBY7DEFsXCeEd+/gDYgQwWY7W7/nUwr5frT4X+i760Yv8J40JN8IMaQeKStcGEcm62C7jjg==", "requires": { - "@preact/signals": "^1.1.3", - "deepsignal": "^1.3.6", - "preact": "^10.13.2" + "@preact/signals": "^1.2.2", + "deepsignal": "^1.4.0", + "preact": "^10.19.3" + } + }, + "@wordpress/interactivity-router": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-1.0.0.tgz", + "integrity": "sha512-q+ulJGYFCX+CGTdGHraZvbpB+jsv0tYSEEV6mWsKU7ujj+NelPa5ngL9XbyGTAOEZqOauWQ/4H3SP9k25u6iQg==", + "requires": { + "@wordpress/interactivity": "^4.0.0" } }, "@wordpress/interface": { - "version": "5.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-5.19.14.tgz", - "integrity": "sha512-WsIsSKJuhAcXD3YbmUoncL1JZ6hKAJXs7Lb/bjrOJxCts/YOy5yMF3/I05r8f1Tfw/pS8wlHMRjIXH/gvnvWVA==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-5.27.0.tgz", + "integrity": "sha512-ZybF4tuuuFOgGsB0n9u5ajrWKf/PYaS8d2yu2T+6ukliLnXI6AMMCXvM534H0VZa7DMLjMYKRXtfs7QqR/p95Q==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/plugins": "^6.10.14", - "@wordpress/preferences": "^3.19.14", - "@wordpress/viewport": "^5.19.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/plugins": "^6.18.0", + "@wordpress/preferences": "^3.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/viewport": "^5.27.0", "classnames": "^2.3.1" } }, "@wordpress/is-shallow-equal": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-4.42.13.tgz", - "integrity": "sha512-C3Pdan4alanyaQJ4Ucg7GZvkgDv7mXQZXe0xIYmKUNCnohS3wcFXmaLE6VGvf3I2OhRz8WLh5uxno/suJ8cyRw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-4.50.0.tgz", + "integrity": "sha512-lX0fMa1f/TwWYYF+Oj0MG2Eze4Bb+vsnhXX6X1l+Ri3PG34wWGonjq729qHbJRDwm8o1y9GeswCgESIpuAm9wg==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/jest-console": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.14.0.tgz", - "integrity": "sha512-o7EZZ+StfLg/qgTRn47O0WY2V1I+xNJCiN13a/fHZtXdRgPJ9qajf7tkDYz+MKPf8MhdMfHhgIr9sQrWhLCzDA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.21.0.tgz", + "integrity": "sha512-o2vZRlwwJ6WoxRwnFFT5iZzfdc2d9MZvrtwB093RWPNcyK5qVtApji4VN/ieHijB4bjEHGalm0UKfKpt0EDlUQ==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", @@ -39517,203 +38715,207 @@ } }, "@wordpress/jest-preset-default": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.14.0.tgz", - "integrity": "sha512-eGenm5xUpPcsgWMSFXYWg+RQlcAZa6zo7sT9bBK8HVIGqORTr3TTtWeHVGFL48UooL5PibUc+GxQdlW97YOwlQ==", + "version": "11.21.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.21.0.tgz", + "integrity": "sha512-XAztKOROu02iBsz+Qosv/RYuPWB1XwwlU+FiA5Y68tRztrqFy4b/il+DFg4Jue/zXF7UECWUvosd5ow/GmKa6Q==", "dev": true, "requires": { - "@wordpress/jest-console": "^7.14.0", + "@wordpress/jest-console": "^7.21.0", "babel-jest": "^29.6.2" } }, "@wordpress/keyboard-shortcuts": { - "version": "4.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-4.19.13.tgz", - "integrity": "sha512-5u/pMERHn1b17d3HqDWWulJp08MLlNG1idsuJiLzbQBrYW3wLPd23fPG1QObUSH/texVDvi/W4/9N4hsbZlXEg==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-4.27.0.tgz", + "integrity": "sha512-mpYhaSAMHXbRMp9hP08LejX/u1nLQaZONhwGSytqIhN1DQwpBbNbmV8ZNm1dnevUsYqEfPVVov6HFyPxYQ6m4w==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/keycodes": "^3.42.13", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/keycodes": "^3.50.0", "rememo": "^4.0.2" } }, "@wordpress/keycodes": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.42.13.tgz", - "integrity": "sha512-3lGlnYj+ky5OOnFjTW6NSxFFeNk/ESUF2Gbhz888HV+QF55SPvRfb+G7kjAzxRomIpdwACYsn80PdqabxLVqgw==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.50.0.tgz", + "integrity": "sha512-ykWpyCbgwcaT8i5kSfotYtd2oOHyMDpWEYR73InYrzEhl7pnS3wD7hi/KfeKLvMfYhbysUXlCVr6q/oH+qK/DQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.42.13", - "change-case": "^4.1.2" + "@wordpress/i18n": "^4.50.0" } }, "@wordpress/list-reusable-blocks": { - "version": "4.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-4.19.14.tgz", - "integrity": "sha512-GuorU374D0Ft7RtIZWWc7ltIkV3ThjU/u+LwbNzh5y7iaVs4l64qvqopqoj/IoRVdahpnLEO3MNxj9InlUiNeg==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-4.27.0.tgz", + "integrity": "sha512-szDQnIdU34yIvNel+Kk1oBOugiqwXNm4jF77T90kaWB/SIQFW80CFYoIjIYQc63r9v3wi0D483KpXoci1AUSeQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", "change-case": "^4.1.2" } }, "@wordpress/media-utils": { - "version": "4.33.13", - "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-4.33.13.tgz", - "integrity": "sha512-+QJvDbBEtjMC6V2kJ04dEZkmElDneueW6HxGcx9lD786N0pcHwHZCnY9mLN+Tg/2f6Y8/9u0emvbFFuX0FLE8w==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-4.41.0.tgz", + "integrity": "sha512-wCxk8DAhmZ/3/a+oPRrieGurMOKDrYoDnnA0jhTm2D45kvn9y+NfnNBvLo2q1Is1ZiVTtNq54IRUXcdOjZgR9A==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/blob": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13" + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blob": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0" } }, "@wordpress/notices": { - "version": "4.10.13", - "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-4.10.13.tgz", - "integrity": "sha512-6U0im51yJFXLLMzL6zZ+eyeJIeY2cyiUCDdziJSI1ZrsfV2ml9o4nB3EYYOxZBaVvJg66vY3wIQ/osMFwTW6xg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-4.18.0.tgz", + "integrity": "sha512-Y2XpY6niJ7NuqPBtGYvDYSPCfw/y4yxv60ahu1kYd8r5BamKSchTYwKSnV0yrx/IUfNO04VAsNq9NCUQG12pRA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/data": "^9.12.13" + "@wordpress/a11y": "^3.50.0", + "@wordpress/data": "^9.20.0" } }, "@wordpress/npm-package-json-lint-config": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.28.0.tgz", - "integrity": "sha512-lxrs1F4scwDuF8AJLK+SHtLWuhRVjzvl8EW/++ZQWRt7op99m41QQUqUwwCQC09cDcYlGddXeAczRijx5eLREg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.35.0.tgz", + "integrity": "sha512-QmkhYM4/s+2r3RuolVRRmoUa5o3lFgcHA6I3A9akaSVGZr//4p2p+iXOGmNub9njgGlj7j8SAPN8GUsCO/VqZQ==", "dev": true }, "@wordpress/nux": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-8.4.14.tgz", - "integrity": "sha512-JcxUtWOzl7lTuv39BWRwzwPDvVEhFECGzK819i3kExbTjmsVHCHtsdB7khPrdAYZOm2GXzR1le+/UFfkGuHS2Q==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-8.12.0.tgz", + "integrity": "sha512-fMnm9f+lmaCV5YoRHjqQNVU0P+FxthY8Lt84ZW1owlPjpJqdYZX/bKtp+bfWFgR3/Th26/uO4WxZqQzj8V1Pjg==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", "rememo": "^4.0.2" } }, "@wordpress/patterns": { - "version": "1.3.14", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-1.3.14.tgz", - "integrity": "sha512-eaZWZlaF/MlxqDY7KYzL8cApY4b4f89wuqHVSmjv52UfvaqxW0vd09ddX+jwkcXysDHFzwM63takIIVZwYn9Lg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-1.11.1.tgz", + "integrity": "sha512-fC05YOVXcCJA5iAqxgkoMuDR01TcOCgIBYuQdoLgmYMowaV060CHf4qRh79J7979ed/WHjg2UQR6sA5eJx+Z+Q==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/html-entities": "^3.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/url": "^3.43.13" + "@wordpress/a11y": "^3.50.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/html-entities": "^3.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0", + "nanoid": "^3.3.4" } }, "@wordpress/plugins": { - "version": "6.10.14", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-6.10.14.tgz", - "integrity": "sha512-Duxh0OxpSuUFTMHa500iitrD21/JeTklc8/Hf3ApCpn4SdDzFR4IrwUdoJk0jGDY79cTwBVeWts5GhObbJByng==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-6.18.0.tgz", + "integrity": "sha512-m2BRJ5BApIMwT2Ck5E5yD8pS3RiIoOvWhzsYWrRqRfwjRhc6K46BreCbkiHgduBaFgzDIWpujlUHkYtdl27RoQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/element": "^5.19.13", - "@wordpress/hooks": "^3.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/is-shallow-equal": "^4.42.13", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/element": "^5.27.0", + "@wordpress/hooks": "^3.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/is-shallow-equal": "^4.50.0", "memize": "^2.0.1" } }, "@wordpress/postcss-plugins-preset": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.27.0.tgz", - "integrity": "sha512-4hk8UWfJvv21u/Et0NypfR1r22LVWGXMit3QM0MD7d6XQ4dNNbzqW2c9TfM36SdcR9KY5PZ8d5V1IrkheNUb/w==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.34.0.tgz", + "integrity": "sha512-OLQBSLE2q11Ik+WdcO2QfGr/O4X/zJYOGXNsychx/EaMamLzJInFcRL6kGbPX41zPINhadq5x2vFIZI2EC+Uyg==", "dev": true, "requires": { - "@wordpress/base-styles": "^4.34.0", + "@wordpress/base-styles": "^4.41.0", "autoprefixer": "^10.2.5" } }, "@wordpress/preferences": { - "version": "3.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-3.19.14.tgz", - "integrity": "sha512-xLu+G22Vlm4KajE/Eimq8qLzBoxMZ7BJLp8WobFC3yyzdU9R785dug9t9et4r45NxWJr8aVWkFzhEBzAadHjnA==", + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-3.27.0.tgz", + "integrity": "sha512-LMhOHX5FI4CJHv2YhtpiEtHfLqL/pjKAMja/v7skkHPlrh64Sgzi/gep016/My5SjcR64JUD1Na2U2j/BnrBNQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/components": "^25.8.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/private-apis": "^0.32.0", "classnames": "^2.3.1" } }, "@wordpress/preferences-persistence": { - "version": "1.34.13", - "resolved": "https://registry.npmjs.org/@wordpress/preferences-persistence/-/preferences-persistence-1.34.13.tgz", - "integrity": "sha512-23bUN1WdJ9mtfU51uoPBrSwbYHaW2zG+HDlH+leZURdPe48jbWSA8LRPwni5z3Kc9zh8D0vXkvt0hg1/RcNgUQ==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@wordpress/preferences-persistence/-/preferences-persistence-1.42.0.tgz", + "integrity": "sha512-n/VBhZHUEXWoBGsvHUf5uq6b872Lzn+cenfB2ex/etcWLXiVUkEl3rlzocyS50g2YoNQg/zQOn1hoSh+AgCm8Q==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13" + "@wordpress/api-fetch": "^6.47.0" } }, "@wordpress/prettier-config": { - "version": "2.25.13", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-2.25.13.tgz", - "integrity": "sha512-iz58o0X91E24j0VFtzwn5qG84w+s4VlRCuZWa/lPL6pfGtOSw30c60wCrYKCA1IWIIAWdpRAYfEh7errPyKiPQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-3.7.0.tgz", + "integrity": "sha512-JRTc5p7UxtcPkqdSDXSFJoJnVuS510uiRVz8anXEl5nuOx5p+SJAzi9QPrxTgOE8bN3wRABH4eIhfOcta4CFdg==", "dev": true }, "@wordpress/primitives": { - "version": "3.40.13", - "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-3.40.13.tgz", - "integrity": "sha512-dYYrPceV8w78AHJfPe5wkxnT7P0tG/4yDcr9/HvznFHkzQFnW8kG8Nci20RV/+ENxfNiuWqfWyICI2y7myIoGw==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-3.48.0.tgz", + "integrity": "sha512-uBoMxpl+FiZF6aRXH/+Hwol4EAL6QqlNSaGF1IzEwklFzdRF1m5wTM4vh21w8Bq7lgxiuAqyueY7X5u32v+zPw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/element": "^5.19.13", + "@wordpress/element": "^5.27.0", "classnames": "^2.3.1" } }, "@wordpress/priority-queue": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-2.42.13.tgz", - "integrity": "sha512-vrkjBcJnuzhpfWLFF4LfdNVrM3s73KW3KOZBTuN6oizJVYKyQaaPSLmDdORuXFc017MMasO5N/fYk/qJyll5bg==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-2.50.0.tgz", + "integrity": "sha512-21E842EVFYUd1ZrNTLAW57IyloDCUZr6h1Te6BgqKoeKOEteoTQwA9BemMzZJUiThUSZymW94ot0Omb+C8VX2g==", "requires": { "@babel/runtime": "^7.16.0", "requestidlecallback": "^0.3.0" } }, "@wordpress/private-apis": { - "version": "0.24.13", - "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.24.13.tgz", - "integrity": "sha512-RgvGB6VQpPnEGU8Y61tzpgPFYDRAW28+2gcdOXYiqSVdZfGBL6+hBs5bMbLSJYRU9G5pl5q4Eb0lHlkMgHW5FA==", + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.32.0.tgz", + "integrity": "sha512-P7nxI/bGMDQhtlTfSe1Y2SDfrd20K5UMnTHbq+hmIkzBGRpNPbdGeNu2bZaZtIvmXk1OCR0Fkef+e6QqkOfYPg==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/redux-routine": { - "version": "4.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-4.42.13.tgz", - "integrity": "sha512-R+8W8CcjhHXPRlfPCdtElO2lsZzObR6DWvO49BjfJcKs0QPvKaO3ofjsadRgv+gg1+nXiE7rH6LmHbZ4eLanGw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-4.50.0.tgz", + "integrity": "sha512-giHjQYhmFDCpeNEnsZKP0JNPBnpuQwsoxLmHAUUSNFWAmd4rtnNnG6M8HuqOLmgYTvEa8Hlx3Bl+reTGvrtI2g==", "requires": { "@babel/runtime": "^7.16.0", "is-plain-object": "^5.0.0", @@ -39722,77 +38924,77 @@ } }, "@wordpress/reusable-blocks": { - "version": "4.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-4.19.14.tgz", - "integrity": "sha512-WhQNDtq2ohGlGlodNyEbvMux631D+7jRABwodvoC42dVJyHR3lH1O8uhnQeKyPl91YWLxJ6+mHmrPInEo2fAcQ==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-4.27.1.tgz", + "integrity": "sha512-Q+mzjIZqoSLwFihpQzn4kApxj3/Rp+vLDPc2cUm41+L6belpSqXxvxrcB5gr/wjStTQKCLzZRptgvt/fG90OdQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/notices": "^4.10.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/url": "^3.43.13" + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/notices": "^4.18.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0" } }, "@wordpress/rich-text": { - "version": "6.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.19.13.tgz", - "integrity": "sha512-7kCbTLiy+dIOToBktkrftCfVLsqCN0dY9uE6rz/TRsKS6+pnF6fUhqHLBV5OFf0tttKjHykSj5ixFDejqWCvrQ==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.27.0.tgz", + "integrity": "sha512-B7t++SldcI4nb+lO2m9oEdyD8y2FbH5DKY5F2G3xpcEnw4EKSt4SsTzeclMQ/2zzlEHPRKU/IR29SeOIJ1H8JQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/a11y": "^3.42.13", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/escape-html": "^2.42.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/keycodes": "^3.42.13", + "@wordpress/a11y": "^3.50.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/escape-html": "^2.50.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/keycodes": "^3.50.0", "memize": "^2.1.0", "rememo": "^4.0.2" } }, "@wordpress/router": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-0.11.13.tgz", - "integrity": "sha512-OZyuFOuX6nW5fQ1kq250EqCCA1Ad6KSH0wlaC68kCF06VFft2JNiATba7rC9Uq3ozM9HjPCtkbJ1dAW4PQdS1g==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-0.19.0.tgz", + "integrity": "sha512-S2z4WrgrfMNAl6amIjekGV1V6XGnjolYmRgUH/VTN45CQUV/o5ABo04xI/L3uvUnaRpH022n/yQX5H1p1kKhdA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/element": "^5.19.13", - "@wordpress/private-apis": "^0.24.13", - "@wordpress/url": "^3.43.13", + "@wordpress/element": "^5.27.0", + "@wordpress/private-apis": "^0.32.0", + "@wordpress/url": "^3.51.0", "history": "^5.1.0" } }, "@wordpress/scripts": { - "version": "26.13.13", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-26.13.13.tgz", - "integrity": "sha512-G2K56PmjRPI0ddgmrnopp3AVMLACqfrFvz+NyGbYCPWQoYL3xnphrS+w3uPwuxcuBtgR34yr+xCvrMnJsY3Wag==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-27.1.0.tgz", + "integrity": "sha512-jewyOxqaNrsct5R1NXv2lT8CA70vzrvpdZHYERCcH9LzKuvrcc32Telm9Jqso6ay1ZgHeIbjHSCd2+r2sBG7hw==", "dev": true, "requires": { "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.2", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", "@svgr/webpack": "^8.0.1", - "@wordpress/babel-preset-default": "^7.26.13", - "@wordpress/browserslist-config": "^5.25.13", - "@wordpress/dependency-extraction-webpack-plugin": "^4.25.13", - "@wordpress/e2e-test-utils-playwright": "^0.10.13", - "@wordpress/eslint-plugin": "^16.0.13", - "@wordpress/jest-preset-default": "^11.13.13", - "@wordpress/npm-package-json-lint-config": "^4.27.13", - "@wordpress/postcss-plugins-preset": "^4.26.13", - "@wordpress/prettier-config": "^2.25.13", - "@wordpress/stylelint-config": "^21.25.13", + "@wordpress/babel-preset-default": "^7.34.0", + "@wordpress/browserslist-config": "^5.33.0", + "@wordpress/dependency-extraction-webpack-plugin": "^5.1.0", + "@wordpress/e2e-test-utils-playwright": "^0.18.0", + "@wordpress/eslint-plugin": "^17.7.0", + "@wordpress/jest-preset-default": "^11.21.0", + "@wordpress/npm-package-json-lint-config": "^4.35.0", + "@wordpress/postcss-plugins-preset": "^4.34.0", + "@wordpress/prettier-config": "^3.7.0", + "@wordpress/stylelint-config": "^21.33.0", "adm-zip": "^0.5.9", "babel-jest": "^29.6.2", "babel-loader": "^8.2.3", - "browserslist": "^4.21.9", + "browserslist": "^4.21.10", "chalk": "^4.0.0", "check-node-version": "^4.1.0", "clean-webpack-plugin": "^3.0.0", @@ -39807,7 +39009,7 @@ "fast-glob": "^3.2.7", "filenamify": "^4.2.0", "jest": "^29.6.2", - "jest-dev-server": "^6.0.2", + "jest-dev-server": "^9.0.1", "jest-environment-jsdom": "^29.6.2", "jest-environment-node": "^29.6.2", "markdownlint-cli": "^0.31.1", @@ -39816,12 +39018,12 @@ "minimist": "^1.2.0", "npm-package-json-lint": "^6.4.0", "npm-packlist": "^3.0.0", - "playwright-core": "1.32.0", + "playwright-core": "1.39.0", "postcss": "^8.4.5", "postcss-loader": "^6.2.1", - "prettier": "npm:wp-prettier@3.0.3-beta-3", + "prettier": "npm:wp-prettier@3.0.3", "puppeteer-core": "^13.2.0", - "react-refresh": "^0.10.0", + "react-refresh": "^0.14.0", "read-pkg-up": "^7.0.1", "resolve-bin": "^0.4.0", "sass": "^1.35.2", @@ -39830,12 +39032,103 @@ "stylelint": "^14.2.0", "terser-webpack-plugin": "^5.3.9", "url-loader": "^4.1.1", - "webpack": "^5.47.1", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-cli": "^4.9.1", - "webpack-dev-server": "^4.4.0" - }, - "dependencies": { + "webpack": "^5.88.2", + "webpack-bundle-analyzer": "^4.9.1", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^4.15.1" + }, + "dependencies": { + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", + "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -39991,16 +39284,16 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "prettier": { - "version": "npm:wp-prettier@3.0.3-beta-3", - "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3-beta-3.tgz", - "integrity": "sha512-R3+TD7j0rnqEpMgylrUrHdi1W6ypwh4QGeFOZQ9YjP9WvNnZzBAS71yry1h7xIcG/bVaNKBCoWNqbqJY6vkOKQ==", + "playwright-core": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", "dev": true }, - "react-refresh": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.10.0.tgz", - "integrity": "sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==", + "prettier": { + "version": "npm:wp-prettier@3.0.3", + "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3.tgz", + "integrity": "sha512-X4UlrxDTH8oom9qXlcjnydsjAOD2BmB6yFmvS4Z2zdTzqqpRWb+fbqrH412+l+OUXmbzJlSXjlMFYPgYG12IAA==", "dev": true }, "read-pkg-up": { @@ -40032,6 +39325,12 @@ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, "source-map-loader": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", @@ -40061,45 +39360,45 @@ } }, "@wordpress/server-side-render": { - "version": "4.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-4.19.14.tgz", - "integrity": "sha512-As3Xc3TDM0R0siAFaldobRdZnPfQQMXvlQxalFJgs/kSoYOmcdc46mR5Wgmfn7r0Kc/Z5uOHLbvm4mWekE0a2A==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-4.27.1.tgz", + "integrity": "sha512-hovofyT0z75NSK/CSkkSbbTdkq9Afc1MKbEVGXTGpqq5sKOa7IAcxWjzmh8byTgT8x7GEaAyHZUr31p4l0CGnQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/deprecated": "^3.42.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/url": "^3.43.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/deprecated": "^3.50.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/url": "^3.51.0", "fast-deep-equal": "^3.1.3" } }, "@wordpress/shortcode": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-3.42.13.tgz", - "integrity": "sha512-pq+xdRdND7vEuqskPoZx+VAOHsmatqHcox3dElFU5lxlx/3fvKC7NIrFCn+glxFGGxO5hY5JfUOC70x8tm7uMA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-3.50.0.tgz", + "integrity": "sha512-RnlqS2OsNUaI6VOLwyUiaL3trAJcWjtoiW21BjIXODbTkEreRJgBJnch7wdFpGimJmKIWBwRD8jQ4hdTND8xVw==", "requires": { "@babel/runtime": "^7.16.0", "memize": "^2.0.1" } }, "@wordpress/style-engine": { - "version": "1.25.13", - "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-1.25.13.tgz", - "integrity": "sha512-4ixhGNVNrtt6zppLWnPCKSl4O4X+TO48PbLEbLDvN2NvUK1Yp1wChiX+NFIBa1dJp1zDlrxaTjttCqC1bs3MUA==", + "version": "1.33.1", + "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-1.33.1.tgz", + "integrity": "sha512-mkur1jw3Trz76iwxU6DalTFsJyF5P/NTdU9xniMT8bo1H9HspgKrzqXAaxkTL9F9BXkyiYs+ctVekJYRUKlgcw==", "requires": { "@babel/runtime": "^7.16.0", "change-case": "^4.1.2" } }, "@wordpress/stylelint-config": { - "version": "21.26.0", - "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.26.0.tgz", - "integrity": "sha512-xTnvoNk9aCdRl1ntBxnmhdmghwzRNurp5Y9LjUCwrYutxnj8t/CCKhPyjgIgHxz+RwKgnpGKupKLVvuHxu1CzQ==", + "version": "21.33.0", + "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.33.0.tgz", + "integrity": "sha512-DwjXrjRBva0tkYILvDV7rjl3VaKXxvchlxnFfFs6l2DWL/Qo31CJ+f2rVw4XSWuuWxY1EsyIn9tOBS9URloWTQ==", "dev": true, "requires": { "stylelint-config-recommended": "^6.0.0", @@ -40107,82 +39406,88 @@ } }, "@wordpress/sync": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-0.4.13.tgz", - "integrity": "sha512-3Lq7MENUpCaSvR6WOLOovNmRMXGmFcdnbMjSZlHh0sx3ycWbKpXlGyfQWJ20MZRiO/qTOOrj4VW4GejqqJSEZw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-0.12.0.tgz", + "integrity": "sha512-45gU1Gu/ys3zqYO4dDQf6eG5gGgJK9nXa62IUtUWFXIH4FN29XlvGppMVK/zzhJwejF/XnDuT7mQuVEFCZGswA==", "requires": { "@babel/runtime": "^7.16.0", + "@types/simple-peer": "^9.11.5", + "@wordpress/url": "^3.51.0", + "import-locals": "^2.0.0", + "lib0": "^0.2.42", + "simple-peer": "^9.11.0", "y-indexeddb": "~9.0.11", + "y-protocols": "^1.0.5", "y-webrtc": "~10.2.5", "yjs": "~13.6.6" } }, "@wordpress/token-list": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-2.42.13.tgz", - "integrity": "sha512-eAKU/5U7c/Acqcqnurpp79lrwCAm+Tb8PfSBTmtGs1fJsR1xtJh4d6IZw5MLDFiqLuVRT65ec3T4Sjqb6N4CMQ==", + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-2.50.0.tgz", + "integrity": "sha512-LTjXkoljQpJIHqs0isTUzIc1fMu68y0N9HcDIdsCMGkmKptWUCETtb+DItnraxDDLuyWNuTYf840S83a3XAVRA==", "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/undo-manager": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.2.13.tgz", - "integrity": "sha512-SFIYRs65GEjr0eeh7BZcETaH32qQVm78aFMZXnYTHzBmTXxoJ98XRgEGWXRJU92RXBcjom+1gARKChJoV5dlNw==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.10.0.tgz", + "integrity": "sha512-ODDqAL6BSvD+J7FV+sQTAaVHiPChh/4KBnKg8pb2ogg+Weq6VynthxDxGpQnN8FcMKB9ZoyS3SNIl8pVXLKIwA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/is-shallow-equal": "^4.42.13" + "@wordpress/is-shallow-equal": "^4.50.0" } }, "@wordpress/url": { - "version": "3.43.13", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.43.13.tgz", - "integrity": "sha512-GrIkGZoCgd+87CyAjgGzShoI6m/Kvknmc6syqrN34J1LdrEE+vPNMjM+NvUVvyPdvgG7/iFzRM8D/ZEUvaTm9A==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.51.0.tgz", + "integrity": "sha512-OjucjlP1763gfKbe8lv/k3RCisyX8AfNBrhASk7JqxAj6rFhb1ZZO7YmAgB2m+WoGB5v7fkOli0FZyDqISdYyg==", "requires": { "@babel/runtime": "^7.16.0", "remove-accents": "^0.5.0" } }, "@wordpress/viewport": { - "version": "5.19.13", - "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-5.19.13.tgz", - "integrity": "sha512-xYWTcaQLhZrDZA0lpl9TivbU4RPw+CUfuRc3NEBiQY0GDDfuLe8n1Pb9AkmAP5PLNyxZhHjKLBGojfchOGhzdg==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-5.27.0.tgz", + "integrity": "sha512-ET8X3Ln0K6wrBba+u0AjBD/mP02SuvwhK/EVaI3uAhNlGnkx+J3PdtShbu63lHmp0SG+J27CDjEqfcZ6CdAnfA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/compose": "^6.19.13", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13" + "@wordpress/compose": "^6.27.0", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0" } }, "@wordpress/warning": { - "version": "2.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.42.13.tgz", - "integrity": "sha512-SYi37xiR7Wq4Vde4JBkCYJIyfUQzyuABrwh7aon1XwcUhWP072tv4/LKP6F+zWYC5M8pPdRqjznxgwZ2mNzcyw==" + "version": "2.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.50.0.tgz", + "integrity": "sha512-y7Zf48roDfiPgbRAWGXDwN3C8sfbEdneGq+HvXCW6rIeGYnDLdEkpX9i7RfultkFFPVeSP3FpMKVMkto2nbqzA==" }, "@wordpress/widgets": { - "version": "3.19.14", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-3.19.14.tgz", - "integrity": "sha512-nFyXrCBVp24joFa96sAdNwkWnnf23t960ebnoW+Wk+lMT0PsGfGjiMIRmtks2cfqbQuQYFdO/8go+DSE54ekAg==", + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-3.27.1.tgz", + "integrity": "sha512-KrN24nN4B5nNnzV572yeEQnvqf2p3rKBjA9mTSK7Ei5nY1yvuFQn/LxiihbqqSJikliEMkh/cZ152JvIx5j6JA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/api-fetch": "^6.39.13", - "@wordpress/block-editor": "^12.10.14", - "@wordpress/blocks": "^12.19.13", - "@wordpress/components": "^25.8.14", - "@wordpress/compose": "^6.19.13", - "@wordpress/core-data": "^6.19.14", - "@wordpress/data": "^9.12.13", - "@wordpress/element": "^5.19.13", - "@wordpress/i18n": "^4.42.13", - "@wordpress/icons": "^9.33.13", - "@wordpress/notices": "^4.10.13", + "@wordpress/api-fetch": "^6.47.0", + "@wordpress/block-editor": "^12.18.1", + "@wordpress/blocks": "^12.27.1", + "@wordpress/components": "^25.16.0", + "@wordpress/compose": "^6.27.0", + "@wordpress/core-data": "^6.27.1", + "@wordpress/data": "^9.20.0", + "@wordpress/element": "^5.27.0", + "@wordpress/i18n": "^4.50.0", + "@wordpress/icons": "^9.41.0", + "@wordpress/notices": "^4.18.0", "classnames": "^2.3.1" } }, "@wordpress/wordcount": { - "version": "3.42.13", - "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-3.42.13.tgz", - "integrity": "sha512-yapganGNO/9JjfWTcMNECjIOKlnLOJR2VTh4UFBL/lSi2GM1AE7bjnXsV2pD0H/3mwdhAomRCUV6BA3nG5UUfA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-3.50.0.tgz", + "integrity": "sha512-lRfIX3B9ha//bqsUihym2BnOiAsdDQr22vdy0wZIpm5G2tFvTddCKHy0YClf52IJK0z61WqbNuF9hrvzWWxL+g==", "requires": { "@babel/runtime": "^7.16.0" } @@ -40219,23 +39524,6 @@ "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - } } }, "acorn": { @@ -40500,9 +39788,9 @@ "optional": true }, "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "array-includes": { @@ -40731,12 +40019,27 @@ "dev": true }, "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dev": true, "requires": { - "follow-redirects": "^1.14.7" + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "axobject-query": { @@ -41049,12 +40352,6 @@ "tweetnacl": "^0.14.3" } }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -41464,13 +40761,11 @@ "integrity": "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==" }, "bonjour-service": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", - "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -41481,15 +40776,6 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "requires": { - "big-integer": "^1.6.44" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -41612,15 +40898,6 @@ "semver": "^7.0.0" } }, - "bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "requires": { - "run-applescript": "^5.0.0" - } - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -42266,9 +41543,9 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "colors": { @@ -42447,22 +41724,12 @@ } }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "optional": true, "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - } + "safe-buffer": "5.2.1" } }, "content-type": { @@ -42599,9 +41866,9 @@ } }, "core-js-pure": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", - "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.1.tgz", + "integrity": "sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==", "dev": true }, "core-js-url-browser": { @@ -43055,6 +42322,12 @@ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true }, + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -43317,138 +42590,9 @@ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" }, "deepsignal": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/deepsignal/-/deepsignal-1.3.6.tgz", - "integrity": "sha512-yjd+vtiznL6YaMptOsKnEKkPr60OEApa+LRe+Qe6Ile/RfCOrELKk/YM3qVpXFZiyOI3Ng67GDEyjAlqVc697g==" - }, - "default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "requires": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - } - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - } - } - }, - "default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "requires": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - } + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/deepsignal/-/deepsignal-1.4.0.tgz", + "integrity": "sha512-x0XUMT48s+xQRLc2fPFfxnYLCJ46vffw47OQ5NcHFzacOjfW5eA0NrEmI0bhQHL6MgUHkBVT4TIiWTVwzTEwpg==" }, "default-gateway": { "version": "6.0.3", @@ -43738,16 +42882,10 @@ "path-type": "^4.0.0" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "requires": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -43919,11 +43057,6 @@ } } }, - "downloadjs": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz", - "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==" - }, "downshift": { "version": "6.1.12", "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.12.tgz", @@ -44067,9 +43200,9 @@ "dev": true }, "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", "dev": true }, "equivalent-key-map": { @@ -44570,9 +43703,9 @@ } }, "eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "requires": { "array-includes": "^3.1.7", @@ -44591,7 +43724,7 @@ "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "dependencies": { "debug": { @@ -44621,9 +43754,9 @@ } }, "eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "27.6.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz", + "integrity": "sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.10.0" @@ -44695,9 +43828,9 @@ } }, "eslint-plugin-jsdoc": { - "version": "46.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.9.0.tgz", - "integrity": "sha512-UQuEtbqLNkPf5Nr/6PPRCtr9xypXY+g8y/Q7gPa0YK7eDhh0y2lWprXRnaYbW7ACgIUvpDKy9X2bZqxtGzBG9Q==", + "version": "46.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", + "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", "dev": true, "requires": { "@es-joy/jsdoccomment": "~0.41.0", @@ -44708,7 +43841,7 @@ "esquery": "^1.5.0", "is-builtin-module": "^3.2.1", "semver": "^7.5.4", - "spdx-expression-parse": "^3.0.1" + "spdx-expression-parse": "^4.0.0" }, "dependencies": { "escape-string-regexp": { @@ -44716,6 +43849,16 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true + }, + "spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } } } }, @@ -44758,13 +43901,13 @@ "dev": true }, "eslint-plugin-prettier": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", - "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "synckit": "^0.8.6" } }, "eslint-plugin-react": { @@ -45184,21 +44327,6 @@ "vary": "~1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -45942,6 +45070,12 @@ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -45970,9 +45104,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "dev": true }, "for-each": { @@ -46109,9 +45243,9 @@ } }, "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", "dev": true }, "fs.realpath": { @@ -47501,6 +46635,13 @@ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "requires": { "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } } }, "homedir-polyfill": { @@ -47993,6 +47134,11 @@ "resolve-cwd": "^3.0.0" } }, + "import-locals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-locals/-/import-locals-2.0.0.tgz", + "integrity": "sha512-1/bPE89IZhyf7dr5Pkz7b4UyVXy5pEt7PTEfye15UEn3AK8+2zwcDCfKk9Pwun4ltfhOSszOrReSsFcDKw/yoA==" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -48132,9 +47278,9 @@ } }, "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true }, "intl-messageformat": { @@ -48178,9 +47324,9 @@ "dev": true }, "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "dev": true }, "irregular-plurals": { @@ -48400,23 +47546,6 @@ "is-extglob": "^2.1.1" } }, - "is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "requires": { - "is-docker": "^3.0.0" - }, - "dependencies": { - "is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true - } - } - }, "is-jpg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", @@ -49299,18 +48428,18 @@ } }, "jest-dev-server": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-6.2.0.tgz", - "integrity": "sha512-ZWh8CuvxwjhYfvw4tGeftziqIvw/26R6AG3OTgNTQeXul8aZz48RQjDpnlDwnWX53jxJJl9fcigqIdSU5lYZuw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-9.0.2.tgz", + "integrity": "sha512-Zc/JB0IlNNrpXkhBw+h86cGrde/Mey52KvF+FER2eyrtYJTHObOwW7Iarxm3rPyTKby5+3Y2QZtl8pRz/5GCxg==", "dev": true, "requires": { "chalk": "^4.1.2", "cwd": "^0.10.0", "find-process": "^1.4.7", "prompts": "^2.4.2", - "spawnd": "^6.2.0", + "spawnd": "^9.0.2", "tree-kill": "^1.2.2", - "wait-on": "^6.0.1" + "wait-on": "^7.2.0" }, "dependencies": { "ansi-styles": { @@ -49354,9 +48483,9 @@ "dev": true }, "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -49372,16 +48501,16 @@ } }, "wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", + "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", "dev": true, "requires": { - "axios": "^0.25.0", - "joi": "^17.6.0", + "axios": "^1.6.1", + "joi": "^17.11.0", "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" + "minimist": "^1.2.8", + "rxjs": "^7.8.1" } } } @@ -50439,15 +49568,15 @@ } }, "joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "version": "17.12.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.0.tgz", + "integrity": "sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw==", "dev": true, "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.4", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, @@ -50934,6 +50063,16 @@ "language-subtag-registry": "^0.3.20" } }, + "launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -50957,9 +50096,9 @@ } }, "lib0": { - "version": "0.2.87", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.87.tgz", - "integrity": "sha512-TbB63XJixvNToW2IHWAFsCJj9tVnajmwjE14p69i51Rx8byOQd2IP4ourE8v4d7vhyO++nVm1sQk3ePslfbucg==", + "version": "0.2.88", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.88.tgz", + "integrity": "sha512-KyroiEvCeZcZEMx5Ys+b4u4eEBbA1ch7XUaBhYpwa/nPMrzTjUhI4RfcytmQfYoTBPcdyx+FX6WFNIoNuJzJfQ==", "requires": { "isomorphic.js": "^0.2.4" } @@ -52159,12 +51298,12 @@ "dev": true }, "memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "requires": { - "fs-monkey": "^1.0.3" + "fs-monkey": "^1.0.4" } }, "memize": { @@ -52267,18 +51406,18 @@ "dev": true }, "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { - "mime-db": "1.45.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -52366,9 +51505,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "minimist-options": { @@ -52486,9 +51625,9 @@ "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" }, "mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true }, "ms": { @@ -52516,8 +51655,7 @@ "nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" }, "nanomatch": { "version": "1.2.13", @@ -53740,8 +52878,7 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", @@ -53883,7 +53020,6 @@ "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, "requires": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -54149,6 +53285,11 @@ "postcss-value-parser": "^4.2.0" } }, + "postcss-prefixwrap": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/postcss-prefixwrap/-/postcss-prefixwrap-1.44.0.tgz", + "integrity": "sha512-h9MJGaIvT5hnzFc7Vuo+2ulBw6ecmmfcd8SKKH2TziUzcIA04gUoXIbptuM+tR+htmsQIKNEluiQlmCQ2p5a2g==" + }, "postcss-reduce-initial": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", @@ -54342,16 +53483,23 @@ "postcss-selector-parser": "^6.0.5" } }, + "postcss-urlrebase": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-urlrebase/-/postcss-urlrebase-1.3.0.tgz", + "integrity": "sha512-LOFN43n1IewKriXiypMNNinXeptttSyGGRLPbBMdQzuTvvCEo5mz/gG06y/HqrkN7p3ayHQf2R2bTBv639FOaQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, "postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "preact": { - "version": "10.19.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.1.tgz", - "integrity": "sha512-ZSsUr6EFlwWH0btdXMj6+X+hJAZ1v+aUzKlfwBGokKB1ZO6Shz+D16LxQhM8f+E/UgkKbVe2tsWXtGTUMCkGpQ==" + "version": "10.19.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.3.tgz", + "integrity": "sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==" }, "prelude-ls": { "version": "1.2.1", @@ -54403,12 +53551,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true } } }, @@ -54446,6 +53588,13 @@ "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } } }, "proto-list": { @@ -54790,9 +53939,9 @@ } }, "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "react-refresh": { "version": "0.14.0", @@ -54800,18 +53949,6 @@ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true }, - "react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", - "requires": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - } - }, "react-remove-scroll-bar": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", @@ -55416,87 +54553,6 @@ } } }, - "run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - } - } - }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -55791,11 +54847,12 @@ "dev": true }, "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "requires": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" } }, @@ -56070,6 +55127,12 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, "showdown": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", @@ -56179,14 +55242,14 @@ "dev": true }, "sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" } }, "sisteransi": { @@ -56472,8 +55535,7 @@ "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-loader": { "version": "4.0.1", @@ -56524,14 +55586,21 @@ "dev": true }, "spawnd": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-6.2.0.tgz", - "integrity": "sha512-qX/I4lQy4KgVEcNle0kuc4FxFWHISzBhZW1YemPfwmrmQjyZmfTK/OhBKkhrD2ooAaFZEm1maEBLE6/6enwt+g==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-9.0.2.tgz", + "integrity": "sha512-nl8DVHEDQ57IcKakzpjanspVChkMpGLuVwMR/eOn9cXE55Qr6luD2Kn06sA0ootRMdgrU4tInN6lA6ohTNvysw==", "dev": true, "requires": { - "exit": "^0.1.2", - "signal-exit": "^3.0.7", + "signal-exit": "^4.1.0", "tree-kill": "^1.2.2" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "spdx-correct": { @@ -56594,9 +55663,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -57461,13 +56530,13 @@ "dev": true }, "synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, "requires": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" } }, "table": { @@ -57751,12 +56820,6 @@ } } }, - "titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -57827,9 +56890,9 @@ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" }, "totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true }, "tough-cookie": { @@ -57850,11 +56913,6 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "dev": true }, - "traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" - }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -57884,9 +56942,9 @@ "dev": true }, "tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -57943,11 +57001,6 @@ "safe-buffer": "^5.0.1" } }, - "turbo-combine-reducers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/turbo-combine-reducers/-/turbo-combine-reducers-1.0.2.tgz", - "integrity": "sha512-gHbdMZlA6Ym6Ur5pSH/UWrNQMIM9IqTH6SoL1DbHpqEdQ8i+cFunSmSlFykPt0eGQwZ4d/XTHOl74H0/kFBVWw==" - }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -58204,12 +57257,6 @@ } } }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, "update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -58309,11 +57356,6 @@ "tslib": "^2.0.0" } }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" - }, "use-lilius": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/use-lilius/-/use-lilius-2.0.3.tgz", @@ -58484,12 +57526,6 @@ "mime-types": "^2.1.12" } }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, "rxjs": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", @@ -58542,6 +57578,12 @@ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, + "web-vitals": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.1.tgz", + "integrity": "sha512-xQ9lvIpfLxUj0eSmT79ZjRoU5wIRfIr7pNukL7ZE4EcWZSmfZQqOlhuAGfkVa3EFmzPHZhWhXfm2i5ys+THVPg==", + "dev": true + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -58589,104 +57631,65 @@ } }, "webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", + "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", "dev": true, "requires": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "html-escaper": "^2.0.2", + "is-plain-object": "^5.0.0", "opener": "^1.5.2", - "sirv": "^1.0.7", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", "ws": "^7.3.1" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, - "has-flag": { + "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, "webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", "colorette": "^2.0.14", - "commander": "^7.0.0", + "commander": "^10.0.1", "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", "webpack-merge": "^5.7.3" }, "dependencies": { "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true }, "cross-spawn": { @@ -58706,6 +57709,15 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -58763,39 +57775,24 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" } } } }, "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, "requires": { "@types/bonjour": "^3.5.9", @@ -58804,7 +57801,7 @@ "@types/serve-index": "^1.9.1", "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", @@ -58817,6 +57814,7 @@ "html-entities": "^2.3.2", "http-proxy-middleware": "^2.0.3", "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", "rimraf": "^3.0.2", @@ -58826,7 +57824,7 @@ "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "ws": "^8.13.0" }, "dependencies": { "ajv": { @@ -58866,21 +57864,21 @@ } }, "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" } }, "ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true } } @@ -58898,12 +57896,13 @@ } }, "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, "requires": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "dependencies": { @@ -59083,9 +58082,9 @@ "integrity": "sha512-Ba9tGNYxXwaqKEi9sJJvPMKuo063umUPsHN0JJsjrs2j8KDSzkWLMZGZ+MH1Jf1Fq4OWZ5HsESJID6nRza2ang==" }, "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "wrap-ansi": { @@ -59118,7 +58117,7 @@ "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "devOptional": true + "dev": true }, "xdg-basedir": { "version": "4.0.0", @@ -59178,14 +58177,22 @@ } }, "y-webrtc": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/y-webrtc/-/y-webrtc-10.2.5.tgz", - "integrity": "sha512-ZyBNvTI5L28sQ2PQI0T/JvyWgvuTq05L21vGkIlcvNLNSJqAaLCBJRe3FHEqXoaogqWmRcEAKGfII4ErNXMnNw==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/y-webrtc/-/y-webrtc-10.2.6.tgz", + "integrity": "sha512-1kZ4YYwksFZi8+l8mTebVX9vW6Q5MnqxMkvNU700X5dBE38usurt/JgeXSIQRpK3NwUYYb9y63Jn9FMpMH6/vA==", "requires": { "lib0": "^0.2.42", "simple-peer": "^9.11.0", - "ws": "^7.2.0", - "y-protocols": "^1.0.5" + "ws": "^8.14.2", + "y-protocols": "^1.0.6" + }, + "dependencies": { + "ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "optional": true + } } }, "y18n": { @@ -59241,11 +58248,11 @@ } }, "yjs": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.8.tgz", - "integrity": "sha512-ZPq0hpJQb6f59B++Ngg4cKexDJTvfOgeiv0sBc4sUm8CaBWH7OQC4kcCgrqbjJ/B2+6vO49exvTmYfdlPtcjbg==", + "version": "13.6.11", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.11.tgz", + "integrity": "sha512-FvRRJKX9u270dOLkllGF/UDCWwmIv2Z+ucM4v1QO1TuxdmoiMnSUXH1HAcOKOrkBEhQtPTkxep7tD2DrQB+l0g==", "requires": { - "lib0": "^0.2.74" + "lib0": "^0.2.86" } }, "yocto-queue": { diff --git a/package.json b/package.json index 3a3e5de1f641e..192386d8b906e 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,12 @@ "@lodder/grunt-postcss": "^3.1.1", "@playwright/test": "1.32.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.5", - "@wordpress/babel-preset-default": "7.26.13", - "@wordpress/dependency-extraction-webpack-plugin": "4.25.13", - "@wordpress/e2e-test-utils": "10.13.13", - "@wordpress/e2e-test-utils-playwright": "0.10.13", - "@wordpress/prettier-config": "2.25.13", - "@wordpress/scripts": "26.13.13", + "@wordpress/babel-preset-default": "7.34.0", + "@wordpress/dependency-extraction-webpack-plugin": "5.1.0", + "@wordpress/e2e-test-utils": "10.21.0", + "@wordpress/e2e-test-utils-playwright": "0.18.0", + "@wordpress/prettier-config": "3.7.0", + "@wordpress/scripts": "27.1.0", "autoprefixer": "10.4.16", "chalk": "5.3.0", "check-node-version": "4.2.1", @@ -80,70 +80,72 @@ "dependencies": { "@emotion/is-prop-valid": "0.8.8", "@emotion/memoize": "0.7.4", - "@wordpress/a11y": "3.42.13", - "@wordpress/annotations": "2.42.13", - "@wordpress/api-fetch": "6.39.13", - "@wordpress/autop": "3.42.13", - "@wordpress/blob": "3.42.13", - "@wordpress/block-directory": "4.19.16", - "@wordpress/block-editor": "12.10.14", - "@wordpress/block-library": "8.19.16", - "@wordpress/block-serialization-default-parser": "4.42.13", - "@wordpress/blocks": "12.19.13", - "@wordpress/commands": "0.13.14", - "@wordpress/components": "25.8.14", - "@wordpress/compose": "6.19.13", - "@wordpress/core-commands": "0.11.14", - "@wordpress/core-data": "6.19.14", - "@wordpress/customize-widgets": "4.19.16", - "@wordpress/data": "9.12.13", - "@wordpress/data-controls": "3.11.13", - "@wordpress/date": "4.42.13", - "@wordpress/deprecated": "3.42.13", - "@wordpress/dom": "3.42.13", - "@wordpress/dom-ready": "3.42.13", - "@wordpress/edit-post": "7.19.16", - "@wordpress/edit-site": "5.19.16", - "@wordpress/edit-widgets": "5.19.16", - "@wordpress/editor": "13.19.14", - "@wordpress/element": "5.19.13", - "@wordpress/escape-html": "2.42.13", - "@wordpress/format-library": "4.19.14", - "@wordpress/hooks": "3.42.13", - "@wordpress/html-entities": "3.42.13", - "@wordpress/i18n": "4.42.13", - "@wordpress/icons": "9.33.13", - "@wordpress/interactivity": "2.3.13", - "@wordpress/interface": "5.19.14", - "@wordpress/is-shallow-equal": "4.42.13", - "@wordpress/keyboard-shortcuts": "4.19.13", - "@wordpress/keycodes": "3.42.13", - "@wordpress/list-reusable-blocks": "4.19.14", - "@wordpress/media-utils": "4.33.13", - "@wordpress/notices": "4.10.13", - "@wordpress/nux": "8.4.14", - "@wordpress/patterns": "1.3.14", - "@wordpress/plugins": "6.10.14", - "@wordpress/preferences": "3.19.14", - "@wordpress/preferences-persistence": "1.34.13", - "@wordpress/primitives": "3.40.13", - "@wordpress/priority-queue": "2.42.13", - "@wordpress/private-apis": "0.24.13", - "@wordpress/redux-routine": "4.42.13", - "@wordpress/reusable-blocks": "4.19.14", - "@wordpress/rich-text": "6.19.13", - "@wordpress/router": "0.11.13", - "@wordpress/server-side-render": "4.19.14", - "@wordpress/shortcode": "3.42.13", - "@wordpress/style-engine": "1.25.13", - "@wordpress/sync": "0.4.13", - "@wordpress/token-list": "2.42.13", - "@wordpress/undo-manager": "0.2.13", - "@wordpress/url": "3.43.13", - "@wordpress/viewport": "5.19.13", - "@wordpress/warning": "2.42.13", - "@wordpress/widgets": "3.19.14", - "@wordpress/wordcount": "3.42.13", + "@wordpress/a11y": "3.50.0", + "@wordpress/annotations": "2.50.0", + "@wordpress/api-fetch": "6.47.0", + "@wordpress/autop": "3.50.0", + "@wordpress/blob": "3.50.0", + "@wordpress/block-directory": "4.27.1", + "@wordpress/block-editor": "12.18.1", + "@wordpress/block-library": "8.27.1", + "@wordpress/block-serialization-default-parser": "4.50.0", + "@wordpress/blocks": "12.27.1", + "@wordpress/commands": "0.21.0", + "@wordpress/components": "25.16.0", + "@wordpress/compose": "6.27.0", + "@wordpress/core-commands": "0.19.1", + "@wordpress/core-data": "6.27.1", + "@wordpress/customize-widgets": "4.27.1", + "@wordpress/data": "9.20.0", + "@wordpress/data-controls": "3.19.0", + "@wordpress/dataviews": "0.4.0", + "@wordpress/date": "4.50.0", + "@wordpress/deprecated": "3.50.0", + "@wordpress/dom": "3.50.0", + "@wordpress/dom-ready": "3.50.0", + "@wordpress/edit-post": "7.27.1", + "@wordpress/edit-site": "5.27.1", + "@wordpress/edit-widgets": "5.27.1", + "@wordpress/editor": "13.27.1", + "@wordpress/element": "5.27.0", + "@wordpress/escape-html": "2.50.0", + "@wordpress/format-library": "4.27.1", + "@wordpress/hooks": "3.50.0", + "@wordpress/html-entities": "3.50.0", + "@wordpress/i18n": "4.50.0", + "@wordpress/icons": "9.41.0", + "@wordpress/interactivity": "4.0.0", + "@wordpress/interactivity-router": "1.0.0", + "@wordpress/interface": "5.27.0", + "@wordpress/is-shallow-equal": "4.50.0", + "@wordpress/keyboard-shortcuts": "4.27.0", + "@wordpress/keycodes": "3.50.0", + "@wordpress/list-reusable-blocks": "4.27.0", + "@wordpress/media-utils": "4.41.0", + "@wordpress/notices": "4.18.0", + "@wordpress/nux": "8.12.0", + "@wordpress/patterns": "1.11.1", + "@wordpress/plugins": "6.18.0", + "@wordpress/preferences": "3.27.0", + "@wordpress/preferences-persistence": "1.42.0", + "@wordpress/primitives": "3.48.0", + "@wordpress/priority-queue": "2.50.0", + "@wordpress/private-apis": "0.32.0", + "@wordpress/redux-routine": "4.50.0", + "@wordpress/reusable-blocks": "4.27.1", + "@wordpress/rich-text": "6.27.0", + "@wordpress/router": "0.19.0", + "@wordpress/server-side-render": "4.27.1", + "@wordpress/shortcode": "3.50.0", + "@wordpress/style-engine": "1.33.1", + "@wordpress/sync": "0.12.0", + "@wordpress/token-list": "2.50.0", + "@wordpress/undo-manager": "0.10.0", + "@wordpress/url": "3.51.0", + "@wordpress/viewport": "5.27.0", + "@wordpress/warning": "2.50.0", + "@wordpress/widgets": "3.27.1", + "@wordpress/wordcount": "3.50.0", "backbone": "1.5.0", "clipboard": "2.0.11", "core-js-url-browser": "3.6.4", @@ -167,6 +169,7 @@ "polyfill-library": "4.8.0", "react": "18.2.0", "react-dom": "18.2.0", + "react-is": "18.2.0", "regenerator-runtime": "0.14.0", "tslib": "2.6.2", "underscore": "1.13.6", diff --git a/src/wp-includes/assets/script-loader-packages.min.php b/src/wp-includes/assets/script-loader-packages.min.php index 1ae002204dedb..bbbbec8b98656 100644 --- a/src/wp-includes/assets/script-loader-packages.min.php +++ b/src/wp-includes/assets/script-loader-packages.min.php @@ -1 +1 @@ - array('dependencies' => array('wp-dom-ready', 'wp-i18n', 'wp-polyfill'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-rich-text'), 'version' => 'ffc4fc3374b0ab000805'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => '7adefb5a2462c9794332'), 'autop.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '4839ed746deca49ab64b'), 'block-directory.min.js' => array('dependencies' => array('wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' => 'e2591f24f76e26e1fa71'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '0eab6d89da382fce4994'), 'block-library.min.js' => array('dependencies' => array('wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '7026615731f5919df7eb'), 'block-serialization-default-parser.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-private-apis', 'wp-shortcode'), 'version' => 'd132346e438a85295544'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-polyfill', 'wp-primitives', 'wp-private-apis'), 'version' => '8491b973b1428d71c03a'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '0e5b6d2301dd36a27944'), 'compose.min.js' => array('dependencies' => array('react', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-polyfill', 'wp-priority-queue'), 'version' => 'f3f1356a04332a61ecf4'), 'core-commands.min.js' => array('dependencies' => array('wp-commands', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => '14e55fdb97702146a400'), 'core-data.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-private-apis', 'wp-url'), 'version' => '45a906a457e78cdba465'), 'customize-widgets.min.js' => array('dependencies' => array('wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '272384cd368be9ad542e'), 'data.min.js' => array('dependencies' => array('wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => 'eecae3034d0f86dd057a'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated', 'wp-polyfill'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated', 'wp-polyfill'), 'version' => 'ddd596bc6f2a45364bf2'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated', 'wp-polyfill'), 'version' => '32d208f6a07c17446a20'), 'dom-ready.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-widgets'), 'version' => '028535d245a56e208021'), 'edit-site.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-reusable-blocks', 'wp-router', 'wp-url', 'wp-viewport', 'wp-widgets', 'wp-wordcount'), 'version' => '73c99f27f045e755bdac'), 'edit-widgets.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => 'aa1b19232fd47b71966b'), 'editor.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => '8710448d3b72583dd74f'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html', 'wp-polyfill'), 'version' => '9c7e1c05c67e37a69170'), 'escape-html.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-url'), 'version' => 'fd31f045f591d044ded2'), 'hooks.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => 'aee497d955fe7a29a7d6'), 'is-shallow-equal.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('wp-data', 'wp-element', 'wp-keycodes', 'wp-polyfill'), 'version' => '8d0cd13e3bb370f72d8a'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n', 'wp-polyfill'), 'version' => '7e17818b141ff8f0eb95'), 'list-reusable-blocks.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '52bc479bbcfc2f9376f5'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '3725b3cbc9d67853fce2'), 'notices.min.js' => array('dependencies' => array('wp-data', 'wp-polyfill'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives'), 'version' => '891d09ac9ffb76e20107'), 'patterns.min.js' => array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '110b479ee757d6c5102a'), 'plugins.min.js' => array('dependencies' => array('wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-primitives'), 'version' => '3f319c2d963a64a180e3'), 'preferences.min.js' => array('dependencies' => array('wp-a11y', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives'), 'version' => '2cbf4a1104ebd69652a8'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-polyfill'), 'version' => '5171fd253f5534917b6c'), 'primitives.min.js' => array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => '81082ab8cc08e6b73043'), 'priority-queue.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '391948bb0355121a7f52'), 'private-apis.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'a1c8c4111a1fd184e339'), 'redux-routine.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '72ec9ed71190c996fe2e'), 'reusable-blocks.min.js' => array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '712cfe76fe540b7f2041'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes', 'wp-polyfill'), 'version' => 'b8d4c74474407d65e6ea'), 'router.min.js' => array('dependencies' => array('wp-element', 'wp-polyfill', 'wp-private-apis', 'wp-url'), 'version' => '302b2c8e0982112d17f0'), 'server-side-render.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => '11791fb851599a57f732'), 'shortcode.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '96ab95de891a22e6fa5a'), 'token-list.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal', 'wp-polyfill'), 'version' => 'f1701372eeeb8b605515'), 'url.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '30eb0a160d0e9993a073'), 'viewport.min.js' => array('dependencies' => array('wp-compose', 'wp-data', 'wp-element', 'wp-polyfill'), 'version' => '8222fccb0a9b934986c5'), 'warning.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives'), 'version' => 'c6d0bd07e3eebf0d82d6'), 'wordcount.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '55d8c2bf3dc99e7ea5ec')); + array('dependencies' => array('wp-dom-ready', 'wp-i18n', 'wp-polyfill'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-rich-text'), 'version' => 'ffc4fc3374b0ab000805'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '9159053f41b8ec09d91b'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '69980a3264510fc18d69'), 'block-library.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '54f97f4073fca70c8eef'), 'block-serialization-default-parser.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '64a9ab28b62423f79e07'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-polyfill', 'wp-primitives', 'wp-private-apis'), 'version' => '0674417708cae5031b37'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '629594950877ccba0f43'), 'compose.min.js' => array('dependencies' => array('react', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-polyfill', 'wp-priority-queue'), 'version' => '1f65d1d8719bc97357e7'), 'core-commands.min.js' => array('dependencies' => array('react', 'wp-commands', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'dbbc54588f73c5b23fa3'), 'core-data.min.js' => array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'dba2ea4cdd526475d52a'), 'customize-widgets.min.js' => array('dependencies' => array('react', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => 'a44197f146efda4b8ad1'), 'data.min.js' => array('dependencies' => array('react', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '70790e390a9624c9cef4'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated', 'wp-polyfill'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated', 'wp-polyfill'), 'version' => 'ddd596bc6f2a45364bf2'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated', 'wp-polyfill'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-widgets'), 'version' => '853f8e34ea880df35bdd'), 'edit-site.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-reusable-blocks', 'wp-router', 'wp-url', 'wp-viewport', 'wp-widgets', 'wp-wordcount'), 'version' => '5a5096049a263de38add'), 'edit-widgets.min.js' => array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '863e8bac0af20fba6e4a'), 'editor.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => '6a00a5b42735b6a1b507'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html', 'wp-polyfill'), 'version' => '603185df201aa54181a6'), 'escape-html.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'f2c401cc63ed8a35897d'), 'hooks.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => 'aee497d955fe7a29a7d6'), 'interactivity-router.min.js' => array('dependencies' => array('wp-interactivity', 'wp-polyfill'), 'version' => '184493be110bb3cd656c'), 'is-shallow-equal.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react', 'wp-data', 'wp-element', 'wp-keycodes', 'wp-polyfill'), 'version' => '4d239ebc17efd846a168'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n', 'wp-polyfill'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => 'b9d73b532124daefd2c7'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '03fbd6c4f505a9385efe'), 'notices.min.js' => array('dependencies' => array('wp-data', 'wp-polyfill'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives'), 'version' => '46c93a71c3e2c2bf37f0'), 'patterns.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '181de8f9e2b40fca351b'), 'plugins.min.js' => array('dependencies' => array('react', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-primitives'), 'version' => '2d369cbfdcb887111e06'), 'preferences.min.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-private-apis'), 'version' => '3f5baaf6d334123043d3'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-polyfill'), 'version' => '3f5184d775ed9dfb154f'), 'primitives.min.js' => array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => '81082ab8cc08e6b73043'), 'priority-queue.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '391948bb0355121a7f52'), 'private-apis.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '5e7fdf55d04b8c2aadef'), 'redux-routine.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '72ec9ed71190c996fe2e'), 'reusable-blocks.min.js' => array('dependencies' => array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '008366ba172a4f4b92b4'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes', 'wp-polyfill'), 'version' => '88a44b54270a7c0b39eb'), 'router.min.js' => array('dependencies' => array('react', 'wp-element', 'wp-polyfill', 'wp-private-apis', 'wp-url'), 'version' => '92fd517f31b92695552a'), 'server-side-render.min.js' => array('dependencies' => array('react', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => '8e53ef39c9065ebf9e46'), 'shortcode.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '5bd98acb9813a2d90abf'), 'token-list.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal', 'wp-polyfill'), 'version' => 'f1701372eeeb8b605515'), 'url.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'f93d00b28dd08ca5a662'), 'viewport.min.js' => array('dependencies' => array('react', 'wp-compose', 'wp-data', 'wp-polyfill'), 'version' => 'e555fda1d93ecf1fb1e0'), 'warning.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives'), 'version' => 'c732b69b0507c9a5462b'), 'wordcount.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '55d8c2bf3dc99e7ea5ec')); diff --git a/src/wp-includes/blocks/audio/block.json b/src/wp-includes/blocks/audio/block.json index a4740e304451c..04df268a74a63 100644 --- a/src/wp-includes/blocks/audio/block.json +++ b/src/wp-includes/blocks/audio/block.json @@ -16,8 +16,8 @@ "__experimentalRole": "content" }, "caption": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "figcaption", "__experimentalRole": "content" }, diff --git a/src/wp-includes/blocks/avatar/block.json b/src/wp-includes/blocks/avatar/block.json index 3b4ac7c84f617..fa86541b2963f 100644 --- a/src/wp-includes/blocks/avatar/block.json +++ b/src/wp-includes/blocks/avatar/block.json @@ -30,7 +30,11 @@ "alignWide": false, "spacing": { "margin": true, - "padding": true + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } }, "__experimentalBorder": { "__experimentalSkipSerialization": true, diff --git a/src/wp-includes/blocks/block.php b/src/wp-includes/blocks/block.php index d51b35d68b23d..444001fa49859 100644 --- a/src/wp-includes/blocks/block.php +++ b/src/wp-includes/blocks/block.php @@ -46,8 +46,28 @@ function render_block_core_block( $attributes ) { $content = $wp_embed->run_shortcode( $reusable_block->post_content ); $content = $wp_embed->autoembed( $content ); + $has_pattern_overrides = isset( $attributes['overrides'] ); + + /** + * We set the `pattern/overrides` context through the `render_block_context` + * filter so that it is available when a pattern's inner blocks are + * rendering via do_blocks given it only receives the inner content. + */ + if ( $has_pattern_overrides ) { + $filter_block_context = static function ( $context ) use ( $attributes ) { + $context['pattern/overrides'] = $attributes['overrides']; + return $context; + }; + add_filter( 'render_block_context', $filter_block_context, 1 ); + } + $content = do_blocks( $content ); unset( $seen_refs[ $attributes['ref'] ] ); + + if ( $has_pattern_overrides ) { + remove_filter( 'render_block_context', $filter_block_context, 1 ); + } + return $content; } diff --git a/src/wp-includes/blocks/block/block.json b/src/wp-includes/blocks/block/block.json index 4cb53960725d2..b30c865e57a7f 100644 --- a/src/wp-includes/blocks/block/block.json +++ b/src/wp-includes/blocks/block/block.json @@ -10,11 +10,15 @@ "attributes": { "ref": { "type": "number" + }, + "overrides": { + "type": "object" } }, "supports": { "customClassName": false, "html": false, - "inserter": false + "inserter": false, + "renaming": false } } diff --git a/src/wp-includes/blocks/blocks-json.php b/src/wp-includes/blocks/blocks-json.php index 85656181b047b..0da1bb0e5b22d 100644 --- a/src/wp-includes/blocks/blocks-json.php +++ b/src/wp-includes/blocks/blocks-json.php @@ -75,8 +75,8 @@ '__experimentalRole' => 'content' ), 'caption' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'figcaption', '__experimentalRole' => 'content' ), @@ -154,7 +154,11 @@ 'alignWide' => false, 'spacing' => array( 'margin' => true, - 'padding' => true + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) ), '__experimentalBorder' => array( '__experimentalSkipSerialization' => true, @@ -192,12 +196,16 @@ 'attributes' => array( 'ref' => array( 'type' => 'number' + ), + 'overrides' => array( + 'type' => 'object' ) ), 'supports' => array( 'customClassName' => false, 'html' => false, - 'inserter' => false + 'inserter' => false, + 'renaming' => false ) ), 'button' => array( @@ -214,6 +222,9 @@ 'link' ), 'textdomain' => 'default', + 'usesContext' => array( + 'pattern/overrides' + ), 'attributes' => array( 'tagName' => array( 'type' => 'string', @@ -245,8 +256,8 @@ '__experimentalRole' => 'content' ), 'text' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'a,button', '__experimentalRole' => 'content' ), @@ -516,8 +527,8 @@ 'textdomain' => 'default', 'attributes' => array( 'content' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'code', '__unstablePreserveWhiteSpace' => true ) @@ -1314,7 +1325,7 @@ 'ancestor' => array( 'core/comments' ), - 'description' => 'Displays a title with the number of comments', + 'description' => 'Displays a title with the number of comments.', 'textdomain' => 'default', 'usesContext' => array( 'postId', @@ -1397,9 +1408,6 @@ ), 'alt' => array( 'type' => 'string', - 'source' => 'attribute', - 'selector' => 'img', - 'attribute' => 'alt', 'default' => '' ), 'hasParallax' => array( @@ -1420,6 +1428,9 @@ 'customOverlayColor' => array( 'type' => 'string' ), + 'isUserOverlayColor' => array( + 'type' => 'boolean' + ), 'backgroundType' => array( 'type' => 'string', 'default' => 'image' @@ -1508,6 +1519,9 @@ ), 'enableContrastChecker' => false ), + 'dimensions' => array( + 'aspectRatio' => true + ), 'typography' => array( 'fontSize' => true, 'lineHeight' => true, @@ -1548,8 +1562,8 @@ 'default' => false ), 'summary' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'summary' ) ), @@ -1615,8 +1629,8 @@ '__experimentalRole' => 'content' ), 'caption' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'figcaption', '__experimentalRole' => 'content' ), @@ -1679,8 +1693,8 @@ 'attribute' => 'id' ), 'fileName' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'a:not([download])' ), 'textLinkHref' => array( @@ -1700,8 +1714,8 @@ 'default' => true ), 'downloadButtonText' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'a[download]' ), 'displayPreview' => array( @@ -1730,7 +1744,6 @@ ), 'interactivity' => true ), - 'viewScript' => 'file:./view.min.js', 'editorStyle' => 'wp-block-file-editor', 'style' => 'wp-block-file' ), @@ -1740,7 +1753,7 @@ 'name' => 'core/footnotes', 'title' => 'Footnotes', 'category' => 'text', - 'description' => '', + 'description' => 'Display footnotes added to the page.', 'keywords' => array( 'references' ), @@ -1774,6 +1787,7 @@ 'html' => false, 'multiple' => false, 'reusable' => false, + 'inserter' => false, 'spacing' => array( 'margin' => true, 'padding' => true, @@ -1873,8 +1887,8 @@ 'attribute' => 'data-id' ), 'caption' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => '.blocks-gallery-item__caption' ) ) @@ -1903,14 +1917,18 @@ 'maximum' => 8 ), 'caption' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => '.blocks-gallery-caption' ), 'imageCrop' => array( 'type' => 'boolean', 'default' => true ), + 'randomOrder' => array( + 'type' => 'boolean', + 'default' => false + ), 'fixedHeight' => array( 'type' => 'boolean', 'default' => true @@ -2018,7 +2036,6 @@ '__experimentalOnEnter' => true, '__experimentalOnMerge' => true, '__experimentalSettings' => true, - '__experimentalMetadata' => true, 'align' => array( 'wide', 'full' @@ -2027,7 +2044,11 @@ 'ariaLabel' => true, 'html' => false, 'background' => array( - 'backgroundImage' => true + 'backgroundImage' => true, + 'backgroundSize' => true, + '__experimentalDefaultControls' => array( + 'backgroundImage' => true + ) ), 'color' => array( 'gradients' => true, @@ -2052,6 +2073,7 @@ ) ), 'dimensions' => array( + 'aspectRatio' => true, 'minHeight' => true ), '__experimentalBorder' => array( @@ -2101,15 +2123,17 @@ 'subtitle' ), 'textdomain' => 'default', + 'usesContext' => array( + 'pattern/overrides' + ), 'attributes' => array( 'textAlign' => array( 'type' => 'string' ), 'content' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'h1,h2,h3,h4,h5,h6', - 'default' => '', '__experimentalRole' => 'content' ), 'level' => array( @@ -2154,9 +2178,7 @@ '__experimentalTextDecoration' => true, '__experimentalWritingMode' => true, '__experimentalDefaultControls' => array( - 'fontSize' => true, - 'fontAppearance' => true, - 'textTransform' => true + 'fontSize' => true ) ), '__unstablePasteTextInline' => true, @@ -2243,7 +2265,8 @@ 'usesContext' => array( 'allowResize', 'imageCrop', - 'fixedHeight' + 'fixedHeight', + 'pattern/overrides' ), 'description' => 'Insert an image to make a visual statement.', 'keywords' => array( @@ -2253,9 +2276,6 @@ ), 'textdomain' => 'default', 'attributes' => array( - 'align' => array( - 'type' => 'string' - ), 'url' => array( 'type' => 'string', 'source' => 'attribute', @@ -2272,8 +2292,8 @@ '__experimentalRole' => 'content' ), 'caption' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'figcaption', '__experimentalRole' => 'content' ), @@ -2339,6 +2359,14 @@ ) ), 'supports' => array( + 'interactivity' => true, + 'align' => array( + 'left', + 'center', + 'right', + 'wide', + 'full' + ), 'anchor' => true, 'color' => array( 'text' => false, @@ -2377,8 +2405,7 @@ ) ), 'editorStyle' => 'wp-block-image-editor', - 'style' => 'wp-block-image', - 'viewScript' => 'file:./view.min.js' + 'style' => 'wp-block-image' ), 'latest-comments' => array( '$schema' => 'https://schemas.wp.org/trunk/block.json', @@ -2559,6 +2586,7 @@ 'style' => 'wp-block-latest-posts' ), 'legacy-widget' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', 'apiVersion' => 3, 'name' => 'core/legacy-widget', 'title' => 'Legacy Widget', @@ -2686,16 +2714,23 @@ 'type' => 'string' ), 'content' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'li', - 'default' => '', '__experimentalRole' => 'content' ) ), 'supports' => array( 'className' => false, '__experimentalSelector' => 'li', + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), 'typography' => array( 'fontSize' => true, 'lineHeight' => true, @@ -2736,6 +2771,14 @@ ), 'supports' => array( 'className' => true, + 'spacing' => array( + 'margin' => true, + 'padding' => true, + '__experimentalDefaultControls' => array( + 'margin' => false, + 'padding' => false + ) + ), 'typography' => array( 'fontSize' => true, 'lineHeight' => true, @@ -2904,7 +2947,7 @@ ), 'originalContent' => array( 'type' => 'string', - 'source' => 'html' + 'source' => 'raw' ) ), 'supports' => array( @@ -3101,9 +3144,9 @@ ) ) ), - 'interactivity' => true + 'interactivity' => true, + 'renaming' => false ), - 'viewScript' => 'file:./view.min.js', 'editorStyle' => 'wp-block-navigation-editor', 'style' => 'wp-block-navigation' ), @@ -3182,7 +3225,8 @@ '__experimentalDefaultControls' => array( 'fontSize' => true ) - ) + ), + 'renaming' => false ), 'editorStyle' => 'wp-block-navigation-link-editor', 'style' => 'wp-block-navigation-link' @@ -3403,17 +3447,17 @@ ), 'textdomain' => 'default', 'usesContext' => array( - 'postId' + 'postId', + 'pattern/overrides' ), 'attributes' => array( 'align' => array( 'type' => 'string' ), 'content' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'p', - 'default' => '', '__experimentalRole' => 'content' ), 'dropCap' => array( @@ -3442,7 +3486,6 @@ 'text' => true ) ), - '__experimentalConnections' => true, 'spacing' => array( 'margin' => true, 'padding' => true, @@ -3480,7 +3523,8 @@ 'description' => 'Show a block pattern.', 'supports' => array( 'html' => false, - 'inserter' => false + 'inserter' => false, + 'renaming' => false ), 'textdomain' => 'default', 'attributes' => array( @@ -3934,6 +3978,10 @@ ), 'customGradient' => array( 'type' => 'string' + ), + 'useFirstImageFromPost' => array( + 'type' => 'boolean', + 'default' => false ) ), 'usesContext' => array( @@ -4005,8 +4053,18 @@ 'arrow' => array( 'type' => 'string', 'default' => 'none' + ), + 'inSameTerm' => array( + 'type' => 'boolean' + ), + 'taxonomy' => array( + 'type' => 'string', + 'default' => '' ) ), + 'usesContext' => array( + 'postType' + ), 'supports' => array( 'reusable' => false, 'html' => false, @@ -4044,7 +4102,6 @@ 'usesContext' => array( 'queryId', 'query', - 'queryContext', 'displayLayout', 'templateSlug', 'previewPostType', @@ -4218,9 +4275,7 @@ '__experimentalTextDecoration' => true, '__experimentalLetterSpacing' => true, '__experimentalDefaultControls' => array( - 'fontSize' => true, - 'fontAppearance' => true, - 'textTransform' => true + 'fontSize' => true ) ) ), @@ -4236,10 +4291,9 @@ 'textdomain' => 'default', 'attributes' => array( 'content' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'pre', - 'default' => '', '__unstablePreserveWhiteSpace' => true, '__experimentalRole' => 'content' ) @@ -4283,16 +4337,15 @@ 'textdomain' => 'default', 'attributes' => array( 'value' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'p', '__experimentalRole' => 'content' ), 'citation' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'cite', - 'default' => '', '__experimentalRole' => 'content' ), 'textAlign' => array( @@ -4316,6 +4369,10 @@ 'text' => true ) ), + 'spacing' => array( + 'margin' => true, + 'padding' => true + ), 'typography' => array( 'fontSize' => true, 'lineHeight' => true, @@ -4326,8 +4383,7 @@ '__experimentalTextDecoration' => true, '__experimentalLetterSpacing' => true, '__experimentalDefaultControls' => array( - 'fontSize' => true, - 'fontAppearance' => true + 'fontSize' => true ) ), '__experimentalBorder' => array( @@ -4413,8 +4469,7 @@ 'layout' => true ), 'editorStyle' => 'wp-block-query-editor', - 'style' => 'wp-block-query', - 'viewScript' => 'file:./view.min.js' + 'style' => 'wp-block-query' ), 'query-no-results' => array( '$schema' => 'https://schemas.wp.org/trunk/block.json', @@ -4577,7 +4632,7 @@ 'parent' => array( 'core/query-pagination' ), - 'description' => 'Displays a list of page numbers for pagination', + 'description' => 'Displays a list of page numbers for pagination.', 'textdomain' => 'default', 'attributes' => array( 'midSize' => array( @@ -4719,9 +4774,7 @@ '__experimentalTextTransform' => true, '__experimentalTextDecoration' => true, '__experimentalDefaultControls' => array( - 'fontSize' => true, - 'fontAppearance' => true, - 'textTransform' => true + 'fontSize' => true ) ) ), @@ -4749,10 +4802,9 @@ '__experimentalRole' => 'content' ), 'citation' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'cite', - 'default' => '', '__experimentalRole' => 'content' ), 'align' => array( @@ -4774,8 +4826,7 @@ '__experimentalTextDecoration' => true, '__experimentalLetterSpacing' => true, '__experimentalDefaultControls' => array( - 'fontSize' => true, - 'fontAppearance' => true + 'fontSize' => true ) ), 'color' => array( @@ -4786,6 +4837,12 @@ 'background' => true, 'text' => true ) + ), + 'layout' => array( + 'allowEditing' => false + ), + 'spacing' => array( + 'blockGap' => true ) ), 'styles' => array( @@ -4965,10 +5022,6 @@ ) ), - 'buttonBehavior' => array( - 'type' => 'string', - 'default' => 'expand-searchfield' - ), 'isSearchFieldHidden' => array( 'type' => 'boolean', 'default' => false @@ -5017,7 +5070,6 @@ ), 'html' => false ), - 'viewScript' => 'file:./view.min.js', 'editorStyle' => 'wp-block-search-editor', 'style' => 'wp-block-search' ), @@ -5283,11 +5335,7 @@ '__experimentalFontWeight' => true, '__experimentalLetterSpacing' => true, '__experimentalDefaultControls' => array( - 'fontSize' => true, - 'lineHeight' => true, - 'fontAppearance' => true, - 'letterSpacing' => true, - 'textTransform' => true + 'fontSize' => true ) ) ), @@ -5496,10 +5544,9 @@ 'default' => false ), 'caption' => array( - 'type' => 'string', - 'source' => 'html', - 'selector' => 'figcaption', - 'default' => '' + 'type' => 'rich-text', + 'source' => 'rich-text', + 'selector' => 'figcaption' ), 'head' => array( 'type' => 'array', @@ -5518,8 +5565,8 @@ 'selector' => 'td,th', 'query' => array( 'content' => array( - 'type' => 'string', - 'source' => 'html' + 'type' => 'rich-text', + 'source' => 'rich-text' ), 'tag' => array( 'type' => 'string', @@ -5567,8 +5614,8 @@ 'selector' => 'td,th', 'query' => array( 'content' => array( - 'type' => 'string', - 'source' => 'html' + 'type' => 'rich-text', + 'source' => 'rich-text' ), 'tag' => array( 'type' => 'string', @@ -5616,8 +5663,8 @@ 'selector' => 'td,th', 'query' => array( 'content' => array( - 'type' => 'string', - 'source' => 'html' + 'type' => 'rich-text', + 'source' => 'rich-text' ), 'tag' => array( 'type' => 'string', @@ -5794,7 +5841,8 @@ 'supports' => array( 'align' => true, 'html' => false, - 'reusable' => false + 'reusable' => false, + 'renaming' => false ), 'editorStyle' => 'wp-block-template-part-editor' ), @@ -5900,10 +5948,9 @@ 'textdomain' => 'default', 'attributes' => array( 'content' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'pre', - 'default' => '', '__unstablePreserveWhiteSpace' => true, '__experimentalRole' => 'content' ), @@ -5931,8 +5978,7 @@ '__experimentalTextTransform' => true, '__experimentalTextDecoration' => true, '__experimentalDefaultControls' => array( - 'fontSize' => true, - 'fontAppearance' => true + 'fontSize' => true ) ), 'spacing' => array( @@ -5972,8 +6018,8 @@ 'attribute' => 'autoplay' ), 'caption' => array( - 'type' => 'string', - 'source' => 'html', + 'type' => 'rich-text', + 'source' => 'rich-text', 'selector' => 'figcaption', '__experimentalRole' => 'content' ), @@ -6053,6 +6099,7 @@ 'style' => 'wp-block-video' ), 'widget-group' => array( + '$schema' => 'https://schemas.wp.org/trunk/block.json', 'apiVersion' => 3, 'name' => 'core/widget-group', 'category' => 'widgets', diff --git a/src/wp-includes/blocks/button/block.json b/src/wp-includes/blocks/button/block.json index eec327b4ca48e..f04d4642bb98e 100644 --- a/src/wp-includes/blocks/button/block.json +++ b/src/wp-includes/blocks/button/block.json @@ -8,6 +8,7 @@ "description": "Prompt visitors to take action with a button-style link.", "keywords": [ "link" ], "textdomain": "default", + "usesContext": [ "pattern/overrides" ], "attributes": { "tagName": { "type": "string", @@ -36,8 +37,8 @@ "__experimentalRole": "content" }, "text": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "a,button", "__experimentalRole": "content" }, diff --git a/src/wp-includes/blocks/calendar.php b/src/wp-includes/blocks/calendar.php index f1f7967235620..04b888972b1dd 100644 --- a/src/wp-includes/blocks/calendar.php +++ b/src/wp-includes/blocks/calendar.php @@ -33,10 +33,8 @@ function render_block_core_calendar( $attributes ) { str_contains( $permalink_structure, '%monthnum%' ) && str_contains( $permalink_structure, '%year%' ) ) { - // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited $monthnum = $attributes['month']; - // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited - $year = $attributes['year']; + $year = $attributes['year']; } } @@ -70,10 +68,8 @@ function render_block_core_calendar( $attributes ) { $calendar ); - // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited $monthnum = $previous_monthnum; - // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited - $year = $previous_year; + $year = $previous_year; return $output; } diff --git a/src/wp-includes/blocks/categories.php b/src/wp-includes/blocks/categories.php index 7e3979b7aefe2..c35376505b134 100644 --- a/src/wp-includes/blocks/categories.php +++ b/src/wp-includes/blocks/categories.php @@ -70,8 +70,7 @@ function render_block_core_categories( $attributes ) { function build_dropdown_script_block_core_categories( $dropdown_id ) { ob_start(); ?> - ', '' ), '', ob_get_clean() ) ); } /** diff --git a/src/wp-includes/blocks/code/block.json b/src/wp-includes/blocks/code/block.json index 80df74b5062b5..bd5db3c918b96 100644 --- a/src/wp-includes/blocks/code/block.json +++ b/src/wp-includes/blocks/code/block.json @@ -8,8 +8,8 @@ "textdomain": "default", "attributes": { "content": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "code", "__unstablePreserveWhiteSpace": true } diff --git a/src/wp-includes/blocks/comments-title/block.json b/src/wp-includes/blocks/comments-title/block.json index 12b105afe9a31..4107f5d590cde 100644 --- a/src/wp-includes/blocks/comments-title/block.json +++ b/src/wp-includes/blocks/comments-title/block.json @@ -5,7 +5,7 @@ "title": "Comments Title", "category": "theme", "ancestor": [ "core/comments" ], - "description": "Displays a title with the number of comments", + "description": "Displays a title with the number of comments.", "textdomain": "default", "usesContext": [ "postId", "postType" ], "attributes": { diff --git a/src/wp-includes/blocks/cover/block.json b/src/wp-includes/blocks/cover/block.json index e88dd2d65a372..80562da309899 100644 --- a/src/wp-includes/blocks/cover/block.json +++ b/src/wp-includes/blocks/cover/block.json @@ -19,9 +19,6 @@ }, "alt": { "type": "string", - "source": "attribute", - "selector": "img", - "attribute": "alt", "default": "" }, "hasParallax": { @@ -42,6 +39,9 @@ "customOverlayColor": { "type": "string" }, + "isUserOverlayColor": { + "type": "boolean" + }, "backgroundType": { "type": "string", "default": "image" @@ -114,6 +114,9 @@ "__experimentalSkipSerialization": [ "gradients" ], "enableContrastChecker": false }, + "dimensions": { + "aspectRatio": true + }, "typography": { "fontSize": true, "lineHeight": true, diff --git a/src/wp-includes/blocks/details/block.json b/src/wp-includes/blocks/details/block.json index d449d42e1e10c..a71d3af2a5ed3 100644 --- a/src/wp-includes/blocks/details/block.json +++ b/src/wp-includes/blocks/details/block.json @@ -13,8 +13,8 @@ "default": false }, "summary": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "summary" } }, diff --git a/src/wp-includes/blocks/embed/block.json b/src/wp-includes/blocks/embed/block.json index 9ca54db871db1..5aac8bbd6b8ca 100644 --- a/src/wp-includes/blocks/embed/block.json +++ b/src/wp-includes/blocks/embed/block.json @@ -12,8 +12,8 @@ "__experimentalRole": "content" }, "caption": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "figcaption", "__experimentalRole": "content" }, diff --git a/src/wp-includes/blocks/file.php b/src/wp-includes/blocks/file.php index 042ea89970736..06eb10cf1d895 100644 --- a/src/wp-includes/blocks/file.php +++ b/src/wp-includes/blocks/file.php @@ -14,25 +14,8 @@ * * @return string Returns the block content. */ -function render_block_core_file( $attributes, $content, $block ) { - $should_load_view_script = ! empty( $attributes['displayPreview'] ); - $view_js_file = 'wp-block-file-view'; - // If the script already exists, there is no point in removing it from viewScript. - if ( ! wp_script_is( $view_js_file ) ) { - $script_handles = $block->block_type->view_script_handles; - - // If the script is not needed, and it is still in the `view_script_handles`, remove it. - if ( ! $should_load_view_script && in_array( $view_js_file, $script_handles, true ) ) { - $block->block_type->view_script_handles = array_diff( $script_handles, array( $view_js_file ) ); - } - // If the script is needed, but it was previously removed, add it again. - if ( $should_load_view_script && ! in_array( $view_js_file, $script_handles, true ) ) { - $block->block_type->view_script_handles = array_merge( $script_handles, array( $view_js_file ) ); - } - } - +function render_block_core_file( $attributes, $content ) { // Update object's aria-label attribute if present in block HTML. - // Match an aria-label attribute from an object tag. $pattern = '@aria-label="(?[^"]+)?")@i'; $content = preg_replace_callback( @@ -53,13 +36,15 @@ static function ( $matches ) { $content ); - // If it uses the Interactivity API, add the directives. - if ( $should_load_view_script ) { + // If it's interactive, enqueue the script module and add the directives. + if ( ! empty( $attributes['displayPreview'] ) ) { + wp_enqueue_script_module( '@wordpress/block-library/file' ); + $processor = new WP_HTML_Tag_Processor( $content ); $processor->next_tag(); - $processor->set_attribute( 'data-wp-interactive', '' ); + $processor->set_attribute( 'data-wp-interactive', '{"namespace":"core/file"}' ); $processor->next_tag( 'object' ); - $processor->set_attribute( 'data-wp-bind--hidden', '!selectors.core.file.hasPdfPreview' ); + $processor->set_attribute( 'data-wp-bind--hidden', '!state.hasPdfPreview' ); $processor->set_attribute( 'hidden', true ); return $processor->get_updated_html(); } @@ -67,25 +52,6 @@ static function ( $matches ) { return $content; } -/** - * Ensure that the view script has the `wp-interactivity` dependency. - * - * @since 6.4.0 - * - * @global WP_Scripts $wp_scripts - */ -function block_core_file_ensure_interactivity_dependency() { - global $wp_scripts; - if ( - isset( $wp_scripts->registered['wp-block-file-view'] ) && - ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-file-view']->deps, true ) - ) { - $wp_scripts->registered['wp-block-file-view']->deps[] = 'wp-interactivity'; - } -} - -add_action( 'wp_print_scripts', 'block_core_file_ensure_interactivity_dependency' ); - /** * Registers the `core/file` block on server. */ @@ -96,5 +62,12 @@ function register_block_core_file() { 'render_callback' => 'render_block_core_file', ) ); + + wp_register_script_module( + '@wordpress/block-library/file', + defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ? gutenberg_url( '/build/interactivity/file.min.js' ) : includes_url( 'blocks/file/view.min.js' ), + array( '@wordpress/interactivity' ), + defined( 'GUTENBERG_VERSION' ) ? GUTENBERG_VERSION : get_bloginfo( 'version' ) + ); } add_action( 'init', 'register_block_core_file' ); diff --git a/src/wp-includes/blocks/file/block.json b/src/wp-includes/blocks/file/block.json index 0cc20b3f501e9..fd5da67d284f4 100644 --- a/src/wp-includes/blocks/file/block.json +++ b/src/wp-includes/blocks/file/block.json @@ -21,8 +21,8 @@ "attribute": "id" }, "fileName": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "a:not([download])" }, "textLinkHref": { @@ -42,8 +42,8 @@ "default": true }, "downloadButtonText": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "a[download]" }, "displayPreview": { @@ -72,7 +72,6 @@ }, "interactivity": true }, - "viewScript": "file:./view.min.js", "editorStyle": "wp-block-file-editor", "style": "wp-block-file" } diff --git a/src/wp-includes/blocks/footnotes.php b/src/wp-includes/blocks/footnotes.php index bc6291dd21c38..0cd2ad73ef3d4 100644 --- a/src/wp-includes/blocks/footnotes.php +++ b/src/wp-includes/blocks/footnotes.php @@ -68,17 +68,26 @@ function render_block_core_footnotes( $attributes, $content, $block ) { * @since 6.3.0 */ function register_block_core_footnotes() { - foreach ( array( 'post', 'page' ) as $post_type ) { - register_post_meta( - $post_type, - 'footnotes', - array( - 'show_in_rest' => true, - 'single' => true, - 'type' => 'string', - 'revisions_enabled' => true, - ) - ); + $post_types = get_post_types( + array( + 'show_in_rest' => true, + 'public' => true, + ) + ); + foreach ( $post_types as $post_type ) { + // Only register the meta field if the post type supports the editor, custom fields, and revisions. + if ( post_type_supports( $post_type, 'editor' ) && post_type_supports( $post_type, 'custom-fields' ) && post_type_supports( $post_type, 'revisions' ) ) { + register_post_meta( + $post_type, + 'footnotes', + array( + 'show_in_rest' => true, + 'single' => true, + 'type' => 'string', + 'revisions_enabled' => true, + ) + ); + } } register_block_type_from_metadata( __DIR__ . '/footnotes', diff --git a/src/wp-includes/blocks/footnotes/block.json b/src/wp-includes/blocks/footnotes/block.json index 28b094f24f916..3192df7796978 100644 --- a/src/wp-includes/blocks/footnotes/block.json +++ b/src/wp-includes/blocks/footnotes/block.json @@ -4,7 +4,7 @@ "name": "core/footnotes", "title": "Footnotes", "category": "text", - "description": "", + "description": "Display footnotes added to the page.", "keywords": [ "references" ], "textdomain": "default", "usesContext": [ "postId", "postType" ], @@ -33,6 +33,7 @@ "html": false, "multiple": false, "reusable": false, + "inserter": false, "spacing": { "margin": true, "padding": true, diff --git a/src/wp-includes/blocks/gallery.php b/src/wp-includes/blocks/gallery.php index edde9b4da101a..342264de6fce3 100644 --- a/src/wp-includes/blocks/gallery.php +++ b/src/wp-includes/blocks/gallery.php @@ -32,6 +32,21 @@ function block_core_gallery_data_id_backcompatibility( $parsed_block ) { add_filter( 'render_block_data', 'block_core_gallery_data_id_backcompatibility' ); +/** + * Filter to randomize the order of image blocks. + * + * @param array $parsed_block The block being rendered. + * @return array The block object with randomized order of image blocks. + */ +function block_core_gallery_random_order( $parsed_block ) { + if ( 'core/gallery' === $parsed_block['blockName'] && ! empty( $parsed_block['attrs']['randomOrder'] ) ) { + shuffle( $parsed_block['innerBlocks'] ); + } + return $parsed_block; +} + +add_filter( 'render_block_data', 'block_core_gallery_random_order' ); + /** * Adds a style tag for the --wp--style--unstable-gallery-gap var. * diff --git a/src/wp-includes/blocks/gallery/block.json b/src/wp-includes/blocks/gallery/block.json index 0867989af4ec7..a5425c55381f9 100644 --- a/src/wp-includes/blocks/gallery/block.json +++ b/src/wp-includes/blocks/gallery/block.json @@ -46,8 +46,8 @@ "attribute": "data-id" }, "caption": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": ".blocks-gallery-item__caption" } } @@ -72,14 +72,18 @@ "maximum": 8 }, "caption": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": ".blocks-gallery-caption" }, "imageCrop": { "type": "boolean", "default": true }, + "randomOrder": { + "type": "boolean", + "default": false + }, "fixedHeight": { "type": "boolean", "default": true diff --git a/src/wp-includes/blocks/group/block.json b/src/wp-includes/blocks/group/block.json index 4b89d86539117..674b0645f5021 100644 --- a/src/wp-includes/blocks/group/block.json +++ b/src/wp-includes/blocks/group/block.json @@ -24,13 +24,16 @@ "__experimentalOnEnter": true, "__experimentalOnMerge": true, "__experimentalSettings": true, - "__experimentalMetadata": true, "align": [ "wide", "full" ], "anchor": true, "ariaLabel": true, "html": false, "background": { - "backgroundImage": true + "backgroundImage": true, + "backgroundSize": true, + "__experimentalDefaultControls": { + "backgroundImage": true + } }, "color": { "gradients": true, @@ -52,6 +55,7 @@ } }, "dimensions": { + "aspectRatio": true, "minHeight": true }, "__experimentalBorder": { diff --git a/src/wp-includes/blocks/heading/block.json b/src/wp-includes/blocks/heading/block.json index 7c018f8472cb4..a1eb3fce32ef1 100644 --- a/src/wp-includes/blocks/heading/block.json +++ b/src/wp-includes/blocks/heading/block.json @@ -7,15 +7,15 @@ "description": "Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.", "keywords": [ "title", "subtitle" ], "textdomain": "default", + "usesContext": [ "pattern/overrides" ], "attributes": { "textAlign": { "type": "string" }, "content": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "h1,h2,h3,h4,h5,h6", - "default": "", "__experimentalRole": "content" }, "level": { @@ -57,9 +57,7 @@ "__experimentalTextDecoration": true, "__experimentalWritingMode": true, "__experimentalDefaultControls": { - "fontSize": true, - "fontAppearance": true, - "textTransform": true + "fontSize": true } }, "__unstablePasteTextInline": true, diff --git a/src/wp-includes/blocks/image.php b/src/wp-includes/blocks/image.php index acefd5714bbd4..f926890c1a3fc 100644 --- a/src/wp-includes/blocks/image.php +++ b/src/wp-includes/blocks/image.php @@ -37,9 +37,6 @@ function render_block_core_image( $attributes, $content, $block ) { $link_destination = isset( $attributes['linkDestination'] ) ? $attributes['linkDestination'] : 'none'; $lightbox_settings = block_core_image_get_lightbox_settings( $block->parsed_block ); - $view_js_file_handle = 'wp-block-image-view'; - $script_handles = $block->block_type->view_script_handles; - /* * If the lightbox is enabled and the image is not linked, add the filter * and the JavaScript view file. @@ -50,31 +47,22 @@ function render_block_core_image( $attributes, $content, $block ) { isset( $lightbox_settings['enabled'] ) && true === $lightbox_settings['enabled'] ) { - $block->block_type->supports['interactivity'] = true; - - if ( ! in_array( $view_js_file_handle, $script_handles, true ) ) { - $block->block_type->view_script_handles = array_merge( $script_handles, array( $view_js_file_handle ) ); - } + wp_enqueue_script_module( '@wordpress/block-library/image' ); /* - * This render needs to happen in a filter with priority 15 to ensure - * that it runs after the duotone filter and that duotone styles are - * applied to the image in the lightbox. We also need to ensure that the - * lightbox works with any plugins that might use filters as well. We - * can consider removing this in the future if the way the blocks are - * rendered changes, or if a new kind of filter is introduced. + * This render needs to happen in a filter with priority 15 to ensure that + * it runs after the duotone filter and that duotone styles are applied to + * the image in the lightbox. Lightbox has to work with any plugins that + * might use filters as well. Removing this can be considered in the + * future if the way the blocks are rendered changes, or if a + * new kind of filter is introduced. */ add_filter( 'render_block_core/image', 'block_core_image_render_lightbox', 15, 2 ); } else { /* - * Remove the filter and the JavaScript view file if previously added by - * other Image blocks. + * Remove the filter if previously added by other Image blocks. */ remove_filter( 'render_block_core/image', 'block_core_image_render_lightbox', 15 ); - // If the script is not needed, and it is still in the `view_script_handles`, remove it. - if ( in_array( $view_js_file_handle, $script_handles, true ) ) { - $block->block_type->view_script_handles = array_diff( $script_handles, array( $view_js_file_handle ) ); - } } return $processor->get_updated_html(); @@ -93,12 +81,6 @@ function block_core_image_get_lightbox_settings( $block ) { // Get the lightbox setting from the block attributes. if ( isset( $block['attrs']['lightbox'] ) ) { $lightbox_settings = $block['attrs']['lightbox']; - // If the lightbox setting is not set in the block attributes, - // check the legacy lightbox settings that are set using the - // `gutenberg_should_render_lightbox` filter. - // We can remove this elseif statement when the legacy lightbox settings are removed. - } elseif ( isset( $block['legacyLightboxSettings'] ) ) { - $lightbox_settings = $block['legacyLightboxSettings']; } if ( ! isset( $lightbox_settings ) ) { @@ -187,27 +169,23 @@ function block_core_image_render_lightbox( $block_content, $block ) { $w = new WP_HTML_Tag_Processor( $block_content ); $w->next_tag( 'figure' ); $w->add_class( 'wp-lightbox-container' ); - $w->set_attribute( 'data-wp-interactive', true ); + $w->set_attribute( 'data-wp-interactive', '{"namespace":"core/image"}' ); $w->set_attribute( 'data-wp-context', sprintf( - '{ "core": - { "image": - { "imageLoaded": false, - "initialized": false, - "lightboxEnabled": false, - "hideAnimationEnabled": false, - "preloadInitialized": false, - "lightboxAnimation": "%s", - "imageUploadedSrc": "%s", - "imageCurrentSrc": "", - "targetWidth": "%s", - "targetHeight": "%s", - "scaleAttr": "%s", - "dialogLabel": "%s" - } - } + '{ "imageLoaded": false, + "initialized": false, + "lightboxEnabled": false, + "hideAnimationEnabled": false, + "preloadInitialized": false, + "lightboxAnimation": "%s", + "imageUploadedSrc": "%s", + "imageCurrentSrc": "", + "targetWidth": "%s", + "targetHeight": "%s", + "scaleAttr": "%s", + "dialogLabel": "%s" }', $lightbox_animation, $img_uploaded_src, @@ -218,14 +196,14 @@ function block_core_image_render_lightbox( $block_content, $block ) { ) ); $w->next_tag( 'img' ); - $w->set_attribute( 'data-wp-init', 'effects.core.image.initOriginImage' ); - $w->set_attribute( 'data-wp-on--load', 'actions.core.image.handleLoad' ); - $w->set_attribute( 'data-wp-effect', 'effects.core.image.setButtonStyles' ); + $w->set_attribute( 'data-wp-init', 'callbacks.initOriginImage' ); + $w->set_attribute( 'data-wp-on--load', 'actions.handleLoad' ); + $w->set_attribute( 'data-wp-watch', 'callbacks.setButtonStyles' ); // We need to set an event callback on the `img` specifically // because the `figure` element can also contain a caption, and // we don't want to trigger the lightbox when the caption is clicked. - $w->set_attribute( 'data-wp-on--click', 'actions.core.image.showLightbox' ); - $w->set_attribute( 'data-wp-effect--setStylesOnResize', 'effects.core.image.setStylesOnResize' ); + $w->set_attribute( 'data-wp-on--click', 'actions.showLightbox' ); + $w->set_attribute( 'data-wp-watch--setStylesOnResize', 'callbacks.setStylesOnResize' ); $body_content = $w->get_updated_html(); // Add a button alongside image in the body content. @@ -239,9 +217,10 @@ class="lightbox-trigger" type="button" aria-haspopup="dialog" aria-label="' . esc_attr( $aria_label ) . '" - data-wp-on--click="actions.core.image.showLightbox" - data-wp-style--right="context.core.image.imageButtonRight" - data-wp-style--top="context.core.image.imageButtonTop" + data-wp-init="callbacks.initTriggerButton" + data-wp-on--click="actions.showLightbox" + data-wp-style--right="context.imageButtonRight" + data-wp-style--top="context.imageButtonTop" > @@ -267,8 +246,8 @@ class="lightbox-trigger" // use the exact same image as in the content when the lightbox is first opened while // we wait for the larger image to load. $m->set_attribute( 'src', '' ); - $m->set_attribute( 'data-wp-bind--src', 'context.core.image.imageCurrentSrc' ); - $m->set_attribute( 'data-wp-style--object-fit', 'selectors.core.image.lightboxObjectFit' ); + $m->set_attribute( 'data-wp-bind--src', 'context.imageCurrentSrc' ); + $m->set_attribute( 'data-wp-style--object-fit', 'state.lightboxObjectFit' ); $initial_image_content = $m->get_updated_html(); $q = new WP_HTML_Tag_Processor( $block_content ); @@ -283,8 +262,8 @@ class="lightbox-trigger" // and Chrome (see https://github.com/WordPress/gutenberg/pull/52765#issuecomment-1674008151). Until that // is resolved, manually setting the 'src' seems to be the best solution to load the large image on demand. $q->set_attribute( 'src', '' ); - $q->set_attribute( 'data-wp-bind--src', 'selectors.core.image.enlargedImgSrc' ); - $q->set_attribute( 'data-wp-style--object-fit', 'selectors.core.image.lightboxObjectFit' ); + $q->set_attribute( 'data-wp-bind--src', 'state.enlargedImgSrc' ); + $q->set_attribute( 'data-wp-style--object-fit', 'state.lightboxObjectFit' ); $enlarged_image_content = $q->get_updated_html(); // If the current theme does NOT have a `theme.json`, or the colors are not defined, @@ -307,21 +286,21 @@ class="lightbox-trigger" $lightbox_html = << - @@ -333,25 +312,6 @@ class="lightbox-trigger" return str_replace( '', $lightbox_html . '', $body_content ); } -/** - * Ensures that the view script has the `wp-interactivity` dependency. - * - * @since 6.4.0 - * - * @global WP_Scripts $wp_scripts - */ -function block_core_image_ensure_interactivity_dependency() { - global $wp_scripts; - if ( - isset( $wp_scripts->registered['wp-block-image-view'] ) && - ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-image-view']->deps, true ) - ) { - $wp_scripts->registered['wp-block-image-view']->deps[] = 'wp-interactivity'; - } -} - -add_action( 'wp_print_scripts', 'block_core_image_ensure_interactivity_dependency' ); - /** * Registers the `core/image` block on server. */ @@ -362,5 +322,12 @@ function register_block_core_image() { 'render_callback' => 'render_block_core_image', ) ); + + wp_register_script_module( + '@wordpress/block-library/image', + defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ? gutenberg_url( '/build/interactivity/image.min.js' ) : includes_url( 'blocks/image/view.min.js' ), + array( '@wordpress/interactivity' ), + defined( 'GUTENBERG_VERSION' ) ? GUTENBERG_VERSION : get_bloginfo( 'version' ) + ); } add_action( 'init', 'register_block_core_image' ); diff --git a/src/wp-includes/blocks/image/block.json b/src/wp-includes/blocks/image/block.json index d665a8a8f7708..d60bcadf0eec7 100644 --- a/src/wp-includes/blocks/image/block.json +++ b/src/wp-includes/blocks/image/block.json @@ -4,14 +4,16 @@ "name": "core/image", "title": "Image", "category": "media", - "usesContext": [ "allowResize", "imageCrop", "fixedHeight" ], + "usesContext": [ + "allowResize", + "imageCrop", + "fixedHeight", + "pattern/overrides" + ], "description": "Insert an image to make a visual statement.", "keywords": [ "img", "photo", "picture" ], "textdomain": "default", "attributes": { - "align": { - "type": "string" - }, "url": { "type": "string", "source": "attribute", @@ -28,8 +30,8 @@ "__experimentalRole": "content" }, "caption": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "figcaption", "__experimentalRole": "content" }, @@ -95,6 +97,8 @@ } }, "supports": { + "interactivity": true, + "align": [ "left", "center", "right", "wide", "full" ], "anchor": true, "color": { "text": false, @@ -130,6 +134,5 @@ { "name": "rounded", "label": "Rounded" } ], "editorStyle": "wp-block-image-editor", - "style": "wp-block-image", - "viewScript": "file:./view.min.js" + "style": "wp-block-image" } diff --git a/src/wp-includes/blocks/legacy-widget/block.json b/src/wp-includes/blocks/legacy-widget/block.json index 6b0c1e2a916fd..a03eb090633fc 100644 --- a/src/wp-includes/blocks/legacy-widget/block.json +++ b/src/wp-includes/blocks/legacy-widget/block.json @@ -1,4 +1,5 @@ { + "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "core/legacy-widget", "title": "Legacy Widget", diff --git a/src/wp-includes/blocks/list-item/block.json b/src/wp-includes/blocks/list-item/block.json index 41221f1c31772..06997c2ac23f8 100644 --- a/src/wp-includes/blocks/list-item/block.json +++ b/src/wp-includes/blocks/list-item/block.json @@ -12,16 +12,23 @@ "type": "string" }, "content": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "li", - "default": "", "__experimentalRole": "content" } }, "supports": { "className": false, "__experimentalSelector": "li", + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, "typography": { "fontSize": true, "lineHeight": true, diff --git a/src/wp-includes/blocks/loginout/block.json b/src/wp-includes/blocks/loginout/block.json index 3593961c09cfd..59fceec596e37 100644 --- a/src/wp-includes/blocks/loginout/block.json +++ b/src/wp-includes/blocks/loginout/block.json @@ -19,6 +19,14 @@ }, "supports": { "className": true, + "spacing": { + "margin": true, + "padding": true, + "__experimentalDefaultControls": { + "margin": false, + "padding": false + } + }, "typography": { "fontSize": true, "lineHeight": true, diff --git a/src/wp-includes/blocks/missing/block.json b/src/wp-includes/blocks/missing/block.json index 0bc512bbbf709..242a1d2c6b21a 100644 --- a/src/wp-includes/blocks/missing/block.json +++ b/src/wp-includes/blocks/missing/block.json @@ -15,7 +15,7 @@ }, "originalContent": { "type": "string", - "source": "html" + "source": "raw" } }, "supports": { diff --git a/src/wp-includes/blocks/navigation-link.php b/src/wp-includes/blocks/navigation-link.php index 5333ab6ea3dc9..71ef26b630d51 100644 --- a/src/wp-includes/blocks/navigation-link.php +++ b/src/wp-includes/blocks/navigation-link.php @@ -1,6 +1,6 @@ get_registered( 'core/navigation-link' ); + // If the block is not registered yet, bail early. + // Variation will be registered in register_block_core_navigation_link then. + if ( ! $navigation_block_type ) { + return; + } + + $navigation_block_type->variations = array_merge( + $navigation_block_type->variations, + array( $variation ) + ); +} + +/** + * Unregister a variation for a post type / taxonomy for the navigation link block. + * + * @param string $name Name of the post type / taxonomy (which was used as variation name). + * @return void + */ +function block_core_navigation_link_unregister_variation( $name ) { + // Directly get the variations from the registered block type + // because there's no server side (un)registration for variations (see #47170). + $navigation_block_type = WP_Block_Type_Registry::get_instance()->get_registered( 'core/navigation-link' ); + // If the block is not registered (yet), there's no need to remove a variation. + if ( ! $navigation_block_type || empty( $navigation_block_type->variations ) ) { + return; + } + $variations = $navigation_block_type->variations; + // Search for the variation and remove it from the array. + foreach ( $variations as $i => $variation ) { + if ( $variation['name'] === $name ) { + unset( $variations[ $i ] ); + break; + } + } + // Reindex array after removing one variation. + $navigation_block_type->variations = array_values( $variations ); +} + /** * Register the navigation link block. + * Returns an array of variations for the navigation link block. * - * @uses render_block_core_navigation() - * @throws WP_Error An WP_Error exception parsing the block definition. + * @return array */ -function register_block_core_navigation_link() { +function build_navigation_link_block_variations() { + // This will only handle post types and taxonomies registered until this point (init on priority 9). + // See action hooks below for other post types and taxonomies. + // See https://github.com/WordPress/gutenberg/issues/53826 for details. $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' ); $taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'objects' ); @@ -360,12 +411,80 @@ function register_block_core_navigation_link() { } } + return array_merge( $built_ins, $variations ); +} + +/** + * Register the navigation link block. + * + * @uses render_block_core_navigation() + * @throws WP_Error An WP_Error exception parsing the block definition. + */ +function register_block_core_navigation_link() { register_block_type_from_metadata( __DIR__ . '/navigation-link', array( - 'render_callback' => 'render_block_core_navigation_link', - 'variations' => array_merge( $built_ins, $variations ), + 'render_callback' => 'render_block_core_navigation_link', + 'variation_callback' => 'build_navigation_link_block_variations', ) ); } add_action( 'init', 'register_block_core_navigation_link' ); +// Register actions for all post types and taxonomies, to add variations when they are registered. +// All post types/taxonomies registered before register_block_core_navigation_link, will be handled by that function. +add_action( 'registered_post_type', 'block_core_navigation_link_register_post_type_variation', 10, 2 ); +add_action( 'registered_taxonomy', 'block_core_navigation_link_register_taxonomy_variation', 10, 3 ); +// Handle unregistering of post types and taxonomies and remove the variations. +add_action( 'unregistered_post_type', 'block_core_navigation_link_unregister_post_type_variation' ); +add_action( 'unregistered_taxonomy', 'block_core_navigation_link_unregister_taxonomy_variation' ); + +/** + * Register custom post type variations for navigation link on post type registration + * Handles all post types registered after the block is registered in register_navigation_link_post_type_variations + * + * @param string $post_type The post type name passed from registered_post_type action hook. + * @param WP_Post_Type $post_type_object The post type object passed from registered_post_type. + * @return void + */ +function block_core_navigation_link_register_post_type_variation( $post_type, $post_type_object ) { + if ( $post_type_object->show_in_nav_menus ) { + $variation = build_variation_for_navigation_link( $post_type_object, 'post-type' ); + block_core_navigation_link_register_variation( $variation ); + } +} + +/** + * Register a custom taxonomy variation for navigation link on taxonomy registration + * Handles all taxonomies registered after the block is registered in register_navigation_link_post_type_variations + * + * @param string $taxonomy Taxonomy slug. + * @param array|string $object_type Object type or array of object types. + * @param array $args Array of taxonomy registration arguments. + * @return void + */ +function block_core_navigation_link_register_taxonomy_variation( $taxonomy, $object_type, $args ) { + if ( isset( $args['show_in_nav_menus'] ) && $args['show_in_nav_menus'] ) { + $variation = build_variation_for_navigation_link( (object) $args, 'post-type' ); + block_core_navigation_link_register_variation( $variation ); + } +} + +/** + * Unregisters a custom post type variation for navigation link on post type unregistration. + * + * @param string $post_type The post type name passed from unregistered_post_type action hook. + * @return void + */ +function block_core_navigation_link_unregister_post_type_variation( $post_type ) { + block_core_navigation_link_unregister_variation( $post_type ); +} + +/** + * Unregisters a custom taxonomy variation for navigation link on taxonomy unregistration. + * + * @param string $taxonomy The taxonomy name passed from unregistered_taxonomy action hook. + * @return void + */ +function block_core_navigation_link_unregister_taxonomy_variation( $taxonomy ) { + block_core_navigation_link_unregister_variation( $taxonomy ); +} diff --git a/src/wp-includes/blocks/navigation-link/block.json b/src/wp-includes/blocks/navigation-link/block.json index b2cbeaed63d3e..d8f2fe31aef9d 100644 --- a/src/wp-includes/blocks/navigation-link/block.json +++ b/src/wp-includes/blocks/navigation-link/block.json @@ -71,7 +71,8 @@ "__experimentalDefaultControls": { "fontSize": true } - } + }, + "renaming": false }, "editorStyle": "wp-block-navigation-link-editor", "style": "wp-block-navigation-link" diff --git a/src/wp-includes/blocks/navigation.php b/src/wp-includes/blocks/navigation.php index 4d9fe4a08c6bf..a0672a0bed580 100644 --- a/src/wp-includes/blocks/navigation.php +++ b/src/wp-includes/blocks/navigation.php @@ -5,6 +5,648 @@ * @package WordPress */ +/** + * Helper functions used to render the navigation block. + */ +class WP_Navigation_Block_Renderer { + /** + * Used to determine which blocks are wrapped in an
  • . + * + * @var array + */ + private static $nav_blocks_wrapped_in_list_item = array( + 'core/navigation-link', + 'core/home-link', + 'core/site-title', + 'core/site-logo', + 'core/navigation-submenu', + ); + + /** + * Used to determine which blocks need an
  • wrapper. + * + * @var array + */ + private static $needs_list_item_wrapper = array( + 'core/site-title', + 'core/site-logo', + ); + + /** + * Keeps track of all the navigation names that have been seen. + * + * @var array + */ + private static $seen_menu_names = array(); + + /** + * Returns whether or not this is responsive navigation. + * + * @param array $attributes The block attributes. + * @return bool Returns whether or not this is responsive navigation. + */ + private static function is_responsive( $attributes ) { + /** + * This is for backwards compatibility after the `isResponsive` attribute was been removed. + */ + + $has_old_responsive_attribute = ! empty( $attributes['isResponsive'] ) && $attributes['isResponsive']; + return isset( $attributes['overlayMenu'] ) && 'never' !== $attributes['overlayMenu'] || $has_old_responsive_attribute; + } + + /** + * Returns whether or not a navigation has a submenu. + * + * @param WP_Block_List $inner_blocks The list of inner blocks. + * @return bool Returns whether or not a navigation has a submenu. + */ + private static function has_submenus( $inner_blocks ) { + foreach ( $inner_blocks as $inner_block ) { + $inner_block_content = $inner_block->render(); + $p = new WP_HTML_Tag_Processor( $inner_block_content ); + if ( $p->next_tag( + array( + 'name' => 'LI', + 'class_name' => 'has-child', + ) + ) ) { + return true; + } + } + return false; + } + + /** + * Determine whether the navigation blocks is interactive. + * + * @param array $attributes The block attributes. + * @param WP_Block_List $inner_blocks The list of inner blocks. + * @return bool Returns whether or not to load the view script. + */ + private static function is_interactive( $attributes, $inner_blocks ) { + $has_submenus = static::has_submenus( $inner_blocks ); + $is_responsive_menu = static::is_responsive( $attributes ); + return ( $has_submenus && ( $attributes['openSubmenusOnClick'] || $attributes['showSubmenuIcon'] ) ) || $is_responsive_menu; + } + + /** + * Returns whether or not a block needs a list item wrapper. + * + * @param WP_Block $block The block. + * @return bool Returns whether or not a block needs a list item wrapper. + */ + private static function does_block_need_a_list_item_wrapper( $block ) { + return in_array( $block->name, static::$needs_list_item_wrapper, true ); + } + + /** + * Returns the markup for a single inner block. + * + * @param WP_Block $inner_block The inner block. + * @return string Returns the markup for a single inner block. + */ + private static function get_markup_for_inner_block( $inner_block ) { + $inner_block_content = $inner_block->render(); + if ( ! empty( $inner_block_content ) ) { + if ( static::does_block_need_a_list_item_wrapper( $inner_block ) ) { + return '
  • ' . $inner_block_content . '
  • '; + } + + return $inner_block_content; + } + } + + /** + * Returns the html for the inner blocks of the navigation block. + * + * @param array $attributes The block attributes. + * @param WP_Block_List $inner_blocks The list of inner blocks. + * @return string Returns the html for the inner blocks of the navigation block. + */ + private static function get_inner_blocks_html( $attributes, $inner_blocks ) { + $has_submenus = static::has_submenus( $inner_blocks ); + $is_interactive = static::is_interactive( $attributes, $inner_blocks ); + + $style = static::get_styles( $attributes ); + $class = static::get_classes( $attributes ); + $container_attributes = get_block_wrapper_attributes( + array( + 'class' => 'wp-block-navigation__container ' . $class, + 'style' => $style, + ) + ); + + $inner_blocks_html = ''; + $is_list_open = false; + + foreach ( $inner_blocks as $inner_block ) { + $is_list_item = in_array( $inner_block->name, static::$nav_blocks_wrapped_in_list_item, true ); + + if ( $is_list_item && ! $is_list_open ) { + $is_list_open = true; + $inner_blocks_html .= sprintf( + '
      ', + $container_attributes + ); + } + + if ( ! $is_list_item && $is_list_open ) { + $is_list_open = false; + $inner_blocks_html .= '
    '; + } + + $inner_blocks_html .= static::get_markup_for_inner_block( $inner_block ); + } + + if ( $is_list_open ) { + $inner_blocks_html .= ''; + } + + // Add directives to the submenu if needed. + if ( $has_submenus && $is_interactive ) { + $tags = new WP_HTML_Tag_Processor( $inner_blocks_html ); + $inner_blocks_html = block_core_navigation_add_directives_to_submenu( $tags, $attributes ); + } + + return $inner_blocks_html; + } + + /** + * Gets the inner blocks for the navigation block from the navigation post. + * + * @param array $attributes The block attributes. + * @return WP_Block_List Returns the inner blocks for the navigation block. + */ + private static function get_inner_blocks_from_navigation_post( $attributes ) { + $navigation_post = get_post( $attributes['ref'] ); + if ( ! isset( $navigation_post ) ) { + return new WP_Block_List( array(), $attributes ); + } + + // Only published posts are valid. If this is changed then a corresponding change + // must also be implemented in `use-navigation-menu.js`. + if ( 'publish' === $navigation_post->post_status ) { + $parsed_blocks = parse_blocks( $navigation_post->post_content ); + + // 'parse_blocks' includes a null block with '\n\n' as the content when + // it encounters whitespace. This code strips it. + $blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks ); + + if ( function_exists( 'get_hooked_blocks' ) ) { + // Run Block Hooks algorithm to inject hooked blocks. + $markup = block_core_navigation_insert_hooked_blocks( $blocks, $navigation_post ); + $root_nav_block = parse_blocks( $markup )[0]; + + $blocks = isset( $root_nav_block['innerBlocks'] ) ? $root_nav_block['innerBlocks'] : $blocks; + } + + // TODO - this uses the full navigation block attributes for the + // context which could be refined. + return new WP_Block_List( $blocks, $attributes ); + } + } + + /** + * Gets the inner blocks for the navigation block from the fallback. + * + * @param array $attributes The block attributes. + * @return WP_Block_List Returns the inner blocks for the navigation block. + */ + private static function get_inner_blocks_from_fallback( $attributes ) { + $fallback_blocks = block_core_navigation_get_fallback_blocks(); + + // Fallback my have been filtered so do basic test for validity. + if ( empty( $fallback_blocks ) || ! is_array( $fallback_blocks ) ) { + return new WP_Block_List( array(), $attributes ); + } + + return new WP_Block_List( $fallback_blocks, $attributes ); + } + + /** + * Gets the inner blocks for the navigation block. + * + * @param array $attributes The block attributes. + * @param WP_Block $block The parsed block. + * @return WP_Block_List Returns the inner blocks for the navigation block. + */ + private static function get_inner_blocks( $attributes, $block ) { + $inner_blocks = $block->inner_blocks; + + // Ensure that blocks saved with the legacy ref attribute name (navigationMenuId) continue to render. + if ( array_key_exists( 'navigationMenuId', $attributes ) ) { + $attributes['ref'] = $attributes['navigationMenuId']; + } + + // If: + // - the gutenberg plugin is active + // - `__unstableLocation` is defined + // - we have menu items at the defined location + // - we don't have a relationship to a `wp_navigation` Post (via `ref`). + // ...then create inner blocks from the classic menu assigned to that location. + if ( + defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN && + array_key_exists( '__unstableLocation', $attributes ) && + ! array_key_exists( 'ref', $attributes ) && + ! empty( block_core_navigation_get_menu_items_at_location( $attributes['__unstableLocation'] ) ) + ) { + $inner_blocks = block_core_navigation_get_inner_blocks_from_unstable_location( $attributes ); + } + + // Load inner blocks from the navigation post. + if ( array_key_exists( 'ref', $attributes ) ) { + $inner_blocks = static::get_inner_blocks_from_navigation_post( $attributes ); + } + + // If there are no inner blocks then fallback to rendering an appropriate fallback. + if ( empty( $inner_blocks ) ) { + $inner_blocks = static::get_inner_blocks_from_fallback( $attributes ); + } + + /** + * Filter navigation block $inner_blocks. + * Allows modification of a navigation block menu items. + * + * @since 6.1.0 + * + * @param \WP_Block_List $inner_blocks + */ + $inner_blocks = apply_filters( 'block_core_navigation_render_inner_blocks', $inner_blocks ); + + $post_ids = block_core_navigation_get_post_ids( $inner_blocks ); + if ( $post_ids ) { + _prime_post_caches( $post_ids, false, false ); + } + + return $inner_blocks; + } + + /** + * Gets the name of the current navigation, if it has one. + * + * @param array $attributes The block attributes. + * @return string Returns the name of the navigation. + */ + private static function get_navigation_name( $attributes ) { + + $navigation_name = $attributes['ariaLabel'] ?? ''; + + // Load the navigation post. + if ( array_key_exists( 'ref', $attributes ) ) { + $navigation_post = get_post( $attributes['ref'] ); + if ( ! isset( $navigation_post ) ) { + return $navigation_name; + } + + // Only published posts are valid. If this is changed then a corresponding change + // must also be implemented in `use-navigation-menu.js`. + if ( 'publish' === $navigation_post->post_status ) { + $navigation_name = $navigation_post->post_title; + + // This is used to count the number of times a navigation name has been seen, + // so that we can ensure every navigation has a unique id. + if ( isset( static::$seen_menu_names[ $navigation_name ] ) ) { + ++static::$seen_menu_names[ $navigation_name ]; + } else { + static::$seen_menu_names[ $navigation_name ] = 1; + } + } + } + + return $navigation_name; + } + + /** + * Returns the layout class for the navigation block. + * + * @param array $attributes The block attributes. + * @return string Returns the layout class for the navigation block. + */ + private static function get_layout_class( $attributes ) { + $layout_justification = array( + 'left' => 'items-justified-left', + 'right' => 'items-justified-right', + 'center' => 'items-justified-center', + 'space-between' => 'items-justified-space-between', + ); + + $layout_class = ''; + if ( + isset( $attributes['layout']['justifyContent'] ) && + isset( $layout_justification[ $attributes['layout']['justifyContent'] ] ) + ) { + $layout_class .= $layout_justification[ $attributes['layout']['justifyContent'] ]; + } + if ( isset( $attributes['layout']['orientation'] ) && 'vertical' === $attributes['layout']['orientation'] ) { + $layout_class .= ' is-vertical'; + } + + if ( isset( $attributes['layout']['flexWrap'] ) && 'nowrap' === $attributes['layout']['flexWrap'] ) { + $layout_class .= ' no-wrap'; + } + return $layout_class; + } + + /** + * Return classes for the navigation block. + * + * @param array $attributes The block attributes. + * @return string Returns the classes for the navigation block. + */ + private static function get_classes( $attributes ) { + // Restore legacy classnames for submenu positioning. + $layout_class = static::get_layout_class( $attributes ); + $colors = block_core_navigation_build_css_colors( $attributes ); + $font_sizes = block_core_navigation_build_css_font_sizes( $attributes ); + $is_responsive_menu = static::is_responsive( $attributes ); + + // Manually add block support text decoration as CSS class. + $text_decoration = $attributes['style']['typography']['textDecoration'] ?? null; + $text_decoration_class = sprintf( 'has-text-decoration-%s', $text_decoration ); + + // Sets the is-collapsed class when the navigation is set to always use the overlay. + // This saves us from needing to do this check in the view.js file (see the collapseNav function). + $is_collapsed_class = static::is_always_overlay( $attributes ) ? array( 'is-collapsed' ) : array(); + + $classes = array_merge( + $colors['css_classes'], + $font_sizes['css_classes'], + $is_responsive_menu ? array( 'is-responsive' ) : array(), + $layout_class ? array( $layout_class ) : array(), + $text_decoration ? array( $text_decoration_class ) : array(), + $is_collapsed_class + ); + return implode( ' ', $classes ); + } + + private static function is_always_overlay( $attributes ) { + return isset( $attributes['overlayMenu'] ) && 'always' === $attributes['overlayMenu']; + } + + /** + * Get styles for the navigation block. + * + * @param array $attributes The block attributes. + * @return string Returns the styles for the navigation block. + */ + private static function get_styles( $attributes ) { + $colors = block_core_navigation_build_css_colors( $attributes ); + $font_sizes = block_core_navigation_build_css_font_sizes( $attributes ); + $block_styles = isset( $attributes['styles'] ) ? $attributes['styles'] : ''; + return $block_styles . $colors['inline_styles'] . $font_sizes['inline_styles']; + } + + /** + * Get the responsive container markup + * + * @param array $attributes The block attributes. + * @param WP_Block_List $inner_blocks The list of inner blocks. + * @param string $inner_blocks_html The markup for the inner blocks. + * @return string Returns the container markup. + */ + private static function get_responsive_container_markup( $attributes, $inner_blocks, $inner_blocks_html ) { + $is_interactive = static::is_interactive( $attributes, $inner_blocks ); + $colors = block_core_navigation_build_css_colors( $attributes ); + $modal_unique_id = wp_unique_id( 'modal-' ); + + $responsive_container_classes = array( + 'wp-block-navigation__responsive-container', + implode( ' ', $colors['overlay_css_classes'] ), + ); + $open_button_classes = array( + 'wp-block-navigation__responsive-container-open', + ); + + $should_display_icon_label = isset( $attributes['hasIcon'] ) && true === $attributes['hasIcon']; + $toggle_button_icon = ''; + if ( isset( $attributes['icon'] ) ) { + if ( 'menu' === $attributes['icon'] ) { + $toggle_button_icon = ''; + } + } + $toggle_button_content = $should_display_icon_label ? $toggle_button_icon : __( 'Menu' ); + $toggle_close_button_icon = ''; + $toggle_close_button_content = $should_display_icon_label ? $toggle_close_button_icon : __( 'Close' ); + $toggle_aria_label_open = $should_display_icon_label ? 'aria-label="' . __( 'Open menu' ) . '"' : ''; // Open button label. + $toggle_aria_label_close = $should_display_icon_label ? 'aria-label="' . __( 'Close menu' ) . '"' : ''; // Close button label. + + // Add Interactivity API directives to the markup if needed. + $open_button_directives = ''; + $responsive_container_directives = ''; + $responsive_dialog_directives = ''; + $close_button_directives = ''; + if ( $is_interactive ) { + $open_button_directives = ' + data-wp-on--click="actions.openMenuOnClick" + data-wp-on--keydown="actions.handleMenuKeydown" + '; + $responsive_container_directives = ' + data-wp-class--has-modal-open="state.isMenuOpen" + data-wp-class--is-menu-open="state.isMenuOpen" + data-wp-watch="callbacks.initMenu" + data-wp-on--keydown="actions.handleMenuKeydown" + data-wp-on--focusout="actions.handleMenuFocusout" + tabindex="-1" + '; + $responsive_dialog_directives = ' + data-wp-bind--aria-modal="state.ariaModal" + data-wp-bind--aria-label="state.ariaLabel" + data-wp-bind--role="state.roleAttribute" + '; + $close_button_directives = ' + data-wp-on--click="actions.closeMenuOnClick" + '; + $responsive_container_content_directives = ' + data-wp-watch="callbacks.focusFirstElement" + '; + } + + return sprintf( + ' +
    +
    +
    + +
    + %2$s +
    +
    +
    +
    ', + esc_attr( $modal_unique_id ), + $inner_blocks_html, + $toggle_aria_label_open, + $toggle_aria_label_close, + esc_attr( implode( ' ', $responsive_container_classes ) ), + esc_attr( implode( ' ', $open_button_classes ) ), + esc_attr( safecss_filter_attr( $colors['overlay_inline_styles'] ) ), + $toggle_button_content, + $toggle_close_button_content, + $open_button_directives, + $responsive_container_directives, + $responsive_dialog_directives, + $close_button_directives, + $responsive_container_content_directives + ); + } + + /** + * Get the wrapper attributes + * + * @param array $attributes The block attributes. + * @param WP_Block_List $inner_blocks A list of inner blocks. + * @return string Returns the navigation block markup. + */ + private static function get_nav_wrapper_attributes( $attributes, $inner_blocks ) { + $nav_menu_name = static::get_unique_navigation_name( $attributes ); + $is_interactive = static::is_interactive( $attributes, $inner_blocks ); + $is_responsive_menu = static::is_responsive( $attributes ); + $style = static::get_styles( $attributes ); + $class = static::get_classes( $attributes ); + $wrapper_attributes = get_block_wrapper_attributes( + array( + 'class' => $class, + 'style' => $style, + 'aria-label' => $nav_menu_name, + ) + ); + + if ( $is_responsive_menu ) { + $nav_element_directives = static::get_nav_element_directives( $is_interactive, $attributes ); + $wrapper_attributes .= ' ' . $nav_element_directives; + } + + return $wrapper_attributes; + } + + /** + * Gets the nav element directives. + * + * @param bool $is_interactive Whether the block is interactive. + * @param array $attributes The block attributes. + * @return string the directives for the navigation element. + */ + private static function get_nav_element_directives( $is_interactive, $attributes ) { + if ( ! $is_interactive ) { + return ''; + } + // When adding to this array be mindful of security concerns. + $nav_element_context = wp_json_encode( + array( + 'overlayOpenedBy' => array(), + 'type' => 'overlay', + 'roleAttribute' => '', + 'ariaLabel' => __( 'Menu' ), + ), + JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP + ); + $nav_element_directives = ' + data-wp-interactive=\'{"namespace":"core/navigation"}\' + data-wp-context=\'' . $nav_element_context . '\' + '; + + /* + * When the navigation's 'overlayMenu' attribute is set to 'always', JavaScript + * is not needed for collapsing the menu because the class is set manually. + */ + if ( ! static::is_always_overlay( $attributes ) ) { + $nav_element_directives .= 'data-wp-init="callbacks.initNav"'; + $nav_element_directives .= ' '; // space separator + $nav_element_directives .= 'data-wp-class--is-collapsed="context.isCollapsed"'; + } + + return $nav_element_directives; + } + + /** + * Handle view script module loading. + * + * @param array $attributes The block attributes. + * @param WP_Block $block The parsed block. + * @param WP_Block_List $inner_blocks The list of inner blocks. + */ + private static function handle_view_script_module_loading( $attributes, $block, $inner_blocks ) { + if ( static::is_interactive( $attributes, $inner_blocks ) ) { + wp_enqueue_script_module( '@wordpress/block-library/navigation' ); + } + } + + /** + * Returns the markup for the navigation block. + * + * @param array $attributes The block attributes. + * @param WP_Block_List $inner_blocks The list of inner blocks. + * @return string Returns the navigation wrapper markup. + */ + private static function get_wrapper_markup( $attributes, $inner_blocks ) { + $inner_blocks_html = static::get_inner_blocks_html( $attributes, $inner_blocks ); + if ( static::is_responsive( $attributes ) ) { + return static::get_responsive_container_markup( $attributes, $inner_blocks, $inner_blocks_html ); + } + return $inner_blocks_html; + } + + /** + * Returns a unique name for the navigation. + * + * @param array $attributes The block attributes. + * @return string Returns a unique name for the navigation. + */ + private static function get_unique_navigation_name( $attributes ) { + $nav_menu_name = static::get_navigation_name( $attributes ); + + // If the menu name has been used previously then append an ID + // to the name to ensure uniqueness across a given post. + if ( isset( static::$seen_menu_names[ $nav_menu_name ] ) && static::$seen_menu_names[ $nav_menu_name ] > 1 ) { + $count = static::$seen_menu_names[ $nav_menu_name ]; + $nav_menu_name = $nav_menu_name . ' ' . ( $count ); + } + + return $nav_menu_name; + } + + /** + * Renders the navigation block. + * + * @param array $attributes The block attributes. + * @param string $content The saved content. + * @param WP_Block $block The parsed block. + * @return string Returns the navigation block markup. + */ + public static function render( $attributes, $content, $block ) { + /** + * Deprecated: + * The rgbTextColor and rgbBackgroundColor attributes + * have been deprecated in favor of + * customTextColor and customBackgroundColor ones. + * Move the values from old attrs to the new ones. + */ + if ( isset( $attributes['rgbTextColor'] ) && empty( $attributes['textColor'] ) ) { + $attributes['customTextColor'] = $attributes['rgbTextColor']; + } + + if ( isset( $attributes['rgbBackgroundColor'] ) && empty( $attributes['backgroundColor'] ) ) { + $attributes['customBackgroundColor'] = $attributes['rgbBackgroundColor']; + } + + unset( $attributes['rgbTextColor'], $attributes['rgbBackgroundColor'] ); + + $inner_blocks = static::get_inner_blocks( $attributes, $block ); + // Prevent navigation blocks referencing themselves from rendering. + if ( block_core_navigation_block_contains_core_navigation( $inner_blocks ) ) { + return ''; + } + + static::handle_view_script_module_loading( $attributes, $block, $inner_blocks ); + + return sprintf( + '', + static::get_nav_wrapper_attributes( $attributes, $inner_blocks ), + static::get_wrapper_markup( $attributes, $inner_blocks ) + ); + } +} + // These functions are used for the __unstableLocation feature and only active // when the gutenberg plugin is active. if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) { @@ -65,68 +707,84 @@ function block_core_navigation_sort_menu_items_by_parent_id( $menu_items ) { return $menu_items_by_parent_id; } -} + /** + * Gets the inner blocks for the navigation block from the unstable location attribute. + * + * @param array $attributes The block attributes. + * @return WP_Block_List Returns the inner blocks for the navigation block. + */ + function block_core_navigation_get_inner_blocks_from_unstable_location( $attributes ) { + $menu_items = block_core_navigation_get_menu_items_at_location( $attributes['__unstableLocation'] ); + if ( empty( $menu_items ) ) { + return new WP_Block_List( array(), $attributes ); + } + + $menu_items_by_parent_id = block_core_navigation_sort_menu_items_by_parent_id( $menu_items ); + $parsed_blocks = block_core_navigation_parse_blocks_from_menu_items( $menu_items_by_parent_id[0], $menu_items_by_parent_id ); + return new WP_Block_List( $parsed_blocks, $attributes ); + } +} /** * Add Interactivity API directives to the navigation-submenu and page-list * blocks markup using the Tag Processor. * - * @param string $w Markup of the navigation block. - * @param array $block_attributes Block attributes. + * @param WP_HTML_Tag_Processor $tags Markup of the navigation block. + * @param array $block_attributes Block attributes. * * @return string Submenu markup with the directives injected. */ -function block_core_navigation_add_directives_to_submenu( $w, $block_attributes ) { - while ( $w->next_tag( +function block_core_navigation_add_directives_to_submenu( $tags, $block_attributes ) { + while ( $tags->next_tag( array( 'tag_name' => 'LI', 'class_name' => 'has-child', ) ) ) { // Add directives to the parent `
  • `. - $w->set_attribute( 'data-wp-interactive', true ); - $w->set_attribute( 'data-wp-context', '{ "core": { "navigation": { "submenuOpenedBy": {}, "type": "submenu" } } }' ); - $w->set_attribute( 'data-wp-effect', 'effects.core.navigation.initMenu' ); - $w->set_attribute( 'data-wp-on--focusout', 'actions.core.navigation.handleMenuFocusout' ); - $w->set_attribute( 'data-wp-on--keydown', 'actions.core.navigation.handleMenuKeydown' ); + $tags->set_attribute( 'data-wp-interactive', '{ "namespace": "core/navigation" }' ); + $tags->set_attribute( 'data-wp-context', '{ "submenuOpenedBy": {}, "type": "submenu" }' ); + $tags->set_attribute( 'data-wp-watch', 'callbacks.initMenu' ); + $tags->set_attribute( 'data-wp-on--focusout', 'actions.handleMenuFocusout' ); + $tags->set_attribute( 'data-wp-on--keydown', 'actions.handleMenuKeydown' ); // This is a fix for Safari. Without it, Safari doesn't change the active // element when the user clicks on a button. It can be removed once we add // an overlay to capture the clicks, instead of relying on the focusout // event. - $w->set_attribute( 'tabindex', '-1' ); + $tags->set_attribute( 'tabindex', '-1' ); if ( ! isset( $block_attributes['openSubmenusOnClick'] ) || false === $block_attributes['openSubmenusOnClick'] ) { - $w->set_attribute( 'data-wp-on--mouseenter', 'actions.core.navigation.openMenuOnHover' ); - $w->set_attribute( 'data-wp-on--mouseleave', 'actions.core.navigation.closeMenuOnHover' ); + $tags->set_attribute( 'data-wp-on--mouseenter', 'actions.openMenuOnHover' ); + $tags->set_attribute( 'data-wp-on--mouseleave', 'actions.closeMenuOnHover' ); } // Add directives to the toggle submenu button. - if ( $w->next_tag( + if ( $tags->next_tag( array( 'tag_name' => 'BUTTON', 'class_name' => 'wp-block-navigation-submenu__toggle', ) ) ) { - $w->set_attribute( 'data-wp-on--click', 'actions.core.navigation.toggleMenuOnClick' ); - $w->set_attribute( 'data-wp-bind--aria-expanded', 'selectors.core.navigation.isMenuOpen' ); + $tags->set_attribute( 'data-wp-on--click', 'actions.toggleMenuOnClick' ); + $tags->set_attribute( 'data-wp-bind--aria-expanded', 'state.isMenuOpen' ); // The `aria-expanded` attribute for SSR is already added in the submenu block. } // Add directives to the submenu. - if ( $w->next_tag( + if ( $tags->next_tag( array( 'tag_name' => 'UL', 'class_name' => 'wp-block-navigation__submenu-container', ) ) ) { - $w->set_attribute( 'data-wp-on--focus', 'actions.core.navigation.openMenuOnFocus' ); + $tags->set_attribute( 'data-wp-on--focus', 'actions.openMenuOnFocus' ); } // Iterate through subitems if exist. - block_core_navigation_add_directives_to_submenu( $w, $block_attributes ); + block_core_navigation_add_directives_to_submenu( $tags, $block_attributes ); } - return $w->get_updated_html(); + return $tags->get_updated_html(); } /** @@ -333,6 +991,17 @@ function block_core_navigation_get_fallback_blocks() { // Normalizing blocks may result in an empty array of blocks if they were all `null` blocks. // In this case default to the (Page List) fallback. $fallback_blocks = ! empty( $maybe_fallback ) ? $maybe_fallback : $fallback_blocks; + + if ( function_exists( 'get_hooked_blocks' ) ) { + // Run Block Hooks algorithm to inject hooked blocks. + // We have to run it here because we need the post ID of the Navigation block to track ignored hooked blocks. + $markup = block_core_navigation_insert_hooked_blocks( $fallback_blocks, $navigation_post ); + $blocks = parse_blocks( $markup ); + + if ( isset( $blocks[0]['innerBlocks'] ) ) { + $fallback_blocks = $blocks[0]['innerBlocks']; + } + } } /** @@ -344,7 +1013,7 @@ function block_core_navigation_get_fallback_blocks() { * * @since 5.9.0 * - * @param array[] default fallback blocks provided by the default block mechanic. + * @param array[] $fallback_blocks default fallback blocks provided by the default block mechanic. */ return apply_filters( 'block_core_navigation_render_fallback', $fallback_blocks ); } @@ -391,391 +1060,10 @@ function block_core_navigation_from_block_get_post_ids( $block ) { * @param string $content The saved content. * @param WP_Block $block The parsed block. * - * @return string Returns the post content with the legacy widget added. + * @return string Returns the navigation block markup. */ function render_block_core_navigation( $attributes, $content, $block ) { - static $seen_menu_names = array(); - - // Flag used to indicate whether the rendered output is considered to be - // a fallback (i.e. the block has no menu associated with it). - $is_fallback = false; - - $nav_menu_name = $attributes['ariaLabel'] ?? ''; - - /** - * Deprecated: - * The rgbTextColor and rgbBackgroundColor attributes - * have been deprecated in favor of - * customTextColor and customBackgroundColor ones. - * Move the values from old attrs to the new ones. - */ - if ( isset( $attributes['rgbTextColor'] ) && empty( $attributes['textColor'] ) ) { - $attributes['customTextColor'] = $attributes['rgbTextColor']; - } - - if ( isset( $attributes['rgbBackgroundColor'] ) && empty( $attributes['backgroundColor'] ) ) { - $attributes['customBackgroundColor'] = $attributes['rgbBackgroundColor']; - } - - unset( $attributes['rgbTextColor'], $attributes['rgbBackgroundColor'] ); - - /** - * This is for backwards compatibility after `isResponsive` attribute has been removed. - */ - $has_old_responsive_attribute = ! empty( $attributes['isResponsive'] ) && $attributes['isResponsive']; - $is_responsive_menu = isset( $attributes['overlayMenu'] ) && 'never' !== $attributes['overlayMenu'] || $has_old_responsive_attribute; - - $inner_blocks = $block->inner_blocks; - - // Ensure that blocks saved with the legacy ref attribute name (navigationMenuId) continue to render. - if ( array_key_exists( 'navigationMenuId', $attributes ) ) { - $attributes['ref'] = $attributes['navigationMenuId']; - } - - // If: - // - the gutenberg plugin is active - // - `__unstableLocation` is defined - // - we have menu items at the defined location - // - we don't have a relationship to a `wp_navigation` Post (via `ref`). - // ...then create inner blocks from the classic menu assigned to that location. - if ( - defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN && - array_key_exists( '__unstableLocation', $attributes ) && - ! array_key_exists( 'ref', $attributes ) && - ! empty( block_core_navigation_get_menu_items_at_location( $attributes['__unstableLocation'] ) ) - ) { - $menu_items = block_core_navigation_get_menu_items_at_location( $attributes['__unstableLocation'] ); - if ( empty( $menu_items ) ) { - return ''; - } - - $menu_items_by_parent_id = block_core_navigation_sort_menu_items_by_parent_id( $menu_items ); - $parsed_blocks = block_core_navigation_parse_blocks_from_menu_items( $menu_items_by_parent_id[0], $menu_items_by_parent_id ); - $inner_blocks = new WP_Block_List( $parsed_blocks, $attributes ); - } - - // Load inner blocks from the navigation post. - if ( array_key_exists( 'ref', $attributes ) ) { - $navigation_post = get_post( $attributes['ref'] ); - if ( ! isset( $navigation_post ) ) { - return ''; - } - - // Only published posts are valid. If this is changed then a corresponding change - // must also be implemented in `use-navigation-menu.js`. - if ( 'publish' === $navigation_post->post_status ) { - $nav_menu_name = $navigation_post->post_title; - - if ( isset( $seen_menu_names[ $nav_menu_name ] ) ) { - ++$seen_menu_names[ $nav_menu_name ]; - } else { - $seen_menu_names[ $nav_menu_name ] = 1; - } - - $parsed_blocks = parse_blocks( $navigation_post->post_content ); - - // 'parse_blocks' includes a null block with '\n\n' as the content when - // it encounters whitespace. This code strips it. - $compacted_blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks ); - - // TODO - this uses the full navigation block attributes for the - // context which could be refined. - $inner_blocks = new WP_Block_List( $compacted_blocks, $attributes ); - } - } - - // If there are no inner blocks then fallback to rendering an appropriate fallback. - if ( empty( $inner_blocks ) ) { - $is_fallback = true; // indicate we are rendering the fallback. - - $fallback_blocks = block_core_navigation_get_fallback_blocks(); - - // Fallback my have been filtered so do basic test for validity. - if ( empty( $fallback_blocks ) || ! is_array( $fallback_blocks ) ) { - return ''; - } - - $inner_blocks = new WP_Block_List( $fallback_blocks, $attributes ); - } - - if ( block_core_navigation_block_contains_core_navigation( $inner_blocks ) ) { - return ''; - } - - /** - * Filter navigation block $inner_blocks. - * Allows modification of a navigation block menu items. - * - * @since 6.1.0 - * - * @param \WP_Block_List $inner_blocks - */ - $inner_blocks = apply_filters( 'block_core_navigation_render_inner_blocks', $inner_blocks ); - - $layout_justification = array( - 'left' => 'items-justified-left', - 'right' => 'items-justified-right', - 'center' => 'items-justified-center', - 'space-between' => 'items-justified-space-between', - ); - - // Restore legacy classnames for submenu positioning. - $layout_class = ''; - if ( - isset( $attributes['layout']['justifyContent'] ) && - isset( $layout_justification[ $attributes['layout']['justifyContent'] ] ) - ) { - $layout_class .= $layout_justification[ $attributes['layout']['justifyContent'] ]; - } - if ( isset( $attributes['layout']['orientation'] ) && 'vertical' === $attributes['layout']['orientation'] ) { - $layout_class .= ' is-vertical'; - } - - if ( isset( $attributes['layout']['flexWrap'] ) && 'nowrap' === $attributes['layout']['flexWrap'] ) { - $layout_class .= ' no-wrap'; - } - - // Manually add block support text decoration as CSS class. - $text_decoration = $attributes['style']['typography']['textDecoration'] ?? null; - $text_decoration_class = sprintf( 'has-text-decoration-%s', $text_decoration ); - - $colors = block_core_navigation_build_css_colors( $attributes ); - $font_sizes = block_core_navigation_build_css_font_sizes( $attributes ); - $classes = array_merge( - $colors['css_classes'], - $font_sizes['css_classes'], - $is_responsive_menu ? array( 'is-responsive' ) : array(), - $layout_class ? array( $layout_class ) : array(), - $is_fallback ? array( 'is-fallback' ) : array(), - $text_decoration ? array( $text_decoration_class ) : array() - ); - - $post_ids = block_core_navigation_get_post_ids( $inner_blocks ); - if ( $post_ids ) { - _prime_post_caches( $post_ids, false, false ); - } - - $list_item_nav_blocks = array( - 'core/navigation-link', - 'core/home-link', - 'core/site-title', - 'core/site-logo', - 'core/navigation-submenu', - ); - - $needs_list_item_wrapper = array( - 'core/site-title', - 'core/site-logo', - ); - - $block_styles = isset( $attributes['styles'] ) ? $attributes['styles'] : ''; - $style = $block_styles . $colors['inline_styles'] . $font_sizes['inline_styles']; - $class = implode( ' ', $classes ); - - // If the menu name has been used previously then append an ID - // to the name to ensure uniqueness across a given post. - if ( isset( $seen_menu_names[ $nav_menu_name ] ) && $seen_menu_names[ $nav_menu_name ] > 1 ) { - $count = $seen_menu_names[ $nav_menu_name ]; - $nav_menu_name = $nav_menu_name . ' ' . ( $count ); - } - - $wrapper_attributes = get_block_wrapper_attributes( - array( - 'class' => $class, - 'style' => $style, - 'aria-label' => $nav_menu_name, - ) - ); - - $container_attributes = get_block_wrapper_attributes( - array( - 'class' => 'wp-block-navigation__container ' . $class, - 'style' => $style, - ) - ); - - $inner_blocks_html = ''; - $is_list_open = false; - $has_submenus = false; - foreach ( $inner_blocks as $inner_block ) { - $is_list_item = in_array( $inner_block->name, $list_item_nav_blocks, true ); - - if ( $is_list_item && ! $is_list_open ) { - $is_list_open = true; - $inner_blocks_html .= sprintf( - '
      ', - $container_attributes - ); - } - - if ( ! $is_list_item && $is_list_open ) { - $is_list_open = false; - $inner_blocks_html .= '
    '; - } - - $inner_block_content = $inner_block->render(); - $p = new WP_HTML_Tag_Processor( $inner_block_content ); - if ( $p->next_tag( - array( - 'name' => 'LI', - 'class_name' => 'has-child', - ) - ) ) { - $has_submenus = true; - } - if ( ! empty( $inner_block_content ) ) { - if ( in_array( $inner_block->name, $needs_list_item_wrapper, true ) ) { - $inner_blocks_html .= '
  • ' . $inner_block_content . '
  • '; - } else { - $inner_blocks_html .= $inner_block_content; - } - } - } - - if ( $is_list_open ) { - $inner_blocks_html .= ''; - } - - $should_load_view_script = ( $has_submenus && ( $attributes['openSubmenusOnClick'] || $attributes['showSubmenuIcon'] ) ) || $is_responsive_menu; - $view_js_file = 'wp-block-navigation-view'; - - // If the script already exists, there is no point in removing it from viewScript. - if ( ! wp_script_is( $view_js_file ) ) { - $script_handles = $block->block_type->view_script_handles; - - // If the script is not needed, and it is still in the `view_script_handles`, remove it. - if ( ! $should_load_view_script && in_array( $view_js_file, $script_handles, true ) ) { - $block->block_type->view_script_handles = array_diff( $script_handles, array( $view_js_file ) ); - } - // If the script is needed, but it was previously removed, add it again. - if ( $should_load_view_script && ! in_array( $view_js_file, $script_handles, true ) ) { - $block->block_type->view_script_handles = array_merge( $script_handles, array( $view_js_file ) ); - } - } - - // Add directives to the submenu if needed. - if ( $has_submenus && $should_load_view_script ) { - $w = new WP_HTML_Tag_Processor( $inner_blocks_html ); - $inner_blocks_html = block_core_navigation_add_directives_to_submenu( $w, $attributes ); - } - - $modal_unique_id = wp_unique_id( 'modal-' ); - - // Determine whether or not navigation elements should be wrapped in the markup required to make it responsive, - // return early if they don't. - if ( ! $is_responsive_menu ) { - return sprintf( - '', - $wrapper_attributes, - $inner_blocks_html - ); - } - - $is_hidden_by_default = isset( $attributes['overlayMenu'] ) && 'always' === $attributes['overlayMenu']; - - $responsive_container_classes = array( - 'wp-block-navigation__responsive-container', - $is_hidden_by_default ? 'hidden-by-default' : '', - implode( ' ', $colors['overlay_css_classes'] ), - ); - $open_button_classes = array( - 'wp-block-navigation__responsive-container-open', - $is_hidden_by_default ? 'always-shown' : '', - ); - - $should_display_icon_label = isset( $attributes['hasIcon'] ) && true === $attributes['hasIcon']; - $toggle_button_icon = ''; - if ( isset( $attributes['icon'] ) ) { - if ( 'menu' === $attributes['icon'] ) { - $toggle_button_icon = ''; - } - } - $toggle_button_content = $should_display_icon_label ? $toggle_button_icon : __( 'Menu' ); - $toggle_close_button_icon = ''; - $toggle_close_button_content = $should_display_icon_label ? $toggle_close_button_icon : __( 'Close' ); - $toggle_aria_label_open = $should_display_icon_label ? 'aria-label="' . __( 'Open menu' ) . '"' : ''; // Open button label. - $toggle_aria_label_close = $should_display_icon_label ? 'aria-label="' . __( 'Close menu' ) . '"' : ''; // Close button label. - - // Add Interactivity API directives to the markup if needed. - $nav_element_directives = ''; - $open_button_directives = ''; - $responsive_container_directives = ''; - $responsive_dialog_directives = ''; - $close_button_directives = ''; - if ( $should_load_view_script ) { - $nav_element_context = wp_json_encode( - array( - 'core' => array( - 'navigation' => array( - 'overlayOpenedBy' => array(), - 'type' => 'overlay', - 'roleAttribute' => '', - 'ariaLabel' => __( 'Menu' ), - ), - ), - ), - JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP - ); - $nav_element_directives = ' - data-wp-interactive - data-wp-context=\'' . $nav_element_context . '\' - '; - $open_button_directives = ' - data-wp-on--click="actions.core.navigation.openMenuOnClick" - data-wp-on--keydown="actions.core.navigation.handleMenuKeydown" - '; - $responsive_container_directives = ' - data-wp-class--has-modal-open="selectors.core.navigation.isMenuOpen" - data-wp-class--is-menu-open="selectors.core.navigation.isMenuOpen" - data-wp-effect="effects.core.navigation.initMenu" - data-wp-on--keydown="actions.core.navigation.handleMenuKeydown" - data-wp-on--focusout="actions.core.navigation.handleMenuFocusout" - tabindex="-1" - '; - $responsive_dialog_directives = ' - data-wp-bind--aria-modal="selectors.core.navigation.ariaModal" - data-wp-bind--aria-label="selectors.core.navigation.ariaLabel" - data-wp-bind--role="selectors.core.navigation.roleAttribute" - data-wp-effect="effects.core.navigation.focusFirstElement" - '; - $close_button_directives = ' - data-wp-on--click="actions.core.navigation.closeMenuOnClick" - '; - } - - $responsive_container_markup = sprintf( - ' -
    -
    -
    - -
    - %2$s -
    -
    -
    -
    ', - esc_attr( $modal_unique_id ), - $inner_blocks_html, - $toggle_aria_label_open, - $toggle_aria_label_close, - esc_attr( implode( ' ', $responsive_container_classes ) ), - esc_attr( implode( ' ', $open_button_classes ) ), - esc_attr( safecss_filter_attr( $colors['overlay_inline_styles'] ) ), - $toggle_button_content, - $toggle_close_button_content, - $open_button_directives, - $responsive_container_directives, - $responsive_dialog_directives, - $close_button_directives - ); - - return sprintf( - '', - $wrapper_attributes, - $responsive_container_markup, - $nav_element_directives - ); + return WP_Navigation_Block_Renderer::render( $attributes, $content, $block ); } /** @@ -791,6 +1079,13 @@ function register_block_core_navigation() { 'render_callback' => 'render_block_core_navigation', ) ); + + wp_register_script_module( + '@wordpress/block-library/navigation', + defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ? gutenberg_url( '/build/interactivity/navigation.min.js' ) : includes_url( 'blocks/navigation/view.min.js' ), + array( '@wordpress/interactivity' ), + defined( 'GUTENBERG_VERSION' ) ? GUTENBERG_VERSION : get_bloginfo( 'version' ) + ); } add_action( 'init', 'register_block_core_navigation' ); @@ -829,25 +1124,6 @@ function block_core_navigation_typographic_presets_backcompatibility( $parsed_bl add_filter( 'render_block_data', 'block_core_navigation_typographic_presets_backcompatibility' ); -/** - * Ensure that the view script has the `wp-interactivity` dependency. - * - * @since 6.4.0 - * - * @global WP_Scripts $wp_scripts - */ -function block_core_navigation_ensure_interactivity_dependency() { - global $wp_scripts; - if ( - isset( $wp_scripts->registered['wp-block-navigation-view'] ) && - ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-navigation-view']->deps, true ) - ) { - $wp_scripts->registered['wp-block-navigation-view']->deps[] = 'wp-interactivity'; - } -} - -add_action( 'wp_print_scripts', 'block_core_navigation_ensure_interactivity_dependency' ); - /** * Turns menu item data into a nested array of parsed blocks * @@ -1066,3 +1342,120 @@ function block_core_navigation_get_most_recently_published_navigation() { return null; } + +/** + * Insert hooked blocks into a Navigation block. + * + * Given a Navigation block's inner blocks and its corresponding `wp_navigation` post object, + * this function inserts hooked blocks into it, and returns the serialized inner blocks in a + * mock Navigation block wrapper. + * + * If there are any hooked blocks that need to be inserted as the Navigation block's first or last + * children, the `wp_navigation` post's `_wp_ignored_hooked_blocks` meta is checked to see if any + * of those hooked blocks should be exempted from insertion. + * + * @param array $inner_blocks Parsed inner blocks of a Navigation block. + * @param WP_Post $post `wp_navigation` post object corresponding to the block. + * @return string Serialized inner blocks in mock Navigation block wrapper, with hooked blocks inserted, if any. + */ +function block_core_navigation_insert_hooked_blocks( $inner_blocks, $post = null ) { + $before_block_visitor = null; + $after_block_visitor = null; + $hooked_blocks = get_hooked_blocks(); + $attributes = array(); + + if ( isset( $post->ID ) ) { + $ignored_hooked_blocks = get_post_meta( $post->ID, '_wp_ignored_hooked_blocks', true ); + if ( ! empty( $ignored_hooked_blocks ) ) { + $ignored_hooked_blocks = json_decode( $ignored_hooked_blocks, true ); + $attributes['metadata'] = array( + 'ignoredHookedBlocks' => $ignored_hooked_blocks, + ); + } + } + + $mock_anchor_parent_block = array( + 'blockName' => 'core/navigation', + 'attrs' => $attributes, + 'innerBlocks' => $inner_blocks, + 'innerContent' => array_fill( 0, count( $inner_blocks ), null ), + ); + $before_block_visitor = null; + $after_block_visitor = null; + + if ( ! empty( $hooked_blocks ) || has_filter( 'hooked_block_types' ) ) { + $before_block_visitor = make_before_block_visitor( $hooked_blocks, $post ); + $after_block_visitor = make_after_block_visitor( $hooked_blocks, $post ); + } + + return traverse_and_serialize_block( $mock_anchor_parent_block, $before_block_visitor, $after_block_visitor ); +} + +/** + * Updates the post meta with the list of ignored hooked blocks when the navigation is created or updated via the REST API. + * + * @param WP_Post $post Post object. + */ +function block_core_navigation_update_ignore_hooked_blocks_meta( $post ) { + if ( ! isset( $post->ID ) ) { + return; + } + + // We run the Block Hooks mechanism so it will return the list of ignored hooked blocks + // in the mock root Navigation block's metadata attribute. + // We ignore the rest of the returned `$markup`; `$post->post_content` already has the hooked + // blocks inserted, whereas `$markup` will have them inserted twice. + $blocks = parse_blocks( $post->post_content ); + $markup = block_core_navigation_insert_hooked_blocks( $blocks, $post ); + $root_nav_block = parse_blocks( $markup )[0]; + $ignored_hooked_blocks = isset( $root_nav_block['attrs']['metadata']['ignoredHookedBlocks'] ) + ? $root_nav_block['attrs']['metadata']['ignoredHookedBlocks'] + : array(); + + if ( ! empty( $ignored_hooked_blocks ) ) { + $existing_ignored_hooked_blocks = get_post_meta( $post->ID, '_wp_ignored_hooked_blocks', true ); + if ( ! empty( $existing_ignored_hooked_blocks ) ) { + $existing_ignored_hooked_blocks = json_decode( $existing_ignored_hooked_blocks, true ); + $ignored_hooked_blocks = array_unique( array_merge( $ignored_hooked_blocks, $existing_ignored_hooked_blocks ) ); + } + update_post_meta( $post->ID, '_wp_ignored_hooked_blocks', json_encode( $ignored_hooked_blocks ) ); + } +} + +// Injection of hooked blocks into the Navigation block relies on some functions present in WP >= 6.4 +// that are not present in Gutenberg's WP 6.4 compatibility layer. +if ( function_exists( 'get_hooked_blocks' ) ) { + add_action( 'rest_insert_wp_navigation', 'block_core_navigation_update_ignore_hooked_blocks_meta', 10, 3 ); +} + +/** + * Hooks into the REST API response for the core/navigation block and adds the first and last inner blocks. + * + * @param WP_REST_Response $response The response object. + * @param WP_Post $post Post object. + * @param WP_REST_Request $request Request object. + * @return WP_REST_Response The response object. + */ +function block_core_navigation_insert_hooked_blocks_into_rest_response( $response, $post ) { + if ( ! isset( $response->data['content']['raw'] ) || ! isset( $response->data['content']['rendered'] ) ) { + return $response; + } + $parsed_blocks = parse_blocks( $response->data['content']['raw'] ); + $content = block_core_navigation_insert_hooked_blocks( $parsed_blocks, $post ); + + // Remove mock Navigation block wrapper. + $start = strpos( $content, '-->' ) + strlen( '-->' ); + $end = strrpos( $content, '`. Support these by defaulting an undefined label and @@ -36,7 +36,6 @@ function render_block_core_search( $attributes, $content, $block ) { $show_button = ( ! empty( $attributes['buttonPosition'] ) && 'no-button' === $attributes['buttonPosition'] ) ? false : true; $button_position = $show_button ? $attributes['buttonPosition'] : null; $query_params = ( ! empty( $attributes['query'] ) ) ? $attributes['query'] : array(); - $button_behavior = ( ! empty( $attributes['buttonBehavior'] ) ) ? $attributes['buttonBehavior'] : 'default'; $button = ''; $query_params_markup = ''; $inline_styles = styles_for_block_core_search( $attributes ); @@ -78,28 +77,18 @@ function render_block_core_search( $attributes, $content, $block ) { $input->set_attribute( 'value', get_search_query() ); $input->set_attribute( 'placeholder', $attributes['placeholder'] ); - $is_expandable_searchfield = 'button-only' === $button_position && 'expand-searchfield' === $button_behavior; + // If it's interactive, enqueue the script module and add the directives. + $is_expandable_searchfield = 'button-only' === $button_position; if ( $is_expandable_searchfield ) { - $input->set_attribute( 'data-wp-bind--aria-hidden', '!context.core.search.isSearchInputVisible' ); - $input->set_attribute( 'data-wp-bind--tabindex', 'selectors.core.search.tabindex' ); - // Adding these attributes manually is needed until the Interactivity API SSR logic is added to core. - $input->set_attribute( 'aria-hidden', 'true' ); - $input->set_attribute( 'tabindex', '-1' ); - } + wp_enqueue_script_module( '@wordpress/block-library/search' ); - // If the script already exists, there is no point in removing it from viewScript. - $view_js_file = 'wp-block-search-view'; - if ( ! wp_script_is( $view_js_file ) ) { - $script_handles = $block->block_type->view_script_handles; + $input->set_attribute( 'data-wp-bind--aria-hidden', '!context.isSearchInputVisible' ); + $input->set_attribute( 'data-wp-bind--tabindex', 'state.tabindex' ); - // If the script is not needed, and it is still in the `view_script_handles`, remove it. - if ( ! $is_expandable_searchfield && in_array( $view_js_file, $script_handles, true ) ) { - $block->block_type->view_script_handles = array_diff( $script_handles, array( $view_js_file ) ); - } - // If the script is needed, but it was previously removed, add it again. - if ( $is_expandable_searchfield && ! in_array( $view_js_file, $script_handles, true ) ) { - $block->block_type->view_script_handles = array_merge( $script_handles, array( $view_js_file ) ); - } + // Adding these attributes manually is needed until the Interactivity API + // SSR logic is added to core. + $input->set_attribute( 'aria-hidden', 'true' ); + $input->set_attribute( 'tabindex', '-1' ); } } @@ -144,13 +133,15 @@ function render_block_core_search( $attributes, $content, $block ) { if ( $button->next_tag() ) { $button->add_class( implode( ' ', $button_classes ) ); - if ( 'expand-searchfield' === $attributes['buttonBehavior'] && 'button-only' === $attributes['buttonPosition'] ) { - $button->set_attribute( 'data-wp-bind--aria-label', 'selectors.core.search.ariaLabel' ); - $button->set_attribute( 'data-wp-bind--aria-controls', 'selectors.core.search.ariaControls' ); - $button->set_attribute( 'data-wp-bind--aria-expanded', 'context.core.search.isSearchInputVisible' ); - $button->set_attribute( 'data-wp-bind--type', 'selectors.core.search.type' ); - $button->set_attribute( 'data-wp-on--click', 'actions.core.search.openSearchInput' ); - // Adding these attributes manually is needed until the Interactivity API SSR logic is added to core. + if ( 'button-only' === $attributes['buttonPosition'] ) { + $button->set_attribute( 'data-wp-bind--aria-label', 'state.ariaLabel' ); + $button->set_attribute( 'data-wp-bind--aria-controls', 'state.ariaControls' ); + $button->set_attribute( 'data-wp-bind--aria-expanded', 'context.isSearchInputVisible' ); + $button->set_attribute( 'data-wp-bind--type', 'state.type' ); + $button->set_attribute( 'data-wp-on--click', 'actions.openSearchInput' ); + + // Adding these attributes manually is needed until the Interactivity + // API SSR logic is added to core. $button->set_attribute( 'aria-label', __( 'Expand search field' ) ); $button->set_attribute( 'aria-controls', 'wp-block-search__input-' . $input_id ); $button->set_attribute( 'aria-expanded', 'false' ); @@ -172,15 +163,17 @@ function render_block_core_search( $attributes, $content, $block ) { array( 'class' => $classnames ) ); $form_directives = ''; + + // If it's interactive, add the directives. if ( $is_expandable_searchfield ) { $aria_label_expanded = __( 'Submit Search' ); $aria_label_collapsed = __( 'Expand search field' ); $form_directives = ' - data-wp-interactive - data-wp-context=\'{ "core": { "search": { "isSearchInputVisible": ' . $open_by_default . ', "inputId": "' . $input_id . '", "ariaLabelExpanded": "' . $aria_label_expanded . '", "ariaLabelCollapsed": "' . $aria_label_collapsed . '" } } }\' - data-wp-class--wp-block-search__searchfield-hidden="!context.core.search.isSearchInputVisible" - data-wp-on--keydown="actions.core.search.handleSearchKeydown" - data-wp-on--focusout="actions.core.search.handleSearchFocusout" + data-wp-interactive=\'{ "namespace": "core/search" }\' + data-wp-context=\'{ "isSearchInputVisible": ' . $open_by_default . ', "inputId": "' . $input_id . '", "ariaLabelExpanded": "' . $aria_label_expanded . '", "ariaLabelCollapsed": "' . $aria_label_collapsed . '" }\' + data-wp-class--wp-block-search__searchfield-hidden="!context.isSearchInputVisible" + data-wp-on--keydown="actions.handleSearchKeydown" + data-wp-on--focusout="actions.handleSearchFocusout" '; } @@ -203,27 +196,15 @@ function register_block_core_search() { 'render_callback' => 'render_block_core_search', ) ); -} -add_action( 'init', 'register_block_core_search' ); -/** - * Ensure that the view script has the `wp-interactivity` dependency. - * - * @since 6.4.0 - * - * @global WP_Scripts $wp_scripts - */ -function block_core_search_ensure_interactivity_dependency() { - global $wp_scripts; - if ( - isset( $wp_scripts->registered['wp-block-search-view'] ) && - ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-search-view']->deps, true ) - ) { - $wp_scripts->registered['wp-block-search-view']->deps[] = 'wp-interactivity'; - } + wp_register_script_module( + '@wordpress/block-library/search', + defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ? gutenberg_url( '/build/interactivity/search.min.js' ) : includes_url( 'blocks/search/view.min.js' ), + array( '@wordpress/interactivity' ), + defined( 'GUTENBERG_VERSION' ) ? GUTENBERG_VERSION : get_bloginfo( 'version' ) + ); } - -add_action( 'wp_print_scripts', 'block_core_search_ensure_interactivity_dependency' ); +add_action( 'init', 'register_block_core_search' ); /** * Builds the correct top level classnames for the 'core/search' block. @@ -249,10 +230,7 @@ function classnames_for_block_core_search( $attributes ) { } if ( 'button-only' === $attributes['buttonPosition'] ) { - $classnames[] = 'wp-block-search__button-only'; - if ( ! empty( $attributes['buttonBehavior'] ) && 'expand-searchfield' === $attributes['buttonBehavior'] ) { - $classnames[] = 'wp-block-search__button-behavior-expand wp-block-search__searchfield-hidden'; - } + $classnames[] = 'wp-block-search__button-only wp-block-search__searchfield-hidden'; } } diff --git a/src/wp-includes/blocks/search/block.json b/src/wp-includes/blocks/search/block.json index 5669a9089d0e0..8d5e208045068 100644 --- a/src/wp-includes/blocks/search/block.json +++ b/src/wp-includes/blocks/search/block.json @@ -43,10 +43,6 @@ "type": "object", "default": {} }, - "buttonBehavior": { - "type": "string", - "default": "expand-searchfield" - }, "isSearchFieldHidden": { "type": "boolean", "default": false @@ -91,7 +87,6 @@ }, "html": false }, - "viewScript": "file:./view.min.js", "editorStyle": "wp-block-search-editor", "style": "wp-block-search" } diff --git a/src/wp-includes/blocks/site-title/block.json b/src/wp-includes/blocks/site-title/block.json index e936bad0e4515..4a2685e6941fc 100644 --- a/src/wp-includes/blocks/site-title/block.json +++ b/src/wp-includes/blocks/site-title/block.json @@ -56,11 +56,7 @@ "__experimentalFontWeight": true, "__experimentalLetterSpacing": true, "__experimentalDefaultControls": { - "fontSize": true, - "lineHeight": true, - "fontAppearance": true, - "letterSpacing": true, - "textTransform": true + "fontSize": true } } }, diff --git a/src/wp-includes/blocks/social-link.php b/src/wp-includes/blocks/social-link.php index cda8e125097a5..fe256879fa4ff 100644 --- a/src/wp-includes/blocks/social-link.php +++ b/src/wp-includes/blocks/social-link.php @@ -33,7 +33,7 @@ function render_block_core_social_link( $attributes, $content, $block ) { * The `is_email` returns false for emails with schema. */ if ( is_email( $url ) ) { - $url = 'mailto:' . $url; + $url = 'mailto:' . antispambot( $url ); } /** @@ -62,10 +62,10 @@ function render_block_core_social_link( $attributes, $content, $block ) { $processor = new WP_HTML_Tag_Processor( $link ); $processor->next_tag( 'a' ); if ( $open_in_new_tab ) { - $processor->set_attribute( 'rel', esc_attr( $rel ) . ' noopener nofollow' ); + $processor->set_attribute( 'rel', trim( $rel . ' noopener nofollow' ) ); $processor->set_attribute( 'target', '_blank' ); } elseif ( '' !== $rel ) { - $processor->set_attribute( 'rel', esc_attr( $rel ) ); + $processor->set_attribute( 'rel', trim( $rel ) ); } return $processor->get_updated_html(); } @@ -194,6 +194,10 @@ function block_core_social_link_services( $service = '', $field = '' ) { 'name' => 'GitHub', 'icon' => '', ), + 'gravatar' => array( + 'name' => 'Gravatar', + 'icon' => '', + ), 'instagram' => array( 'name' => 'Instagram', 'icon' => '', diff --git a/src/wp-includes/blocks/table/block.json b/src/wp-includes/blocks/table/block.json index d1139d6c55add..470886a1247fe 100644 --- a/src/wp-includes/blocks/table/block.json +++ b/src/wp-includes/blocks/table/block.json @@ -12,10 +12,9 @@ "default": false }, "caption": { - "type": "string", - "source": "html", - "selector": "figcaption", - "default": "" + "type": "rich-text", + "source": "rich-text", + "selector": "figcaption" }, "head": { "type": "array", @@ -30,8 +29,8 @@ "selector": "td,th", "query": { "content": { - "type": "string", - "source": "html" + "type": "rich-text", + "source": "rich-text" }, "tag": { "type": "string", @@ -75,8 +74,8 @@ "selector": "td,th", "query": { "content": { - "type": "string", - "source": "html" + "type": "rich-text", + "source": "rich-text" }, "tag": { "type": "string", @@ -120,8 +119,8 @@ "selector": "td,th", "query": { "content": { - "type": "string", - "source": "html" + "type": "rich-text", + "source": "rich-text" }, "tag": { "type": "string", diff --git a/src/wp-includes/blocks/template-part.php b/src/wp-includes/blocks/template-part.php index 3ad400906945b..86a17f33c92f3 100644 --- a/src/wp-includes/blocks/template-part.php +++ b/src/wp-includes/blocks/template-part.php @@ -43,10 +43,10 @@ function render_block_core_template_part( $attributes ) { if ( $template_part_post ) { // A published post might already exist if this template part was customized elsewhere // or if it's part of a customized template. - $content = $template_part_post->post_content; - $area_terms = get_the_terms( $template_part_post, 'wp_template_part_area' ); - if ( ! is_wp_error( $area_terms ) && false !== $area_terms ) { - $area = $area_terms[0]->name; + $block_template = _build_block_template_result_from_post( $template_part_post ); + $content = $block_template->content; + if ( isset( $block_template->area ) ) { + $area = $block_template->area; } /** * Fires when a block template part is loaded from a template post stored in the database. @@ -70,6 +70,12 @@ function render_block_core_template_part( $attributes ) { if ( isset( $block_template->area ) ) { $area = $block_template->area; } + + // Needed for the `render_block_core_template_part_file` and `render_block_core_template_part_none` actions below. + $block_template_file = _get_block_template_file( 'wp_template_part', $attributes['slug'] ); + if ( $block_template_file ) { + $template_part_file_path = $block_template_file['path']; + } } if ( '' !== $content && null !== $content ) { @@ -275,8 +281,8 @@ function register_block_core_template_part() { register_block_type_from_metadata( __DIR__ . '/template-part', array( - 'render_callback' => 'render_block_core_template_part', - 'variations' => build_template_part_block_variations(), + 'render_callback' => 'render_block_core_template_part', + 'variation_callback' => 'build_template_part_block_variations', ) ); } diff --git a/src/wp-includes/blocks/template-part/block.json b/src/wp-includes/blocks/template-part/block.json index 9fe431150ae39..3b0946718bcb9 100644 --- a/src/wp-includes/blocks/template-part/block.json +++ b/src/wp-includes/blocks/template-part/block.json @@ -23,7 +23,8 @@ "supports": { "align": true, "html": false, - "reusable": false + "reusable": false, + "renaming": false }, "editorStyle": "wp-block-template-part-editor" } diff --git a/src/wp-includes/blocks/verse/block.json b/src/wp-includes/blocks/verse/block.json index d0fffc8ae5076..846a1dc99caaf 100644 --- a/src/wp-includes/blocks/verse/block.json +++ b/src/wp-includes/blocks/verse/block.json @@ -9,10 +9,9 @@ "textdomain": "default", "attributes": { "content": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "pre", - "default": "", "__unstablePreserveWhiteSpace": true, "__experimentalRole": "content" }, @@ -40,8 +39,7 @@ "__experimentalTextTransform": true, "__experimentalTextDecoration": true, "__experimentalDefaultControls": { - "fontSize": true, - "fontAppearance": true + "fontSize": true } }, "spacing": { diff --git a/src/wp-includes/blocks/video/block.json b/src/wp-includes/blocks/video/block.json index debe6f20fe53f..5d4680f39e79a 100644 --- a/src/wp-includes/blocks/video/block.json +++ b/src/wp-includes/blocks/video/block.json @@ -15,8 +15,8 @@ "attribute": "autoplay" }, "caption": { - "type": "string", - "source": "html", + "type": "rich-text", + "source": "rich-text", "selector": "figcaption", "__experimentalRole": "content" }, diff --git a/src/wp-includes/blocks/widget-group/block.json b/src/wp-includes/blocks/widget-group/block.json index c29e811554ac1..0e59e58aca224 100644 --- a/src/wp-includes/blocks/widget-group/block.json +++ b/src/wp-includes/blocks/widget-group/block.json @@ -1,4 +1,5 @@ { + "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "core/widget-group", "category": "widgets", diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index a63fa2485018e..50864cfd7ba7f 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -1714,7 +1714,7 @@ function wp_default_styles( $styles ) { ); $package_styles = array( - 'block-editor' => array( 'wp-components' ), + 'block-editor' => array( 'wp-components', 'wp-preferences' ), 'block-library' => array(), 'block-directory' => array(), 'components' => array(), @@ -1726,17 +1726,20 @@ function wp_default_styles( $styles ) { 'wp-edit-blocks', 'wp-block-library', 'wp-commands', + 'wp-preferences', ), 'editor' => array( 'wp-components', 'wp-block-editor', 'wp-reusable-blocks', 'wp-patterns', + 'wp-preferences', ), 'format-library' => array(), 'list-reusable-blocks' => array( 'wp-components' ), 'reusable-blocks' => array( 'wp-components' ), 'patterns' => array( 'wp-components' ), + 'preferences' => array( 'wp-components' ), 'nux' => array( 'wp-components' ), 'widgets' => array( 'wp-components', @@ -1748,6 +1751,7 @@ function wp_default_styles( $styles ) { 'wp-block-library', 'wp-reusable-blocks', 'wp-patterns', + 'wp-preferences', ), 'customize-widgets' => array( 'wp-widgets', @@ -1756,12 +1760,14 @@ function wp_default_styles( $styles ) { 'wp-block-library', 'wp-reusable-blocks', 'wp-patterns', + 'wp-preferences', ), 'edit-site' => array( 'wp-components', 'wp-block-editor', 'wp-edit-blocks', 'wp-commands', + 'wp-preferences', ), ); diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-1.server.html b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.server.html index 369cebb77dbee..9bfb5f14a8577 100644 --- a/tests/phpunit/data/blocks/fixtures/core__quote__style-1.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.server.html @@ -1,3 +1,3 @@ -

    The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.

    Matt Mullenweg, 2017
    +

    The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.

    Matt Mullenweg, 2017
    diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-2.server.html b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.server.html index f75ac8088bedd..0a58628dbcfb8 100644 --- a/tests/phpunit/data/blocks/fixtures/core__quote__style-2.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.server.html @@ -1,3 +1,3 @@ -

    There is no greater agony than bearing an untold story inside you.

    Maya Angelou
    +

    There is no greater agony than bearing an untold story inside you.

    Maya Angelou
    diff --git a/tests/phpunit/includes/unregister-blocks-hooks.php b/tests/phpunit/includes/unregister-blocks-hooks.php index 164c9c98db3f9..65f2db4e21579 100644 --- a/tests/phpunit/includes/unregister-blocks-hooks.php +++ b/tests/phpunit/includes/unregister-blocks-hooks.php @@ -64,3 +64,9 @@ remove_action( 'init', 'register_block_core_tag_cloud' ); remove_action( 'init', 'register_block_core_template_part' ); remove_action( 'init', 'register_block_core_term_description' ); + +// Temporary hook removals to prevent impacting the phpunit tests timing. +remove_action( 'registered_post_type', 'block_core_navigation_link_register_post_type_variation' ); +remove_action( 'registered_taxonomy', 'block_core_navigation_link_register_taxonomy_variation' ); +remove_action( 'unregistered_post_type', 'block_core_navigation_link_unregister_post_type_variation' ); +remove_action( 'unregistered_taxonomy', 'block_core_navigation_link_unregister_taxonomy_variation' ); diff --git a/tools/webpack/blocks.js b/tools/webpack/blocks.js index 91e2cfafbdf84..c05de01075839 100644 --- a/tools/webpack/blocks.js +++ b/tools/webpack/blocks.js @@ -3,60 +3,90 @@ */ const CopyWebpackPlugin = require( 'copy-webpack-plugin' ); -/** - * WordPress dependencies - */ -const DependencyExtractionPlugin = require( '@wordpress/dependency-extraction-webpack-plugin' ); - /** * Internal dependencies */ -const { baseDir, getBaseConfig, normalizeJoin, stylesTransform } = require( './shared' ); +const { + baseDir, + getBaseConfig, + normalizeJoin, + stylesTransform, +} = require( './shared' ); const { isDynamic, toDirectoryName, getStableBlocksMetadata, } = require( '../release/sync-stable-blocks' ); -module.exports = function( env = { environment: 'production', watch: false, buildTarget: false } ) { +module.exports = function ( + env = { environment: 'production', watch: false, buildTarget: false } +) { const mode = env.environment; const suffix = mode === 'production' ? '.min' : ''; - let buildTarget = env.buildTarget ? env.buildTarget : ( mode === 'production' ? 'build' : 'src' ); + let buildTarget = env.buildTarget + ? env.buildTarget + : mode === 'production' + ? 'build' + : 'src'; buildTarget = buildTarget + '/wp-includes'; const blocks = getStableBlocksMetadata(); - const dynamicBlockFolders = blocks.filter( isDynamic ).map( toDirectoryName ); + const dynamicBlockFolders = blocks + .filter( isDynamic ) + .map( toDirectoryName ); const blockFolders = blocks.map( toDirectoryName ); const blockPHPFiles = { - 'widgets/src/blocks/legacy-widget/index.php': 'wp-includes/blocks/legacy-widget.php', - 'widgets/src/blocks/widget-group/index.php': 'wp-includes/blocks/widget-group.php', + 'widgets/src/blocks/legacy-widget/index.php': + 'wp-includes/blocks/legacy-widget.php', + 'widgets/src/blocks/widget-group/index.php': + 'wp-includes/blocks/widget-group.php', ...dynamicBlockFolders.reduce( ( files, blockName ) => { - files[ `block-library/src/${ blockName }/index.php` ] = `wp-includes/blocks/${ blockName }.php`; + files[ + `block-library/src/${ blockName }/index.php` + ] = `wp-includes/blocks/${ blockName }.php`; return files; }, {} ), }; const blockMetadataFiles = { - 'widgets/src/blocks/legacy-widget/block.json': 'wp-includes/blocks/legacy-widget/block.json', - 'widgets/src/blocks/widget-group/block.json': 'wp-includes/blocks/widget-group/block.json', + 'widgets/src/blocks/legacy-widget/block.json': + 'wp-includes/blocks/legacy-widget/block.json', + 'widgets/src/blocks/widget-group/block.json': + 'wp-includes/blocks/widget-group/block.json', ...blockFolders.reduce( ( files, blockName ) => { - files[ `block-library/src/${ blockName }/block.json` ] = `wp-includes/blocks/${ blockName }/block.json`; + files[ + `block-library/src/${ blockName }/block.json` + ] = `wp-includes/blocks/${ blockName }/block.json`; return files; }, {} ), }; const blockPHPCopies = Object.keys( blockPHPFiles ).map( ( filename ) => ( { - from: normalizeJoin(baseDir, `node_modules/@wordpress/${ filename }` ), - to: normalizeJoin(baseDir, `src/${ blockPHPFiles[ filename ] }` ), + from: normalizeJoin( baseDir, `node_modules/@wordpress/${ filename }` ), + to: normalizeJoin( baseDir, `src/${ blockPHPFiles[ filename ] }` ), } ) ); - const blockMetadataCopies = Object.keys( blockMetadataFiles ).map( ( filename ) => ( { - from: normalizeJoin(baseDir, `node_modules/@wordpress/${ filename }` ), - to: normalizeJoin(baseDir, `src/${ blockMetadataFiles[ filename ] }` ), - } ) ); + const blockMetadataCopies = Object.keys( blockMetadataFiles ).map( + ( filename ) => ( { + from: normalizeJoin( + baseDir, + `node_modules/@wordpress/${ filename }` + ), + to: normalizeJoin( + baseDir, + `src/${ blockMetadataFiles[ filename ] }` + ), + } ) + ); const blockStylesheetCopies = blockFolders.map( ( blockName ) => ( { - from: normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-style/${ blockName }/*.css` ), - to: normalizeJoin(baseDir, `${ buildTarget }/blocks/${ blockName }/[name]${ suffix }.css` ), + from: normalizeJoin( + baseDir, + `node_modules/@wordpress/block-library/build-style/${ blockName }/*.css` + ), + to: normalizeJoin( + baseDir, + `${ buildTarget }/blocks/${ blockName }/[name]${ suffix }.css` + ), transform: stylesTransform( mode ), noErrorOnMissing: true, } ) ); @@ -64,41 +94,45 @@ module.exports = function( env = { environment: 'production', watch: false, buil const baseConfig = getBaseConfig( env ); const config = { ...baseConfig, + // Todo: This list need of entry points need to be automatically fetched from the package + // We shouldn't have to maintain it manually. entry: { - 'navigation/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/navigation/view' ), - 'image/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/image/view' ), - 'query/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/query/view' ), - 'file/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/file/view' ), - 'search/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/search/view' ), + navigation: normalizeJoin( + baseDir, + 'node_modules/@wordpress/block-library/build-module/navigation/view' + ), + image: normalizeJoin( + baseDir, + 'node_modules/@wordpress/block-library/build-module/image/view' + ), + query: normalizeJoin( + baseDir, + 'node_modules/@wordpress/block-library/build-module/query/view' + ), + file: normalizeJoin( + baseDir, + 'node_modules/@wordpress/block-library/build-module/file/view' + ), + search: normalizeJoin( + baseDir, + 'node_modules/@wordpress/block-library/build-module/search/view' + ), + }, + experiments: { + outputModule: true, }, output: { devtoolNamespace: 'wp', filename: `./blocks/[name]${ suffix }.js`, path: normalizeJoin( baseDir, buildTarget ), - chunkLoadingGlobal: `__WordPressPrivateInteractivityAPI__`, - }, - resolve: { - alias: { - '@wordpress/interactivity': normalizeJoin( baseDir, 'node_modules/@wordpress/interactivity/src/index.js' ), + library: { + type: 'module', }, + environment: { module: true }, }, - optimization: { - ...baseConfig.optimization, - runtimeChunk: { - name: 'private-interactivity', - }, - splitChunks: { - cacheGroups: { - interactivity: { - name: 'private-interactivity', - test: /^(?!.*[\\/]block-library[\\/]).*$/, - filename: `./js/dist/interactivity${suffix}.js`, - chunks: 'all', - minSize: 0, - priority: -10, - }, - }, - }, + externalsType: 'module', + externals: { + '@wordpress/interactivity': '@wordpress/interactivity', }, module: { rules: [ @@ -108,7 +142,8 @@ module.exports = function( env = { environment: 'production', watch: false, buil { loader: require.resolve( 'babel-loader' ), options: { - cacheDirectory: process.env.BABEL_CACHE_DIRECTORY || true, + cacheDirectory: + process.env.BABEL_CACHE_DIRECTORY || true, babelrc: false, configFile: false, presets: [ @@ -128,10 +163,6 @@ module.exports = function( env = { environment: 'production', watch: false, buil }, plugins: [ ...baseConfig.plugins, - new DependencyExtractionPlugin( { - injectPolyfill: false, - useDefaults: false, - } ), new CopyWebpackPlugin( { patterns: [ ...blockPHPCopies, diff --git a/tools/webpack/modules.js b/tools/webpack/modules.js new file mode 100644 index 0000000000000..d525f370e5884 --- /dev/null +++ b/tools/webpack/modules.js @@ -0,0 +1,93 @@ +/** + * WordPress dependencies + */ +const DependencyExtractionPlugin = require( '@wordpress/dependency-extraction-webpack-plugin' ); + +/** + * Internal dependencies + */ +const { + baseDir, + getBaseConfig, + normalizeJoin, + MODULES, + WORDPRESS_NAMESPACE, +} = require( './shared' ); + +module.exports = function ( + env = { environment: 'production', watch: false, buildTarget: false } +) { + const mode = env.environment; + const suffix = mode === 'production' ? '.min' : ''; + let buildTarget = env.buildTarget + ? env.buildTarget + : mode === 'production' + ? 'build' + : 'src'; + buildTarget = buildTarget + '/wp-includes'; + + const baseConfig = getBaseConfig( env ); + const config = { + ...baseConfig, + entry: MODULES.map( ( packageName ) => + packageName.replace( WORDPRESS_NAMESPACE, '' ) + ).reduce( ( memo, packageName ) => { + memo[ packageName ] = { + import: normalizeJoin( + baseDir, + `node_modules/@wordpress/${ packageName }` + ), + }; + + return memo; + }, {} ), + experiments: { + outputModule: true, + }, + output: { + devtoolNamespace: 'wp', + filename: `[name]${ suffix }.js`, + path: normalizeJoin( baseDir, `${ buildTarget }/js/dist` ), + library: { + type: 'module', + }, + environment: { module: true }, + }, + module: { + rules: [ + { + test: /\.(j|t)sx?$/, + use: [ + { + loader: require.resolve( 'babel-loader' ), + options: { + cacheDirectory: + process.env.BABEL_CACHE_DIRECTORY || true, + babelrc: false, + configFile: false, + presets: [ + [ + '@babel/preset-react', + { + runtime: 'automatic', + importSource: 'preact', + }, + ], + ], + }, + }, + ], + }, + ], + }, + plugins: [ + ...baseConfig.plugins, + new DependencyExtractionPlugin( { + injectPolyfill: false, + useDefaults: false, + } ), + ], + }; + + return config; +}; diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index fa72d06982600..6867cbd0936d9 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -16,7 +16,15 @@ const DependencyExtractionPlugin = require( '@wordpress/dependency-extraction-we /** * Internal dependencies */ -const { baseDir, getBaseConfig, normalizeJoin, stylesTransform } = require( './shared' ); +const { + baseDir, + getBaseConfig, + normalizeJoin, + stylesTransform, + BUNDLED_PACKAGES, + MODULES, + WORDPRESS_NAMESPACE, +} = require( './shared' ); const { dependencies } = require( '../../package' ); const exportDefaultPackages = [ @@ -40,36 +48,50 @@ const exportDefaultPackages = [ */ function mapVendorCopies( vendors, buildTarget ) { return Object.keys( vendors ).map( ( filename ) => ( { - from: normalizeJoin(baseDir, `node_modules/${ vendors[ filename ] }` ), - to: normalizeJoin(baseDir, `${ buildTarget }/js/dist/vendor/${ filename }` ), + from: normalizeJoin( baseDir, `node_modules/${ vendors[ filename ] }` ), + to: normalizeJoin( + baseDir, + `${ buildTarget }/js/dist/vendor/${ filename }` + ), } ) ); } -module.exports = function( env = { environment: 'production', watch: false, buildTarget: false } ) { +module.exports = function ( + env = { environment: 'production', watch: false, buildTarget: false } +) { const mode = env.environment; const suffix = mode === 'production' ? '.min' : ''; - let buildTarget = env.buildTarget ? env.buildTarget : ( mode === 'production' ? 'build' : 'src' ); - buildTarget = buildTarget + '/wp-includes'; + let buildTarget = env.buildTarget + ? env.buildTarget + : mode === 'production' + ? 'build' + : 'src'; + buildTarget = buildTarget + '/wp-includes'; - const WORDPRESS_NAMESPACE = '@wordpress/'; - const BUNDLED_PACKAGES = [ '@wordpress/icons', '@wordpress/interface', '@wordpress/interactivity', '@wordpress/sync' ]; const packages = Object.keys( dependencies ) - .filter( ( packageName ) => - ! BUNDLED_PACKAGES.includes( packageName ) && - packageName.startsWith( WORDPRESS_NAMESPACE ) - ) - .map( ( packageName ) => packageName.replace( WORDPRESS_NAMESPACE, '' ) ); + .filter( + ( packageName ) => + ! BUNDLED_PACKAGES.includes( packageName ) && + ! MODULES.includes( packageName ) && + packageName.startsWith( WORDPRESS_NAMESPACE ) + ) + .map( ( packageName ) => + packageName.replace( WORDPRESS_NAMESPACE, '' ) + ); const vendors = { 'lodash.js': 'lodash/lodash.js', 'wp-polyfill.js': '@wordpress/babel-preset-default/build/polyfill.js', 'wp-polyfill-fetch.js': 'whatwg-fetch/dist/fetch.umd.js', 'wp-polyfill-element-closest.js': 'element-closest/browser.js', - 'wp-polyfill-node-contains.js': 'polyfill-library/polyfills/__dist/Node.prototype.contains/raw.js', + 'wp-polyfill-node-contains.js': + 'polyfill-library/polyfills/__dist/Node.prototype.contains/raw.js', 'wp-polyfill-url.js': 'core-js-url-browser/url.js', - 'wp-polyfill-dom-rect.js': 'polyfill-library/polyfills/__dist/DOMRect/raw.js', + 'wp-polyfill-dom-rect.js': + 'polyfill-library/polyfills/__dist/DOMRect/raw.js', 'wp-polyfill-formdata.js': 'formdata-polyfill/FormData.js', - 'wp-polyfill-object-fit.js': 'objectFitPolyfill/src/objectFitPolyfill.js', + 'wp-polyfill-object-fit.js': + 'objectFitPolyfill/src/objectFitPolyfill.js', 'wp-polyfill-inert.js': 'wicg-inert/dist/inert.js', 'moment.js': 'moment/moment.js', 'react.js': 'react/umd/react.development.js', @@ -79,11 +101,13 @@ module.exports = function( env = { environment: 'production', watch: false, buil const minifiedVendors = { 'lodash.min.js': 'lodash/lodash.min.js', - 'wp-polyfill.min.js': '@wordpress/babel-preset-default/build/polyfill.min.js', + 'wp-polyfill.min.js': + '@wordpress/babel-preset-default/build/polyfill.min.js', 'wp-polyfill-element-closest.min.js': 'element-closest/browser.js', 'wp-polyfill-formdata.min.js': 'formdata-polyfill/formdata.min.js', 'wp-polyfill-url.min.js': 'core-js-url-browser/url.min.js', - 'wp-polyfill-object-fit.min.js': 'objectFitPolyfill/dist/objectFitPolyfill.min.js', + 'wp-polyfill-object-fit.min.js': + 'objectFitPolyfill/dist/objectFitPolyfill.min.js', 'wp-polyfill-inert.min.js': 'wicg-inert/dist/inert.min.js', 'moment.min.js': 'moment/min/moment.min.js', 'react.min.js': 'react/umd/react.production.min.js', @@ -93,39 +117,55 @@ module.exports = function( env = { environment: 'production', watch: false, buil const minifyVendors = { 'regenerator-runtime.min.js': 'regenerator-runtime/runtime.js', 'wp-polyfill-fetch.min.js': 'whatwg-fetch/dist/fetch.umd.js', - 'wp-polyfill-node-contains.min.js': 'polyfill-library/polyfills/__dist/Node.prototype.contains/raw.js', - 'wp-polyfill-dom-rect.min.js': 'polyfill-library/polyfills/__dist/DOMRect/raw.js', + 'wp-polyfill-node-contains.min.js': + 'polyfill-library/polyfills/__dist/Node.prototype.contains/raw.js', + 'wp-polyfill-dom-rect.min.js': + 'polyfill-library/polyfills/__dist/DOMRect/raw.js', }; const phpFiles = { - 'block-serialization-default-parser/class-wp-block-parser.php': 'wp-includes/class-wp-block-parser.php', - 'block-serialization-default-parser/class-wp-block-parser-frame.php': 'wp-includes/class-wp-block-parser-frame.php', - 'block-serialization-default-parser/class-wp-block-parser-block.php': 'wp-includes/class-wp-block-parser-block.php', + 'block-serialization-default-parser/class-wp-block-parser.php': + 'wp-includes/class-wp-block-parser.php', + 'block-serialization-default-parser/class-wp-block-parser-frame.php': + 'wp-includes/class-wp-block-parser-frame.php', + 'block-serialization-default-parser/class-wp-block-parser-block.php': + 'wp-includes/class-wp-block-parser-block.php', }; const developmentCopies = mapVendorCopies( vendors, buildTarget ); const minifiedCopies = mapVendorCopies( minifiedVendors, buildTarget ); - const minifyCopies = mapVendorCopies( minifyVendors, buildTarget ).map( ( copyCommand ) => { - return { - ...copyCommand, - transform: ( content ) => { - return UglifyJS.minify( content.toString() ).code; - }, - }; - } ); + const minifyCopies = mapVendorCopies( minifyVendors, buildTarget ).map( + ( copyCommand ) => { + return { + ...copyCommand, + transform: ( content ) => { + return UglifyJS.minify( content.toString() ).code; + }, + }; + } + ); - let vendorCopies = mode === "development" ? developmentCopies : [ ...minifiedCopies, ...minifyCopies ]; + let vendorCopies = + mode === 'development' + ? developmentCopies + : [ ...minifiedCopies, ...minifyCopies ]; let cssCopies = packages.map( ( packageName ) => ( { - from: normalizeJoin(baseDir, `node_modules/@wordpress/${ packageName }/build-style/*.css` ), - to: normalizeJoin(baseDir, `${ buildTarget }/css/dist/${ packageName }/[name]${ suffix }.css` ), + from: normalizeJoin( + baseDir, + `node_modules/@wordpress/${ packageName }/build-style/*.css` + ), + to: normalizeJoin( + baseDir, + `${ buildTarget }/css/dist/${ packageName }/[name]${ suffix }.css` + ), transform: stylesTransform( mode ), noErrorOnMissing: true, } ) ); const phpCopies = Object.keys( phpFiles ).map( ( filename ) => ( { - from: normalizeJoin(baseDir, `node_modules/@wordpress/${ filename }` ), - to: normalizeJoin(baseDir, `src/${ phpFiles[ filename ] }` ), + from: normalizeJoin( baseDir, `node_modules/@wordpress/${ filename }` ), + to: normalizeJoin( baseDir, `src/${ phpFiles[ filename ] }` ), } ) ); const baseConfig = getBaseConfig( env ); @@ -133,7 +173,10 @@ module.exports = function( env = { environment: 'production', watch: false, buil ...baseConfig, entry: packages.reduce( ( memo, packageName ) => { memo[ packageName ] = { - import: normalizeJoin(baseDir, `node_modules/@wordpress/${ packageName }` ), + import: normalizeJoin( + baseDir, + `node_modules/@wordpress/${ packageName }` + ), library: { name: [ 'wp', camelCaseDash( packageName ) ], type: 'window', @@ -148,7 +191,7 @@ module.exports = function( env = { environment: 'production', watch: false, buil output: { devtoolNamespace: 'wp', filename: `[name]${ suffix }.js`, - path: normalizeJoin(baseDir, `${ buildTarget }/js/dist` ), + path: normalizeJoin( baseDir, `${ buildTarget }/js/dist` ), }, plugins: [ ...baseConfig.plugins, @@ -158,17 +201,17 @@ module.exports = function( env = { environment: 'production', watch: false, buil combinedOutputFile: `../../assets/script-loader-packages${ suffix }.php`, } ), new CopyWebpackPlugin( { - patterns: [ - ...vendorCopies, - ...cssCopies, - ...phpCopies, - ], + patterns: [ ...vendorCopies, ...cssCopies, ...phpCopies ], } ), ], }; if ( config.mode === 'development' ) { - config.plugins.push( new LiveReloadPlugin( { port: process.env.WORDPRESS_LIVE_RELOAD_PORT || 35729 } ) ); + config.plugins.push( + new LiveReloadPlugin( { + port: process.env.WORDPRESS_LIVE_RELOAD_PORT || 35729, + } ) + ); } return config; diff --git a/tools/webpack/shared.js b/tools/webpack/shared.js index 5aea4204d31a2..8bed50899002c 100644 --- a/tools/webpack/shared.js +++ b/tools/webpack/shared.js @@ -20,7 +20,7 @@ const getBaseConfig = ( env ) => { new TerserPlugin( { extractComments: false, } ), - ] + ], }, module: { rules: [ @@ -32,10 +32,7 @@ const getBaseConfig = ( env ) => { ], }, resolve: { - modules: [ - baseDir, - 'node_modules', - ], + modules: [ baseDir, 'node_modules' ], alias: { 'lodash-es': 'lodash', }, @@ -70,15 +67,20 @@ const getBaseConfig = ( env ) => { const stylesTransform = ( mode ) => ( content ) => { return postcss( [ require( 'cssnano' )( { - preset: mode === 'production' ? 'default' : [ - 'default', - { - discardComments: { - removeAll: ! content.includes( 'Copyright' ) && ! content.includes( 'License' ), - }, - normalizeWhitespace: false, - }, - ], + preset: + mode === 'production' + ? 'default' + : [ + 'default', + { + discardComments: { + removeAll: + ! content.includes( 'Copyright' ) && + ! content.includes( 'License' ), + }, + normalizeWhitespace: false, + }, + ], } ), ] ) .process( content, { from: 'src/app.css', to: 'dest/app.css' } ) @@ -87,10 +89,22 @@ const stylesTransform = ( mode ) => ( content ) => { const normalizeJoin = ( ...paths ) => join( ...paths ).replace( /\\/g, '/' ); +const BUNDLED_PACKAGES = [ + '@wordpress/dataviews', + '@wordpress/icons', + '@wordpress/interface', + '@wordpress/interactivity', + '@wordpress/sync', +]; +const MODULES = [ '@wordpress/interactivity' ]; +const WORDPRESS_NAMESPACE = '@wordpress/'; module.exports = { baseDir, getBaseConfig, normalizeJoin, stylesTransform, + BUNDLED_PACKAGES, + MODULES, + WORDPRESS_NAMESPACE, }; diff --git a/webpack.config.js b/webpack.config.js index 5e7c88a2cfc60..963117a7a52de 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,6 +2,7 @@ const blocksConfig = require( './tools/webpack/blocks' ); const developmentConfig = require( './tools/webpack/development' ); const mediaConfig = require( './tools/webpack/media' ); const packagesConfig = require( './tools/webpack/packages' ); +const modulesConfig = require( './tools/webpack/modules' ); module.exports = function( env = { environment: "production", watch: false, buildTarget: false } ) { if ( ! env.watch ) { @@ -17,6 +18,7 @@ module.exports = function( env = { environment: "production", watch: false, buil ...developmentConfig( env ), mediaConfig( env ), packagesConfig( env ), + modulesConfig( env ), ]; return config; From 90ad30448675a2ad1f1e73eabc425582a86d95cc Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 29 Jan 2024 21:29:52 +0000 Subject: [PATCH 02/46] Coding Standards: Update PHPCS to version 3.8.1. PHPCS has seen two new releases since the update to WPCS 3.0, with especially the 3.8.0 version containing a huge number of improvements. References: * [https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/tag/3.8.0 PHP_CodeSniffer 3.8.0 release notes] * [https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/tag/3.8.1 PHP_CodeSniffer 3.8.1 release notes] Follow-up to [56695]. Props jrf, swissspidy. Fixes #60279. git-svn-id: https://develop.svn.wordpress.org/trunk@57378 602fd350-edb4-49c9-b593-d223f7449a82 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 750952457ff17..3aa7efe420ec0 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ "ext-dom": "*" }, "require-dev": { - "squizlabs/php_codesniffer": "3.7.2", + "squizlabs/php_codesniffer": "3.8.1", "wp-coding-standards/wpcs": "~3.0.1", "phpcompatibility/phpcompatibility-wp": "~2.1.3", "yoast/phpunit-polyfills": "^1.1.0" From 94e6fe9f8ad05571d810c4a7fc2afdeeea1c0fee Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 30 Jan 2024 00:32:50 +0000 Subject: [PATCH 03/46] Build/Test Tools: Test against MySQL 8.3 Version 8.3 is the latest short-term innovation release of MySQL. See #59779. git-svn-id: https://develop.svn.wordpress.org/trunk@57379 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/phpunit-tests.yml | 2 +- .version-support-mysql.json | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index 15cb91df50422..250e5594dca95 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -47,7 +47,7 @@ jobs: os: [ ubuntu-latest ] php: [ '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0', '8.1', '8.2' ] + db-version: [ '5.7', '8.0', '8.1', '8.2', '8.3' ] multisite: [ false, true ] memcached: [ false ] diff --git a/.version-support-mysql.json b/.version-support-mysql.json index e316908bc9aac..79858143a1ebd 100644 --- a/.version-support-mysql.json +++ b/.version-support-mysql.json @@ -1,6 +1,8 @@ { "6-5": [ + "8.3", "8.2", + "8.1", "8.0", "5.7", "5.6", From 0e0b10092c0f855619206982960ad857565d753d Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Tue, 30 Jan 2024 08:37:04 +0000 Subject: [PATCH 04/46] REST API: Support assigning terms when creating attachments. Props mukesh27, Dharm1025, Ankit K Gupta, swissspidy, dharm1025, tanjimtc71, timothyblynjacobs, spacedmonkey. Fixes #57897. git-svn-id: https://develop.svn.wordpress.org/trunk@57380 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-attachments-controller.php | 6 +++++ .../rest-api/rest-attachments-controller.php | 22 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php index c7da6d068b29d..d6bba7a9249f1 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php @@ -186,6 +186,12 @@ public function create_item( $request ) { return $fields_update; } + $terms_update = $this->handle_terms( $attachment_id, $request ); + + if ( is_wp_error( $terms_update ) ) { + return $terms_update; + } + $request->set_param( 'context', 'edit' ); /** diff --git a/tests/phpunit/tests/rest-api/rest-attachments-controller.php b/tests/phpunit/tests/rest-api/rest-attachments-controller.php index 0e721258ed40a..44c4027579d56 100644 --- a/tests/phpunit/tests/rest-api/rest-attachments-controller.php +++ b/tests/phpunit/tests/rest-api/rest-attachments-controller.php @@ -1045,6 +1045,28 @@ public function test_create_item_ensure_relative_path() { $this->assertStringNotContainsString( ABSPATH, get_post_meta( $attachment['id'], '_wp_attached_file', true ) ); } + /** + * @ticket 57897 + * + * @requires function imagejpeg + */ + public function test_create_item_with_terms() { + wp_set_current_user( self::$author_id ); + register_taxonomy_for_object_type( 'category', 'attachment' ); + $category = wp_insert_term( 'Media Category', 'category' ); + $request = new WP_REST_Request( 'POST', '/wp/v2/media' ); + $request->set_header( 'Content-Type', 'image/jpeg' ); + $request->set_header( 'Content-Disposition', 'attachment; filename=canola.jpg' ); + + $request->set_body( file_get_contents( self::$test_file ) ); + $request->set_param( 'categories', array( $category['term_id'] ) ); + $response = rest_get_server()->dispatch( $request ); + $attachment = $response->get_data(); + + $term = wp_get_post_terms( $attachment['id'], 'category' ); + $this->assertSame( $category['term_id'], $term[0]->term_id ); + } + public function test_update_item() { wp_set_current_user( self::$editor_id ); $attachment_id = self::factory()->attachment->create_object( From 179b6807b8c76cdf58b7165a9180f15aed2cc7a4 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Tue, 30 Jan 2024 10:28:54 +0000 Subject: [PATCH 05/46] I18N: Ensure `.l10n.php` files are deleted when upgrading language packs. Props amieiro. See #59656. git-svn-id: https://develop.svn.wordpress.org/trunk@57381 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-language-pack-upgrader.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/wp-admin/includes/class-language-pack-upgrader.php b/src/wp-admin/includes/class-language-pack-upgrader.php index 3c3d42a56a9c8..855dbe642ad25 100644 --- a/src/wp-admin/includes/class-language-pack-upgrader.php +++ b/src/wp-admin/includes/class-language-pack-upgrader.php @@ -409,12 +409,16 @@ public function clear_destination( $remote_destination ) { $files = array( $remote_destination . $language_update->language . '.po', $remote_destination . $language_update->language . '.mo', + $remote_destination . $language_update->language . '.l10n.php', $remote_destination . 'admin-' . $language_update->language . '.po', $remote_destination . 'admin-' . $language_update->language . '.mo', + $remote_destination . 'admin-' . $language_update->language . '.l10n.php', $remote_destination . 'admin-network-' . $language_update->language . '.po', $remote_destination . 'admin-network-' . $language_update->language . '.mo', + $remote_destination . 'admin-network-' . $language_update->language . '.l10n.php', $remote_destination . 'continents-cities-' . $language_update->language . '.po', $remote_destination . 'continents-cities-' . $language_update->language . '.mo', + $remote_destination . 'continents-cities-' . $language_update->language . '.l10n.php', ); $json_translation_files = glob( $language_directory . $language_update->language . '-*.json' ); @@ -427,6 +431,7 @@ public function clear_destination( $remote_destination ) { $files = array( $remote_destination . $language_update->slug . '-' . $language_update->language . '.po', $remote_destination . $language_update->slug . '-' . $language_update->language . '.mo', + $remote_destination . $language_update->slug . '-' . $language_update->language . '.l10n.php', ); $language_directory = $language_directory . $language_update->type . 's/'; From b57c822afd7d3b60ea207310a77dbf4bca641720 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Tue, 30 Jan 2024 10:31:00 +0000 Subject: [PATCH 06/46] I18N: Delete `.l10n.php` files when deleting a theme. Follow-up to [57337] where this was already added for plugins. See #59656. git-svn-id: https://develop.svn.wordpress.org/trunk@57382 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/theme.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/wp-admin/includes/theme.php b/src/wp-admin/includes/theme.php index 91e92995ece81..70abab68ad799 100644 --- a/src/wp-admin/includes/theme.php +++ b/src/wp-admin/includes/theme.php @@ -114,6 +114,7 @@ function delete_theme( $stylesheet, $redirect = '' ) { foreach ( $translations as $translation => $data ) { $wp_filesystem->delete( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '.po' ); $wp_filesystem->delete( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '.mo' ); + $wp_filesystem->delete( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '.l10n.php' ); $json_translation_files = glob( WP_LANG_DIR . '/themes/' . $stylesheet . '-' . $translation . '-*.json' ); if ( $json_translation_files ) { From 5466d3a9a72b38039ded378ae0f7331e8ba32a3f Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Tue, 30 Jan 2024 11:08:15 +0000 Subject: [PATCH 07/46] Editor: Fix PHP warning in Layout block support. strpos was triggering a php warning. This also updates the code to use the now supported str_contains. Props get_dave, dmsnell, ocean90, mukesh27. Fixes #60327. git-svn-id: https://develop.svn.wordpress.org/trunk@57383 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/layout.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/block-supports/layout.php b/src/wp-includes/block-supports/layout.php index 4da4f24b23be9..f5acd75a72d7c 100644 --- a/src/wp-includes/block-supports/layout.php +++ b/src/wp-includes/block-supports/layout.php @@ -837,7 +837,8 @@ function wp_render_layout_support_flag( $block_content, $block ) { break; } - if ( false !== strpos( $processor->get_attribute( 'class' ), $inner_block_wrapper_classes ) ) { + $class_attribute = $processor->get_attribute( 'class' ); + if ( is_string( $class_attribute ) && str_contains( $class_attribute, $inner_block_wrapper_classes ) ) { break; } } while ( $processor->next_tag() ); From a9c985cde45a37fe9b329210a8eac3c0fb89c79b Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Tue, 30 Jan 2024 11:39:14 +0000 Subject: [PATCH 08/46] Editor: Update the minimum compatible version of Gutenberg. Previous Gutenberg versions are not compatible with recent trunk because of the WP_Navigation_Block_Renderer classname. It's present in both. Gutenberg has been updated to avoid the use of this class but we need to auto-disable old plugins to avoid fatals. Props hellofromtonya. See #60315. git-svn-id: https://develop.svn.wordpress.org/trunk@57384 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/update-core.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/includes/update-core.php b/src/wp-admin/includes/update-core.php index 0c66ad3ee9db0..6d996adb52e38 100644 --- a/src/wp-admin/includes/update-core.php +++ b/src/wp-admin/includes/update-core.php @@ -1848,13 +1848,14 @@ function _upgrade_440_force_deactivate_incompatible_plugins() { * @since 5.9.0 The minimum compatible version of Gutenberg is 11.9. * @since 6.1.1 The minimum compatible version of Gutenberg is 14.1. * @since 6.4.0 The minimum compatible version of Gutenberg is 16.5. + * @since 6.5.0 The minimum compatible version of Gutenberg is 17.6. */ function _upgrade_core_deactivate_incompatible_plugins() { - if ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '16.5', '<' ) ) { + if ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '17.6', '<' ) ) { $deactivated_gutenberg['gutenberg'] = array( 'plugin_name' => 'Gutenberg', 'version_deactivated' => GUTENBERG_VERSION, - 'version_compatible' => '16.5', + 'version_compatible' => '17.6', ); if ( is_plugin_active_for_network( 'gutenberg/gutenberg.php' ) ) { $deactivated_plugins = get_site_option( 'wp_force_deactivated_plugins', array() ); From cabfa6f52cb95930996e34850ccfd9f26569962e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Zi=C3=83=C2=B3=C3=85=E2=80=9Akowski?= Date: Tue, 30 Jan 2024 12:55:53 +0000 Subject: [PATCH 09/46] Tests: Remove redundant unregister call in block bindings tear down Only block bindings sources registered in the tests should get unregistered. Follow-up for [57375]. See #60282. Props czapla. git-svn-id: https://develop.svn.wordpress.org/trunk@57385 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/block-bindings/register.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/phpunit/tests/block-bindings/register.php b/tests/phpunit/tests/block-bindings/register.php index 0c6cce6f41577..04fdba82ce968 100644 --- a/tests/phpunit/tests/block-bindings/register.php +++ b/tests/phpunit/tests/block-bindings/register.php @@ -26,7 +26,6 @@ public function tear_down() { if ( str_starts_with( $source_name, 'test/' ) ) { unregister_block_bindings_source( $source_name ); } - unregister_block_bindings_source( $source_name ); } parent::tear_down(); From 71b8dcb08cf27f0e221a98459b71fcb0374c2379 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Tue, 30 Jan 2024 13:59:46 +0000 Subject: [PATCH 10/46] I18N: Improve singular lookup of pluralized strings. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensures that looking up a singular that is also used as a pluralized string works as expected. This improves compatibility for cases where for example both `__( 'Product' )` and `_n( 'Product', 'Products’, num )` are used in a project, where both will use the same translation for the singular version. Although such usage is not really recommended nor documented, it must continue to work in the new i18n library in order to maintain backward compatibility and maintain expected behavior. See #59656. git-svn-id: https://develop.svn.wordpress.org/trunk@57386 602fd350-edb4-49c9-b593-d223f7449a82 --- .../l10n/class-wp-translation-file.php | 19 +++++++++++++++++- tests/phpunit/data/l10n/example-simple.mo | Bin 373 -> 467 bytes tests/phpunit/data/l10n/example-simple.php | 1 + tests/phpunit/data/l10n/example-simple.po | 5 ++++- .../tests/l10n/wpTranslationsConvert.php | 5 +++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/l10n/class-wp-translation-file.php b/src/wp-includes/l10n/class-wp-translation-file.php index 93842bec1066b..f920ab1388005 100644 --- a/src/wp-includes/l10n/class-wp-translation-file.php +++ b/src/wp-includes/l10n/class-wp-translation-file.php @@ -203,7 +203,24 @@ public function translate( string $text ) { $this->parse_file(); } - return $this->entries[ $text ] ?? false; + if ( isset( $this->entries[ $text ] ) ) { + return $this->entries[ $text ]; + } + + /* + * Handle cases where a pluralized string is only used as a singular one. + * For example, when both __( 'Product' ) and _n( 'Product', 'Products' ) + * are used, the entry key will have the format "ProductNULProducts". + * Fall back to looking up just "Product" to support this edge case. + */ + foreach( $this->entries as $key => $value ) { + if ( str_starts_with( $key, $text . "\0" ) ) { + $parts = explode( "\0", $value ); + return $parts[0]; + } + } + + return false; } /** diff --git a/tests/phpunit/data/l10n/example-simple.mo b/tests/phpunit/data/l10n/example-simple.mo index 73fb5f21ab3baaece60f8b000a54f947b51bda07..cf39269a46448c3f5b39edb790705caf56af7fee 100644 GIT binary patch delta 215 zcmey$beXySo)F7a1|VPqVi_Rz0b*_-t^r~YSOLTWK)e!&Wr27X5E}yV4It(KVlGAo z27Vwd45YPzv@(zesrLuc57AOsJ j6f2a?5Kxq#Qkq->ql+izOcMZ$WkbcXOHwB@GL`@U)k+%* delta 139 zcmcc2{FSNxo)F7a1|VPsVi_QI0dasJ2SR~qSs*(Xhz)_b8;Ci8crOt11Mx8+)&}Bh zKr8{oOpFW+#z0ycNOJ>ee;_Rhq@#f}LvnszNoqw2OMX#idS+f?jzamwGtH9|7>faI Cq7-TX diff --git a/tests/phpunit/data/l10n/example-simple.php b/tests/phpunit/data/l10n/example-simple.php index e9c2f73ad6705..4eb71d440572b 100644 --- a/tests/phpunit/data/l10n/example-simple.php +++ b/tests/phpunit/data/l10n/example-simple.php @@ -6,5 +6,6 @@ 'contextoriginal with context' => ['translation with context'], 'plural0' . "\0" . 'plural1' => ['translation0', 'translation1'], 'contextplural0 with context' . "\0" . 'plural1 with context' => ['translation0 with context', 'translation1 with context'], + 'Product' . "\0" . 'Products' => 'Produkt' . "\0" . 'Produkte', ], ]; diff --git a/tests/phpunit/data/l10n/example-simple.po b/tests/phpunit/data/l10n/example-simple.po index b40fcda69bda4..9aff39e1210bb 100644 --- a/tests/phpunit/data/l10n/example-simple.po +++ b/tests/phpunit/data/l10n/example-simple.po @@ -20,4 +20,7 @@ msgid_plural "plural1 with context" msgstr[0] "translation0 with context" msgstr[1] "translation1 with context" - +msgid "Product" +msgid_plural "Products" +msgstr[0] "Produkt" +msgstr[1] "Produkte" diff --git a/tests/phpunit/tests/l10n/wpTranslationsConvert.php b/tests/phpunit/tests/l10n/wpTranslationsConvert.php index 8f3aa41c05bb9..ea318eb329284 100644 --- a/tests/phpunit/tests/l10n/wpTranslationsConvert.php +++ b/tests/phpunit/tests/l10n/wpTranslationsConvert.php @@ -173,6 +173,7 @@ public function test_create_invalid_filetype() { * @covers ::translate_plural * @covers ::locate_translation * @covers ::get_files + * @covers WP_Translation_File::translate * * @dataProvider data_simple_example_files * @@ -198,6 +199,10 @@ public function test_simple_translation_files( string $file ) { $this->assertSame( 'translation1 with context', $controller->translate_plural( array( 'plural0 with context', 'plural1 with context' ), 0, 'context', 'unittest' ) ); $this->assertSame( 'translation0 with context', $controller->translate_plural( array( 'plural0 with context', 'plural1 with context' ), 1, 'context', 'unittest' ) ); $this->assertSame( 'translation1 with context', $controller->translate_plural( array( 'plural0 with context', 'plural1 with context' ), 2, 'context', 'unittest' ) ); + + $this->assertSame( 'Produkt', $controller->translate( 'Product', '', 'unittest' ) ); + $this->assertSame( 'Produkt', $controller->translate_plural( array( 'Product', 'Products' ), 1, '', 'unittest' ) ); + $this->assertSame( 'Produkte', $controller->translate_plural( array( 'Product', 'Products' ), 2, '', 'unittest' ) ); } /** From 3e9263588d7037fb65e653d0a0ced882112ae014 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Tue, 30 Jan 2024 14:08:20 +0000 Subject: [PATCH 11/46] I18N: Add missing space after `foreach` keyword. Follow-up to [57386]. See #59656. git-svn-id: https://develop.svn.wordpress.org/trunk@57387 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/l10n/class-wp-translation-file.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/l10n/class-wp-translation-file.php b/src/wp-includes/l10n/class-wp-translation-file.php index f920ab1388005..8e7bfba1b143e 100644 --- a/src/wp-includes/l10n/class-wp-translation-file.php +++ b/src/wp-includes/l10n/class-wp-translation-file.php @@ -213,7 +213,7 @@ public function translate( string $text ) { * are used, the entry key will have the format "ProductNULProducts". * Fall back to looking up just "Product" to support this edge case. */ - foreach( $this->entries as $key => $value ) { + foreach ( $this->entries as $key => $value ) { if ( str_starts_with( $key, $text . "\0" ) ) { $parts = explode( "\0", $value ); return $parts[0]; From 9573b33d974745ad106ebdffb584388ae4c59999 Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Tue, 30 Jan 2024 14:21:47 +0000 Subject: [PATCH 12/46] Uploads: Check for and verify ZIP archives. Props costdev, peterwilsoncc, azaozz, tykoted, johnbillion, desrosj, afragen, jorbin. git-svn-id: https://develop.svn.wordpress.org/trunk@57388 602fd350-edb4-49c9-b593-d223f7449a82 --- .../includes/class-file-upload-upgrader.php | 24 +++++++++++++++++++ src/wp-admin/update.php | 8 +++++++ 2 files changed, 32 insertions(+) diff --git a/src/wp-admin/includes/class-file-upload-upgrader.php b/src/wp-admin/includes/class-file-upload-upgrader.php index 2b76e41ea61d1..e62561518dcc5 100644 --- a/src/wp-admin/includes/class-file-upload-upgrader.php +++ b/src/wp-admin/includes/class-file-upload-upgrader.php @@ -69,6 +69,30 @@ public function __construct( $form, $urlholder ) { wp_die( $file['error'] ); } + if ( 'pluginzip' === $form || 'themezip' === $form ) { + $archive_is_valid = false; + + /** This filter is documented in wp-admin/includes/file.php */ + if ( class_exists( 'ZipArchive', false ) && apply_filters( 'unzip_file_use_ziparchive', true ) ) { + $archive = new ZipArchive(); + $archive_is_valid = $archive->open( $file['file'], ZIPARCHIVE::CHECKCONS ); + + if ( true === $archive_is_valid ) { + $archive->close(); + } + } else { + require_once ABSPATH . 'wp-admin/includes/class-pclzip.php'; + + $archive = new PclZip( $file['file'] ); + $archive_is_valid = is_array( $archive->properties() ); + } + + if ( true !== $archive_is_valid ) { + wp_delete_file( $file['file'] ); + wp_die( __( 'Incompatible Archive.' ) ); + } + } + $this->filename = $_FILES[ $form ]['name']; $this->package = $file['file']; diff --git a/src/wp-admin/update.php b/src/wp-admin/update.php index 29480c2840a57..090c37cfc4dfe 100644 --- a/src/wp-admin/update.php +++ b/src/wp-admin/update.php @@ -154,6 +154,10 @@ check_admin_referer( 'plugin-upload' ); + if ( isset( $_FILES['pluginzip']['name'] ) && ! str_ends_with( strtolower( $_FILES['pluginzip']['name'] ), '.zip' ) ) { + wp_die( __( 'Only .zip archives may be uploaded.' ) ); + } + $file_upload = new File_Upload_Upgrader( 'pluginzip', 'package' ); // Used in the HTML title tag. @@ -302,6 +306,10 @@ check_admin_referer( 'theme-upload' ); + if ( isset( $_FILES['themezip']['name'] ) && ! str_ends_with( strtolower( $_FILES['themezip']['name'] ), '.zip' ) ) { + wp_die( __( 'Only .zip archives may be uploaded.' ) ); + } + $file_upload = new File_Upload_Upgrader( 'themezip', 'package' ); // Used in the HTML title tag. From a172e31c9e1d3cdd7ef9369cf0d09c092e6264e3 Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Tue, 30 Jan 2024 14:23:06 +0000 Subject: [PATCH 13/46] Install: When populating options, maybe_serialize instead of always serialize. Props xknown, peterwilsoncc, jorbin, desrosj. git-svn-id: https://develop.svn.wordpress.org/trunk@57389 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/schema.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/wp-admin/includes/schema.php b/src/wp-admin/includes/schema.php index d339af3b17324..20648d7ddee94 100644 --- a/src/wp-admin/includes/schema.php +++ b/src/wp-admin/includes/schema.php @@ -599,14 +599,12 @@ function populate_options( array $options = array() ) { $autoload = 'yes'; } - if ( is_array( $value ) ) { - $value = serialize( $value ); - } - if ( ! empty( $insert ) ) { $insert .= ', '; } + $value = maybe_serialize( sanitize_option( $option, $value ) ); + $insert .= $wpdb->prepare( '(%s, %s, %s)', $option, $value, $autoload ); } From 0b800d7e580f95b992edfc4817386981dc983e0e Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Tue, 30 Jan 2024 22:07:42 +0000 Subject: [PATCH 14/46] HTML API: Fix splitting single text node. When `next_token()` was introduced, it brought a subtle bug. When encountering a `<` in the HTML stream which did not lead to a tag or comment or other token, it was treating the full text span to that point as one text node, and the following span another text node. The entire span should be one text node. In this patch the Tag Processor properly detects this scenario and combines the spans into one text node. Follow-up to [57348] Props jonsurrell Fixes #60385 git-svn-id: https://develop.svn.wordpress.org/trunk@57489 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-tag-processor.php | 41 ++++++++++++++----- .../tests/html-api/wpHtmlTagProcessor.php | 12 ++++++ 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 6f763acbd580b..169fabe750fcf 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -1512,16 +1512,6 @@ private function parse_next_tag() { while ( false !== $at && $at < $doc_length ) { $at = strpos( $html, '<', $at ); - if ( $at > $was_at ) { - $this->parser_state = self::STATE_TEXT_NODE; - $this->token_starts_at = $was_at; - $this->token_length = $at - $was_at; - $this->text_starts_at = $was_at; - $this->text_length = $this->token_length; - $this->bytes_already_parsed = $at; - return true; - } - /* * This does not imply an incomplete parse; it indicates that there * can be nothing left in the document other than a #text node. @@ -1536,6 +1526,37 @@ private function parse_next_tag() { return true; } + if ( $at > $was_at ) { + /* + * A "<" has been found in the document. That may be the start of another node, or + * it may be an "ivalid-first-character-of-tag-name" error. If this is not the start + * of another node the "<" should be included in this text node and another + * termination point should be found for the text node. + * + * @see https://html.spec.whatwg.org/#tag-open-state + */ + if ( strlen( $html ) > $at + 1 ) { + $next_character = $html[ $at + 1 ]; + $at_another_node = + '!' === $next_character || + '/' === $next_character || + '?' === $next_character || + ( 'A' <= $next_character && $next_character <= 'z' ); + if ( ! $at_another_node ) { + ++$at; + continue; + } + } + + $this->parser_state = self::STATE_TEXT_NODE; + $this->token_starts_at = $was_at; + $this->token_length = $at - $was_at; + $this->text_starts_at = $was_at; + $this->text_length = $this->token_length; + $this->bytes_already_parsed = $at; + return true; + } + $this->token_starts_at = $at; if ( $at + 1 < $doc_length && '/' === $this->html[ $at + 1 ] ) { diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php index 6040d94b6fb5e..dda0872408a29 100644 --- a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php @@ -2715,4 +2715,16 @@ public function test_handles_malformed_taglike_close_short_html() { $result = $p->next_tag(); $this->assertFalse( $result, 'Did not handle "' ); + $p->next_token(); + $this->assertSame( '#text', $p->get_token_type(), 'Did not find text node.' ); + $this->assertSame( 'test< /A>', $p->get_modifiable_text(), 'Did not find complete text node.' ); + } } From 5a59dbed82abebae4b842eb5cff765896ad7dbab Mon Sep 17 00:00:00 2001 From: Isabel Brison Date: Tue, 30 Jan 2024 23:49:09 +0000 Subject: [PATCH 15/46] Editor: reduce specificity of block style variation selector. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes duplicate classname from the block style variation selector generated in `WP_Theme_JSON`’s `get_blocks_metadata` function. Props flixos90, joemcgill, mukesh27, isabel_brison. Fixes #60312. git-svn-id: https://develop.svn.wordpress.org/trunk@57490 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-theme-json.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index f73781b2b3181..8a06d81d47242 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -947,8 +947,7 @@ protected static function get_blocks_metadata() { if ( ! empty( $block_type->styles ) ) { $style_selectors = array(); foreach ( $block_type->styles as $style ) { - // The style variation classname is duplicated in the selector to ensure that it overrides core block styles. - $style_selectors[ $style['name'] ] = static::append_to_selector( '.is-style-' . $style['name'] . '.is-style-' . $style['name'], static::$blocks_metadata[ $block_name ]['selector'] ); + $style_selectors[ $style['name'] ] = static::append_to_selector( '.is-style-' . $style['name'], static::$blocks_metadata[ $block_name ]['selector'] ); } static::$blocks_metadata[ $block_name ]['styleVariations'] = $style_selectors; } From 5d3f66ac5bbb223b8d095a38bb4dbeb7f7b89775 Mon Sep 17 00:00:00 2001 From: Isabel Brison Date: Wed, 31 Jan 2024 02:52:25 +0000 Subject: [PATCH 16/46] Editor: introduce `dimensions.aspectRatio` block support. Adds front end rendering logic for the `dimensions.aspectRatio` block support as well as the required logic in `WP_Theme_JSON` and the style engine. Props andrewserong. Fixes #60365. git-svn-id: https://develop.svn.wordpress.org/trunk@57491 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/dimensions.php | 80 ++++++++ src/wp-includes/class-wp-theme-json.php | 26 ++- .../style-engine/class-wp-style-engine.php | 14 +- .../wpRenderDimensionsSupport.php | 176 ++++++++++++++++++ .../tests/style-engine/styleEngine.php | 18 ++ tests/phpunit/tests/theme/wpThemeJson.php | 14 +- 6 files changed, 318 insertions(+), 10 deletions(-) create mode 100644 tests/phpunit/tests/block-supports/wpRenderDimensionsSupport.php diff --git a/src/wp-includes/block-supports/dimensions.php b/src/wp-includes/block-supports/dimensions.php index a889e78a16973..da68f187c3915 100644 --- a/src/wp-includes/block-supports/dimensions.php +++ b/src/wp-includes/block-supports/dimensions.php @@ -83,6 +83,86 @@ function wp_apply_dimensions_support( $block_type, $block_attributes ) { return $attributes; } +/** + * Renders server-side dimensions styles to the block wrapper. + * This block support uses the `render_block` hook to ensure that + * it is also applied to non-server-rendered blocks. + * + * @since 6.5.0 + * @access private + * + * @param string $block_content Rendered block content. + * @param array $block Block object. + * @return string Filtered block content. + */ +function wp_render_dimensions_support( $block_content, $block ) { + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] ); + $block_attributes = ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) ? $block['attrs'] : array(); + $has_aspect_ratio_support = block_has_support( $block_type, array( 'dimensions', 'aspectRatio' ), false ); + + if ( + ! $has_aspect_ratio_support || + wp_should_skip_block_supports_serialization( $block_type, 'dimensions', 'aspectRatio' ) + ) { + return $block_content; + } + + $dimensions_block_styles = array(); + $dimensions_block_styles['aspectRatio'] = $block_attributes['style']['dimensions']['aspectRatio'] ?? null; + + // To ensure the aspect ratio does not get overridden by `minHeight` unset any existing rule. + if ( + isset( $dimensions_block_styles['aspectRatio'] ) + ) { + $dimensions_block_styles['minHeight'] = 'unset'; + } elseif ( + isset( $block_attributes['style']['dimensions']['minHeight'] ) || + isset( $block_attributes['minHeight'] ) + ) { + $dimensions_block_styles['aspectRatio'] = 'unset'; + } + + $styles = wp_style_engine_get_styles( array( 'dimensions' => $dimensions_block_styles ) ); + + if ( ! empty( $styles['css'] ) ) { + // Inject dimensions styles to the first element, presuming it's the wrapper, if it exists. + $tags = new WP_HTML_Tag_Processor( $block_content ); + + if ( $tags->next_tag() ) { + $existing_style = $tags->get_attribute( 'style' ); + $updated_style = ''; + + if ( ! empty( $existing_style ) ) { + $updated_style = $existing_style; + if ( ! str_ends_with( $existing_style, ';' ) ) { + $updated_style .= ';'; + } + } + + $updated_style .= $styles['css']; + $tags->set_attribute( 'style', $updated_style ); + + if ( ! empty( $styles['classnames'] ) ) { + foreach ( explode( ' ', $styles['classnames'] ) as $class_name ) { + if ( + str_contains( $class_name, 'aspect-ratio' ) && + ! isset( $block_attributes['style']['dimensions']['aspectRatio'] ) + ) { + continue; + } + $tags->add_class( $class_name ); + } + } + } + + return $tags->get_updated_html(); + } + + return $block_content; +} + +add_filter( 'render_block', 'wp_render_dimensions_support', 10, 2 ); + // Register the block support. WP_Block_Supports::get_instance()->register( 'dimensions', diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 8a06d81d47242..1d92e5c35ae18 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -204,10 +204,12 @@ class WP_Theme_JSON { * @since 6.2.0 Added `outline-*`, and `min-height` properties. * @since 6.3.0 Added `column-count` property. * @since 6.4.0 Added `writing-mode` property. + * @since 6.5.0 Added `aspect-ratio` property. * * @var array */ const PROPERTIES_METADATA = array( + 'aspect-ratio' => array( 'dimensions', 'aspectRatio' ), 'background' => array( 'color', 'gradient' ), 'background-color' => array( 'color', 'background' ), 'border-radius' => array( 'border', 'radius' ), @@ -344,8 +346,8 @@ class WP_Theme_JSON { * @since 6.3.0 Added support for `typography.textColumns`, removed `layout.definitions`. * @since 6.4.0 Added support for `layout.allowEditing`, `background.backgroundImage`, * `typography.writingMode`, `lightbox.enabled` and `lightbox.allowEditing`. - * @since 6.5.0 Added support for `layout.allowCustomContentAndWideSize` and - * `background.backgroundSize`. + * @since 6.5.0 Added support for `layout.allowCustomContentAndWideSize`, + * `background.backgroundSize` and `dimensions.aspectRatio`. * @var array */ const VALID_SETTINGS = array( @@ -380,7 +382,8 @@ class WP_Theme_JSON { ), 'custom' => null, 'dimensions' => array( - 'minHeight' => null, + 'aspectRatio' => null, + 'minHeight' => null, ), 'layout' => array( 'contentSize' => null, @@ -438,6 +441,7 @@ class WP_Theme_JSON { * updated `blockGap` to be allowed at any level. * @since 6.2.0 Added `outline`, and `minHeight` properties. * @since 6.3.0 Added support for `typography.textColumns`. + * @since 6.5.0 Added support for `dimensions.aspectRatio`. * * @var array */ @@ -458,7 +462,8 @@ class WP_Theme_JSON { 'text' => null, ), 'dimensions' => array( - 'minHeight' => null, + 'aspectRatio' => null, + 'minHeight' => null, ), 'filter' => array( 'duotone' => null, @@ -575,7 +580,7 @@ public static function get_element_class_name( $element ) { * @since 6.0.0 * @since 6.2.0 Added `dimensions.minHeight` and `position.sticky`. * @since 6.4.0 Added `background.backgroundImage`. - * @since 6.5.0 Added `background.backgroundSize`. + * @since 6.5.0 Added `background.backgroundSize` and `dimensions.aspectRatio`. * @var array */ const APPEARANCE_TOOLS_OPT_INS = array( @@ -589,6 +594,7 @@ public static function get_element_class_name( $element ) { array( 'color', 'heading' ), array( 'color', 'button' ), array( 'color', 'caption' ), + array( 'dimensions', 'aspectRatio' ), array( 'dimensions', 'minHeight' ), array( 'position', 'sticky' ), array( 'spacing', 'blockGap' ), @@ -1921,6 +1927,7 @@ protected static function flatten_tree( $tree, $prefix = '', $token = '--' ) { * @since 5.8.0 * @since 5.9.0 Added the `$settings` and `$properties` parameters. * @since 6.1.0 Added `$theme_json`, `$selector`, and `$use_root_padding` parameters. + * @since 6.5.0 Output a `min-height: unset` rule when `aspect-ratio` is set. * * @param array $styles Styles to process. * @param array $settings Theme settings. @@ -1992,6 +1999,15 @@ protected static function compute_style_properties( $styles, $settings = array() $value = wp_get_typography_font_size_value( array( 'size' => $value ) ); } + if ( 'aspect-ratio' === $css_property ) { + // For aspect ratio to work, other dimensions rules must be unset. + // This ensures that a fixed height does not override the aspect ratio. + $declarations[] = array( + 'name' => 'min-height', + 'value' => 'unset', + ); + } + $declarations[] = array( 'name' => $css_property, 'value' => $value, diff --git a/src/wp-includes/style-engine/class-wp-style-engine.php b/src/wp-includes/style-engine/class-wp-style-engine.php index 790e33f38c0e3..99372b5d70c32 100644 --- a/src/wp-includes/style-engine/class-wp-style-engine.php +++ b/src/wp-includes/style-engine/class-wp-style-engine.php @@ -23,7 +23,8 @@ * @since 6.1.0 * @since 6.3.0 Added support for text-columns. * @since 6.4.0 Added support for background.backgroundImage. - * @since 6.5.0 Added support for background.backgroundPosition and background.backgroundRepeat. + * @since 6.5.0 Added support for background.backgroundPosition, + * background.backgroundRepeat and dimensions.aspectRatio. */ #[AllowDynamicProperties] final class WP_Style_Engine { @@ -190,7 +191,16 @@ final class WP_Style_Engine { ), ), 'dimensions' => array( - 'minHeight' => array( + 'aspectRatio' => array( + 'property_keys' => array( + 'default' => 'aspect-ratio', + ), + 'path' => array( 'dimensions', 'aspectRatio' ), + 'classnames' => array( + 'has-aspect-ratio' => true, + ), + ), + 'minHeight' => array( 'property_keys' => array( 'default' => 'min-height', ), diff --git a/tests/phpunit/tests/block-supports/wpRenderDimensionsSupport.php b/tests/phpunit/tests/block-supports/wpRenderDimensionsSupport.php new file mode 100644 index 0000000000000..5d51c5e0a198c --- /dev/null +++ b/tests/phpunit/tests/block-supports/wpRenderDimensionsSupport.php @@ -0,0 +1,176 @@ +test_block_name = null; + $this->theme_root = realpath( DIR_TESTDATA . '/themedir1' ); + $this->orig_theme_dir = $GLOBALS['wp_theme_directories']; + + // /themes is necessary as theme.php functions assume /themes is the root if there is only one root. + $GLOBALS['wp_theme_directories'] = array( WP_CONTENT_DIR . '/themes', $this->theme_root ); + + add_filter( 'theme_root', array( $this, 'filter_set_theme_root' ) ); + add_filter( 'stylesheet_root', array( $this, 'filter_set_theme_root' ) ); + add_filter( 'template_root', array( $this, 'filter_set_theme_root' ) ); + + // Clear caches. + wp_clean_themes_cache(); + unset( $GLOBALS['wp_themes'] ); + WP_Style_Engine_CSS_Rules_Store::remove_all_stores(); + } + + public function tear_down() { + $GLOBALS['wp_theme_directories'] = $this->orig_theme_dir; + + // Clear up the filters to modify the theme root. + remove_filter( 'theme_root', array( $this, 'filter_set_theme_root' ) ); + remove_filter( 'stylesheet_root', array( $this, 'filter_set_theme_root' ) ); + remove_filter( 'template_root', array( $this, 'filter_set_theme_root' ) ); + + wp_clean_themes_cache(); + unset( $GLOBALS['wp_themes'] ); + WP_Style_Engine_CSS_Rules_Store::remove_all_stores(); + unregister_block_type( $this->test_block_name ); + $this->test_block_name = null; + parent::tear_down(); + } + + public function filter_set_theme_root() { + return $this->theme_root; + } + + /** + * Tests that dimensions block support works as expected. + * + * @ticket 60365 + * + * @covers ::wp_render_dimensions_support + * + * @dataProvider data_dimensions_block_support + * + * @param string $theme_name The theme to switch to. + * @param string $block_name The test block name to register. + * @param mixed $dimensions_settings The dimensions block support settings. + * @param mixed $dimensions_style The dimensions styles within the block attributes. + * @param string $expected_wrapper Expected markup for the block wrapper. + * @param string $wrapper Existing markup for the block wrapper. + */ + public function test_dimensions_block_support( $theme_name, $block_name, $dimensions_settings, $dimensions_style, $expected_wrapper, $wrapper ) { + switch_theme( $theme_name ); + $this->test_block_name = $block_name; + + register_block_type( + $this->test_block_name, + array( + 'api_version' => 2, + 'attributes' => array( + 'style' => array( + 'type' => 'object', + ), + ), + 'supports' => array( + 'dimensions' => $dimensions_settings, + ), + ) + ); + + $block = array( + 'blockName' => $block_name, + 'attrs' => array( + 'style' => array( + 'dimensions' => $dimensions_style, + ), + ), + ); + + $actual = wp_render_dimensions_support( $wrapper, $block ); + + $this->assertEquals( + $expected_wrapper, + $actual, + 'Dimensions block wrapper markup should be correct' + ); + } + + /** + * Data provider. + * + * @return array + */ + public function data_dimensions_block_support() { + return array( + 'aspect ratio style is applied, with min-height unset' => array( + 'theme_name' => 'block-theme-child-with-fluid-typography', + 'block_name' => 'test/dimensions-rules-are-output', + 'dimensions_settings' => array( + 'aspectRatio' => true, + ), + 'dimensions_style' => array( + 'aspectRatio' => '16/9', + ), + 'expected_wrapper' => '
    Content
    ', + 'wrapper' => '
    Content
    ', + ), + 'dimensions style is appended if a style attribute already exists' => array( + 'theme_name' => 'block-theme-child-with-fluid-typography', + 'block_name' => 'test/dimensions-rules-are-output', + 'dimensions_settings' => array( + 'aspectRatio' => true, + ), + 'dimensions_style' => array( + 'aspectRatio' => '16/9', + ), + 'expected_wrapper' => '
    Content
    ', + 'wrapper' => '
    Content
    ', + ), + 'aspect ratio style is unset if block has min-height set' => array( + 'theme_name' => 'block-theme-child-with-fluid-typography', + 'block_name' => 'test/dimensions-rules-are-output', + 'dimensions_settings' => array( + 'aspectRatio' => true, + ), + 'dimensions_style' => array( + 'minHeight' => '100px', + ), + 'expected_wrapper' => '
    Content
    ', + 'wrapper' => '
    Content
    ', + ), + 'aspect ratio style is not applied if the block does not support aspect ratio' => array( + 'theme_name' => 'block-theme-child-with-fluid-typography', + 'block_name' => 'test/background-rules-are-not-output', + 'dimensions_settings' => array( + 'aspectRatio' => false, + ), + 'dimensions_style' => array( + 'aspectRatio' => '16/9', + ), + 'expected_wrapper' => '
    Content
    ', + 'wrapper' => '
    Content
    ', + ), + ); + } +} diff --git a/tests/phpunit/tests/style-engine/styleEngine.php b/tests/phpunit/tests/style-engine/styleEngine.php index b208e4ef0575a..794f540baf422 100644 --- a/tests/phpunit/tests/style-engine/styleEngine.php +++ b/tests/phpunit/tests/style-engine/styleEngine.php @@ -184,6 +184,24 @@ public function data_wp_style_engine_get_styles() { ), ), + 'inline_valid_aspect_ratio_style' => array( + 'block_styles' => array( + 'dimensions' => array( + 'aspectRatio' => '4/3', + 'minHeight' => 'unset', + ), + ), + 'options' => null, + 'expected_output' => array( + 'css' => 'aspect-ratio:4/3;min-height:unset;', + 'declarations' => array( + 'aspect-ratio' => '4/3', + 'min-height' => 'unset', + ), + 'classnames' => 'has-aspect-ratio', + ), + ), + 'inline_valid_shadow_style' => array( 'block_styles' => array( 'shadow' => 'inset 5em 1em gold', diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index 31a99b3f1ebca..ecb6118689690 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -279,7 +279,8 @@ public function test_get_settings_appearance_true_opts_in() { 'caption' => true, ), 'dimensions' => array( - 'minHeight' => true, + 'aspectRatio' => true, + 'minHeight' => true, ), 'position' => array( 'sticky' => true, @@ -316,7 +317,8 @@ public function test_get_settings_appearance_true_opts_in() { 'caption' => true, ), 'dimensions' => array( - 'minHeight' => true, + 'aspectRatio' => true, + 'minHeight' => true, ), 'position' => array( 'sticky' => true, @@ -495,6 +497,7 @@ public function test_get_stylesheet_renders_enabled_protected_properties() { * @ticket 56611 * @ticket 58549 * @ticket 58550 + * @ticket 60365 */ public function test_get_stylesheet() { $theme_json = new WP_Theme_JSON( @@ -567,6 +570,11 @@ public function test_get_stylesheet() { ), ), 'blocks' => array( + 'core/cover' => array( + 'dimensions' => array( + 'aspectRatio' => '16/9', + ), + ), 'core/group' => array( 'color' => array( 'gradient' => 'var:preset|gradient|custom-gradient', @@ -645,7 +653,7 @@ public function test_get_stylesheet() { ); $variables = 'body{--wp--preset--color--grey: grey;--wp--preset--gradient--custom-gradient: linear-gradient(135deg,rgba(0,0,0) 0%,rgb(0,0,0) 100%);--wp--preset--font-family--small: 14px;--wp--preset--font-family--big: 41px;}.wp-block-group{--wp--custom--base-font: 16;--wp--custom--line-height--small: 1.2;--wp--custom--line-height--medium: 1.4;--wp--custom--line-height--large: 1.8;}'; - $styles = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}body{color: var(--wp--preset--color--grey);}a:where(:not(.wp-element-button)){background-color: #333;color: #111;}.wp-element-button, .wp-block-button__link{box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.66);}.wp-block-group{background: var(--wp--preset--gradient--custom-gradient);border-radius: 10px;padding: 24px;}.wp-block-group a:where(:not(.wp-element-button)){color: #111;}.wp-block-heading{color: #123456;}.wp-block-heading a:where(:not(.wp-element-button)){background-color: #333;color: #111;font-size: 60px;}.wp-block-post-date{color: #123456;}.wp-block-post-date a:where(:not(.wp-element-button)){background-color: #777;color: #555;}.wp-block-post-excerpt{column-count: 2;}.wp-block-image{margin-bottom: 30px;}.wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder{border-top-left-radius: 10px;border-bottom-right-radius: 1em;}.wp-block-image img, .wp-block-image .components-placeholder{filter: var(--wp--preset--duotone--custom-duotone);}'; + $styles = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}body{color: var(--wp--preset--color--grey);}a:where(:not(.wp-element-button)){background-color: #333;color: #111;}.wp-element-button, .wp-block-button__link{box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.66);}.wp-block-cover{min-height: unset;aspect-ratio: 16/9;}.wp-block-group{background: var(--wp--preset--gradient--custom-gradient);border-radius: 10px;padding: 24px;}.wp-block-group a:where(:not(.wp-element-button)){color: #111;}.wp-block-heading{color: #123456;}.wp-block-heading a:where(:not(.wp-element-button)){background-color: #333;color: #111;font-size: 60px;}.wp-block-post-date{color: #123456;}.wp-block-post-date a:where(:not(.wp-element-button)){background-color: #777;color: #555;}.wp-block-post-excerpt{column-count: 2;}.wp-block-image{margin-bottom: 30px;}.wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder{border-top-left-radius: 10px;border-bottom-right-radius: 1em;}.wp-block-image img, .wp-block-image .components-placeholder{filter: var(--wp--preset--duotone--custom-duotone);}'; $presets = '.has-grey-color{color: var(--wp--preset--color--grey) !important;}.has-grey-background-color{background-color: var(--wp--preset--color--grey) !important;}.has-grey-border-color{border-color: var(--wp--preset--color--grey) !important;}.has-custom-gradient-gradient-background{background: var(--wp--preset--gradient--custom-gradient) !important;}.has-small-font-family{font-family: var(--wp--preset--font-family--small) !important;}.has-big-font-family{font-family: var(--wp--preset--font-family--big) !important;}'; $all = $variables . $styles . $presets; $this->assertSame( $all, $theme_json->get_stylesheet() ); From dc15d66ee6203bf7b480de3c120d0d64f14009e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Zi=C3=83=C2=B3=C3=85=E2=80=9Akowski?= Date: Wed, 31 Jan 2024 08:29:18 +0000 Subject: [PATCH 17/46] Script Modules API: Add import map polyfill for older browsers Syncs the changes from https://github.com/WordPress/gutenberg/pull/58263. Adds a polyfill to make import maps compatible with unsported browsers (https://caniuse.com/import-maps). Fixes #60348. Props cbravobernal, jorbin, luisherranz, jonsurrell. git-svn-id: https://develop.svn.wordpress.org/trunk@57492 602fd350-edb4-49c9-b593-d223f7449a82 --- Gruntfile.js | 12 +++--- package-lock.json | 11 ++++++ package.json | 1 + src/wp-includes/class-wp-script-modules.php | 16 ++++++++ src/wp-includes/script-loader.php | 2 + tests/phpunit/tests/dependencies/scripts.php | 30 +++++++++++++++ .../tests/script-modules/wpScriptModules.php | 37 ++++++++++++++++++- tools/webpack/packages.js | 2 + 8 files changed, 105 insertions(+), 6 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 43e7bd02efd09..38904c6dac170 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1559,16 +1559,18 @@ module.exports = function(grunt) { } ); /** - * Build assertions for the lack of source maps in JavaScript files. + * Compiled JavaScript files may link to sourcemaps. In some cases, + * the source map may not be available, which can cause 404 errors when + * browsers try to download the sourcemap from the referenced URLs. + * Ensure that sourcemap links are not included in JavaScript files. * * @ticket 24994 * @ticket 46218 + * @ticket 60348 */ grunt.registerTask( 'verify:source-maps', function() { const ignoredFiles = [ 'build/wp-includes/js/dist/components.js', - 'build/wp-includes/js/dist/block-editor.js', - 'build/wp-includes/js/dist/block-editor.min.js' ]; const files = buildFiles.reduce( ( acc, path ) => { // Skip excluded paths and any path that isn't a file. @@ -1591,10 +1593,10 @@ module.exports = function(grunt) { encoding: 'utf8', } ); // `data:` URLs are allowed: - const match = contents.match( /sourceMappingURL=((?!data:).)/ ); + const doesNotHaveSourceMap = ! /^\/\/# sourceMappingURL=((?!data:).)/m.test(contents); assert( - match === null, + doesNotHaveSourceMap, `The ${ file } file must not contain a sourceMappingURL.` ); } ); diff --git a/package-lock.json b/package-lock.json index 8d53eab8e8554..91b836800731d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -81,6 +81,7 @@ "clipboard": "2.0.11", "core-js-url-browser": "3.6.4", "element-closest": "^3.0.2", + "es-module-shims": "1.8.2", "formdata-polyfill": "4.0.10", "framer-motion": "10.16.4", "hoverintent": "2.2.1", @@ -13349,6 +13350,11 @@ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, + "node_modules/es-module-shims": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-1.8.2.tgz", + "integrity": "sha512-7vIYVzpOhXtpc3Yn03itB+GSgVZFW7oL4kdydA+iL+IEi7HiSLBUxM05QFw4SxTl6e++pMpGqZPo2+vdNs3TbA==" + }, "node_modules/es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", @@ -43316,6 +43322,11 @@ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, + "es-module-shims": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-1.8.2.tgz", + "integrity": "sha512-7vIYVzpOhXtpc3Yn03itB+GSgVZFW7oL4kdydA+iL+IEi7HiSLBUxM05QFw4SxTl6e++pMpGqZPo2+vdNs3TbA==" + }, "es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", diff --git a/package.json b/package.json index 192386d8b906e..9e5e13653e8a1 100644 --- a/package.json +++ b/package.json @@ -150,6 +150,7 @@ "clipboard": "2.0.11", "core-js-url-browser": "3.6.4", "element-closest": "^3.0.2", + "es-module-shims": "1.8.2", "formdata-polyfill": "4.0.10", "framer-motion": "10.16.4", "hoverintent": "2.2.1", diff --git a/src/wp-includes/class-wp-script-modules.php b/src/wp-includes/class-wp-script-modules.php index 7eebb79da1b32..b2413d0f2442e 100644 --- a/src/wp-includes/class-wp-script-modules.php +++ b/src/wp-includes/class-wp-script-modules.php @@ -211,10 +211,26 @@ public function print_script_module_preloads() { * Prints the import map using a script tag with a type="importmap" attribute. * * @since 6.5.0 + * + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing the polyfill. */ public function print_import_map() { $import_map = $this->get_import_map(); if ( ! empty( $import_map['imports'] ) ) { + global $wp_scripts; + if ( isset( $wp_scripts ) ) { + wp_print_inline_script_tag( + wp_get_script_polyfill( + $wp_scripts, + array( + 'HTMLScriptElement.supports && HTMLScriptElement.supports("importmap")' => 'wp-polyfill-importmap', + ) + ), + array( + 'id' => 'wp-load-polyfill-importmap', + ) + ); + } wp_print_inline_script_tag( wp_json_encode( $import_map, JSON_HEX_TAG | JSON_HEX_AMP ), array( diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 50864cfd7ba7f..25977a9bd776d 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -96,6 +96,7 @@ function wp_default_packages_vendor( $scripts ) { 'lodash', 'wp-polyfill-fetch', 'wp-polyfill-formdata', + 'wp-polyfill-importmap', 'wp-polyfill-node-contains', 'wp-polyfill-url', 'wp-polyfill-dom-rect', @@ -120,6 +121,7 @@ function wp_default_packages_vendor( $scripts ) { 'wp-polyfill-object-fit' => '2.3.5', 'wp-polyfill-inert' => '3.1.2', 'wp-polyfill' => '3.15.0', + 'wp-polyfill-importmap' => '1.8.2', ); foreach ( $vendor_scripts as $handle => $dependencies ) { diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 228077188067b..5e9cec703973a 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -3104,6 +3104,36 @@ public function test_wp_scripts_move_to_footer( $set_up, $expected_header, $expe $this->assertEquals( $expected_groups, wp_scripts()->groups, 'Expected groups to match.' ); } + /** + * Test that get_script_polyfill() returns the correct polyfill. + * + * @ticket 60348 + * + * @covers ::wp_get_script_polyfill + * + * @global WP_Scripts $wp_scripts WP_Scripts instance. + */ + public function test_wp_get_script_polyfill() { + global $wp_scripts; + $script_name = 'wp-polyfill-importmap'; + $test_script = 'HTMLScriptElement.supports && HTMLScriptElement.supports("importmap")'; + $script_url = 'https://example.com/wp-polyfill-importmap.js'; + wp_register_script( $script_name, $script_url ); + + $polyfill = wp_get_script_polyfill( + $wp_scripts, + array( + $test_script => $script_name, + ) + ); + + wp_deregister_script( $script_name ); + + $expected = '( ' . $test_script . ' ) || document.write( \'' ); + $processor = new WP_HTML_Tag_Processor( '' ); - $p->next_tag(); + $processor->next_tag(); $this->assertFalse( - $p->next_tag( array( 'tag_closers' => 'visit' ) ), + $processor->next_tag( array( 'tag_closers' => 'visit' ) ), 'Should not have found closing SCRIPT tag when closing an opener.' ); - $p = new WP_HTML_Tag_Processor( 'abc' ); - $this->assertTrue( $p->next_tag( array( 'tag_closers' => 'visit' ) ), 'Did not find the tag closer when there was no tag opener' ); + $processor = new WP_HTML_Tag_Processor( 'abc' ); + $this->assertTrue( $processor->next_tag( array( 'tag_closers' => 'visit' ) ), 'Did not find the tag closer when there was no tag opener' ); - $p = new WP_HTML_Tag_Processor( '' ); + $processor = new WP_HTML_Tag_Processor( '' ); - $p->next_tag(); + $processor->next_tag(); $this->assertFalse( - $p->next_tag( array( 'tag_closers' => 'visit' ) ), + $processor->next_tag( array( 'tag_closers' => 'visit' ) ), 'Should not have found closing TEXTAREA when closing an opener.' ); - $p = new WP_HTML_Tag_Processor( 'abc' ); - $this->assertTrue( $p->next_tag( array( 'tag_closers' => 'visit' ) ), 'Did not find the tag closer when there was no tag opener' ); + $processor = new WP_HTML_Tag_Processor( 'abc' ); + $this->assertTrue( $processor->next_tag( array( 'tag_closers' => 'visit' ) ), 'Did not find the tag closer when there was no tag opener' ); - $p = new WP_HTML_Tag_Processor( 'abc' ); + $processor = new WP_HTML_Tag_Processor( 'abc' ); - $p->next_tag(); + $processor->next_tag(); $this->assertFalse( - $p->next_tag( array( 'tag_closers' => 'visit' ) ), + $processor->next_tag( array( 'tag_closers' => 'visit' ) ), 'Should not have found closing TITLE when closing an opener.' ); - $p = new WP_HTML_Tag_Processor( 'abc' ); - $this->assertTrue( $p->next_tag( array( 'tag_closers' => 'visit' ) ), 'Did not find the tag closer when there was no tag opener' ); + $processor = new WP_HTML_Tag_Processor( 'abc' ); + $this->assertTrue( $processor->next_tag( array( 'tag_closers' => 'visit' ) ), 'Did not find the tag closer when there was no tag opener' ); } /** @@ -620,16 +620,16 @@ public function test_internal_pointer_returns_to_original_spot_after_inserting_c * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_set_attribute_on_a_non_existing_tag_does_not_change_the_markup() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $this->assertFalse( $p->next_tag( 'p' ), 'Querying a non-existing tag did not return false' ); - $this->assertFalse( $p->next_tag( 'div' ), 'Querying a non-existing tag did not return false' ); + $this->assertFalse( $processor->next_tag( 'p' ), 'Querying a non-existing tag did not return false' ); + $this->assertFalse( $processor->next_tag( 'div' ), 'Querying a non-existing tag did not return false' ); - $p->set_attribute( 'id', 'primary' ); + $processor->set_attribute( 'id', 'primary' ); $this->assertSame( self::HTML_SIMPLE, - $p->get_updated_html(), + $processor->get_updated_html(), 'Calling get_updated_html after updating a non-existing tag returned an HTML that was different from the original HTML' ); } @@ -643,31 +643,31 @@ public function test_set_attribute_on_a_non_existing_tag_does_not_change_the_mar * @covers WP_HTML_Tag_Processor::remove_class */ public function test_attribute_ops_on_tag_closer_do_not_change_the_markup() { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag( + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag( array( 'tag_name' => 'div', 'tag_closers' => 'visit', ) ); - $this->assertFalse( $p->is_tag_closer(), 'Skipped tag opener' ); + $this->assertFalse( $processor->is_tag_closer(), 'Skipped tag opener' ); - $p->next_tag( + $processor->next_tag( array( 'tag_name' => 'div', 'tag_closers' => 'visit', ) ); - $this->assertTrue( $p->is_tag_closer(), 'Skipped tag closer' ); - $this->assertFalse( $p->set_attribute( 'id', 'test' ), "Allowed setting an attribute on a tag closer when it shouldn't have" ); - $this->assertFalse( $p->remove_attribute( 'invalid-id' ), "Allowed removing an attribute on a tag closer when it shouldn't have" ); - $this->assertFalse( $p->add_class( 'sneaky' ), "Allowed adding a class on a tag closer when it shouldn't have" ); - $this->assertFalse( $p->remove_class( 'not-appearing-in-this-test' ), "Allowed removing a class on a tag closer when it shouldn't have" ); + $this->assertTrue( $processor->is_tag_closer(), 'Skipped tag closer' ); + $this->assertFalse( $processor->set_attribute( 'id', 'test' ), "Allowed setting an attribute on a tag closer when it shouldn't have" ); + $this->assertFalse( $processor->remove_attribute( 'invalid-id' ), "Allowed removing an attribute on a tag closer when it shouldn't have" ); + $this->assertFalse( $processor->add_class( 'sneaky' ), "Allowed adding a class on a tag closer when it shouldn't have" ); + $this->assertFalse( $processor->remove_class( 'not-appearing-in-this-test' ), "Allowed removing a class on a tag closer when it shouldn't have" ); $this->assertSame( '
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Calling get_updated_html after updating a non-existing tag returned an HTML that was different from the original HTML' ); } @@ -676,9 +676,9 @@ public function test_attribute_ops_on_tag_closer_do_not_change_the_markup() { * Passing a double quote inside of an attribute value could lead to an XSS attack as follows: * * ```php - * $p = new WP_HTML_Tag_Processor( '
    ' ); - * $p->next_tag(); - * $p->set_attribute('class', '" onclick="alert'); + * $processor = new WP_HTML_Tag_Processor( '
    ' ); + * $processor->next_tag(); + * $processor->set_attribute('class', '" onclick="alert'); * echo $p; * //
    * ``` @@ -697,9 +697,9 @@ public function test_attribute_ops_on_tag_closer_do_not_change_the_markup() { * @param string $attribute_value A value with potential XSS exploit. */ public function test_set_attribute_prevents_xss( $attribute_value ) { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag(); - $p->set_attribute( 'test', $attribute_value ); + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag(); + $processor->set_attribute( 'test', $attribute_value ); /* * Testing the escaping is hard using tools that properly parse @@ -713,7 +713,7 @@ public function test_set_attribute_prevents_xss( $attribute_value ) { * content and (b) looks at the raw values. */ $match = null; - preg_match( '~^
    $~', $p->get_updated_html(), $match ); + preg_match( '~^
    $~', $processor->get_updated_html(), $match ); list( , $actual_value ) = $match; $this->assertSame( '"' . esc_attr( $attribute_value ) . '"', $actual_value, 'Entities were not properly escaped in the attribute value' ); @@ -724,7 +724,7 @@ public function test_set_attribute_prevents_xss( $attribute_value ) { * * @return string[][]. */ - public function data_set_attribute_prevents_xss() { + public static function data_set_attribute_prevents_xss() { return array( array( '"' ), array( '"' ), @@ -744,18 +744,18 @@ public function data_set_attribute_prevents_xss() { * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_set_attribute_with_a_non_existing_attribute_adds_a_new_attribute_to_the_markup() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->set_attribute( 'test-attribute', 'test-value' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->set_attribute( 'test-attribute', 'test-value' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not include attribute added via set_attribute()' ); $this->assertSame( 'test-value', - $p->get_attribute( 'test-attribute' ), + $processor->get_attribute( 'test-attribute' ), 'get_attribute() (called after get_updated_html()) did not return attribute added via set_attribute()' ); } @@ -766,18 +766,18 @@ public function test_set_attribute_with_a_non_existing_attribute_adds_a_new_attr * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_returns_updated_values_before_they_are_applied() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->set_attribute( 'test-attribute', 'test-value' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->set_attribute( 'test-attribute', 'test-value' ); $this->assertSame( 'test-value', - $p->get_attribute( 'test-attribute' ), + $processor->get_attribute( 'test-attribute' ), 'get_attribute() (called before get_updated_html()) did not return attribute added via set_attribute()' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not include attribute added via set_attribute()' ); } @@ -788,18 +788,18 @@ public function test_get_attribute_returns_updated_values_before_they_are_applie * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_returns_updated_values_before_they_are_applied_with_different_name_casing() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->set_attribute( 'test-ATTribute', 'test-value' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->set_attribute( 'test-ATTribute', 'test-value' ); $this->assertSame( 'test-value', - $p->get_attribute( 'test-attribute' ), + $processor->get_attribute( 'test-attribute' ), 'get_attribute() (called before get_updated_html()) did not return attribute added via set_attribute()' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not include attribute added via set_attribute()' ); } @@ -810,18 +810,18 @@ public function test_get_attribute_returns_updated_values_before_they_are_applie * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_reflects_added_class_names_before_they_are_applied() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->add_class( 'my-class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->add_class( 'my-class' ); $this->assertSame( 'my-class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), 'get_attribute() (called before get_updated_html()) did not return class name added via add_class()' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not include class name added via add_class()' ); } @@ -832,26 +832,26 @@ public function test_get_attribute_reflects_added_class_names_before_they_are_ap * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_reflects_added_class_names_before_they_are_applied_and_retains_classes_from_previous_add_class_calls() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->add_class( 'my-class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->add_class( 'my-class' ); $this->assertSame( 'my-class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), 'get_attribute() (called before get_updated_html()) did not return class name added via add_class()' ); - $p->add_class( 'my-other-class' ); + $processor->add_class( 'my-other-class' ); $this->assertSame( 'my-class my-other-class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), 'get_attribute() (called before get_updated_html()) did not return class names added via subsequent add_class() calls' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not include class names added via subsequent add_class() calls' ); } @@ -862,17 +862,17 @@ public function test_get_attribute_reflects_added_class_names_before_they_are_ap * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_reflects_removed_attribute_before_it_is_applied() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->remove_attribute( 'id' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->remove_attribute( 'id' ); $this->assertNull( - $p->get_attribute( 'id' ), + $processor->get_attribute( 'id' ), 'get_attribute() (called before get_updated_html()) returned attribute that was removed by remove_attribute()' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML includes attribute that was removed by remove_attribute()' ); } @@ -883,18 +883,18 @@ public function test_get_attribute_reflects_removed_attribute_before_it_is_appli * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_reflects_adding_and_then_removing_an_attribute_before_those_updates_are_applied() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->set_attribute( 'test-attribute', 'test-value' ); - $p->remove_attribute( 'test-attribute' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->set_attribute( 'test-attribute', 'test-value' ); + $processor->remove_attribute( 'test-attribute' ); $this->assertNull( - $p->get_attribute( 'test-attribute' ), + $processor->get_attribute( 'test-attribute' ), 'get_attribute() (called before get_updated_html()) returned attribute that was added via set_attribute() and then removed by remove_attribute()' ); $this->assertSame( self::HTML_SIMPLE, - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML includes attribute that was added via set_attribute() and then removed by remove_attribute()' ); } @@ -905,18 +905,18 @@ public function test_get_attribute_reflects_adding_and_then_removing_an_attribut * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_reflects_setting_and_then_removing_an_existing_attribute_before_those_updates_are_applied() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->set_attribute( 'id', 'test-value' ); - $p->remove_attribute( 'id' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->set_attribute( 'id', 'test-value' ); + $processor->remove_attribute( 'id' ); $this->assertNull( - $p->get_attribute( 'id' ), + $processor->get_attribute( 'id' ), 'get_attribute() (called before get_updated_html()) returned attribute that was overwritten by set_attribute() and then removed by remove_attribute()' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML includes attribute that was overwritten by set_attribute() and then removed by remove_attribute()' ); } @@ -927,18 +927,18 @@ public function test_get_attribute_reflects_setting_and_then_removing_an_existin * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_reflects_removed_class_names_before_they_are_applied() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->remove_class( 'with-border' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->remove_class( 'with-border' ); $this->assertSame( 'main', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), 'get_attribute() (called before get_updated_html()) returned the wrong attribute after calling remove_attribute()' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML includes wrong attribute after calling remove_attribute()' ); } @@ -949,19 +949,19 @@ public function test_get_attribute_reflects_removed_class_names_before_they_are_ * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_reflects_setting_and_then_removing_a_class_name_before_those_updates_are_applied() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->add_class( 'foo-class' ); - $p->remove_class( 'foo-class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->add_class( 'foo-class' ); + $processor->remove_class( 'foo-class' ); $this->assertSame( 'main with-border', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), 'get_attribute() (called before get_updated_html()) returned class name that was added via add_class() and then removed by remove_class()' ); $this->assertSame( self::HTML_WITH_CLASSES, - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML includes class that was added via add_class() and then removed by remove_class()' ); } @@ -972,19 +972,19 @@ public function test_get_attribute_reflects_setting_and_then_removing_a_class_na * @covers WP_HTML_Tag_Processor::get_attribute */ public function test_get_attribute_reflects_duplicating_and_then_removing_an_existing_class_name_before_those_updates_are_applied() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->add_class( 'with-border' ); - $p->remove_class( 'with-border' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->add_class( 'with-border' ); + $processor->remove_class( 'with-border' ); $this->assertSame( 'main', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), 'get_attribute() (called before get_updated_html()) returned class name that was duplicated via add_class() and then removed by remove_class()' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML includes class that was duplicated via add_class() and then removed by remove_class()' ); } @@ -998,13 +998,13 @@ public function test_get_attribute_reflects_duplicating_and_then_removing_an_exi * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_update_first_attribute_when_duplicated_attributes_exist() { - $p = new WP_HTML_Tag_Processor( '
    Text
    ' ); - $p->next_tag(); - $p->set_attribute( 'id', 'updated-id' ); + $processor = new WP_HTML_Tag_Processor( '
    Text
    ' ); + $processor->next_tag(); + $processor->set_attribute( 'id', 'updated-id' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Proper (first) appearance of attribute was not updated when duplicates exist' ); } @@ -1015,12 +1015,12 @@ public function test_update_first_attribute_when_duplicated_attributes_exist() { * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_set_attribute_with_an_existing_attribute_name_updates_its_value_in_the_markup() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->set_attribute( 'id', 'new-id' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->set_attribute( 'id', 'new-id' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Existing attribute was not updated' ); } @@ -1034,13 +1034,13 @@ public function test_set_attribute_with_an_existing_attribute_name_updates_its_v * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_set_attribute_with_case_variants_updates_only_the_original_first_copy() { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag(); - $p->set_attribute( 'DATA-ENABLED', 'canary' ); - $p->set_attribute( 'Data-Enabled', 'canary' ); - $p->set_attribute( 'dATa-EnABled', 'canary' ); + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag(); + $processor->set_attribute( 'DATA-ENABLED', 'canary' ); + $processor->set_attribute( 'Data-Enabled', 'canary' ); + $processor->set_attribute( 'dATa-EnABled', 'canary' ); - $this->assertSame( '
    ', strtolower( $p->get_updated_html() ) ); + $this->assertSame( '
    ', strtolower( $processor->get_updated_html() ) ); } /** @@ -1050,14 +1050,14 @@ public function test_set_attribute_with_case_variants_updates_only_the_original_ * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_next_tag_and_set_attribute_in_a_loop_update_all_tags_in_the_markup() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - while ( $p->next_tag() ) { - $p->set_attribute( 'data-foo', 'bar' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + while ( $processor->next_tag() ) { + $processor->set_attribute( 'data-foo', 'bar' ); } $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Not all tags were updated when looping with next_tag() and set_attribute()' ); } @@ -1073,13 +1073,13 @@ public function test_next_tag_and_set_attribute_in_a_loop_update_all_tags_in_the * @covers WP_HTML_Tag_Processor::remove_attribute */ public function test_remove_first_when_duplicated_attribute() { - $p = new WP_HTML_Tag_Processor( '
    Text
    ' ); - $p->next_tag(); - $p->remove_attribute( 'id' ); + $processor = new WP_HTML_Tag_Processor( '
    Text
    ' ); + $processor->next_tag(); + $processor->remove_attribute( 'id' ); $this->assertStringNotContainsString( 'update-me', - $p->get_updated_html(), + $processor->get_updated_html(), 'First attribute (when duplicates exist) was not removed' ); } @@ -1090,13 +1090,13 @@ public function test_remove_first_when_duplicated_attribute() { * @covers WP_HTML_Tag_Processor::remove_attribute */ public function test_remove_attribute_with_an_existing_attribute_name_removes_it_from_the_markup() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->remove_attribute( 'id' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->remove_attribute( 'id' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Attribute was not removed' ); } @@ -1111,16 +1111,16 @@ public function test_remove_attribute_with_an_existing_attribute_name_removes_it * @dataProvider data_html_with_duplicated_attributes */ public function test_remove_attribute_with_duplicated_attributes_removes_all_of_them( $html_with_duplicate_attributes, $attribute_to_remove ) { - $p = new WP_HTML_Tag_Processor( $html_with_duplicate_attributes ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( $html_with_duplicate_attributes ); + $processor->next_tag(); - $p->remove_attribute( $attribute_to_remove ); - $this->assertNull( $p->get_attribute( $attribute_to_remove ), 'Failed to remove all copies of an attribute when duplicated in modified source.' ); + $processor->remove_attribute( $attribute_to_remove ); + $this->assertNull( $processor->get_attribute( $attribute_to_remove ), 'Failed to remove all copies of an attribute when duplicated in modified source.' ); // Recreate a tag processor with the updated HTML after removing the attribute. - $p = new WP_HTML_Tag_Processor( $p->get_updated_html() ); - $p->next_tag(); - $this->assertNull( $p->get_attribute( $attribute_to_remove ), 'Failed to remove all copies of duplicated attributes when getting updated HTML.' ); + $processor = new WP_HTML_Tag_Processor( $processor->get_updated_html() ); + $processor->next_tag(); + $this->assertNull( $processor->get_attribute( $attribute_to_remove ), 'Failed to remove all copies of duplicated attributes when getting updated HTML.' ); } /** @@ -1131,12 +1131,12 @@ public function test_remove_attribute_with_duplicated_attributes_removes_all_of_ * @covers WP_HTML_Tag_Processor::remove_attribute */ public function test_previous_duplicated_attributes_are_not_removed_on_successive_tag_removal() { - $p = new WP_HTML_Tag_Processor( '' ); - $p->next_tag(); - $p->next_tag(); - $p->remove_attribute( 'id' ); + $processor = new WP_HTML_Tag_Processor( '' ); + $processor->next_tag(); + $processor->next_tag(); + $processor->remove_attribute( 'id' ); - $this->assertSame( '', $p->get_updated_html() ); + $this->assertSame( '', $processor->get_updated_html() ); } /** @@ -1146,7 +1146,7 @@ public function test_previous_duplicated_attributes_are_not_removed_on_successiv * * @return array[]. */ - public function data_html_with_duplicated_attributes() { + public static function data_html_with_duplicated_attributes() { return array( 'Double attributes' => array( '
    ', 'id' ), 'Triple attributes' => array( '
    ', 'id' ), @@ -1162,13 +1162,13 @@ public function data_html_with_duplicated_attributes() { * @covers WP_HTML_Tag_Processor::remove_attribute */ public function test_remove_attribute_with_a_non_existing_attribute_name_does_not_change_the_markup() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->remove_attribute( 'no-such-attribute' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->remove_attribute( 'no-such-attribute' ); $this->assertSame( self::HTML_SIMPLE, - $p->get_updated_html(), + $processor->get_updated_html(), 'Content was changed when attempting to remove an attribute that did not exist' ); } @@ -1179,18 +1179,18 @@ public function test_remove_attribute_with_a_non_existing_attribute_name_does_no * @covers WP_HTML_Tag_Processor::add_class */ public function test_add_class_creates_a_class_attribute_when_there_is_none() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->add_class( 'foo-class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->add_class( 'foo-class' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not include class name added via add_class()' ); $this->assertSame( 'foo-class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) did not return class name added via add_class()" ); } @@ -1201,19 +1201,19 @@ public function test_add_class_creates_a_class_attribute_when_there_is_none() { * @covers WP_HTML_Tag_Processor::add_class */ public function test_calling_add_class_twice_creates_a_class_attribute_with_both_class_names_when_there_is_no_class_attribute() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->add_class( 'foo-class' ); - $p->add_class( 'bar-class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->add_class( 'foo-class' ); + $processor->add_class( 'bar-class' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not include class names added via subsequent add_class() calls' ); $this->assertSame( 'foo-class bar-class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) did not return class names added via subsequent add_class() calls" ); } @@ -1224,17 +1224,17 @@ public function test_calling_add_class_twice_creates_a_class_attribute_with_both * @covers WP_HTML_Tag_Processor::remove_class */ public function test_remove_class_does_not_change_the_markup_when_there_is_no_class_attribute() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->remove_class( 'foo-class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->remove_class( 'foo-class' ); $this->assertSame( self::HTML_SIMPLE, - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML includes class name that was removed by remove_class()' ); $this->assertNull( - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) did not return null for class name that was removed by remove_class()" ); } @@ -1245,19 +1245,19 @@ public function test_remove_class_does_not_change_the_markup_when_there_is_no_cl * @covers WP_HTML_Tag_Processor::add_class */ public function test_add_class_appends_class_names_to_the_existing_class_attribute_when_one_already_exists() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->add_class( 'foo-class' ); - $p->add_class( 'bar-class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->add_class( 'foo-class' ); + $processor->add_class( 'bar-class' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not reflect class names added to existing class attribute via subsequent add_class() calls' ); $this->assertSame( 'main with-border foo-class bar-class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect class names added to existing class attribute via subsequent add_class() calls" ); } @@ -1268,18 +1268,18 @@ public function test_add_class_appends_class_names_to_the_existing_class_attribu * @covers WP_HTML_Tag_Processor::remove_class */ public function test_remove_class_removes_a_single_class_from_the_class_attribute_when_one_exists() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->remove_class( 'main' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->remove_class( 'main' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not reflect class name removed from existing class attribute via remove_class()' ); $this->assertSame( ' with-border', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect class name removed from existing class attribute via remove_class()" ); } @@ -1290,18 +1290,18 @@ public function test_remove_class_removes_a_single_class_from_the_class_attribut * @covers WP_HTML_Tag_Processor::remove_class */ public function test_calling_remove_class_with_all_listed_class_names_removes_the_existing_class_attribute_from_the_markup() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->remove_class( 'main' ); - $p->remove_class( 'with-border' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->remove_class( 'main' ); + $processor->remove_class( 'with-border' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not reflect class attribute removed via subesequent remove_class() calls' ); $this->assertNull( - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) did not return null for class attribute removed via subesequent remove_class() calls" ); } @@ -1312,18 +1312,18 @@ public function test_calling_remove_class_with_all_listed_class_names_removes_th * @covers WP_HTML_Tag_Processor::add_class */ public function test_add_class_does_not_add_duplicate_class_names() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->add_class( 'with-border' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->add_class( 'with-border' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not reflect deduplicated class name added via add_class()' ); $this->assertSame( 'main with-border', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect deduplicated class name added via add_class()" ); } @@ -1334,18 +1334,18 @@ public function test_add_class_does_not_add_duplicate_class_names() { * @covers WP_HTML_Tag_Processor::add_class */ public function test_add_class_preserves_class_name_order_when_a_duplicate_class_name_is_added() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->add_class( 'main' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->add_class( 'main' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not reflect class name order after adding duplicated class name via add_class()' ); $this->assertSame( 'main with-border', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect class name order after adding duplicated class name added via add_class()" ); } @@ -1356,20 +1356,20 @@ public function test_add_class_preserves_class_name_order_when_a_duplicate_class * @covers WP_HTML_Tag_Processor::add_class */ public function test_add_class_when_there_is_a_class_attribute_with_excessive_whitespaces() { - $p = new WP_HTML_Tag_Processor( + $processor = new WP_HTML_Tag_Processor( '
    Text
    ' ); - $p->next_tag(); - $p->add_class( 'foo-class' ); + $processor->next_tag(); + $processor->add_class( 'foo-class' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not reflect existing excessive whitespace after adding class name via add_class()' ); $this->assertSame( ' main with-border foo-class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect existing excessive whitespace after adding class name via add_class()" ); } @@ -1380,20 +1380,20 @@ public function test_add_class_when_there_is_a_class_attribute_with_excessive_wh * @covers WP_HTML_Tag_Processor::remove_class */ public function test_remove_class_preserves_whitespaces_when_there_is_a_class_attribute_with_excessive_whitespaces() { - $p = new WP_HTML_Tag_Processor( + $processor = new WP_HTML_Tag_Processor( '
    Text
    ' ); - $p->next_tag(); - $p->remove_class( 'with-border' ); + $processor->next_tag(); + $processor->remove_class( 'with-border' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not reflect existing excessive whitespace after removing class name via remove_class()' ); $this->assertSame( ' main', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect existing excessive whitespace after removing class name via removing_class()" ); } @@ -1404,19 +1404,19 @@ public function test_remove_class_preserves_whitespaces_when_there_is_a_class_at * @covers WP_HTML_Tag_Processor::remove_class */ public function test_removing_all_classes_removes_the_existing_class_attribute_from_the_markup_even_when_excessive_whitespaces_are_present() { - $p = new WP_HTML_Tag_Processor( + $processor = new WP_HTML_Tag_Processor( '
    Text
    ' ); - $p->next_tag(); - $p->remove_class( 'main' ); - $p->remove_class( 'with-border' ); + $processor->next_tag(); + $processor->remove_class( 'main' ); + $processor->remove_class( 'with-border' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Updated HTML does not reflect removed class attribute after removing all class names via remove_class()' ); $this->assertNull( - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute( 'class' ) did not return null after removing all class names via remove_class()" ); } @@ -1435,33 +1435,33 @@ public function test_removing_all_classes_removes_the_existing_class_attribute_f * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_set_attribute_takes_priority_over_add_class() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->add_class( 'add_class' ); - $p->set_attribute( 'class', 'set_attribute' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->add_class( 'add_class' ); + $processor->set_attribute( 'class', 'set_attribute' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), "Calling get_updated_html after updating first tag's attributes did not return the expected HTML" ); $this->assertSame( 'set_attribute', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "Calling get_attribute after updating first tag's attributes did not return the expected class name" ); - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->set_attribute( 'class', 'set_attribute' ); - $p->add_class( 'add_class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->set_attribute( 'class', 'set_attribute' ); + $processor->add_class( 'add_class' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), "Calling get_updated_html after updating first tag's attributes did not return the expected HTML" ); $this->assertSame( 'set_attribute add_class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "Calling get_attribute after updating first tag's attributes did not return the expected class name" ); } @@ -1482,33 +1482,33 @@ public function test_set_attribute_takes_priority_over_add_class() { * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_set_attribute_takes_priority_over_add_class_even_before_updating() { - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->add_class( 'add_class' ); - $p->set_attribute( 'class', 'set_attribute' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->add_class( 'add_class' ); + $processor->set_attribute( 'class', 'set_attribute' ); $this->assertSame( 'set_attribute', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "Calling get_attribute after updating first tag's attributes did not return the expected class name" ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), "Calling get_updated_html after updating first tag's attributes did not return the expected HTML" ); - $p = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); - $p->next_tag(); - $p->set_attribute( 'class', 'set_attribute' ); - $p->add_class( 'add_class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_WITH_CLASSES ); + $processor->next_tag(); + $processor->set_attribute( 'class', 'set_attribute' ); + $processor->add_class( 'add_class' ); $this->assertSame( 'set_attribute add_class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "Calling get_attribute after updating first tag's attributes did not return the expected class name" ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), "Calling get_updated_html after updating first tag's attributes did not return the expected HTML" ); } @@ -1519,18 +1519,18 @@ public function test_set_attribute_takes_priority_over_add_class_even_before_upd * @covers WP_HTML_Tag_Processor::add_class */ public function test_add_class_overrides_boolean_class_attribute() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->set_attribute( 'class', true ); - $p->add_class( 'add_class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->set_attribute( 'class', true ); + $processor->add_class( 'add_class' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), "Updated HTML doesn't reflect class added via add_class that was originally set as boolean attribute" ); $this->assertSame( 'add_class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute (called after get_updated_html()) doesn't reflect class added via add_class that was originally set as boolean attribute" ); } @@ -1541,18 +1541,18 @@ public function test_add_class_overrides_boolean_class_attribute() { * @covers WP_HTML_Tag_Processor::add_class */ public function test_add_class_overrides_boolean_class_attribute_even_before_updating() { - $p = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); - $p->next_tag(); - $p->set_attribute( 'class', true ); - $p->add_class( 'add_class' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_SIMPLE ); + $processor->next_tag(); + $processor->set_attribute( 'class', true ); + $processor->add_class( 'add_class' ); $this->assertSame( 'add_class', - $p->get_attribute( 'class' ), + $processor->get_attribute( 'class' ), "get_attribute (called before get_updated_html()) doesn't reflect class added via add_class that was originally set as boolean attribute" ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), "Updated HTML doesn't reflect class added via add_class that was originally set as boolean attribute" ); } @@ -1613,12 +1613,12 @@ public function test_advanced_use_case() {
    HTML; - $p = new WP_HTML_Tag_Processor( $input ); - $this->assertTrue( $p->next_tag( 'div' ), 'Did not find first DIV tag in input.' ); - $p->set_attribute( 'data-details', '{ "key": "value" }' ); - $p->add_class( 'is-processed' ); + $processor = new WP_HTML_Tag_Processor( $input ); + $this->assertTrue( $processor->next_tag( 'div' ), 'Did not find first DIV tag in input.' ); + $processor->set_attribute( 'data-details', '{ "key": "value" }' ); + $processor->add_class( 'is-processed' ); $this->assertTrue( - $p->next_tag( + $processor->next_tag( array( 'tag_name' => 'div', 'class_name' => 'BtnGroup', @@ -1626,11 +1626,11 @@ public function test_advanced_use_case() { ), 'Did not find the first BtnGroup DIV tag' ); - $p->remove_class( 'BtnGroup' ); - $p->add_class( 'button-group' ); - $p->add_class( 'Another-Mixed-Case' ); + $processor->remove_class( 'BtnGroup' ); + $processor->add_class( 'button-group' ); + $processor->add_class( 'Another-Mixed-Case' ); $this->assertTrue( - $p->next_tag( + $processor->next_tag( array( 'tag_name' => 'div', 'class_name' => 'BtnGroup', @@ -1638,11 +1638,11 @@ public function test_advanced_use_case() { ), 'Did not find the second BtnGroup DIV tag' ); - $p->remove_class( 'BtnGroup' ); - $p->add_class( 'button-group' ); - $p->add_class( 'Another-Mixed-Case' ); + $processor->remove_class( 'BtnGroup' ); + $processor->add_class( 'button-group' ); + $processor->add_class( 'Another-Mixed-Case' ); $this->assertTrue( - $p->next_tag( + $processor->next_tag( array( 'tag_name' => 'button', 'class_name' => 'btn', @@ -1651,10 +1651,10 @@ public function test_advanced_use_case() { ), 'Did not find third BUTTON tag with "btn" CSS class' ); - $p->remove_attribute( 'class' ); - $this->assertFalse( $p->next_tag( 'non-existent' ), "Found a {$p->get_tag()} tag when none should have been found." ); - $p->set_attribute( 'class', 'test' ); - $this->assertSame( $expected_output, $p->get_updated_html(), 'Calling get_updated_html after updating the attributes did not return the expected HTML' ); + $processor->remove_attribute( 'class' ); + $this->assertFalse( $processor->next_tag( 'non-existent' ), "Found a {$processor->get_tag()} tag when none should have been found." ); + $processor->set_attribute( 'class', 'test' ); + $this->assertSame( $expected_output, $processor->get_updated_html(), 'Calling get_updated_html after updating the attributes did not return the expected HTML' ); } /** @@ -1663,26 +1663,26 @@ public function test_advanced_use_case() { * @covers WP_HTML_Tag_Processor::next_tag */ public function test_correctly_parses_html_attributes_wrapped_in_single_quotation_marks() { - $p = new WP_HTML_Tag_Processor( + $processor = new WP_HTML_Tag_Processor( '
    Text
    ' ); - $p->next_tag( + $processor->next_tag( array( 'tag_name' => 'div', 'id' => 'first', ) ); - $p->remove_attribute( 'id' ); - $p->next_tag( + $processor->remove_attribute( 'id' ); + $processor->next_tag( array( 'tag_name' => 'span', 'id' => 'second', ) ); - $p->set_attribute( 'id', 'single-quote' ); + $processor->set_attribute( 'id', 'single-quote' ); $this->assertSame( '
    Text
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not remove single-quoted attribute' ); } @@ -1693,14 +1693,14 @@ public function test_correctly_parses_html_attributes_wrapped_in_single_quotatio * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_set_attribute_with_value_equal_to_true_adds_a_boolean_html_attribute_with_implicit_value() { - $p = new WP_HTML_Tag_Processor( + $processor = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag( 'input' ); - $p->set_attribute( 'checked', true ); + $processor->next_tag( 'input' ); + $processor->set_attribute( 'checked', true ); $this->assertSame( '
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not add "checked" as an expected boolean attribute' ); } @@ -1711,14 +1711,14 @@ public function test_set_attribute_with_value_equal_to_true_adds_a_boolean_html_ * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_setting_a_boolean_attribute_to_false_removes_it_from_the_markup() { - $p = new WP_HTML_Tag_Processor( + $processor = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag( 'input' ); - $p->set_attribute( 'checked', false ); + $processor->next_tag( 'input' ); + $processor->set_attribute( 'checked', false ); $this->assertSame( '
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not remove boolean attribute when set to false' ); } @@ -1730,12 +1730,12 @@ public function test_setting_a_boolean_attribute_to_false_removes_it_from_the_ma */ public function test_setting_a_missing_attribute_to_false_does_not_change_the_markup() { $html_input = '
    '; - $p = new WP_HTML_Tag_Processor( $html_input ); - $p->next_tag( 'input' ); - $p->set_attribute( 'checked', false ); + $processor = new WP_HTML_Tag_Processor( $html_input ); + $processor->next_tag( 'input' ); + $processor->set_attribute( 'checked', false ); $this->assertSame( $html_input, - $p->get_updated_html(), + $processor->get_updated_html(), 'Changed the markup unexpectedly when setting a non-existing attribute to false' ); } @@ -1746,14 +1746,14 @@ public function test_setting_a_missing_attribute_to_false_does_not_change_the_ma * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_setting_a_boolean_attribute_to_a_string_value_adds_explicit_value_to_the_markup() { - $p = new WP_HTML_Tag_Processor( + $processor = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag( 'input' ); - $p->set_attribute( 'checked', 'checked' ); + $processor->next_tag( 'input' ); + $processor->set_attribute( 'checked', 'checked' ); $this->assertSame( '
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not add string value to existing boolean attribute' ); } @@ -1765,18 +1765,18 @@ public function test_setting_a_boolean_attribute_to_a_string_value_adds_explicit * @covers WP_HTML_Tag_Processor::paused_at_incomplete_token */ public function test_unclosed_script_tag_should_not_cause_an_infinite_loop() { - $p = new WP_HTML_Tag_Processor( '
    ', @@ -1866,11 +1866,11 @@ public function data_next_tag_ignores_script_tag_contents() { * element after contain the "start" and "end" CSS classes. */ public function test_next_tag_ignores_invalid_first_character_of_tag_name_comments( $html_with_markers ) { - $p = new WP_HTML_Tag_Processor( $html_with_markers ); - $p->next_tag( array( 'class_name' => 'start' ) ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( $html_with_markers ); + $processor->next_tag( array( 'class_name' => 'start' ) ); + $processor->next_tag(); - $this->assertSame( 'end', $p->get_attribute( 'class' ) ); + $this->assertSame( 'end', $processor->get_attribute( 'class' ) ); } /** @@ -1878,7 +1878,7 @@ public function test_next_tag_ignores_invalid_first_character_of_tag_name_commen * * @return array[] */ - public function data_next_tag_ignores_invalid_first_character_of_tag_name_comments() { + public static function data_next_tag_ignores_invalid_first_character_of_tag_name_comments() { return array( 'Invalid tag openers as normal text' => array( '
    • I <3 when outflow > inflow
    ', @@ -1905,11 +1905,11 @@ public function data_next_tag_ignores_invalid_first_character_of_tag_name_commen * @param string $rcdata_tag RCDATA tag. */ public function test_next_tag_ignores_contents_of_rcdata_tag( $rcdata_then_div, $rcdata_tag ) { - $p = new WP_HTML_Tag_Processor( $rcdata_then_div ); - $p->next_tag(); - $this->assertSame( $rcdata_tag, $p->get_tag(), "The first found tag was not '$rcdata_tag'" ); - $p->next_tag(); - $this->assertSame( 'DIV', $p->get_tag(), "The second found tag was not 'div'" ); + $processor = new WP_HTML_Tag_Processor( $rcdata_then_div ); + $processor->next_tag(); + $this->assertSame( $rcdata_tag, $processor->get_tag(), "The first found tag was not '$rcdata_tag'" ); + $processor->next_tag(); + $this->assertSame( 'DIV', $processor->get_tag(), "The second found tag was not 'div'" ); } /** @@ -1917,7 +1917,7 @@ public function test_next_tag_ignores_contents_of_rcdata_tag( $rcdata_then_div, * * @return array[] */ - public function data_next_tag_ignores_contents_of_rcdata_tag() { + public static function data_next_tag_ignores_contents_of_rcdata_tag() { return array( 'simple textarea' => array( 'rcdata_then_div' => '
    ', @@ -1964,10 +1964,10 @@ public function data_next_tag_ignores_contents_of_rcdata_tag() { * @covers WP_HTML_Tag_Processor::next_tag */ public function test_processes_inside_of_noscript_elements() { - $p = new WP_HTML_Tag_Processor( '
    ' ); + $processor = new WP_HTML_Tag_Processor( '
    ' ); - $this->assertTrue( $p->next_tag( 'INPUT' ), 'Failed to find INPUT element inside NOSCRIPT element.' ); - $this->assertTrue( $p->next_tag( 'DIV' ), 'Failed to find DIV element after NOSCRIPT element.' ); + $this->assertTrue( $processor->next_tag( 'INPUT' ), 'Failed to find INPUT element inside NOSCRIPT element.' ); + $this->assertTrue( $processor->next_tag( 'DIV' ), 'Failed to find DIV element after NOSCRIPT element.' ); } /** @@ -1996,7 +1996,7 @@ public function test_next_tag_ignores_contents_of_rawtext_tags( $rawtext_element * * @return array[]. */ - public function data_next_tag_ignores_contents_of_rawtext_tags() { + public static function data_next_tag_ignores_contents_of_rawtext_tags() { return array( 'IFRAME' => array( '
    ' ), 'NOEMBED' => array( '<p></p>
    ' ), @@ -2012,11 +2012,11 @@ public function data_next_tag_ignores_contents_of_rawtext_tags() { * @covers WP_HTML_Tag_Processor::class_list */ public function test_class_list_empty_when_missing_class() { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag(); $found_classes = false; - foreach ( $p->class_list() as $class ) { + foreach ( $processor->class_list() as $class ) { $found_classes = true; } @@ -2029,11 +2029,11 @@ public function test_class_list_empty_when_missing_class() { * @covers WP_HTML_Tag_Processor::class_list */ public function test_class_list_empty_when_class_is_boolean() { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag(); $found_classes = false; - foreach ( $p->class_list() as $class ) { + foreach ( $processor->class_list() as $class ) { $found_classes = true; } @@ -2046,11 +2046,11 @@ public function test_class_list_empty_when_class_is_boolean() { * @covers WP_HTML_Tag_Processor::class_list */ public function test_class_list_empty_when_class_is_empty() { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag(); $found_classes = false; - foreach ( $p->class_list() as $class ) { + foreach ( $processor->class_list() as $class ) { $found_classes = true; } @@ -2063,11 +2063,11 @@ public function test_class_list_empty_when_class_is_empty() { * @covers WP_HTML_Tag_Processor::class_list */ public function test_class_list_visits_each_class_in_order() { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag(); $found_classes = array(); - foreach ( $p->class_list() as $class ) { + foreach ( $processor->class_list() as $class ) { $found_classes[] = $class; } @@ -2080,11 +2080,11 @@ public function test_class_list_visits_each_class_in_order() { * @covers WP_HTML_Tag_Processor::class_list */ public function test_class_list_decodes_class_names() { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag(); $found_classes = array(); - foreach ( $p->class_list() as $class ) { + foreach ( $processor->class_list() as $class ) { $found_classes[] = $class; } @@ -2097,11 +2097,11 @@ public function test_class_list_decodes_class_names() { * @covers WP_HTML_Tag_Processor::class_list */ public function test_class_list_visits_unique_class_names_only_once() { - $p = new WP_HTML_Tag_Processor( '
    ' ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( '
    ' ); + $processor->next_tag(); $found_classes = array(); - foreach ( $p->class_list() as $class ) { + foreach ( $processor->class_list() as $class ) { $found_classes[] = $class; } @@ -2120,13 +2120,13 @@ public function test_class_list_visits_unique_class_names_only_once() { * @param bool $has_class Whether the sought class exists in the given HTML. */ public function test_has_class_handles_expected_class_name_variations( $html, $sought_class, $has_class ) { - $p = new WP_HTML_Tag_Processor( $html ); - $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( $html ); + $processor->next_tag(); if ( $has_class ) { - $this->assertTrue( $p->has_class( $sought_class ), "Failed to find expected class {$sought_class}." ); + $this->assertTrue( $processor->has_class( $sought_class ), "Failed to find expected class {$sought_class}." ); } else { - $this->assertFalse( $p->has_class( $sought_class ), "Found class {$sought_class} when it doesn't exist." ); + $this->assertFalse( $processor->has_class( $sought_class ), "Found class {$sought_class} when it doesn't exist." ); } } @@ -2135,7 +2135,7 @@ public function test_has_class_handles_expected_class_name_variations( $html, $s * * @return array[] */ - public function data_html_with_variations_of_class_values_and_sought_class_names() { + public static function data_html_with_variations_of_class_values_and_sought_class_names() { return array( 'Tag without any classes' => array( '
    ', 'foo', false ), 'Tag with boolean class' => array( '', 'foo', false ), @@ -2159,16 +2159,16 @@ public function data_html_with_variations_of_class_values_and_sought_class_names * */ public function test_allows_incorrectly_closed_comments() { - $p = new WP_HTML_Tag_Processor( '-->' ); + $processor = new WP_HTML_Tag_Processor( '-->' ); - $p->next_tag(); - $this->assertSame( 'before', $p->get_attribute( 'id' ), 'Did not find starting tag.' ); + $processor->next_tag(); + $this->assertSame( 'before', $processor->get_attribute( 'id' ), 'Did not find starting tag.' ); - $p->next_tag(); - $this->assertSame( 'after', $p->get_attribute( 'id' ), 'Did not properly close improperly-closed comment.' ); + $processor->next_tag(); + $this->assertSame( 'after', $processor->get_attribute( 'id' ), 'Did not properly close improperly-closed comment.' ); - $p->next_tag(); - $this->assertSame( 'final', $p->get_attribute( 'id' ), 'Did not skip over unopened comment-closer.' ); + $processor->next_tag(); + $this->assertSame( 'final', $processor->get_attribute( 'id' ), 'Did not skip over unopened comment-closer.' ); } /** @@ -2184,15 +2184,15 @@ public function test_allows_incorrectly_closed_comments() { * @param string $html_ending_before_comment_close HTML with opened comments that aren't closed. */ public function test_documents_may_end_with_unclosed_comment( $html_ending_before_comment_close ) { - $p = new WP_HTML_Tag_Processor( $html_ending_before_comment_close ); + $processor = new WP_HTML_Tag_Processor( $html_ending_before_comment_close ); $this->assertFalse( - $p->next_tag(), - "Should not have found any tag, but found {$p->get_tag()}." + $processor->next_tag(), + "Should not have found any tag, but found {$processor->get_tag()}." ); $this->assertTrue( - $p->paused_at_incomplete_token(), + $processor->paused_at_incomplete_token(), "Should have indicated that the parser found an incomplete token but didn't." ); } @@ -2202,7 +2202,7 @@ public function test_documents_may_end_with_unclosed_comment( $html_ending_befor * * @return array[] */ - public function data_html_with_unclosed_comments() { + public static function data_html_with_unclosed_comments() { return array( 'Shortest open valid comment' => array( '
    ' ), 'Empty comment with two dashes only, improperly closed' => array( '

    ' ), @@ -2262,11 +2262,11 @@ public function data_abruptly_closed_empty_comments() { * @param $input_html HTML with multiple divs, one of which carries the "target" attribute. */ public function test_skips_contents_of_script_and_rcdata_regions( $input_html ) { - $p = new WP_HTML_Tag_Processor( $input_html ); - $p->next_tag( 'div' ); + $processor = new WP_HTML_Tag_Processor( $input_html ); + $processor->next_tag( 'div' ); $this->assertTrue( - $p->get_attribute( 'target' ), + $processor->get_attribute( 'target' ), 'Did not properly skip over script and rcdata regions; incorrectly found tags inside' ); } @@ -2276,7 +2276,7 @@ public function test_skips_contents_of_script_and_rcdata_regions( $input_html ) * * @return array[] */ - public function data_skips_contents_of_script_and_rcdata_regions() { + public static function data_skips_contents_of_script_and_rcdata_regions() { return array( 'Balanced SCRIPT tags' => array( '
    ' ), 'Unexpected SCRIPT closer after DIV' => array( 'console.log("
    ")
    ' ), @@ -2295,16 +2295,16 @@ public function data_skips_contents_of_script_and_rcdata_regions() { * @covers WP_HTML_Tag_Processor::set_attribute */ public function test_can_query_and_update_wrongly_nested_tags() { - $p = new WP_HTML_Tag_Processor( + $processor = new WP_HTML_Tag_Processor( '123

    456789

    ' ); - $p->next_tag( 'span' ); - $p->set_attribute( 'class', 'span-class' ); - $p->next_tag( 'p' ); - $p->set_attribute( 'class', 'p-class' ); + $processor->next_tag( 'span' ); + $processor->set_attribute( 'class', 'span-class' ); + $processor->next_tag( 'p' ); + $processor->set_attribute( 'class', 'p-class' ); $this->assertSame( '123

    456789

    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not find overlapping p tag' ); } @@ -2316,12 +2316,12 @@ public function test_can_query_and_update_wrongly_nested_tags() { * @covers WP_HTML_Tag_Processor::remove_attribute */ public function test_removing_specific_attributes_in_malformed_html() { - $p = new WP_HTML_Tag_Processor( self::HTML_MALFORMED ); - $p->next_tag( 'span' ); - $p->remove_attribute( 'Notifications<' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_MALFORMED ); + $processor->next_tag( 'span' ); + $processor->remove_attribute( 'Notifications<' ); $this->assertSame( '
    Back to notifications
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not remove "Notifications<" attribute in malformed input' ); } @@ -2357,7 +2357,7 @@ public function test_next_tag_returns_false_when_there_are_no_tags( $html_withou * * @return array[] */ - public function data_html_without_tags() { + public static function data_html_without_tags() { return array( 'DOCTYPE declaration' => array( 'Just some HTML' ), 'No tags' => array( 'this is nothing more than a text node' ), @@ -2382,15 +2382,15 @@ public function data_html_without_tags() { * @param string $incomplete_html HTML text containing some kind of incomplete syntax. */ public function test_next_tag_returns_false_for_incomplete_syntax_elements( $incomplete_html ) { - $p = new WP_HTML_Tag_Processor( $incomplete_html ); + $processor = new WP_HTML_Tag_Processor( $incomplete_html ); $this->assertFalse( - $p->next_tag(), - "Shouldn't have found any tags but found {$p->get_tag()}." + $processor->next_tag(), + "Shouldn't have found any tags but found {$processor->get_tag()}." ); $this->assertTrue( - $p->paused_at_incomplete_token(), + $processor->paused_at_incomplete_token(), "Should have indicated that the parser found an incomplete token but didn't." ); } @@ -2400,7 +2400,7 @@ public function test_next_tag_returns_false_for_incomplete_syntax_elements( $inc * * @return array[] */ - public function data_incomplete_syntax_elements() { + public static function data_incomplete_syntax_elements() { return array( 'Incomplete tag name' => array( ' array( 'next_tag( 'span' ); - $p->set_attribute( 'id', 'first' ); - $p->next_tag( 'span' ); - $p->set_attribute( 'id', 'second' ); + $processor = new WP_HTML_Tag_Processor( self::HTML_MALFORMED ); + $processor->next_tag( 'span' ); + $processor->set_attribute( 'id', 'first' ); + $processor->next_tag( 'span' ); + $processor->set_attribute( 'id', 'second' ); $this->assertSame( '
    Back to notifications
    ', - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not add id attributes properly to malformed input' ); } @@ -2466,16 +2466,16 @@ public function test_updating_specific_attributes_in_malformed_html() { * @param string $expected Expected updated HTML. */ public function test_updating_attributes( $html, $expected ) { - $p = new WP_HTML_Tag_Processor( $html ); - $p->next_tag(); - $p->set_attribute( 'foo', 'bar' ); - $p->add_class( 'firstTag' ); - $p->next_tag(); - $p->add_class( 'secondTag' ); + $processor = new WP_HTML_Tag_Processor( $html ); + $processor->next_tag(); + $processor->set_attribute( 'foo', 'bar' ); + $processor->add_class( 'firstTag' ); + $processor->next_tag(); + $processor->add_class( 'secondTag' ); $this->assertSame( $expected, - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not properly add attributes and class names' ); } @@ -2485,7 +2485,7 @@ public function test_updating_attributes( $html, $expected ) { * * @return array[] */ - public function data_updating_attributes() { + public static function data_updating_attributes() { return array( 'tags inside of a comment' => array( 'input' => 'test', @@ -2530,16 +2530,16 @@ public function data_updating_attributes() { * @param string $expected Expected updated HTML. */ public function test_updating_attributes_in_malformed_html( $html, $expected ) { - $p = new WP_HTML_Tag_Processor( $html ); - $this->assertTrue( $p->next_tag(), 'Could not find first tag.' ); - $p->set_attribute( 'foo', 'bar' ); - $p->add_class( 'firstTag' ); - $p->next_tag(); - $p->add_class( 'secondTag' ); + $processor = new WP_HTML_Tag_Processor( $html ); + $this->assertTrue( $processor->next_tag(), 'Could not find first tag.' ); + $processor->set_attribute( 'foo', 'bar' ); + $processor->add_class( 'firstTag' ); + $processor->next_tag(); + $processor->add_class( 'secondTag' ); $this->assertSame( $expected, - $p->get_updated_html(), + $processor->get_updated_html(), 'Did not properly update attributes and classnames given malformed input' ); } @@ -2549,7 +2549,7 @@ public function test_updating_attributes_in_malformed_html( $html, $expected ) { * * @return array[] */ - public function data_updating_attributes_in_malformed_html() { + public static function data_updating_attributes_in_malformed_html() { return array( 'Invalid entity inside attribute value' => array( 'input' => 'test', @@ -2702,8 +2702,8 @@ public function data_updating_attributes_in_malformed_html() { * @covers WP_HTML_Tag_Processor::next_tag */ public function test_handles_malformed_taglike_open_short_html() { - $p = new WP_HTML_Tag_Processor( '<' ); - $result = $p->next_tag(); + $processor = new WP_HTML_Tag_Processor( '<' ); + $result = $processor->next_tag(); $this->assertFalse( $result, 'Did not handle "<" html properly.' ); } @@ -2711,8 +2711,8 @@ public function test_handles_malformed_taglike_open_short_html() { * @covers WP_HTML_Tag_Processor::next_tag */ public function test_handles_malformed_taglike_close_short_html() { - $p = new WP_HTML_Tag_Processor( 'next_tag(); + $processor = new WP_HTML_Tag_Processor( 'next_tag(); $this->assertFalse( $result, 'Did not handle "' ); - $p->next_token(); - $this->assertSame( '#text', $p->get_token_type(), 'Did not find text node.' ); - $this->assertSame( 'test< /A>', $p->get_modifiable_text(), 'Did not find complete text node.' ); + $processor = new WP_HTML_Tag_Processor( 'test< /A>' ); + $processor->next_token(); + $this->assertSame( '#text', $processor->get_token_type(), 'Did not find text node.' ); + $this->assertSame( 'test< /A>', $processor->get_modifiable_text(), 'Did not find complete text node.' ); } } From 65be4cd635a0fce9fc15f3f2ab658c6185c2c602 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Thu, 1 Feb 2024 08:38:15 +0000 Subject: [PATCH 34/46] Docs: Fix typo in `do_robots()` docblock. This was introduced in [45928]. Props shailu25, mukesh27. Fixes #60405. git-svn-id: https://develop.svn.wordpress.org/trunk@57509 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 3b321fc0a6c05..94995206f146a 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -1692,7 +1692,7 @@ function do_feed_atom( $for_comments ) { * Displays the default robots.txt file content. * * @since 2.1.0 - * @since 5.3.0 Remove the "Disallow: /" output if search engine visiblity is + * @since 5.3.0 Remove the "Disallow: /" output if search engine visibility is * discouraged in favor of robots meta HTML tag via wp_robots_no_robots() * filter callback. */ From ef37e6bf8229900a5753f785255aa26308d78284 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 1 Feb 2024 09:24:09 +0000 Subject: [PATCH 35/46] Editor: Remove shadow support via direct attribute. Shadow block support should always rely on the style attribute instead. Props madhudollu. Fixes #60377. git-svn-id: https://develop.svn.wordpress.org/trunk@57510 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/shadow.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/block-supports/shadow.php b/src/wp-includes/block-supports/shadow.php index 6fa05b248f4c4..0ccaf3fd44b76 100644 --- a/src/wp-includes/block-supports/shadow.php +++ b/src/wp-includes/block-supports/shadow.php @@ -58,9 +58,8 @@ function wp_apply_shadow_support( $block_type, $block_attributes ) { $shadow_block_styles = array(); - $preset_shadow = array_key_exists( 'shadow', $block_attributes ) ? "var:preset|shadow|{$block_attributes['shadow']}" : null; - $custom_shadow = isset( $block_attributes['style']['shadow'] ) ? $block_attributes['style']['shadow'] : null; - $shadow_block_styles['shadow'] = $preset_shadow ? $preset_shadow : $custom_shadow; + $custom_shadow = $block_attributes['style']['shadow'] ?? null; + $shadow_block_styles['shadow'] = $custom_shadow; $attributes = array(); $styles = wp_style_engine_get_styles( $shadow_block_styles ); From 3600105163a45e62f07da3cb5607846f3e4bb4fd Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 1 Feb 2024 09:29:38 +0000 Subject: [PATCH 36/46] Editor: Add deprecated functions from interactivity core blocks. In 6.5 we are removing a couple of functions in Core blocks that were enqueuing the files needed to add that interactivity. Interactivity is handled with modules, so those functions are not needed anymore and are deprecated. Props swissspidy, cbravobernal. Fixes #60380. git-svn-id: https://develop.svn.wordpress.org/trunk@57511 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/deprecated.php | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/wp-includes/deprecated.php b/src/wp-includes/deprecated.php index ec7b33f360396..1fd62ae16e898 100644 --- a/src/wp-includes/deprecated.php +++ b/src/wp-includes/deprecated.php @@ -6239,3 +6239,60 @@ function the_block_template_skip_link() { registered['wp-block-query-view'] ) && + ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-query-view']->deps, true ) + ) { + $wp_scripts->registered['wp-block-query-view']->deps[] = 'wp-interactivity'; + } +} + +/** + * Ensure that the view script has the `wp-interactivity` dependency. + * + * @since 6.4.0 + * @deprecated 6.5.0 + * + * @global WP_Scripts $wp_scripts + */ +function block_core_file_ensure_interactivity_dependency() { + _deprecated_function( __FUNCTION__, '6.5.0', 'wp_register_script_module' ); + global $wp_scripts; + if ( + isset( $wp_scripts->registered['wp-block-file-view'] ) && + ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-file-view']->deps, true ) + ) { + $wp_scripts->registered['wp-block-file-view']->deps[] = 'wp-interactivity'; + } +} + +/** + * Ensures that the view script has the `wp-interactivity` dependency. + * + * @since 6.4.0 + * @deprecated 6.5.0 + * + * @global WP_Scripts $wp_scripts + */ +function block_core_image_ensure_interactivity_dependency() { + _deprecated_function( __FUNCTION__, '6.5.0', 'wp_register_script_module' ); + global $wp_scripts; + if ( + isset( $wp_scripts->registered['wp-block-image-view'] ) && + ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-image-view']->deps, true ) + ) { + $wp_scripts->registered['wp-block-image-view']->deps[] = 'wp-interactivity'; + } +} From d27872e29e212696b3bcd900aafd5a20ea77be0d Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 1 Feb 2024 11:31:05 +0000 Subject: [PATCH 37/46] Twenty Fifteen: Fix typo in `css/blocks.css`. Follow-up to [43798]. Props shailu25, harshgajipara. Fixes #60383. git-svn-id: https://develop.svn.wordpress.org/trunk@57512 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyfifteen/css/blocks.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-content/themes/twentyfifteen/css/blocks.css b/src/wp-content/themes/twentyfifteen/css/blocks.css index 5967ea52e9f30..3487cc7b98ef4 100644 --- a/src/wp-content/themes/twentyfifteen/css/blocks.css +++ b/src/wp-content/themes/twentyfifteen/css/blocks.css @@ -470,7 +470,7 @@ p.has-drop-cap:not(:focus)::first-letter { } } -/* Seperators */ +/* Separators */ .wp-block-separator { border: 0; From 5b46851f7c52c2548630314d456b6e058d32a645 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Thu, 1 Feb 2024 11:43:21 +0000 Subject: [PATCH 38/46] I18N: Improve singular lookup of pluralized strings. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensures that string lookup in MO files only uses the singular string. This matches expected behavior with gettext files and improves compatibility for cases where for example both `__( 'Product' )` and `_n( 'Product', 'Products’, num )` are used in a project, where both will use the same translation for the singular version. Maintains backward compatibility and feature parity with the pomo library and the PHP translation file format. Replaces [57386], which was reverted in [57505], with a more accurate and performant solution. See #59656. git-svn-id: https://develop.svn.wordpress.org/trunk@57513 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/l10n/class-wp-translation-file-mo.php | 10 +++++++++- .../l10n/class-wp-translation-file-php.php | 8 ++------ src/wp-includes/l10n/class-wp-translations.php | 11 +++-------- tests/phpunit/data/l10n/example-simple.php | 10 +++++----- tests/phpunit/tests/l10n/wpTranslations.php | 3 +-- tests/phpunit/tests/l10n/wpTranslationsConvert.php | 4 ++++ 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/wp-includes/l10n/class-wp-translation-file-mo.php b/src/wp-includes/l10n/class-wp-translation-file-mo.php index 225b48a836342..bf39cc70ec38b 100644 --- a/src/wp-includes/l10n/class-wp-translation-file-mo.php +++ b/src/wp-includes/l10n/class-wp-translation-file-mo.php @@ -161,7 +161,15 @@ protected function parse_file(): bool { $this->headers[ strtolower( $name ) ] = $value; } } else { - $this->entries[ (string) $original ] = $translation; + /* + * In MO files, the key normally contains both singular and plural versions. + * However, this just adds the singular string for lookup, + * which caters for cases where both __( 'Product' ) and _n( 'Product', 'Products' ) + * are used and the translation is expected to be the same for both. + */ + $parts = explode( "\0", (string) $original ); + + $this->entries[ $parts[0] ] = $translation; } } diff --git a/src/wp-includes/l10n/class-wp-translation-file-php.php b/src/wp-includes/l10n/class-wp-translation-file-php.php index 9f5b5abd9889b..f93dd0163fddc 100644 --- a/src/wp-includes/l10n/class-wp-translation-file-php.php +++ b/src/wp-includes/l10n/class-wp-translation-file-php.php @@ -28,12 +28,8 @@ protected function parse_file() { } if ( isset( $result['messages'] ) && is_array( $result['messages'] ) ) { - foreach ( $result['messages'] as $singular => $translations ) { - if ( is_array( $translations ) ) { - $this->entries[ $singular ] = implode( "\0", $translations ); - } elseif ( is_string( $translations ) ) { - $this->entries[ $singular ] = $translations; - } + foreach ( $result['messages'] as $original => $translation ) { + $this->entries[ (string) $original ] = $translation; } unset( $result['messages'] ); } diff --git a/src/wp-includes/l10n/class-wp-translations.php b/src/wp-includes/l10n/class-wp-translations.php index 5992c855b6971..e177e1d8c536b 100644 --- a/src/wp-includes/l10n/class-wp-translations.php +++ b/src/wp-includes/l10n/class-wp-translations.php @@ -95,15 +95,10 @@ private function make_entry( $original, $translations ): Translation_Entry { $entry->context = $parts[0]; } - // Look for plural original. - $parts = explode( "\0", $original ); - $entry->singular = $parts[0]; - if ( isset( $parts[1] ) ) { - $entry->is_plural = true; - $entry->plural = $parts[1]; - } - + $entry->singular = $original; $entry->translations = explode( "\0", $translations ); + $entry->is_plural = count( $entry->translations ) > 1; + return $entry; } diff --git a/tests/phpunit/data/l10n/example-simple.php b/tests/phpunit/data/l10n/example-simple.php index 4eb71d440572b..24b3552bfd65f 100644 --- a/tests/phpunit/data/l10n/example-simple.php +++ b/tests/phpunit/data/l10n/example-simple.php @@ -2,10 +2,10 @@ return [ 'messages' => [ - 'original' => ['translation'], - 'contextoriginal with context' => ['translation with context'], - 'plural0' . "\0" . 'plural1' => ['translation0', 'translation1'], - 'contextplural0 with context' . "\0" . 'plural1 with context' => ['translation0 with context', 'translation1 with context'], - 'Product' . "\0" . 'Products' => 'Produkt' . "\0" . 'Produkte', + 'original' => 'translation', + 'contextoriginal with context' => 'translation with context', + 'plural0' => 'translation0' . "\0" . 'translation1', + 'contextplural0 with context' => 'translation0 with context' . "\0" . 'translation1 with context', + 'Product' => 'Produkt' . "\0" . 'Produkte', ], ]; diff --git a/tests/phpunit/tests/l10n/wpTranslations.php b/tests/phpunit/tests/l10n/wpTranslations.php index f2ef4535a0810..3879a570e3d49 100644 --- a/tests/phpunit/tests/l10n/wpTranslations.php +++ b/tests/phpunit/tests/l10n/wpTranslations.php @@ -71,8 +71,8 @@ public function test_get_entries_plural() { array( new Translation_Entry( array( + 'is_plural' => true, 'singular' => 'one dragon', - 'plural' => '%d dragons', 'translations' => array( 'oney dragoney', 'twoey dragoney', @@ -119,7 +119,6 @@ public function test_get_entries_context() { array( 'is_plural' => true, 'singular' => 'one dragon', - 'plural' => '%d dragons', 'context' => 'dragonland', 'translations' => array( 'oney dragoney', diff --git a/tests/phpunit/tests/l10n/wpTranslationsConvert.php b/tests/phpunit/tests/l10n/wpTranslationsConvert.php index 000388aabb5ad..ea318eb329284 100644 --- a/tests/phpunit/tests/l10n/wpTranslationsConvert.php +++ b/tests/phpunit/tests/l10n/wpTranslationsConvert.php @@ -199,6 +199,10 @@ public function test_simple_translation_files( string $file ) { $this->assertSame( 'translation1 with context', $controller->translate_plural( array( 'plural0 with context', 'plural1 with context' ), 0, 'context', 'unittest' ) ); $this->assertSame( 'translation0 with context', $controller->translate_plural( array( 'plural0 with context', 'plural1 with context' ), 1, 'context', 'unittest' ) ); $this->assertSame( 'translation1 with context', $controller->translate_plural( array( 'plural0 with context', 'plural1 with context' ), 2, 'context', 'unittest' ) ); + + $this->assertSame( 'Produkt', $controller->translate( 'Product', '', 'unittest' ) ); + $this->assertSame( 'Produkt', $controller->translate_plural( array( 'Product', 'Products' ), 1, '', 'unittest' ) ); + $this->assertSame( 'Produkte', $controller->translate_plural( array( 'Product', 'Products' ), 2, '', 'unittest' ) ); } /** From 1e564ad6c050edd06885f41208d7d09f12931c73 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 1 Feb 2024 12:52:54 +0000 Subject: [PATCH 39/46] Editor: Add the Block Bindings API. This introduces the Block Bindings API for WordPress. The API allows developers to connects block attributes to different sources. In this PR, two such sources are included: "post meta" and "pattern". Attributes connected to sources can have their HTML replaced by values coming from the source in a way defined by the binding. Props czapla, lgladdy, gziolo, sc0ttkclark, swissspidy, artemiosans, kevin940726, fabiankaegy, santosguillamot, talldanwp, wildworks. Fixes #60282. git-svn-id: https://develop.svn.wordpress.org/trunk@57514 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-bindings.php | 4 +- .../block-bindings/sources/pattern.php | 34 +++ .../block-bindings/sources/post-meta.php | 47 ++++ .../class-wp-block-bindings-registry.php | 4 +- src/wp-includes/class-wp-block.php | 202 ++++++++++++++++++ src/wp-settings.php | 2 + tests/phpunit/includes/functions.php | 5 + .../tests/block-bindings/block-bindings.php | 106 +++++++++ .../phpunit/tests/block-bindings/register.php | 17 +- 9 files changed, 416 insertions(+), 5 deletions(-) create mode 100644 src/wp-includes/block-bindings/sources/pattern.php create mode 100644 src/wp-includes/block-bindings/sources/post-meta.php create mode 100644 tests/phpunit/tests/block-bindings/block-bindings.php diff --git a/src/wp-includes/block-bindings.php b/src/wp-includes/block-bindings.php index e49fa4afb21d2..108efc3d849a1 100644 --- a/src/wp-includes/block-bindings.php +++ b/src/wp-includes/block-bindings.php @@ -19,7 +19,9 @@ * * @since 6.5.0 * - * @param string $source_name The name of the source. + * @param string $source_name The name of the source. It must be a string containing a namespace prefix, i.e. + * `my-plugin/my-custom-source`. It must only contain lowercase alphanumeric + * characters, the forward slash `/` and dashes. * @param array $source_properties { * The array of arguments that are used to register a source. * diff --git a/src/wp-includes/block-bindings/sources/pattern.php b/src/wp-includes/block-bindings/sources/pattern.php new file mode 100644 index 0000000000000..863f73da871e0 --- /dev/null +++ b/src/wp-includes/block-bindings/sources/pattern.php @@ -0,0 +1,34 @@ +attributes, array( 'metadata', 'id' ), false ) ) { + return null; + } + $block_id = $block_instance->attributes['metadata']['id']; + return _wp_array_get( $block_instance->context, array( 'pattern/overrides', $block_id, $attribute_name ), null ); +} + + +/** + * Registers the "pattern" source for the Block Bindings API. + * + * @access private + * @since 6.5.0 + */ +function _register_block_bindings_pattern_overrides_source() { + register_block_bindings_source( + 'core/pattern-overrides', + array( + 'label' => _x( 'Pattern Overrides', 'block bindings source' ), + 'get_value_callback' => 'pattern_source_callback', + ) + ); +} + +add_action( 'init', '_register_block_bindings_pattern_overrides_source' ); diff --git a/src/wp-includes/block-bindings/sources/post-meta.php b/src/wp-includes/block-bindings/sources/post-meta.php new file mode 100644 index 0000000000000..0aa55ba1800bc --- /dev/null +++ b/src/wp-includes/block-bindings/sources/post-meta.php @@ -0,0 +1,47 @@ +context['postId'] is not available in the Image block. + $post_id = get_the_ID(); + } + + // If a post isn't public, we need to prevent + // unauthorized users from accessing the post meta. + $post = get_post( $post_id ); + if ( ( ! is_post_publicly_viewable( $post ) && ! current_user_can( 'read_post', $post_id ) ) || post_password_required( $post ) ) { + return null; + } + + return get_post_meta( $post_id, $source_attrs['key'], true ); +} + +/** + * Registers the "post_meta" source for the Block Bindings API. + * + * @access private + * @since 6.5.0 + */ +function _register_block_bindings_post_meta_source() { + register_block_bindings_source( + 'core/post-meta', + array( + 'label' => _x( 'Post Meta', 'block bindings source' ), + 'get_value_callback' => 'post_meta_source_callback', + ) + ); +} + +add_action( 'init', '_register_block_bindings_post_meta_source' ); diff --git a/src/wp-includes/class-wp-block-bindings-registry.php b/src/wp-includes/class-wp-block-bindings-registry.php index d34733327a29e..f824694c49301 100644 --- a/src/wp-includes/class-wp-block-bindings-registry.php +++ b/src/wp-includes/class-wp-block-bindings-registry.php @@ -42,7 +42,9 @@ final class WP_Block_Bindings_Registry { * * @since 6.5.0 * - * @param string $source_name The name of the source. + * @param string $source_name The name of the source. It must be a string containing a namespace prefix, i.e. + * `my-plugin/my-custom-source`. It must only contain lowercase alphanumeric + * characters, the forward slash `/` and dashes. * @param array $source_properties { * The array of arguments that are used to register a source. * diff --git a/src/wp-includes/class-wp-block.php b/src/wp-includes/class-wp-block.php index f7bf912f42bf9..f639594b1129a 100644 --- a/src/wp-includes/class-wp-block.php +++ b/src/wp-includes/class-wp-block.php @@ -191,6 +191,204 @@ public function __get( $name ) { return null; } + /** + * Processes the block bindings in block's attributes. + * + * A block might contain bindings in its attributes. Bindings are mappings + * between an attribute of the block and a source. A "source" is a function + * registered with `register_block_bindings_source()` that defines how to + * retrieve a value from outside the block, e.g. from post meta. + * + * This function will process those bindings and replace the HTML with the value of the binding. + * The value is retrieved from the source of the binding. + * + * ### Example + * + * The "bindings" property for an Image block might look like this: + * + * ```json + * { + * "metadata": { + * "bindings": { + * "title": { + * "source": "post_meta", + * "args": { "key": "text_custom_field" } + * }, + * "url": { + * "source": "post_meta", + * "args": { "key": "url_custom_field" } + * } + * } + * } + * } + * ``` + * + * The above example will replace the `title` and `url` attributes of the Image + * block with the values of the `text_custom_field` and `url_custom_field` post meta. + * + * @access private + * @since 6.5.0 + * + * @param string $block_content Block content. + * @param array $block The full block, including name and attributes. + */ + private function process_block_bindings( $block_content ) { + $block = $this->parsed_block; + + // Allowed blocks that support block bindings. + // TODO: Look for a mechanism to opt-in for this. Maybe adding a property to block attributes? + $allowed_blocks = array( + 'core/paragraph' => array( 'content' ), + 'core/heading' => array( 'content' ), + 'core/image' => array( 'url', 'title', 'alt' ), + 'core/button' => array( 'url', 'text' ), + ); + + // If the block doesn't have the bindings property, isn't one of the allowed + // block types, or the bindings property is not an array, return the block content. + if ( ! isset( $block['attrs']['metadata']['bindings'] ) || + ! is_array( $block['attrs']['metadata']['bindings'] ) || + ! isset( $allowed_blocks[ $this->name ] ) + ) { + return $block_content; + } + + $block_bindings_sources = get_all_registered_block_bindings_sources(); + $modified_block_content = $block_content; + foreach ( $block['attrs']['metadata']['bindings'] as $binding_attribute => $binding_source ) { + // If the attribute is not in the list, process next attribute. + if ( ! in_array( $binding_attribute, $allowed_blocks[ $this->name ], true ) ) { + continue; + } + // If no source is provided, or that source is not registered, process next attribute. + if ( ! isset( $binding_source['source'] ) || ! is_string( $binding_source['source'] ) || ! isset( $block_bindings_sources[ $binding_source['source'] ] ) ) { + continue; + } + + $source_callback = $block_bindings_sources[ $binding_source['source'] ]['get_value_callback']; + // Get the value based on the source. + if ( ! isset( $binding_source['args'] ) ) { + $source_args = array(); + } else { + $source_args = $binding_source['args']; + } + $source_value = call_user_func_array( $source_callback, array( $source_args, $this, $binding_attribute ) ); + // If the value is null, process next attribute. + if ( is_null( $source_value ) ) { + continue; + } + + // Process the HTML based on the block and the attribute. + $modified_block_content = $this->replace_html( $modified_block_content, $this->name, $binding_attribute, $source_value ); + } + return $modified_block_content; + } + + /** + * Depending on the block attributes, replace the HTML based on the value returned by the source. + * + * @since 6.5.0 + * + * @param string $block_content Block content. + * @param string $block_name The name of the block to process. + * @param string $block_attr The attribute of the block we want to process. + * @param string $source_value The value used to replace the HTML. + */ + private function replace_html( string $block_content, string $block_name, string $block_attr, string $source_value ) { + $block_type = $this->block_type; + if ( null === $block_type || ! isset( $block_type->attributes[ $block_attr ] ) ) { + return $block_content; + } + + // Depending on the attribute source, the processing will be different. + switch ( $block_type->attributes[ $block_attr ]['source'] ) { + case 'html': + case 'rich-text': + $block_reader = new WP_HTML_Tag_Processor( $block_content ); + + // TODO: Support for CSS selectors whenever they are ready in the HTML API. + // In the meantime, support comma-separated selectors by exploding them into an array. + $selectors = explode( ',', $block_type->attributes[ $block_attr ]['selector'] ); + // Add a bookmark to the first tag to be able to iterate over the selectors. + $block_reader->next_tag(); + $block_reader->set_bookmark( 'iterate-selectors' ); + + // TODO: This shouldn't be needed when the `set_inner_html` function is ready. + // Store the parent tag and its attributes to be able to restore them later in the button. + // The button block has a wrapper while the paragraph and heading blocks don't. + if ( 'core/button' === $block_name ) { + $button_wrapper = $block_reader->get_tag(); + $button_wrapper_attribute_names = $block_reader->get_attribute_names_with_prefix( '' ); + $button_wrapper_attrs = array(); + foreach ( $button_wrapper_attribute_names as $name ) { + $button_wrapper_attrs[ $name ] = $block_reader->get_attribute( $name ); + } + } + + foreach ( $selectors as $selector ) { + // If the parent tag, or any of its children, matches the selector, replace the HTML. + if ( strcasecmp( $block_reader->get_tag( $selector ), $selector ) === 0 || $block_reader->next_tag( + array( + 'tag_name' => $selector, + ) + ) ) { + $block_reader->release_bookmark( 'iterate-selectors' ); + + // TODO: Use `set_inner_html` method whenever it's ready in the HTML API. + // Until then, it is hardcoded for the paragraph, heading, and button blocks. + // Store the tag and its attributes to be able to restore them later. + $selector_attribute_names = $block_reader->get_attribute_names_with_prefix( '' ); + $selector_attrs = array(); + foreach ( $selector_attribute_names as $name ) { + $selector_attrs[ $name ] = $block_reader->get_attribute( $name ); + } + $selector_markup = "<$selector>" . wp_kses_post( $source_value ) . ""; + $amended_content = new WP_HTML_Tag_Processor( $selector_markup ); + $amended_content->next_tag(); + foreach ( $selector_attrs as $attribute_key => $attribute_value ) { + $amended_content->set_attribute( $attribute_key, $attribute_value ); + } + if ( 'core/paragraph' === $block_name || 'core/heading' === $block_name ) { + return $amended_content->get_updated_html(); + } + if ( 'core/button' === $block_name ) { + $button_markup = "<$button_wrapper>{$amended_content->get_updated_html()}"; + $amended_button = new WP_HTML_Tag_Processor( $button_markup ); + $amended_button->next_tag(); + foreach ( $button_wrapper_attrs as $attribute_key => $attribute_value ) { + $amended_button->set_attribute( $attribute_key, $attribute_value ); + } + return $amended_button->get_updated_html(); + } + } else { + $block_reader->seek( 'iterate-selectors' ); + } + } + $block_reader->release_bookmark( 'iterate-selectors' ); + return $block_content; + + case 'attribute': + $amended_content = new WP_HTML_Tag_Processor( $block_content ); + if ( ! $amended_content->next_tag( + array( + // TODO: build the query from CSS selector. + 'tag_name' => $block_type->attributes[ $block_attr ]['selector'], + ) + ) ) { + return $block_content; + } + $amended_content->set_attribute( $block_type->attributes[ $block_attr ]['attribute'], esc_attr( $source_value ) ); + return $amended_content->get_updated_html(); + break; + + default: + return $block_content; + break; + } + return; + } + + /** * Generates the render output for the block. * @@ -286,6 +484,10 @@ public function render( $options = array() ) { } } + // Process the block bindings for this block, if any are registered. This + // will replace the block content with the value from a registered binding source. + $block_content = $this->process_block_bindings( $block_content ); + /** * Filters the content of a single block. * diff --git a/src/wp-settings.php b/src/wp-settings.php index 87769333c59e5..633ce353a1eb3 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -376,6 +376,8 @@ require ABSPATH . WPINC . '/fonts.php'; require ABSPATH . WPINC . '/class-wp-script-modules.php'; require ABSPATH . WPINC . '/script-modules.php'; +require ABSPATH . WPINC . '/block-bindings/sources/post-meta.php'; +require ABSPATH . WPINC . '/block-bindings/sources/pattern.php'; require ABSPATH . WPINC . '/interactivity-api.php'; wp_script_modules()->add_hooks(); diff --git a/tests/phpunit/includes/functions.php b/tests/phpunit/includes/functions.php index 81d4339db1bf8..0fdff9c71ae46 100644 --- a/tests/phpunit/includes/functions.php +++ b/tests/phpunit/includes/functions.php @@ -339,10 +339,15 @@ function _wp_rest_server_class_filter() { * @since 5.0.0 */ function _unhook_block_registration() { + // Block types. require __DIR__ . '/unregister-blocks-hooks.php'; remove_action( 'init', 'register_core_block_types_from_metadata' ); remove_action( 'init', 'register_block_core_legacy_widget' ); remove_action( 'init', 'register_block_core_widget_group' ); remove_action( 'init', 'register_core_block_types_from_metadata' ); + + // Block binding sources. + remove_action( 'init', '_register_block_bindings_pattern_overrides_source' ); + remove_action( 'init', '_register_block_bindings_post_meta_source' ); } tests_add_filter( 'init', '_unhook_block_registration', 1000 ); diff --git a/tests/phpunit/tests/block-bindings/block-bindings.php b/tests/phpunit/tests/block-bindings/block-bindings.php new file mode 100644 index 0000000000000..d8e63fa6bcf8e --- /dev/null +++ b/tests/phpunit/tests/block-bindings/block-bindings.php @@ -0,0 +1,106 @@ + 'Test source', + ); + + /** + * Set up before each test. + * + * @since 6.5.0 + */ + public function set_up() { + foreach ( get_all_registered_block_bindings_sources() as $source_name => $source_properties ) { + if ( str_starts_with( $source_name, 'test/' ) ) { + unregister_block_bindings_source( $source_name ); + } + } + + parent::set_up(); + } + + /** + * Test if the block content is updated with the value returned by the source. + * + * @ticket 60282 + * + * @covers register_block_bindings_source + */ + public function test_update_block_with_value_from_source() { + $get_value_callback = function () { + return 'test source value'; + }; + + register_block_bindings_source( + self::SOURCE_NAME, + array( + 'label' => self::SOURCE_LABEL, + 'get_value_callback' => $get_value_callback, + ) + ); + + $block_content = <<

    This should not appear

    +HTML; + + $parsed_blocks = parse_blocks( $block_content ); + $block = new WP_Block( $parsed_blocks[0] ); + + $expected = '

    test source value

    '; + $result = $block->render(); + + // Check if the block content was updated correctly. + $this->assertEquals( $expected, $result, 'The block content should be updated with the value returned by the source.' ); + } + + /** + * Test passing arguments to the source. + * + * @ticket 60282 + * + * @covers register_block_bindings_source + */ + public function test_passing_arguments_to_source() { + $get_value_callback = function ( $source_args, $block_instance, $attribute_name ) { + $value = $source_args['key']; + return "The attribute name is '$attribute_name' and its binding has argument 'key' with value '$value'."; + }; + + register_block_bindings_source( + self::SOURCE_NAME, + array( + 'label' => self::SOURCE_LABEL, + 'get_value_callback' => $get_value_callback, + ) + ); + + $key = 'test'; + + $block_content = <<

    This should not appear

    +HTML; + + $parsed_blocks = parse_blocks( $block_content ); + $block = new WP_Block( $parsed_blocks[0] ); + + $expected = "

    The attribute name is 'content' and its binding has argument 'key' with value 'test'.

    "; + $result = $block->render(); + + // Check if the block content was updated correctly. + $this->assertEquals( $expected, $result, 'The block content should be updated with the value returned by the source.' ); + } +} diff --git a/tests/phpunit/tests/block-bindings/register.php b/tests/phpunit/tests/block-bindings/register.php index 04fdba82ce968..a87ae1dc56f3a 100644 --- a/tests/phpunit/tests/block-bindings/register.php +++ b/tests/phpunit/tests/block-bindings/register.php @@ -16,6 +16,19 @@ class Tests_Block_Bindings_Register extends WP_UnitTestCase { 'label' => 'Test source', ); + /** + * Set up before each test. + * + * @since 6.5.0 + */ + public function set_up() { + foreach ( get_all_registered_block_bindings_sources() as $source_name => $source_properties ) { + unregister_block_bindings_source( $source_name ); + } + + parent::set_up(); + } + /** * Tear down after each test. * @@ -23,9 +36,7 @@ class Tests_Block_Bindings_Register extends WP_UnitTestCase { */ public function tear_down() { foreach ( get_all_registered_block_bindings_sources() as $source_name => $source_properties ) { - if ( str_starts_with( $source_name, 'test/' ) ) { - unregister_block_bindings_source( $source_name ); - } + unregister_block_bindings_source( $source_name ); } parent::tear_down(); From 67e9ffb9fdbb132be8977943632b65154d696e14 Mon Sep 17 00:00:00 2001 From: Joe Dolson Date: Thu, 1 Feb 2024 16:26:47 +0000 Subject: [PATCH 40/46] Media: Prevent local edits during media upload. Prevent `options.allowLocalEdits` from toggling to true during the upload cycle. Otherwise, media meta fields can be edited, but the data will be lost as soon as the upload process is completed. Props codepo8, oglekler, nicolefurlan, antpb, syamraj24, joedolson. Fixes #58783, #23374. git-svn-id: https://develop.svn.wordpress.org/trunk@57515 602fd350-edb4-49c9-b593-d223f7449a82 --- src/js/media/views/attachment.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/media/views/attachment.js b/src/js/media/views/attachment.js index a85b381c7017a..6f9f7f5001640 100644 --- a/src/js/media/views/attachment.js +++ b/src/js/media/views/attachment.js @@ -120,7 +120,7 @@ Attachment = View.extend(/** @lends wp.media.view.Attachment.prototype */{ options.can.save = !! options.nonces.update; } - if ( this.controller.state().get('allowLocalEdits') ) { + if ( this.controller.state().get('allowLocalEdits') && ! options.uploading ) { options.allowLocalEdits = true; } From 8d3e4a1eeb49c126df570af99c9ebedb53f20c5d Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Thu, 1 Feb 2024 19:03:55 +0000 Subject: [PATCH 41/46] I18N: Support loading `.l10n.php` translation files on their own. Adjusts the translation file lookup in `WP_Textdomain_Registry` so that just-in-time translation loading works even if there is only a `.l10n.php` translation file without a corresponding `.mo` file. While language packs continue to contain both file types, this makes it easier to use translations in a project without having to deal with `.mo` or `.po` files. Props Chrystl. See #59656. git-svn-id: https://develop.svn.wordpress.org/trunk@57516 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-textdomain-registry.php | 47 +++++++++++-------- src/wp-includes/l10n.php | 16 +++---- .../internationalized-plugin-2-de_DE.l10n.php | 2 + .../internationalized-plugin-2-es_ES.l10n.php | 2 + .../plugins/internationalized-plugin-2.php | 12 +++++ .../tests/l10n/loadTextdomainJustInTime.php | 22 +++++++++ .../tests/l10n/wpTextdomainRegistry.php | 22 ++++++--- 7 files changed, 87 insertions(+), 36 deletions(-) create mode 100644 tests/phpunit/data/languages/plugins/internationalized-plugin-2-de_DE.l10n.php create mode 100644 tests/phpunit/data/languages/plugins/internationalized-plugin-2-es_ES.l10n.php create mode 100644 tests/phpunit/data/plugins/internationalized-plugin-2.php diff --git a/src/wp-includes/class-wp-textdomain-registry.php b/src/wp-includes/class-wp-textdomain-registry.php index b66b5b18a60f4..b2cbd72fa52bb 100644 --- a/src/wp-includes/class-wp-textdomain-registry.php +++ b/src/wp-includes/class-wp-textdomain-registry.php @@ -150,21 +150,21 @@ public function set_custom_path( $domain, $path ) { } /** - * Retrieves .mo files from the specified path. + * Retrieves translation files from the specified path. * * Allows early retrieval through the {@see 'pre_get_mo_files_from_path'} filter to optimize * performance, especially in directories with many files. * * @since 6.5.0 * - * @param string $path The directory path to search for .mo files. - * @return array Array of .mo file paths. + * @param string $path The directory path to search for translation files. + * @return array Array of translation file paths. Can contain .mo and .l10n.php files. */ public function get_language_files_from_path( $path ) { $path = rtrim( $path, '/' ) . '/'; /** - * Filters the .mo files retrieved from a specified path before the actual lookup. + * Filters the translation files retrieved from a specified path before the actual lookup. * * Returning a non-null value from the filter will effectively short-circuit * the MO files lookup, returning that value instead. @@ -174,27 +174,33 @@ public function get_language_files_from_path( $path ) { * * @since 6.5.0 * - * @param null|array $mo_files List of .mo files. Default null. - * @param string $path The path from which .mo files are being fetched. + * @param null|array $files List of translation files. Default null. + * @param string $path The path from which translation files are being fetched. **/ - $mo_files = apply_filters( 'pre_get_language_files_from_path', null, $path ); + $files = apply_filters( 'pre_get_language_files_from_path', null, $path ); - if ( null !== $mo_files ) { - return $mo_files; + if ( null !== $files ) { + return $files; } $cache_key = 'cached_mo_files_' . md5( $path ); - $mo_files = wp_cache_get( $cache_key, 'translations' ); + $files = wp_cache_get( $cache_key, 'translations' ); - if ( false === $mo_files ) { - $mo_files = glob( $path . '*.mo' ); - if ( false === $mo_files ) { - $mo_files = array(); + if ( false === $files ) { + $files = glob( $path . '*.mo' ); + if ( false === $files ) { + $files = array(); } - wp_cache_set( $cache_key, $mo_files, 'translations' ); + + $php_files = glob( $path . '*.l10n.php' ); + if ( is_array( $php_files ) ) { + $files = array_merge( $files, $php_files ); + } + + wp_cache_set( $cache_key, $files, 'translations' ); } - return $mo_files; + return $files; } /** @@ -295,17 +301,18 @@ private function get_path_from_lang_dir( $domain, $locale ) { foreach ( $locations as $location ) { $files = $this->get_language_files_from_path( $location ); - $path = "$location/$domain-$locale.mo"; + $mo_path = "$location/$domain-$locale.mo"; + $php_path = "$location/$domain-$locale.l10n.php"; - foreach ( $files as $mo_path ) { + foreach ( $files as $file_path ) { if ( ! in_array( $domain, $this->domains_with_translations, true ) && - str_starts_with( str_replace( "$location/", '', $mo_path ), "$domain-" ) + str_starts_with( str_replace( "$location/", '', $file_path ), "$domain-" ) ) { $this->domains_with_translations[] = $domain; } - if ( $mo_path === $path ) { + if ( $file_path === $mo_path || $file_path === $php_path ) { $found_location = rtrim( $location, '/' ) . '/'; } } diff --git a/src/wp-includes/l10n.php b/src/wp-includes/l10n.php index 228c40757c3ff..8191b88cee840 100644 --- a/src/wp-includes/l10n.php +++ b/src/wp-includes/l10n.php @@ -789,10 +789,6 @@ function load_textdomain( $domain, $mofile, $locale = null ) { */ $mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain ); - if ( ! is_readable( $mofile ) ) { - return false; - } - if ( ! $locale ) { $locale = determine_locale(); } @@ -817,14 +813,14 @@ function load_textdomain( $domain, $mofile, $locale = null ) { $preferred_format = 'php'; } - $translation_files = array( $mofile ); + $translation_files = array(); + if ( 'mo' !== $preferred_format ) { - array_unshift( - $translation_files, - substr_replace( $mofile, ".l10n.$preferred_format", - strlen( '.mo' ) ) - ); + $translation_files[] = substr_replace( $mofile, ".l10n.$preferred_format", - strlen( '.mo' ) ); } + $translation_files[] = $mofile; + foreach ( $translation_files as $file ) { /** * Filters the file path for loading translations for the given text domain. @@ -857,7 +853,7 @@ function load_textdomain( $domain, $mofile, $locale = null ) { } } - return true; + return false; } /** diff --git a/tests/phpunit/data/languages/plugins/internationalized-plugin-2-de_DE.l10n.php b/tests/phpunit/data/languages/plugins/internationalized-plugin-2-de_DE.l10n.php new file mode 100644 index 0000000000000..4002587e9e170 --- /dev/null +++ b/tests/phpunit/data/languages/plugins/internationalized-plugin-2-de_DE.l10n.php @@ -0,0 +1,2 @@ +NULL,'plural-forms'=>'nplurals=2; plural=(n != 1);','messages'=>['This is a dummy plugin'=>'Das ist ein Dummy Plugin'],'language'=>'de_DE','x-generator'=>'Poedit 2.4.1']; \ No newline at end of file diff --git a/tests/phpunit/data/languages/plugins/internationalized-plugin-2-es_ES.l10n.php b/tests/phpunit/data/languages/plugins/internationalized-plugin-2-es_ES.l10n.php new file mode 100644 index 0000000000000..c38b5058f6ba1 --- /dev/null +++ b/tests/phpunit/data/languages/plugins/internationalized-plugin-2-es_ES.l10n.php @@ -0,0 +1,2 @@ +NULL,'plural-forms'=>'nplurals=2; plural=(n != 1);','messages'=>['This is a dummy plugin'=>'Este es un plugin dummy'],'language'=>'de_DE','x-generator'=>'Poedit 2.4.1']; \ No newline at end of file diff --git a/tests/phpunit/data/plugins/internationalized-plugin-2.php b/tests/phpunit/data/plugins/internationalized-plugin-2.php new file mode 100644 index 0000000000000..5e75cf6b7fa73 --- /dev/null +++ b/tests/phpunit/data/plugins/internationalized-plugin-2.php @@ -0,0 +1,12 @@ +assertTrue( $is_textdomain_loaded_after ); } + /** + * @ticket 59656 + * + * @covers ::is_textdomain_loaded + */ + public function test_plugin_translation_should_be_translated_with_only_an_l10n_php_file() { + add_filter( 'locale', array( $this, 'filter_set_locale_to_german' ) ); + + require_once DIR_TESTDATA . '/plugins/internationalized-plugin-2.php'; + + $is_textdomain_loaded_before = is_textdomain_loaded( 'internationalized-plugin-2' ); + $actual_output = i18n_plugin_2_test(); + $is_textdomain_loaded_after = is_textdomain_loaded( 'internationalized-plugin-2' ); + + remove_filter( 'locale', array( $this, 'filter_set_locale_to_german' ) ); + + $this->assertFalse( $is_textdomain_loaded_before ); + $this->assertSame( 'Das ist ein Dummy Plugin', $actual_output ); + $this->assertTrue( $is_textdomain_loaded_after ); + } + /** * @ticket 34114 * diff --git a/tests/phpunit/tests/l10n/wpTextdomainRegistry.php b/tests/phpunit/tests/l10n/wpTextdomainRegistry.php index 19a239428d50a..dd9688e947488 100644 --- a/tests/phpunit/tests/l10n/wpTextdomainRegistry.php +++ b/tests/phpunit/tests/l10n/wpTextdomainRegistry.php @@ -151,36 +151,46 @@ public function test_invalidate_mo_files_cache() { public function data_domains_locales() { return array( - 'Non-existent plugin' => array( + 'Non-existent plugin' => array( 'unknown-plugin', 'en_US', false, ), - 'Non-existent plugin with de_DE' => array( + 'Non-existent plugin with de_DE' => array( 'unknown-plugin', 'de_DE', false, ), - 'Available de_DE translations' => array( + 'Available de_DE translations' => array( 'internationalized-plugin', 'de_DE', WP_LANG_DIR . '/plugins/', ), - 'Available es_ES translations' => array( + 'Available es_ES translations' => array( 'internationalized-plugin', 'es_ES', WP_LANG_DIR . '/plugins/', ), - 'Unavailable fr_FR translations' => array( + 'Unavailable fr_FR translations' => array( 'internationalized-plugin', 'fr_FR', false, ), - 'Unavailable en_US translations' => array( + 'Unavailable en_US translations' => array( 'internationalized-plugin', 'en_US', false, ), + 'Available de_DE translations (.l10n.php)' => array( + 'internationalized-plugin-2', + 'de_DE', + WP_LANG_DIR . '/plugins/', + ), + 'Available es_ES translations (.l10n.php)' => array( + 'internationalized-plugin-2', + 'es_ES', + WP_LANG_DIR . '/plugins/', + ), ); } } From 9486dc1bec2df5360aa4259f6715509b3e3040c3 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Thu, 1 Feb 2024 19:26:10 +0000 Subject: [PATCH 42/46] Build/Test Tools: Introduce Props Bot workflow. Props Bot is a new GitHub Action that will compile a list of contributors for a given pull request. The bot will leave a comment with a list of contributors formatted for use in both Trac SVN and GitHub. Props dharm1025, desrosj, jorbin, jeffpaul, dd32, pento, gziolo, swissspidy, talldanwp, noisysocks, youknowriad, peterwilsoncc, joemcgill, chrisdavidmiles, wpscholar, annezazu, chanthaboune, desrosjbot. See #60417. git-svn-id: https://develop.svn.wordpress.org/trunk@57517 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/props-bot.yml | 86 +++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 .github/workflows/props-bot.yml diff --git a/.github/workflows/props-bot.yml b/.github/workflows/props-bot.yml new file mode 100644 index 0000000000000..dfe583732ef2d --- /dev/null +++ b/.github/workflows/props-bot.yml @@ -0,0 +1,86 @@ +name: Props Bot + +on: + # This event runs anytime a PR is (re)opened, updated, or labeled. + # GitHub does not allow filtering the `labeled` event by a specific label. + # However, the logic below will short-circuit the workflow when the `props-bot` label is not the one being added. + # Note: The pull_request_target event is uesed instead of pull_request because this workflow needs permission to comment + # on the pull request. Because this event grants extra permissions to `GITHUB_TOKEN`, any code changes within the PR + # should be considered untrusted. See https://securitylab.github.com/research/github-actions-preventing-pwn-requests/. + pull_request_target: + types: + - opened + - synchronize + - reopened + - labeled + # This event runs anytime a comment is added or deleted. + # You cannot filter this event for PR comments only. + # However, the logic below does short-circuit the workflow for issues. + issue_comment: + type: + - created + - deleted + # This event will run everytime a new PR review is initially submitted. + pull_request_review: + types: + - submitted + # This event runs anytime a PR review comment is created or deleted. + pull_request_review_comment: + types: + - created + - deleted + +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for pull requests + # or the commit hash for any other events. + group: ${{ github.workflow }}-${{ contains( fromJSON( '["pull_request_target", "pull_request_review", "pull_request_review_comment"]' ), github.event_name ) && github.head_ref || github.sha }} + cancel-in-progress: true + +# Disable permissions for all available scopes by default. +# Any needed permissions should be configured at the job level. +permissions: {} + +jobs: + # Compiles a list of props for a pull request. + # + # Performs the following steps: + # - Collects a list of contributor props and leaves a comment. + # - Removes the props-bot label, if necessary. + props-bot: + name: Generate a list of props + runs-on: ubuntu-latest + permissions: + # The action needs permission `write` permission for PRs in order to add a comment. + pull-requests: write + contents: read + timeout-minutes: 20 + # The job should only run if: + # + # - A pull request review is created or commented on. + # - An issue comment is added to a pull request. + # - A pull request is opened, synchronized, or reopened. + # - The `props-bot` label is added to the pull request. + if: | + contains( fromJSON( '["pull_request_review", "pull_request_review_comment"]' ), github.event_name ) || + ( github.event_name == 'issue_comment' && github.event.issue.pull_request ) || + github.event_name == 'pull_request_target' && github.event.action != 'labeled' || + 'props-bot' == github.event.label.name + + steps: + - name: Gather a list of contributors + uses: WordPress/props-bot-action@trunk + + - name: Remove the props-bot label + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + if: ${{ github.event.action == 'labeled' && 'props-bot' == github.event.label.name }} + with: + retries: 2 + retry-exempt-status-codes: 418 + script: | + github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: '${{ github.event.number }}', + name: 'props-bot' + }); From 5e178ff9c91467d6bdce9631cae2176238c7d5c9 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Thu, 1 Feb 2024 20:57:03 +0000 Subject: [PATCH 43/46] I18N: Fix plural forms parsing in `WP_Translation_File`. Ensures the plural expression from the translation file header is correctly parsed. Prevents silent failures in the attempt to create the plural form function. Adds additional tests. Props Chouby. See #59656. git-svn-id: https://develop.svn.wordpress.org/trunk@57518 602fd350-edb4-49c9-b593-d223f7449a82 --- .../l10n/class-wp-translation-file.php | 25 ++++++++-- tests/phpunit/data/l10n/plural-complex.mo | Bin 0 -> 580 bytes tests/phpunit/data/l10n/plural-complex.php | 2 + tests/phpunit/tests/l10n/wpTranslations.php | 46 ++++++++++++++++++ 4 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 tests/phpunit/data/l10n/plural-complex.mo create mode 100644 tests/phpunit/data/l10n/plural-complex.php diff --git a/src/wp-includes/l10n/class-wp-translation-file.php b/src/wp-includes/l10n/class-wp-translation-file.php index 93842bec1066b..e6dbdb85be6ad 100644 --- a/src/wp-includes/l10n/class-wp-translation-file.php +++ b/src/wp-includes/l10n/class-wp-translation-file.php @@ -207,7 +207,7 @@ public function translate( string $text ) { } /** - * Returns the plural form for a count. + * Returns the plural form for a given number. * * @since 6.5.0 * @@ -219,9 +219,9 @@ public function get_plural_form( int $number ): int { $this->parse_file(); } - // In case a plural form is specified as a header, but no function included, build one. if ( null === $this->plural_forms && isset( $this->headers['plural-forms'] ) ) { - $this->plural_forms = $this->make_plural_form_function( $this->headers['plural-forms'] ); + $expression = $this->get_plural_expression_from_header( $this->headers['plural-forms'] ); + $this->plural_forms = $this->make_plural_form_function( $expression ); } if ( is_callable( $this->plural_forms ) ) { @@ -231,6 +231,7 @@ public function get_plural_form( int $number ): int { * @var int $result Plural form. */ $result = call_user_func( $this->plural_forms, $number ); + return $result; } @@ -238,6 +239,22 @@ public function get_plural_form( int $number ): int { return ( 1 === $number ? 0 : 1 ); } + /** + * Returns the plural forms expression as a tuple. + * + * @since 6.5.0 + * + * @param string $header Plural-Forms header string. + * @return string Plural forms expression. + */ + protected function get_plural_expression_from_header( $header ) { + if ( preg_match( '/^\s*nplurals\s*=\s*(\d+)\s*;\s+plural\s*=\s*(.+)$/', $header, $matches ) ) { + return trim( $matches[2] ); + } + + return 'n != 1'; + } + /** * Makes a function, which will return the right translation index, according to the * plural forms header. @@ -247,7 +264,7 @@ public function get_plural_form( int $number ): int { * @param string $expression Plural form expression. * @return callable(int $num): int Plural forms function. */ - public function make_plural_form_function( string $expression ): callable { + protected function make_plural_form_function( string $expression ): callable { try { $handler = new Plural_Forms( rtrim( $expression, ';' ) ); return array( $handler, 'get' ); diff --git a/tests/phpunit/data/l10n/plural-complex.mo b/tests/phpunit/data/l10n/plural-complex.mo new file mode 100644 index 0000000000000000000000000000000000000000..9cb7b2820e580b87fd5c3413afb77416d3100d17 GIT binary patch literal 580 zcmZWmJx{|h5G{x)BQwJ-NUgxB6H-*AL=4cPN+2q}H{>=)F*0^!yHP>>4gL-r6aRtV z!lfNj;H1+#zxVE>JAZF(yf-M;DYqzhs|Urw5*FB`I-|_j8jT0SIpr7Cjco_BA{QP( zltL;oR#ntCxZrJ)^v4OGA zE(KjIo-Rvzuq?BthHZ#Ahb)7r1&6>Ph2|<7S8Vi`-GjF`Sm{kFS4^(GR;w4>u@ls2 zg*P^Z6J`9!qI2ye;;@L2-PjPE(zGwvo`(YB! z36HTvWr}AyPf%Unir2y@^ZB8kWGSF9&g6!6$MT;lYqgaBR9sOPfBI{(e5_>}{R7Oj BtMUK< literal 0 HcmV?d00001 diff --git a/tests/phpunit/data/l10n/plural-complex.php b/tests/phpunit/data/l10n/plural-complex.php new file mode 100644 index 0000000000000..b214214f2ab8c --- /dev/null +++ b/tests/phpunit/data/l10n/plural-complex.php @@ -0,0 +1,2 @@ +'GlotPress/4.0.0-beta.2','translation-revision-date'=>'2024-01-18 05:40:05+0000','plural-forms'=>'nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));','project-id-version'=>'WordPress - 6.4.x - Development','language'=>'sl_SI','messages'=>['%s update available'=>'%s razpoložljiva posodobitev' . "\0" . '%s razpoložljivi posodobitvi' . "\0" . '%s razpoložljive posodobitve' . "\0" . '%s razpoložljivih posodobitev']]; \ No newline at end of file diff --git a/tests/phpunit/tests/l10n/wpTranslations.php b/tests/phpunit/tests/l10n/wpTranslations.php index 3879a570e3d49..70abc4fd3063d 100644 --- a/tests/phpunit/tests/l10n/wpTranslations.php +++ b/tests/phpunit/tests/l10n/wpTranslations.php @@ -219,6 +219,52 @@ public function test_translate_plural() { $this->assertTrue( $unload_successful, 'Text domain not successfully unloaded' ); } + /** + * @covers ::translate_plural + * @covers WP_Translation_File::get_plural_form + */ + public function test_translate_plural_complex() { + load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/l10n/plural-complex.mo' ); + + $this->assertSame( '%s razpoložljiva posodobitev', _n( '%s update available', '%s updates available', 101, 'wp-tests-domain' ) ); // 1, 101, 201 + $this->assertSame( '%s razpoložljivi posodobitvi', _n( '%s update available', '%s updates available', 102, 'wp-tests-domain' ) ); // 2, 102, 202 + $this->assertSame( '%s razpoložljive posodobitve', _n( '%s update available', '%s updates available', 103, 'wp-tests-domain' ) ); // 3, 4, 103 + $this->assertSame( '%s razpoložljivih posodobitev', _n( '%s update available', '%s updates available', 5, 'wp-tests-domain' ) ); // 0, 5, 6 + } + + /** + * @covers ::translate_plural + * @covers WP_Translation_File::get_plural_form + */ + public function test_translate_plural_complex_php() { + load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/l10n/plural-complex.php' ); + + $this->assertSame( '%s razpoložljiva posodobitev', _n( '%s update available', '%s updates available', 101, 'wp-tests-domain' ) ); // 1, 101, 201 + $this->assertSame( '%s razpoložljivi posodobitvi', _n( '%s update available', '%s updates available', 102, 'wp-tests-domain' ) ); // 2, 102, 202 + $this->assertSame( '%s razpoložljive posodobitve', _n( '%s update available', '%s updates available', 103, 'wp-tests-domain' ) ); // 3, 4, 103 + $this->assertSame( '%s razpoložljivih posodobitev', _n( '%s update available', '%s updates available', 5, 'wp-tests-domain' ) ); // 0, 5, 6 + } + + /** + * @covers WP_Translation_File::get_plural_form + */ + public function test_get_plural_form() { + $moe = WP_Translation_File::create( DIR_TESTDATA . '/l10n/plural-complex.mo' ); + + $this->assertSame( 0, $moe->get_plural_form( 1 ) ); + $this->assertSame( 0, $moe->get_plural_form( 101 ) ); + $this->assertSame( 0, $moe->get_plural_form( 201 ) ); + $this->assertSame( 1, $moe->get_plural_form( 2 ) ); + $this->assertSame( 1, $moe->get_plural_form( 102 ) ); + $this->assertSame( 1, $moe->get_plural_form( 202 ) ); + $this->assertSame( 2, $moe->get_plural_form( 3 ) ); + $this->assertSame( 2, $moe->get_plural_form( 4 ) ); + $this->assertSame( 2, $moe->get_plural_form( 103 ) ); + $this->assertSame( 3, $moe->get_plural_form( 0 ) ); + $this->assertSame( 3, $moe->get_plural_form( 5 ) ); + $this->assertSame( 3, $moe->get_plural_form( 6 ) ); + } + /** * @covers ::translate_plural */ From 88bcfb766371a5f9f556fdc614cea652749adbb2 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Fri, 2 Feb 2024 09:05:43 +0000 Subject: [PATCH 44/46] I18N: Add type declaration to new method missed in [57518]. See #59656. git-svn-id: https://develop.svn.wordpress.org/trunk@57519 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/l10n/class-wp-translation-file.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/l10n/class-wp-translation-file.php b/src/wp-includes/l10n/class-wp-translation-file.php index e6dbdb85be6ad..e550f9c2f042a 100644 --- a/src/wp-includes/l10n/class-wp-translation-file.php +++ b/src/wp-includes/l10n/class-wp-translation-file.php @@ -247,7 +247,7 @@ public function get_plural_form( int $number ): int { * @param string $header Plural-Forms header string. * @return string Plural forms expression. */ - protected function get_plural_expression_from_header( $header ) { + protected function get_plural_expression_from_header( string $header ): string { if ( preg_match( '/^\s*nplurals\s*=\s*(\d+)\s*;\s+plural\s*=\s*(.+)$/', $header, $matches ) ) { return trim( $matches[2] ); } From 50215dfbd723260ed837b05568798d95a0f168fa Mon Sep 17 00:00:00 2001 From: Andrea Fercia Date: Fri, 2 Feb 2024 09:53:07 +0000 Subject: [PATCH 45/46] Administration: Accessibility: Use the default cursor style for labels and disabled form controls. The native cursor style for labels and form controls is `default`, which is the platform-dependent default cursor. Typically an arrow. Historically, WordPress always used the `pointer` style for all form controls and labels. While this isn't standard, there is some value in using the `pointer` style for form controls. However, labels should use the default style especially when the associated controls are disabled. Additionally, makes sure the disabled styling works for form controls with an `aria-disabled="true"` attribute. Props joedolson, afercia. Fixes #59733. git-svn-id: https://develop.svn.wordpress.org/trunk@57520 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/forms.css | 15 ++++++++++----- src/wp-admin/css/install.css | 4 ---- src/wp-includes/css/buttons.css | 9 +++++++++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/wp-admin/css/forms.css b/src/wp-admin/css/forms.css index 7274b0bcd7fee..bdceac04c402b 100644 --- a/src/wp-admin/css/forms.css +++ b/src/wp-admin/css/forms.css @@ -22,10 +22,6 @@ textarea { resize: vertical; } -label { - cursor: pointer; -} - input, select { margin: 0 1px; @@ -287,8 +283,10 @@ textarea.disabled { input[type="file"]:disabled, input[type="file"].disabled, +input[type="file"][aria-disabled="true"], input[type="range"]:disabled, -input[type="range"].disabled { +input[type="range"].disabled, +input[type="range"][aria-disabled="true"] { background: none; box-shadow: none; cursor: default; @@ -296,13 +294,16 @@ input[type="range"].disabled { input[type="checkbox"]:disabled, input[type="checkbox"].disabled, +input[type="checkbox"][aria-disabled="true"], input[type="radio"]:disabled, input[type="radio"].disabled, +input[type="radio"][aria-disabled="true"], input[type="checkbox"]:disabled:checked:before, input[type="checkbox"].disabled:checked:before, input[type="radio"]:disabled:checked:before, input[type="radio"].disabled:checked:before { opacity: 0.7; + cursor: default; } /*------------------------------------------------------------------------------ @@ -356,6 +357,10 @@ input[type="radio"].disabled:checked:before { transform: none; } +.wp-core-ui select[aria-disabled="true"] { + cursor: default; +} + /* Reset Firefox inner outline that appears on :focus. */ /* This ruleset overrides the color change on :focus thus needs to be after select:focus. */ .wp-core-ui select:-moz-focusring { diff --git a/src/wp-admin/css/install.css b/src/wp-admin/css/install.css index f42791dec8c72..1170ff7c328f4 100644 --- a/src/wp-admin/css/install.css +++ b/src/wp-admin/css/install.css @@ -72,10 +72,6 @@ fieldset { margin: 0; } -label { - cursor: pointer; -} - #logo { margin: -130px auto 25px; padding: 0 0 25px; diff --git a/src/wp-includes/css/buttons.css b/src/wp-includes/css/buttons.css index 787efacab6953..56f146d3d6ebd 100644 --- a/src/wp-includes/css/buttons.css +++ b/src/wp-includes/css/buttons.css @@ -185,6 +185,11 @@ TABLE OF CONTENTS: transform: none !important; } +.wp-core-ui .button[aria-disabled="true"], +.wp-core-ui .button-secondary[aria-disabled="true"] { + cursor: default; +} + /* Buttons that look like links, for a cross of good semantics with the visual */ .wp-core-ui .button-link { margin: 0; @@ -283,6 +288,10 @@ TABLE OF CONTENTS: cursor: default; } +.wp-core-ui .button-primary[aria-disabled="true"] { + cursor: default; +} + /* ---------------------------------------------------------------------------- 4.0 - Button Groups ---------------------------------------------------------------------------- */ From 2a494ac363749eb534c6912e0a12869dd3f1e886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Zi=C3=83=C2=B3=C3=85=E2=80=9Akowski?= Date: Fri, 2 Feb 2024 12:59:21 +0000 Subject: [PATCH 46/46] Editor: Add `allowed_blocks` field to block registration and REST API There is a new block.json field called allowedBlocks, added in Gutenberg in https://github.com/WordPress/gutenberg/pull/58262. This adds support for this new field also on the server. Props: gziolo, jsnajdr. Fixes #60403. git-svn-id: https://develop.svn.wordpress.org/trunk@57521 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/post.php | 1 + src/wp-includes/blocks.php | 3 ++- src/wp-includes/class-wp-block-type.php | 9 +++++++++ .../class-wp-rest-block-types-controller.php | 12 ++++++++++++ .../tests/rest-api/rest-block-type-controller.php | 9 ++++++++- 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index c93ac71bec525..90aaf2228e371 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -2303,6 +2303,7 @@ function get_block_editor_server_block_settings() { 'keywords' => 'keywords', 'example' => 'example', 'variations' => 'variations', + 'allowed_blocks' => 'allowedBlocks', ); foreach ( $block_registry->get_all_registered() as $block_name => $block_type ) { diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index fdf97545f72d7..51d05a0846160 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -327,7 +327,7 @@ function get_block_metadata_i18n_schema() { * @since 6.1.0 Added support for `render` field. * @since 6.3.0 Added `selectors` field. * @since 6.4.0 Added support for `blockHooks` field. - * @since 6.5.0 Added support for `viewStyle` field. + * @since 6.5.0 Added support for `allowedBlocks` and `viewStyle` fields. * * @param string $file_or_folder Path to the JSON file with metadata definition for * the block or path to the folder where the `block.json` file is located. @@ -424,6 +424,7 @@ function register_block_type_from_metadata( $file_or_folder, $args = array() ) { 'styles' => 'styles', 'variations' => 'variations', 'example' => 'example', + 'allowedBlocks' => 'allowed_blocks', ); $textdomain = ! empty( $metadata['textdomain'] ) ? $metadata['textdomain'] : null; $i18n_schema = get_block_metadata_i18n_schema(); diff --git a/src/wp-includes/class-wp-block-type.php b/src/wp-includes/class-wp-block-type.php index 5bdcee1504824..33825a7888320 100644 --- a/src/wp-includes/class-wp-block-type.php +++ b/src/wp-includes/class-wp-block-type.php @@ -68,6 +68,14 @@ class WP_Block_Type { */ public $ancestor = null; + /** + * Limits which block types can be inserted as children of this block type. + * + * @since 6.5.0 + * @var string[]|null + */ + public $allowed_blocks = null; + /** * Block type icon. * @@ -303,6 +311,7 @@ class WP_Block_Type { * available when nested within the specified blocks. * @type string[]|null $ancestor Setting ancestor makes a block available only inside the specified * block types at any position of the ancestor's block subtree. + * @type string[]|null $allowed_blocks Limits which block types can be inserted as children of this block type. * @type string|null $icon Block type icon. * @type string $description A detailed block type description. * @type string[] $keywords Additional keywords to produce block type as diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php index 9e8ba9e9299e3..7bf2f6af4af2e 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php @@ -280,6 +280,7 @@ public function prepare_item_for_response( $item, $request ) { 'keywords', 'parent', 'ancestor', + 'allowed_blocks', 'provides_context', 'uses_context', 'selectors', @@ -723,6 +724,17 @@ public function get_item_schema() { 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), + 'allowed_blocks' => array( + 'description' => __( 'Allowed child block types.' ), + 'type' => array( 'array', 'null' ), + 'items' => array( + 'type' => 'string', + 'pattern' => self::NAME_PATTERN, + ), + 'default' => null, + 'context' => array( 'embed', 'view', 'edit' ), + 'readonly' => true, + ), 'keywords' => $keywords_definition, 'example' => $example_definition, 'block_hooks' => array( diff --git a/tests/phpunit/tests/rest-api/rest-block-type-controller.php b/tests/phpunit/tests/rest-api/rest-block-type-controller.php index eca0e64a5fb55..6e314e6af4ab7 100644 --- a/tests/phpunit/tests/rest-api/rest-block-type-controller.php +++ b/tests/phpunit/tests/rest-api/rest-block-type-controller.php @@ -207,6 +207,7 @@ public function test_get_item_invalid() { 'category' => true, 'parent' => 'invalid_parent', 'ancestor' => 'invalid_ancestor', + 'allowed_blocks' => 'invalid_allowed_blocks', 'icon' => true, 'description' => true, 'keywords' => 'invalid_keywords', @@ -237,6 +238,7 @@ public function test_get_item_invalid() { $this->assertNull( $data['category'] ); $this->assertSameSets( array( 'invalid_parent' ), $data['parent'] ); $this->assertSameSets( array( 'invalid_ancestor' ), $data['ancestor'] ); + $this->assertSameSets( array( 'invalid_allowed_blocks' ), $data['allowed_blocks'] ); $this->assertNull( $data['icon'] ); $this->assertSame( '1', $data['description'] ); $this->assertSameSets( array( 'invalid_keywords' ), $data['keywords'] ); @@ -283,6 +285,7 @@ public function test_get_item_defaults() { 'category' => false, 'parent' => false, 'ancestor' => false, + 'allowed_blocks' => false, 'icon' => false, 'description' => false, 'keywords' => false, @@ -313,6 +316,7 @@ public function test_get_item_defaults() { $this->assertNull( $data['category'] ); $this->assertSameSets( array(), $data['parent'] ); $this->assertSameSets( array(), $data['ancestor'] ); + $this->assertSameSets( array(), $data['allowed_blocks'] ); $this->assertNull( $data['icon'] ); $this->assertSame( '', $data['description'] ); $this->assertSameSets( array(), $data['keywords'] ); @@ -550,6 +554,7 @@ public function test_get_variation() { * @ticket 47620 * @ticket 57585 * @ticket 59346 + * @ticket 60403 */ public function test_get_item_schema() { wp_set_current_user( self::$admin_id ); @@ -557,13 +562,14 @@ public function test_get_item_schema() { $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); $properties = $data['schema']['properties']; - $this->assertCount( 31, $properties ); + $this->assertCount( 32, $properties ); $this->assertArrayHasKey( 'api_version', $properties ); $this->assertArrayHasKey( 'name', $properties ); $this->assertArrayHasKey( 'title', $properties ); $this->assertArrayHasKey( 'category', $properties ); $this->assertArrayHasKey( 'parent', $properties ); $this->assertArrayHasKey( 'ancestor', $properties ); + $this->assertArrayHasKey( 'allowed_blocks', $properties ); $this->assertArrayHasKey( 'icon', $properties ); $this->assertArrayHasKey( 'description', $properties ); $this->assertArrayHasKey( 'keywords', $properties ); @@ -696,6 +702,7 @@ protected function check_block_type_object( $block_type, $data, $links ) { 'category', 'parent', 'ancestor', + 'allowedBlocks', 'icon', 'description', 'keywords',