From 86b2898665e25e19d85b35830d677719c65b318a Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Thu, 9 Jan 2025 17:10:06 +0100 Subject: [PATCH 001/420] Admin page: update wording for Boost plugin Critical CSS prompt (#40293) Co-authored-by: Adnan Haque Co-authored-by: Peter Petrov --- .../_inc/client/at-a-glance/boost/index.jsx | 14 ++++++++++---- .../jetpack/_inc/client/at-a-glance/style.scss | 7 +++++++ .../changelog/update-boost-messaging-admin-page | 5 +++++ 3 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/update-boost-messaging-admin-page diff --git a/projects/plugins/jetpack/_inc/client/at-a-glance/boost/index.jsx b/projects/plugins/jetpack/_inc/client/at-a-glance/boost/index.jsx index 407f5b551243c..039f1b3fd5b97 100644 --- a/projects/plugins/jetpack/_inc/client/at-a-glance/boost/index.jsx +++ b/projects/plugins/jetpack/_inc/client/at-a-glance/boost/index.jsx @@ -176,7 +176,7 @@ const DashBoost = ( { 'jetpack' ), bottom: __( - 'Jetpack Boost enhance your site’s performance like top websites, no developer needed.', + 'Jetpack Boost enhances your site’s performance like top websites, no developer needed.', 'jetpack' ), }; @@ -201,11 +201,17 @@ const DashBoost = ( { return createInterpolateElement( __( - 'Re-generate your Critical CSS after you make changes on your site', + 'Regenerate your Critical CSS after making changes to your site', 'jetpack' ), { - a: , + a: ( + + ), + u: , Info: , } ); @@ -517,7 +523,7 @@ const CriticalCssInfoPopover = () => { screenReaderText={ __( 'Learn more about how critical CSS works', 'jetpack' ) } >

- { __( 'Regenerate Critical CSS', 'jetpack' ) } + { __( 'Get automated Critical CSS', 'jetpack' ) }

{ createInterpolateElement( diff --git a/projects/plugins/jetpack/_inc/client/at-a-glance/style.scss b/projects/plugins/jetpack/_inc/client/at-a-glance/style.scss index 5e5a65517d19b..cd8ac4f3ef4cd 100644 --- a/projects/plugins/jetpack/_inc/client/at-a-glance/style.scss +++ b/projects/plugins/jetpack/_inc/client/at-a-glance/style.scss @@ -751,3 +751,10 @@ a.jp-dash-item__manage-in-wpcom, display: block; } } + +// We only underline part of the link to Critical CSS info. +.dops-banner__title { + a.dash-boost-critical-css-info__text { + text-decoration: none; + } +} diff --git a/projects/plugins/jetpack/changelog/update-boost-messaging-admin-page b/projects/plugins/jetpack/changelog/update-boost-messaging-admin-page new file mode 100644 index 0000000000000..fe3aba230fa5e --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-boost-messaging-admin-page @@ -0,0 +1,5 @@ +Significance: patch +Type: enhancement +Comment: Dashboard: update wording for Boost plugin prompt. + + From 97d843b445afe4cf3434ed9139be3d9b75b7e60c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donncha=20=C3=93=20Caoimh?= <5656673+donnchawp@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:10:44 +0000 Subject: [PATCH 002/420] WP Super Cache: Bump tested version to 6.7.1 (#40915) --- .../changelog/update-super-cache-version-tested-bump | 5 +++++ projects/plugins/super-cache/readme.txt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/super-cache/changelog/update-super-cache-version-tested-bump diff --git a/projects/plugins/super-cache/changelog/update-super-cache-version-tested-bump b/projects/plugins/super-cache/changelog/update-super-cache-version-tested-bump new file mode 100644 index 0000000000000..36468bb8fd394 --- /dev/null +++ b/projects/plugins/super-cache/changelog/update-super-cache-version-tested-bump @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Bumped the the tested version to 6.7.1 + + diff --git a/projects/plugins/super-cache/readme.txt b/projects/plugins/super-cache/readme.txt index d5c43e1b090f5..44fedef3db2ed 100644 --- a/projects/plugins/super-cache/readme.txt +++ b/projects/plugins/super-cache/readme.txt @@ -3,7 +3,7 @@ Contributors: donncha, automattic, adnan007, dilirity, mikemayhem3030, pyronaur, Tags: performance, caching, wp-cache, wp-super-cache, cache Requires at least: 6.6 Requires PHP: 7.2 -Tested up to: 6.7 +Tested up to: 6.7.1 Stable tag: 1.12.3 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html From 24acb0793d1f929bc57271366c39322f9a2e92b5 Mon Sep 17 00:00:00 2001 From: Dylan Munson <65001528+CodeyGuyDylan@users.noreply.github.com> Date: Thu, 9 Jan 2025 09:51:29 -0700 Subject: [PATCH 003/420] Update/always show upgrade button if one is available my jetpack (#40900) * Always show upgrade button if one is available * changelog --- .../_inc/components/product-card/action-button.tsx | 8 +------- ...ow-upgrade-button-if-one-is-available-my-jetpack | 4 ++++ .../my-jetpack/src/products/class-anti-spam.php | 13 ++++--------- .../my-jetpack/src/products/class-product.php | 2 +- .../my-jetpack/tests/php/test-products-rest.php | 2 +- 5 files changed, 11 insertions(+), 18 deletions(-) create mode 100644 projects/packages/my-jetpack/changelog/update-always-show-upgrade-button-if-one-is-available-my-jetpack diff --git a/projects/packages/my-jetpack/_inc/components/product-card/action-button.tsx b/projects/packages/my-jetpack/_inc/components/product-card/action-button.tsx index eb1650872143e..f81075f197196 100644 --- a/projects/packages/my-jetpack/_inc/components/product-card/action-button.tsx +++ b/projects/packages/my-jetpack/_inc/components/product-card/action-button.tsx @@ -44,7 +44,6 @@ const ActionButton: FC< ActionButtonProps > = ( { onAdd, onInstall, onLearnMore, - upgradeInInterstitial, isOwned, } ) => { const troubleshootBackupsUrl = @@ -126,15 +125,11 @@ const ActionButton: FC< ActionButtonProps > = ( { }; } case PRODUCT_STATUSES.CAN_UPGRADE: { - const upgradeText = __( 'Upgrade', 'jetpack-my-jetpack' ); - const purchaseText = __( 'Learn more', 'jetpack-my-jetpack' ); - const buttonText = purchaseUrl || upgradeInInterstitial ? upgradeText : purchaseText; - return { ...buttonState, href: purchaseUrl || `#/add-${ slug }`, variant: 'primary', - label: buttonText, + label: __( 'Upgrade', 'jetpack-my-jetpack' ), onClick: onAdd, ...( primaryActionOverride?.[ PRODUCT_STATUSES.CAN_UPGRADE ] ?? {} ), }; @@ -256,7 +251,6 @@ const ActionButton: FC< ActionButtonProps > = ( { onInstall, onLearnMore, purchaseUrl, - upgradeInInterstitial, isManageDisabled, manageUrl, onManage, diff --git a/projects/packages/my-jetpack/changelog/update-always-show-upgrade-button-if-one-is-available-my-jetpack b/projects/packages/my-jetpack/changelog/update-always-show-upgrade-button-if-one-is-available-my-jetpack new file mode 100644 index 0000000000000..4d24945f126fc --- /dev/null +++ b/projects/packages/my-jetpack/changelog/update-always-show-upgrade-button-if-one-is-available-my-jetpack @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Show an upgrade CTA anytime a product has an available upgrade diff --git a/projects/packages/my-jetpack/src/products/class-anti-spam.php b/projects/packages/my-jetpack/src/products/class-anti-spam.php index c341a9f88d32d..7cec298d57aaf 100644 --- a/projects/packages/my-jetpack/src/products/class-anti-spam.php +++ b/projects/packages/my-jetpack/src/products/class-anti-spam.php @@ -128,20 +128,15 @@ public static function get_paid_plan_product_slugs() { } /** - * Determine if the site has an Akismet plan. + * Check if the product has a free plan + * In this case we are only checking for an API key. The has_paid_plan_for_product will check to see if the specific site has a paid plan * - * @return bool - whether an API key was found + * @return bool */ - public static function has_paid_plan_for_product() { - if ( parent::has_paid_plan_for_product() ) { - return true; - } - // As a fallback, we're checking if the site has an API key for Akismet. - // Note that some Akismet Plans are free - we're just checking for an API key and don't have the perspective of the plan attached to it here + public static function has_free_plan_for_product() { $akismet_api_key = apply_filters( 'akismet_get_api_key', defined( 'WPCOM_API_KEY' ) ? constant( 'WPCOM_API_KEY' ) : get_option( 'wordpress_api_key' ) ); if ( ! empty( $akismet_api_key ) ) { return true; - } return false; diff --git a/projects/packages/my-jetpack/src/products/class-product.php b/projects/packages/my-jetpack/src/products/class-product.php index e8d2ca67cb7cd..5e747988fb8cf 100644 --- a/projects/packages/my-jetpack/src/products/class-product.php +++ b/projects/packages/my-jetpack/src/products/class-product.php @@ -643,7 +643,7 @@ public static function has_trial_support() { * @return boolean */ public static function is_upgradable() { - return false; + return ! static::has_paid_plan_for_product() && ! static::is_bundle_product(); } /** diff --git a/projects/packages/my-jetpack/tests/php/test-products-rest.php b/projects/packages/my-jetpack/tests/php/test-products-rest.php index 821a6806ed7d7..1a3bf47c62d7e 100644 --- a/projects/packages/my-jetpack/tests/php/test-products-rest.php +++ b/projects/packages/my-jetpack/tests/php/test-products-rest.php @@ -201,7 +201,7 @@ public function test_activate_boost() { $data = $response->get_data(); $this->assertEquals( 200, $response->get_status() ); - $this->assertEquals( 'active', $data['status'] ); + $this->assertEquals( 'can_upgrade', $data['status'] ); $this->assertTrue( is_plugin_active( $this->boost_mock_filename ) ); } From b5b30901e90da6b1743192d263d6926be29ffa9f Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Thu, 9 Jan 2025 09:59:00 -0700 Subject: [PATCH 004/420] Backport package release cycle for 2025-01 (#40932) * Release github-actions/pr-is-up-to-date 2.0.4 * Release github-actions/push-to-mirrors 2.2.1 * Release github-actions/required-review 4.0.2 * Release js-packages/eslint-changed 2.1.0 * Release packages/codesniffer 5.0.0 * Release packages/ignorefile 3.0.0 * Release packages/phan-plugins 0.1.1 * Release packages/phpcs-filter 3.0.0 * Release js-packages/components 0.65.3 * Release js-packages/social-logos 3.1.17 * Release packages/transport-helper 0.3.0 * Small formatting tweaks --- composer.lock | 12 ++++++------ .../pr-is-up-to-date/CHANGELOG.md | 6 ++++++ ...update-github-actions-docs-with-permissions | 4 ---- .../push-to-mirrors/CHANGELOG.md | 5 +++++ .../push-to-mirrors/changelog/force-a-release | 4 ---- .../required-review/CHANGELOG.md | 9 +++++++++ ...-required-review-no-request-review-from-bot | 4 ---- .../changelog/renovate-picomatch-4.x | 4 ---- .../required-review/changelog/update-eslint-9 | 5 ----- ...update-github-actions-docs-with-permissions | 4 ---- .../required-review/package.json | 2 +- projects/js-packages/components/CHANGELOG.md | 5 +++++ .../changelog/update-social-logo-usage | 4 ---- projects/js-packages/components/package.json | 2 +- .../js-packages/eslint-changed/CHANGELOG.md | 13 +++++++++++++ .../changelog/add-better-eslint-9-support | 4 ---- .../changelog/add-better-eslint-9-support#2 | 4 ---- .../changelog/add-better-eslint-9-support#3 | 5 ----- .../changelog/fix-eslint-changed-macos_paths | 4 ---- .../changelog/renovate-chalk-5.x | 4 ---- .../changelog/renovate-commander-13.x | 4 ---- .../changelog/restore-jp_test_coverage | 4 ---- .../eslint-changed/changelog/update-eslint-9 | 5 ----- .../update-switch-to-raw-coverage-files | 5 ----- .../js-packages/eslint-changed/package.json | 2 +- projects/js-packages/eslint-changed/src/cli.js | 2 +- projects/js-packages/social-logos/CHANGELOG.md | 5 +++++ .../changelog/fix-package.json-in-social-logos | 4 ---- projects/js-packages/social-logos/package.json | 2 +- projects/packages/codesniffer/CHANGELOG.md | 18 ++++++++++++++++++ .../changelog/add-codesniffer-8.4-support | 4 ---- .../changelog/add-coverage-processing | 4 ---- .../fix-phpcompatibility-new-dev-sniff | 4 ---- .../remove-codesniffer-php_less_than_7.2 | 4 ---- ...novate-mediawiki-mediawiki-codesniffer-44.x | 4 ---- ...vate-mediawiki-mediawiki-codesniffer-44.x#2 | 4 ---- ...vate-mediawiki-mediawiki-codesniffer-44.x#4 | 4 ---- ...novate-mediawiki-mediawiki-codesniffer-45.x | 4 ---- .../changelog/restore-jp_test_coverage | 4 ---- .../changelog/update-bump_min_php_to_7.2 | 4 ---- .../update-switch-to-raw-coverage-files | 5 ----- projects/packages/codesniffer/composer.json | 2 +- projects/packages/ignorefile/CHANGELOG.md | 8 ++++++++ .../changelog/restore-jp_test_coverage | 4 ---- .../changelog/update-bump_min_php_to_7.2 | 4 ---- .../update-switch-to-raw-coverage-files | 5 ----- projects/packages/ignorefile/composer.json | 2 +- projects/packages/phan-plugins/CHANGELOG.md | 6 ++++++ .../phan-plugins/changelog/add-ci-php-8.4 | 5 ----- .../changelog/restore-jp_test_coverage | 4 ---- .../update-switch-to-raw-coverage-files | 5 ----- projects/packages/phpcs-filter/CHANGELOG.md | 7 +++++++ .../changelog/add-phpunit-coverage-configs | 5 ----- .../changelog/restore-jp_test_coverage | 4 ---- .../changelog/update-bump_min_php_to_7.2 | 4 ---- .../update-switch-to-raw-coverage-files | 5 ----- projects/packages/phpcs-filter/composer.json | 2 +- .../packages/transport-helper/CHANGELOG.md | 12 ++++++++++++ .../changelog/add-jetpack-backup-schedule-time | 4 ---- .../changelog/fix-bump_composer_versions | 4 ---- .../changelog/restore-jp_test_coverage | 4 ---- .../changelog/update-bump_min_php_to_7.2 | 4 ---- .../update-switch-to-raw-coverage-files | 5 ----- .../packages/transport-helper/composer.json | 2 +- .../packages/transport-helper/package.json | 2 +- .../src/class-package-version.php | 2 +- .../protect/changelog/prerelease#12} | 3 ++- projects/plugins/protect/composer.lock | 4 ++-- 68 files changed, 115 insertions(+), 203 deletions(-) delete mode 100644 projects/github-actions/pr-is-up-to-date/changelog/update-github-actions-docs-with-permissions delete mode 100644 projects/github-actions/push-to-mirrors/changelog/force-a-release delete mode 100644 projects/github-actions/required-review/changelog/fix-required-review-no-request-review-from-bot delete mode 100644 projects/github-actions/required-review/changelog/renovate-picomatch-4.x delete mode 100644 projects/github-actions/required-review/changelog/update-eslint-9 delete mode 100644 projects/github-actions/required-review/changelog/update-github-actions-docs-with-permissions delete mode 100644 projects/js-packages/components/changelog/update-social-logo-usage delete mode 100644 projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support delete mode 100644 projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support#2 delete mode 100644 projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support#3 delete mode 100644 projects/js-packages/eslint-changed/changelog/fix-eslint-changed-macos_paths delete mode 100644 projects/js-packages/eslint-changed/changelog/renovate-chalk-5.x delete mode 100644 projects/js-packages/eslint-changed/changelog/renovate-commander-13.x delete mode 100644 projects/js-packages/eslint-changed/changelog/restore-jp_test_coverage delete mode 100644 projects/js-packages/eslint-changed/changelog/update-eslint-9 delete mode 100644 projects/js-packages/eslint-changed/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/js-packages/social-logos/changelog/fix-package.json-in-social-logos delete mode 100644 projects/packages/codesniffer/changelog/add-codesniffer-8.4-support delete mode 100644 projects/packages/codesniffer/changelog/add-coverage-processing delete mode 100644 projects/packages/codesniffer/changelog/fix-phpcompatibility-new-dev-sniff delete mode 100644 projects/packages/codesniffer/changelog/remove-codesniffer-php_less_than_7.2 delete mode 100644 projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x delete mode 100644 projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x#2 delete mode 100644 projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x#4 delete mode 100644 projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-45.x delete mode 100644 projects/packages/codesniffer/changelog/restore-jp_test_coverage delete mode 100644 projects/packages/codesniffer/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/packages/codesniffer/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/packages/ignorefile/changelog/restore-jp_test_coverage delete mode 100644 projects/packages/ignorefile/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/packages/ignorefile/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/packages/phan-plugins/changelog/add-ci-php-8.4 delete mode 100644 projects/packages/phan-plugins/changelog/restore-jp_test_coverage delete mode 100644 projects/packages/phan-plugins/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/packages/phpcs-filter/changelog/add-phpunit-coverage-configs delete mode 100644 projects/packages/phpcs-filter/changelog/restore-jp_test_coverage delete mode 100644 projects/packages/phpcs-filter/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/packages/phpcs-filter/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/packages/transport-helper/changelog/add-jetpack-backup-schedule-time delete mode 100644 projects/packages/transport-helper/changelog/fix-bump_composer_versions delete mode 100644 projects/packages/transport-helper/changelog/restore-jp_test_coverage delete mode 100644 projects/packages/transport-helper/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/packages/transport-helper/changelog/update-switch-to-raw-coverage-files rename projects/{github-actions/pr-is-up-to-date/changelog/force-a-release => plugins/protect/changelog/prerelease#12} (51%) diff --git a/composer.lock b/composer.lock index 9b74ab0d690b3..eb8141cea1f3b 100644 --- a/composer.lock +++ b/composer.lock @@ -13,7 +13,7 @@ "dist": { "type": "path", "url": "projects/packages/ignorefile", - "reference": "8f2d11d1b20847517f10a70eef2e362084bdffdc" + "reference": "689f55eccad70543d91b2536a7055937eb62511c" }, "require": { "php": ">=7.2" @@ -30,7 +30,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "2.1.x-dev" + "dev-trunk": "3.0.x-dev" } }, "autoload": { @@ -63,7 +63,7 @@ "dist": { "type": "path", "url": "projects/packages/codesniffer", - "reference": "4968238af15e427ec78daccdc5ddb6dd3bc6d069" + "reference": "686f7115142bafa2a91ada334a821142443f4e61" }, "require": { "automattic/vipwpcs": "^3.0", @@ -86,7 +86,7 @@ "link-template": "https://github.com/Automattic/jetpack-codesniffer/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.0.x-dev" + "dev-trunk": "5.0.x-dev" } }, "autoload": { @@ -187,7 +187,7 @@ "dist": { "type": "path", "url": "projects/packages/phpcs-filter", - "reference": "0425b29cbd8e6ee012478f89f605f593f3beda54" + "reference": "f41ae07ce664c89fc9ecc4fa0a8c1d11e2b0cdbe" }, "require": { "automattic/ignorefile": "@dev", @@ -201,7 +201,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-trunk": "2.0.x-dev" + "dev-trunk": "3.0.x-dev" } }, "autoload": { diff --git a/projects/github-actions/pr-is-up-to-date/CHANGELOG.md b/projects/github-actions/pr-is-up-to-date/CHANGELOG.md index 9bfba96281b54..b6257715dabd3 100644 --- a/projects/github-actions/pr-is-up-to-date/CHANGELOG.md +++ b/projects/github-actions/pr-is-up-to-date/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.0.4] - 2025-01-09 +### Changed +- Update dependencies. [#40194] +- Update docs with permissions for GitHub Apps and fine-grained access tokens. [#40633] + ## [2.0.3] - 2024-02-07 ### Changed - Update dependencies. [#34213] @@ -53,6 +58,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Initial release. +[2.0.4]: https://github.com/Automattic/action-pr-is-up-to-date/compare/v2.0.3...v2.0.4 [2.0.3]: https://github.com/Automattic/action-pr-is-up-to-date/compare/v2.0.2...v2.0.3 [2.0.2]: https://github.com/Automattic/action-pr-is-up-to-date/compare/v2.0.1...v2.0.2 [2.0.1]: https://github.com/Automattic/action-pr-is-up-to-date/compare/v2.0.0...v2.0.1 diff --git a/projects/github-actions/pr-is-up-to-date/changelog/update-github-actions-docs-with-permissions b/projects/github-actions/pr-is-up-to-date/changelog/update-github-actions-docs-with-permissions deleted file mode 100644 index 41e21f7c7a781..0000000000000 --- a/projects/github-actions/pr-is-up-to-date/changelog/update-github-actions-docs-with-permissions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Update docs with permissions for GitHub Apps and fine-grained access tokens. diff --git a/projects/github-actions/push-to-mirrors/CHANGELOG.md b/projects/github-actions/push-to-mirrors/CHANGELOG.md index 442bd5b765cec..92242412fcad1 100644 --- a/projects/github-actions/push-to-mirrors/CHANGELOG.md +++ b/projects/github-actions/push-to-mirrors/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.2.1] - 2025-01-09 +### Changed +- Update dependencies. [#40194] + ## [2.2.0] - 2024-08-29 ### Added - Add footers like `Upstream-Ref: owner/repo@sha` to mirrored commits, to make it easy to find the source of any particular mirrored commit. New workflow parameter `no-upstream-refs` may be set to disable this. [#36850] @@ -66,6 +70,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Initial release +[2.2.1]: https://github.com/Automattic/action-push-to-mirrors/compare/v2.2.0...v2.2.1 [2.2.0]: https://github.com/Automattic/action-push-to-mirrors/compare/v2.1.0...v2.2.0 [2.1.0]: https://github.com/Automattic/action-push-to-mirrors/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/Automattic/action-push-to-mirrors/compare/v1.0.5...v2.0.0 diff --git a/projects/github-actions/push-to-mirrors/changelog/force-a-release b/projects/github-actions/push-to-mirrors/changelog/force-a-release deleted file mode 100644 index d4ad6c7cc3379..0000000000000 --- a/projects/github-actions/push-to-mirrors/changelog/force-a-release +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Update dependencies. diff --git a/projects/github-actions/required-review/CHANGELOG.md b/projects/github-actions/required-review/CHANGELOG.md index 30e87dead88ca..8e9b29fac1a42 100644 --- a/projects/github-actions/required-review/CHANGELOG.md +++ b/projects/github-actions/required-review/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.0.2] - 2025-01-09 +### Changed +- Update docs with permissions for GitHub Apps and fine-grained access tokens. [#40633] +- Updated package dependencies. [#40806] + +### Fixed +- Avoid trying to request reviews from bot accounts. [#39895] + ## [4.0.1] - 2024-08-29 ### Changed - Updated package dependencies. [#36757] @@ -90,6 +98,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Initial release +[4.0.2]: https://github.com/Automattic/action-required-review/compare/v4.0.1...v4.0.2 [4.0.1]: https://github.com/Automattic/action-required-review/compare/v4.0.0...v4.0.1 [4.0.0]: https://github.com/Automattic/action-required-review/compare/v3.1.0...v4.0.0 [3.1.0]: https://github.com/Automattic/action-required-review/compare/v3.0.2...v3.1.0 diff --git a/projects/github-actions/required-review/changelog/fix-required-review-no-request-review-from-bot b/projects/github-actions/required-review/changelog/fix-required-review-no-request-review-from-bot deleted file mode 100644 index bb2852820990b..0000000000000 --- a/projects/github-actions/required-review/changelog/fix-required-review-no-request-review-from-bot +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Avoid trying to request reviews from bot accounts. diff --git a/projects/github-actions/required-review/changelog/renovate-picomatch-4.x b/projects/github-actions/required-review/changelog/renovate-picomatch-4.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/github-actions/required-review/changelog/renovate-picomatch-4.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/github-actions/required-review/changelog/update-eslint-9 b/projects/github-actions/required-review/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/github-actions/required-review/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/github-actions/required-review/changelog/update-github-actions-docs-with-permissions b/projects/github-actions/required-review/changelog/update-github-actions-docs-with-permissions deleted file mode 100644 index 41e21f7c7a781..0000000000000 --- a/projects/github-actions/required-review/changelog/update-github-actions-docs-with-permissions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Update docs with permissions for GitHub Apps and fine-grained access tokens. diff --git a/projects/github-actions/required-review/package.json b/projects/github-actions/required-review/package.json index 089447d608732..657867f70fdfb 100644 --- a/projects/github-actions/required-review/package.json +++ b/projects/github-actions/required-review/package.json @@ -1,6 +1,6 @@ { "name": "required-review", - "version": "4.0.1", + "version": "4.0.2", "description": "Check that a Pull Request has reviews from required teams.", "main": "index.js", "author": "Automattic", diff --git a/projects/js-packages/components/CHANGELOG.md b/projects/js-packages/components/CHANGELOG.md index a7c750f965bfa..0771e4a245105 100644 --- a/projects/js-packages/components/CHANGELOG.md +++ b/projects/js-packages/components/CHANGELOG.md @@ -2,6 +2,10 @@ ### This is a list detailing changes for the Jetpack RNA Components package releases. +## [0.65.3] - 2025-01-09 +### Changed +- Updated social-logos import from default to named. [#40816] + ## [0.65.2] - 2025-01-06 ### Changed - Updated package dependencies. [#40797] [#40798] [#40835] [#40841] @@ -1259,6 +1263,7 @@ ### Changed - Update node version requirement to 14.16.1 +[0.65.3]: https://github.com/Automattic/jetpack-components/compare/0.65.2...0.65.3 [0.65.2]: https://github.com/Automattic/jetpack-components/compare/0.65.1...0.65.2 [0.65.1]: https://github.com/Automattic/jetpack-components/compare/0.65.0...0.65.1 [0.65.0]: https://github.com/Automattic/jetpack-components/compare/0.64.1...0.65.0 diff --git a/projects/js-packages/components/changelog/update-social-logo-usage b/projects/js-packages/components/changelog/update-social-logo-usage deleted file mode 100644 index 9efa1202142fd..0000000000000 --- a/projects/js-packages/components/changelog/update-social-logo-usage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated social-logos import from default to named diff --git a/projects/js-packages/components/package.json b/projects/js-packages/components/package.json index ae92d453c7b9f..c6ef9078b264e 100644 --- a/projects/js-packages/components/package.json +++ b/projects/js-packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-components", - "version": "0.65.2", + "version": "0.65.3", "description": "Jetpack Components Package", "author": "Automattic", "license": "GPL-2.0-or-later", diff --git a/projects/js-packages/eslint-changed/CHANGELOG.md b/projects/js-packages/eslint-changed/CHANGELOG.md index 0f6b1b4c6f089..51981dd96f5c3 100644 --- a/projects/js-packages/eslint-changed/CHANGELOG.md +++ b/projects/js-packages/eslint-changed/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.1.0] - 2025-01-09 +### Added +- Add `--eslint-options` option. [#40446] +- Enable test coverage. [#39961] + +### Changed +- Updated package dependencies. [#40786] [#40828] + +### Fixed +- Detect whether to use eslintrc or flat config in the same way eslint does. [#40446] +- Tests: Use fs.realpath() for macOS compatibility. [#40451] + ## [2.0.9] - 2024-08-29 ### Changed - Internal updates. @@ -83,6 +95,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Created as a tool within the monorepo. +[2.1.0]: https://github.com/Automattic/eslint-changed/compare/2.0.9...2.1.0 [2.0.9]: https://github.com/Automattic/eslint-changed/compare/2.0.8...2.0.9 [2.0.8]: https://github.com/Automattic/eslint-changed/compare/2.0.7...2.0.8 [2.0.7]: https://github.com/Automattic/eslint-changed/compare/2.0.6...2.0.7 diff --git a/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support b/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support deleted file mode 100644 index 2b289b01109fb..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: fixed - -Detect whether to use eslintrc or flat config in the same way eslint does. diff --git a/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support#2 b/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support#2 deleted file mode 100644 index f0caaa32fa258..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Add `--eslint-options` option. diff --git a/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support#3 b/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support#3 deleted file mode 100644 index cb5cebee71f85..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/add-better-eslint-9-support#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update tests for compatibility with eslint 9, improve messaging on json failure, and avoid problems with global git config. - - diff --git a/projects/js-packages/eslint-changed/changelog/fix-eslint-changed-macos_paths b/projects/js-packages/eslint-changed/changelog/fix-eslint-changed-macos_paths deleted file mode 100644 index 64137517c31b6..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/fix-eslint-changed-macos_paths +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Tests: Use fs.realpath() for macOS compatibility. diff --git a/projects/js-packages/eslint-changed/changelog/renovate-chalk-5.x b/projects/js-packages/eslint-changed/changelog/renovate-chalk-5.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/renovate-chalk-5.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/js-packages/eslint-changed/changelog/renovate-commander-13.x b/projects/js-packages/eslint-changed/changelog/renovate-commander-13.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/renovate-commander-13.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/js-packages/eslint-changed/changelog/restore-jp_test_coverage b/projects/js-packages/eslint-changed/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/js-packages/eslint-changed/changelog/update-eslint-9 b/projects/js-packages/eslint-changed/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/js-packages/eslint-changed/changelog/update-switch-to-raw-coverage-files b/projects/js-packages/eslint-changed/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/js-packages/eslint-changed/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/js-packages/eslint-changed/package.json b/projects/js-packages/eslint-changed/package.json index 63577048991d0..64edf74b5ace3 100644 --- a/projects/js-packages/eslint-changed/package.json +++ b/projects/js-packages/eslint-changed/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/eslint-changed", - "version": "2.0.9", + "version": "2.1.0", "description": "Run eslint on files, but only report warnings and errors from lines that were changed.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/eslint-changed/#readme", "type": "module", diff --git a/projects/js-packages/eslint-changed/src/cli.js b/projects/js-packages/eslint-changed/src/cli.js index 26d0a2f19e7ad..85bfc49dc43b0 100755 --- a/projects/js-packages/eslint-changed/src/cli.js +++ b/projects/js-packages/eslint-changed/src/cli.js @@ -7,7 +7,7 @@ import { Command } from 'commander'; import * as ESLintPkg from 'eslint'; import parseDiff from 'parse-diff'; -const APP_VERSION = '2.0.9'; +const APP_VERSION = '2.1.0'; const { ESLint } = ESLintPkg; const loadESLint = ESLintPkg.loadESLint ?? ( () => ESLint ); diff --git a/projects/js-packages/social-logos/CHANGELOG.md b/projects/js-packages/social-logos/CHANGELOG.md index fed4877c0faea..753834a60424e 100644 --- a/projects/js-packages/social-logos/CHANGELOG.md +++ b/projects/js-packages/social-logos/CHANGELOG.md @@ -1,3 +1,7 @@ +## [3.1.17] - 2025-01-09 +### Fixed +- Removed `module` in package.json given it's a CommonJS package. [#40867] + ## [3.1.16] - 2025-01-06 ### Changed - Updated package dependencies. [#40796] [#40798] [#40831] @@ -194,6 +198,7 @@ - Build: Refactored (aligned build system with Gridicons). +[3.1.17]: https://github.com/Automattic/social-logos/compare/v3.1.16...v3.1.17 [3.1.16]: https://github.com/Automattic/social-logos/compare/v3.1.15...v3.1.16 [3.1.15]: https://github.com/Automattic/social-logos/compare/v3.1.14...v3.1.15 [3.1.14]: https://github.com/Automattic/social-logos/compare/v3.1.13...v3.1.14 diff --git a/projects/js-packages/social-logos/changelog/fix-package.json-in-social-logos b/projects/js-packages/social-logos/changelog/fix-package.json-in-social-logos deleted file mode 100644 index 352c3d672dbf8..0000000000000 --- a/projects/js-packages/social-logos/changelog/fix-package.json-in-social-logos +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Removed .module entry for it being a commonjs package diff --git a/projects/js-packages/social-logos/package.json b/projects/js-packages/social-logos/package.json index 4f76567af08ac..01e7003d47c7e 100644 --- a/projects/js-packages/social-logos/package.json +++ b/projects/js-packages/social-logos/package.json @@ -1,6 +1,6 @@ { "name": "social-logos", - "version": "3.1.16", + "version": "3.1.17", "description": "A repository of all the social logos used on WordPress.com.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/social-logos/", "bugs": { diff --git a/projects/packages/codesniffer/CHANGELOG.md b/projects/packages/codesniffer/CHANGELOG.md index 215e4c007173d..c2aa00c53fea5 100644 --- a/projects/packages/codesniffer/CHANGELOG.md +++ b/projects/packages/codesniffer/CHANGELOG.md @@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [5.0.0] - 2025-01-09 +### Added +- Add `Jetpack-Compat-84` ruleset. [#40253] +- Enable test coverage. [#39961] + +### Changed +- Add `WordPress.WP.GlobalVariablesOverride` to `Jetpack-NoWP` ruleset. [#40016] +- Disable new `Generic.CodeAnalysis.RequireExplicitBooleanOperatorPrecedence.MissingParentheses` sniff for now, pending discussion. [#39648] +- Updated package dependencies. [#40283] +- Update Jetpack-Compat rulesets. [#39665] +- Use mediawiki/mediawiki-codesniffer v44. [#39648] + +### Removed +- General: Remove PHP 7.0 and 7.1 support. [#40174] +- General: Update minimum PHP version to 7.2. [#40147] +- `MediaWiki.Usage.DoubleNotOperator` has been removed. `Universal.CodeAnalysis.NoDoubleNegative.FoundDouble`, which serves the same purpose, will be included via the WordPress-Extra ruleset v3.1.0. [#39648] + ## [4.0.0] - 2024-08-29 ### Added - Jetpack.Functions.SetCookie: Support new options syntax from PHP 7.3+. [#37062] @@ -157,6 +174,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Codesniffer: Add a package to hold our coding standard +[5.0.0]: https://github.com/Automattic/jetpack-codesniffer/compare/v4.0.0...v5.0.0 [4.0.0]: https://github.com/Automattic/jetpack-codesniffer/compare/v3.0.0...v4.0.0 [3.0.0]: https://github.com/Automattic/jetpack-codesniffer/compare/v2.8.0...v3.0.0 [2.8.0]: https://github.com/Automattic/jetpack-codesniffer/compare/v2.7.0...v2.8.0 diff --git a/projects/packages/codesniffer/changelog/add-codesniffer-8.4-support b/projects/packages/codesniffer/changelog/add-codesniffer-8.4-support deleted file mode 100644 index dcf3d20382217..0000000000000 --- a/projects/packages/codesniffer/changelog/add-codesniffer-8.4-support +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Add `Jetpack-Compat-84` ruleset. diff --git a/projects/packages/codesniffer/changelog/add-coverage-processing b/projects/packages/codesniffer/changelog/add-coverage-processing deleted file mode 100644 index 516c38c461a00..0000000000000 --- a/projects/packages/codesniffer/changelog/add-coverage-processing +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Add `WordPress.WP.GlobalVariablesOverride` to `Jetpack-NoWP` ruleset. diff --git a/projects/packages/codesniffer/changelog/fix-phpcompatibility-new-dev-sniff b/projects/packages/codesniffer/changelog/fix-phpcompatibility-new-dev-sniff deleted file mode 100644 index 4e46b6fe2b05f..0000000000000 --- a/projects/packages/codesniffer/changelog/fix-phpcompatibility-new-dev-sniff +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Update Jetpack-Compat rulesets. diff --git a/projects/packages/codesniffer/changelog/remove-codesniffer-php_less_than_7.2 b/projects/packages/codesniffer/changelog/remove-codesniffer-php_less_than_7.2 deleted file mode 100644 index d6ac592d4a118..0000000000000 --- a/projects/packages/codesniffer/changelog/remove-codesniffer-php_less_than_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Remove PHP 7.0 and 7.1 support. diff --git a/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x b/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x deleted file mode 100644 index d50cd3140f5e4..0000000000000 --- a/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: changed - -Use mediawiki/mediawiki-codesniffer v44. diff --git a/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x#2 b/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x#2 deleted file mode 100644 index 2bdb24af55f5f..0000000000000 --- a/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: removed - -`MediaWiki.Usage.DoubleNotOperator` has been removed. `Universal.CodeAnalysis.NoDoubleNegative.FoundDouble`, which serves the same purpose, will be included via the WordPress-Extra ruleset v3.1.0. diff --git a/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x#4 b/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x#4 deleted file mode 100644 index f49fbffda61e3..0000000000000 --- a/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x#4 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Disable new `Generic.CodeAnalysis.RequireExplicitBooleanOperatorPrecedence.MissingParentheses` sniff for now, pending discussion. diff --git a/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-45.x b/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-45.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/codesniffer/changelog/renovate-mediawiki-mediawiki-codesniffer-45.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/codesniffer/changelog/restore-jp_test_coverage b/projects/packages/codesniffer/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/packages/codesniffer/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/packages/codesniffer/changelog/update-bump_min_php_to_7.2 b/projects/packages/codesniffer/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/packages/codesniffer/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/packages/codesniffer/changelog/update-switch-to-raw-coverage-files b/projects/packages/codesniffer/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/packages/codesniffer/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/packages/codesniffer/composer.json b/projects/packages/codesniffer/composer.json index 93c7990c07a1b..820f0096d3f29 100644 --- a/projects/packages/codesniffer/composer.json +++ b/projects/packages/codesniffer/composer.json @@ -61,7 +61,7 @@ "link-template": "https://github.com/Automattic/jetpack-codesniffer/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.0.x-dev" + "dev-trunk": "5.0.x-dev" } }, "config": { diff --git a/projects/packages/ignorefile/CHANGELOG.md b/projects/packages/ignorefile/CHANGELOG.md index 2032a48edf679..8c703cc3ed992 100644 --- a/projects/packages/ignorefile/CHANGELOG.md +++ b/projects/packages/ignorefile/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.0.0] - 2025-01-09 +### Added +- Enable test coverage. [#39961] + +### Removed +- General: Update minimum PHP version to 7.2. [#40147] + ## [2.1.0] - 2024-08-29 ### Changed - Add "strict mode", defaulting to off. When off, InvalidPatternException will no longer be thrown, instead the pattern will just be ignored to match `git` behavior. [#37289] @@ -47,6 +54,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Initial release. +[3.0.0]: https://github.com/Automattic/ignorefile/compare/v2.1.0...v3.0.0 [2.1.0]: https://github.com/Automattic/ignorefile/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/Automattic/ignorefile/compare/v1.0.5...v2.0.0 [1.0.5]: https://github.com/Automattic/ignorefile/compare/v1.0.4...v1.0.5 diff --git a/projects/packages/ignorefile/changelog/restore-jp_test_coverage b/projects/packages/ignorefile/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/packages/ignorefile/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/packages/ignorefile/changelog/update-bump_min_php_to_7.2 b/projects/packages/ignorefile/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/packages/ignorefile/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/packages/ignorefile/changelog/update-switch-to-raw-coverage-files b/projects/packages/ignorefile/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/packages/ignorefile/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/packages/ignorefile/composer.json b/projects/packages/ignorefile/composer.json index 863b10adaf4c2..6762ce1437b77 100644 --- a/projects/packages/ignorefile/composer.json +++ b/projects/packages/ignorefile/composer.json @@ -44,7 +44,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "2.1.x-dev" + "dev-trunk": "3.0.x-dev" } } } diff --git a/projects/packages/phan-plugins/CHANGELOG.md b/projects/packages/phan-plugins/CHANGELOG.md index b3bd1ef9122b5..daece31590858 100644 --- a/projects/packages/phan-plugins/CHANGELOG.md +++ b/projects/packages/phan-plugins/CHANGELOG.md @@ -5,9 +5,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.1] - 2025-01-09 +### Added +- Enable test coverage. [#39961] + ## 0.1.0 - 2024-08-29 ### Added - Initial version. [#37585] ### Changed - Updated package dependencies. [#39004] + +[0.1.1]: https://github.com/Automattic/jetpack-phan-plugins/compare/v0.1.0...v0.1.1 diff --git a/projects/packages/phan-plugins/changelog/add-ci-php-8.4 b/projects/packages/phan-plugins/changelog/add-ci-php-8.4 deleted file mode 100644 index ddbb5f3179535..0000000000000 --- a/projects/packages/phan-plugins/changelog/add-ci-php-8.4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Work around microsoft/tolerant-php-parser not being 8.4-safe yet in test - - diff --git a/projects/packages/phan-plugins/changelog/restore-jp_test_coverage b/projects/packages/phan-plugins/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/packages/phan-plugins/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/packages/phan-plugins/changelog/update-switch-to-raw-coverage-files b/projects/packages/phan-plugins/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/packages/phan-plugins/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/packages/phpcs-filter/CHANGELOG.md b/projects/packages/phpcs-filter/CHANGELOG.md index 2a9961d988527..30766b5143102 100644 --- a/projects/packages/phpcs-filter/CHANGELOG.md +++ b/projects/packages/phpcs-filter/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 3.0.0 - 2025-01-09 +### Added +- Enable test coverage. [#39961] + +### Removed +- General: Update minimum PHP version to 7.2. [#40147] + ## 2.0.1 - 2024-08-29 ### Added - Add a doc note warning against using `0` when excluding individual sniff messages. [#37122] diff --git a/projects/packages/phpcs-filter/changelog/add-phpunit-coverage-configs b/projects/packages/phpcs-filter/changelog/add-phpunit-coverage-configs deleted file mode 100644 index 714f2593c8f4b..0000000000000 --- a/projects/packages/phpcs-filter/changelog/add-phpunit-coverage-configs +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Add missing files/dirs to phpunit coverage config. - - diff --git a/projects/packages/phpcs-filter/changelog/restore-jp_test_coverage b/projects/packages/phpcs-filter/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/packages/phpcs-filter/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/packages/phpcs-filter/changelog/update-bump_min_php_to_7.2 b/projects/packages/phpcs-filter/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/packages/phpcs-filter/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/packages/phpcs-filter/changelog/update-switch-to-raw-coverage-files b/projects/packages/phpcs-filter/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/packages/phpcs-filter/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/packages/phpcs-filter/composer.json b/projects/packages/phpcs-filter/composer.json index a0efd612a835a..f9e39c36b48bd 100644 --- a/projects/packages/phpcs-filter/composer.json +++ b/projects/packages/phpcs-filter/composer.json @@ -54,7 +54,7 @@ "prefer-stable": true, "extra": { "branch-alias": { - "dev-trunk": "2.0.x-dev" + "dev-trunk": "3.0.x-dev" } } } diff --git a/projects/packages/transport-helper/CHANGELOG.md b/projects/packages/transport-helper/CHANGELOG.md index c4615ebeec0e7..ae8baa2954f92 100644 --- a/projects/packages/transport-helper/CHANGELOG.md +++ b/projects/packages/transport-helper/CHANGELOG.md @@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.0] - 2025-01-09 +### Added +- Enable test coverage. [#39961] + +### Changed +- Backup: Added next daily backup schedule time on admin page. [#39914] +- Updated dependencies. [#40286] + +### Removed +- General: Update minimum PHP version to 7.2. [#40147] + ## [0.2.6] - 2024-10-29 ### Changed - Internal updates. [#39781] @@ -75,6 +86,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated package dependencies. +[0.3.0]: https://github.com/Automattic/jetpack-transport-helper/compare/v0.2.6...v0.3.0 [0.2.6]: https://github.com/Automattic/jetpack-transport-helper/compare/v0.2.5...v0.2.6 [0.2.5]: https://github.com/Automattic/jetpack-transport-helper/compare/v0.2.4...v0.2.5 [0.2.4]: https://github.com/Automattic/jetpack-transport-helper/compare/v0.2.3...v0.2.4 diff --git a/projects/packages/transport-helper/changelog/add-jetpack-backup-schedule-time b/projects/packages/transport-helper/changelog/add-jetpack-backup-schedule-time deleted file mode 100644 index 798d9040ba827..0000000000000 --- a/projects/packages/transport-helper/changelog/add-jetpack-backup-schedule-time +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Backup: added next daily backup schedule time on admin page diff --git a/projects/packages/transport-helper/changelog/fix-bump_composer_versions b/projects/packages/transport-helper/changelog/fix-bump_composer_versions deleted file mode 100644 index 13cbf3392f78d..0000000000000 --- a/projects/packages/transport-helper/changelog/fix-bump_composer_versions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated dependencies. diff --git a/projects/packages/transport-helper/changelog/restore-jp_test_coverage b/projects/packages/transport-helper/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/packages/transport-helper/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/packages/transport-helper/changelog/update-bump_min_php_to_7.2 b/projects/packages/transport-helper/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/packages/transport-helper/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/packages/transport-helper/changelog/update-switch-to-raw-coverage-files b/projects/packages/transport-helper/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/packages/transport-helper/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/packages/transport-helper/composer.json b/projects/packages/transport-helper/composer.json index a3a313859aaaf..92f8aa50695cc 100644 --- a/projects/packages/transport-helper/composer.json +++ b/projects/packages/transport-helper/composer.json @@ -60,7 +60,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "0.2.x-dev" + "dev-trunk": "0.3.x-dev" }, "textdomain": "jetpack-transport-helper" }, diff --git a/projects/packages/transport-helper/package.json b/projects/packages/transport-helper/package.json index d425739101614..485f78455209e 100644 --- a/projects/packages/transport-helper/package.json +++ b/projects/packages/transport-helper/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-transport-helper", - "version": "0.2.6", + "version": "0.3.0", "description": "Package to help transport server communication", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/transport-helper/#readme", "bugs": { diff --git a/projects/packages/transport-helper/src/class-package-version.php b/projects/packages/transport-helper/src/class-package-version.php index 8b0fe301b8ec2..049172db391e8 100644 --- a/projects/packages/transport-helper/src/class-package-version.php +++ b/projects/packages/transport-helper/src/class-package-version.php @@ -16,7 +16,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '0.2.6'; + const PACKAGE_VERSION = '0.3.0'; const PACKAGE_SLUG = 'transport-helper'; diff --git a/projects/github-actions/pr-is-up-to-date/changelog/force-a-release b/projects/plugins/protect/changelog/prerelease#12 similarity index 51% rename from projects/github-actions/pr-is-up-to-date/changelog/force-a-release rename to projects/plugins/protect/changelog/prerelease#12 index d4ad6c7cc3379..9aa70e3ec1f75 100644 --- a/projects/github-actions/pr-is-up-to-date/changelog/force-a-release +++ b/projects/plugins/protect/changelog/prerelease#12 @@ -1,4 +1,5 @@ Significance: patch Type: changed +Comment: Updated composer.lock. + -Update dependencies. diff --git a/projects/plugins/protect/composer.lock b/projects/plugins/protect/composer.lock index 920a59e6563a4..a82bcb657ad97 100644 --- a/projects/plugins/protect/composer.lock +++ b/projects/plugins/protect/composer.lock @@ -1810,7 +1810,7 @@ "dist": { "type": "path", "url": "../../packages/transport-helper", - "reference": "4353e72d5e1254cfd1f61e4cd2b81e415550c841" + "reference": "6ff89ede12aa404b60a18318b84eb8425f1d2352" }, "require": { "automattic/jetpack-backup-helper-script-manager": "@dev", @@ -1836,7 +1836,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "0.2.x-dev" + "dev-trunk": "0.3.x-dev" }, "textdomain": "jetpack-transport-helper" }, From 06b5bdefbd19cbc3cc63f7606eb1e8834ecf5bec Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Thu, 9 Jan 2025 12:24:13 -0700 Subject: [PATCH 005/420] WC Analytics: Disable session cookie that was breaking cache (#40937) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Disable setcookie and record * Add changelogs * Comment problematic code regarding cache --------- Co-authored-by: Miguel Pérez Pellicer <5908855+puntope@users.noreply.github.com> --- .../disable-woo_analytics_session_cookie | 4 +++ .../src/class-universal.php | 33 ++++++++++--------- .../src/class-woo-analytics-trait.php | 13 +++++--- .../disable-woo_analytics_session_cookie | 4 +++ 4 files changed, 34 insertions(+), 20 deletions(-) create mode 100644 projects/packages/woocommerce-analytics/changelog/disable-woo_analytics_session_cookie create mode 100644 projects/plugins/jetpack/changelog/disable-woo_analytics_session_cookie diff --git a/projects/packages/woocommerce-analytics/changelog/disable-woo_analytics_session_cookie b/projects/packages/woocommerce-analytics/changelog/disable-woo_analytics_session_cookie new file mode 100644 index 0000000000000..2bc202ff7f8f1 --- /dev/null +++ b/projects/packages/woocommerce-analytics/changelog/disable-woo_analytics_session_cookie @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Temporarily disable setcookie to avoid caching issues. diff --git a/projects/packages/woocommerce-analytics/src/class-universal.php b/projects/packages/woocommerce-analytics/src/class-universal.php index 35a9ef63390a6..439806ad4e851 100644 --- a/projects/packages/woocommerce-analytics/src/class-universal.php +++ b/projects/packages/woocommerce-analytics/src/class-universal.php @@ -82,21 +82,24 @@ public function initialize_woocommerceanalytics_session() { $session_id = wp_generate_uuid4(); $this->session_id = $session_id; $this->landing_page = sanitize_url( wp_unslash( ( empty( $_SERVER['HTTPS'] ) ? 'http' : 'https' ) . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]" ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidatedNotSanitized -- actually escaped with sanitize_url. - setcookie( - 'woocommerceanalytics_session', - wp_json_encode( - array( - 'session_id' => $this->session_id, - 'landing_page' => $this->landing_page, - ) - ), - 0, - COOKIEPATH, - COOKIE_DOMAIN, - is_ssl(), - true - ); - $this->record_event( 'woocommerceanalytics_session_started' ); + // Disabled the below temporarily to avoid caching issues. + // phpcs:disable Squiz.PHP.CommentedOutCode.Found + // setcookie( + // 'woocommerceanalytics_session', + // wp_json_encode( + // array( + // 'session_id' => $this->session_id, + // 'landing_page' => $this->landing_page, + // ) + // ), + // 0, + // COOKIEPATH, + // COOKIE_DOMAIN, + // is_ssl(), + // true + // ); + // $this->record_event( 'woocommerceanalytics_session_started' ); + // phpcs:enable Squiz.PHP.CommentedOutCode.Found } } diff --git a/projects/packages/woocommerce-analytics/src/class-woo-analytics-trait.php b/projects/packages/woocommerce-analytics/src/class-woo-analytics-trait.php index 7e6d3c96b22b8..474ab420dc0ca 100644 --- a/projects/packages/woocommerce-analytics/src/class-woo-analytics-trait.php +++ b/projects/packages/woocommerce-analytics/src/class-woo-analytics-trait.php @@ -263,16 +263,19 @@ public function find_cart_checkout_content_sources() { * @return array Array of standard event props. */ public function get_common_properties() { - $session_data = json_decode( sanitize_text_field( wp_unslash( $_COOKIE['woocommerceanalytics_session'] ?? '' ) ), true ) ?? array(); - $session_id = sanitize_text_field( $session_data['session_id'] ?? $this->session_id ); - $landing_page = sanitize_url( $session_data['landing_page'] ?? $this->landing_page ); + // phpcs:disable Squiz.PHP.CommentedOutCode.Found + // Disabled the below temporarily to avoid caching issues. + // $session_data = json_decode( sanitize_text_field( wp_unslash( $_COOKIE['woocommerceanalytics_session'] ?? '' ) ), true ) ?? array(); + // $session_id = sanitize_text_field( $session_data['session_id'] ?? $this->session_id ); + // $landing_page = sanitize_url( $session_data['landing_page'] ?? $this->landing_page ); + // phpcs:enable Squiz.PHP.CommentedOutCode.Found $site_info = array( - 'session_id' => $session_id, + 'session_id' => null, 'blog_id' => Jetpack_Connection::get_site_id(), 'store_id' => defined( '\\WC_Install::STORE_ID_OPTION' ) ? get_option( \WC_Install::STORE_ID_OPTION ) : false, 'ui' => $this->get_user_id(), 'url' => home_url(), - 'landing_page' => $landing_page, + 'landing_page' => null, 'woo_version' => WC()->version, 'wp_version' => get_bloginfo( 'version' ), 'store_admin' => in_array( array( 'administrator', 'shop_manager' ), wp_get_current_user()->roles, true ) ? 1 : 0, diff --git a/projects/plugins/jetpack/changelog/disable-woo_analytics_session_cookie b/projects/plugins/jetpack/changelog/disable-woo_analytics_session_cookie new file mode 100644 index 0000000000000..81fe027e3740b --- /dev/null +++ b/projects/plugins/jetpack/changelog/disable-woo_analytics_session_cookie @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +WC Analytics: Temporarily disable setcookie to avoid caching issues. From 4d4b0eab272e2ddc46f873294f218794fcaedeaa Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Thu, 9 Jan 2025 12:27:28 -0700 Subject: [PATCH 006/420] Backport automattic-for-agencies-client 0.4.0 Changes (#40936) * Changelog and readme.txt edits. * Changelog tweaks --- projects/packages/sync/CHANGELOG.md | 5 ++ .../update-class-search-taxonomies-kb-article | 4 -- projects/packages/sync/composer.json | 2 +- .../sync/src/class-package-version.php | 2 +- .../CHANGELOG.md | 49 ++++++++----------- .../automattic-for-agencies-client.php | 2 +- .../changelog/add-ci-always-process-coverage | 5 -- .../changelog/fix-bump_composer_versions | 4 -- .../changelog/fix-playwright_install_tweaks | 4 -- .../renovate-automattic-color-studio-4.x | 4 -- .../changelog/renovate-brain-monkey-2.x | 4 -- .../changelog/renovate-config-3.x | 4 -- .../changelog/renovate-lock-file-maintenance | 4 -- .../renovate-lock-file-maintenance#6 | 4 -- .../changelog/renovate-playwright-monorepo | 4 -- .../changelog/renovate-wordpress-monorepo | 4 -- .../changelog/renovate-wordpress-monorepo#2 | 4 -- .../changelog/renovate-wordpress-monorepo#3 | 4 -- .../changelog/update-bump_min_php_to_7.2 | 4 -- .../changelog/update-bump_min_wp_to_6.6 | 4 -- .../changelog/update-eslint-9 | 5 -- .../composer.json | 2 +- .../composer.lock | 4 +- .../automattic-for-agencies-client/readme.txt | 20 +++++--- .../changelog/prerelease#7} | 0 projects/plugins/backup/composer.lock | 4 +- .../changelog/prerelease | 0 projects/plugins/boost/composer.lock | 4 +- .../changelog/prerelease} | 2 +- projects/plugins/jetpack/composer.lock | 4 +- .../changelog/prerelease#9} | 0 .../plugins/mu-wpcom-plugin/composer.lock | 4 +- .../changelog/prerelease#13} | 0 projects/plugins/protect/composer.lock | 4 +- .../changelog/prerelease#20} | 0 projects/plugins/search/composer.lock | 4 +- .../changelog/prerelease#12} | 0 projects/plugins/social/composer.lock | 4 +- .../changelog/prerelease#4} | 0 projects/plugins/starter-plugin/composer.lock | 4 +- .../changelog/prerelease#19} | 0 projects/plugins/videopress/composer.lock | 4 +- .../changelog/prerelease#5} | 0 projects/plugins/wpcomsh/composer.lock | 4 +- 44 files changed, 66 insertions(+), 128 deletions(-) delete mode 100644 projects/packages/sync/changelog/update-class-search-taxonomies-kb-article delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/add-ci-always-process-coverage delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/fix-bump_composer_versions delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/fix-playwright_install_tweaks delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-automattic-color-studio-4.x delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-brain-monkey-2.x delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-config-3.x delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance#6 delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-playwright-monorepo delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#2 delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#3 delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_wp_to_6.6 delete mode 100644 projects/plugins/automattic-for-agencies-client/changelog/update-eslint-9 rename projects/plugins/{automattic-for-agencies-client/changelog/fix-bump_composer_versions_round2#2 => backup/changelog/prerelease#7} (100%) rename projects/plugins/{automattic-for-agencies-client => boost}/changelog/prerelease (100%) rename projects/plugins/{automattic-for-agencies-client/changelog/update-composer => jetpack/changelog/prerelease} (79%) rename projects/plugins/{automattic-for-agencies-client/changelog/prerelease#2 => mu-wpcom-plugin/changelog/prerelease#9} (100%) rename projects/plugins/{automattic-for-agencies-client/changelog/prerelease#3 => protect/changelog/prerelease#13} (100%) rename projects/plugins/{automattic-for-agencies-client/changelog/prerelease#4 => search/changelog/prerelease#20} (100%) rename projects/plugins/{automattic-for-agencies-client/changelog/prerelease#5 => social/changelog/prerelease#12} (100%) rename projects/plugins/{automattic-for-agencies-client/changelog/renovate-brain-monkey-2.x#2 => starter-plugin/changelog/prerelease#4} (100%) rename projects/plugins/{automattic-for-agencies-client/changelog/renovate-lock-file-maintenance#7 => videopress/changelog/prerelease#19} (100%) rename projects/plugins/{automattic-for-agencies-client/changelog/update-bump_min_php_to_7.2#2 => wpcomsh/changelog/prerelease#5} (100%) diff --git a/projects/packages/sync/CHANGELOG.md b/projects/packages/sync/CHANGELOG.md index e34df7d0cfa36..35e317486a9e4 100644 --- a/projects/packages/sync/CHANGELOG.md +++ b/projects/packages/sync/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.3.0] - 2025-01-09 +### Added +- Instant Search: add taxonomies for a8c-support-theme kb_article cpt. [#38660] + ## [4.2.0] - 2024-12-23 ### Added - Sync:Add specific key for full sync actions [#40566] @@ -1363,6 +1367,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Packages: Move sync to a classmapped package +[4.3.0]: https://github.com/Automattic/jetpack-sync/compare/v4.2.0...v4.3.0 [4.2.0]: https://github.com/Automattic/jetpack-sync/compare/v4.1.1...v4.2.0 [4.1.1]: https://github.com/Automattic/jetpack-sync/compare/v4.1.0...v4.1.1 [4.1.0]: https://github.com/Automattic/jetpack-sync/compare/v4.0.2...v4.1.0 diff --git a/projects/packages/sync/changelog/update-class-search-taxonomies-kb-article b/projects/packages/sync/changelog/update-class-search-taxonomies-kb-article deleted file mode 100644 index f73fd274cec7b..0000000000000 --- a/projects/packages/sync/changelog/update-class-search-taxonomies-kb-article +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Instant Search: add taxonomies for a8c-support-theme kb_article cpt. diff --git a/projects/packages/sync/composer.json b/projects/packages/sync/composer.json index eaf2a91548582..65e577e38f32f 100644 --- a/projects/packages/sync/composer.json +++ b/projects/packages/sync/composer.json @@ -62,7 +62,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/packages/sync/src/class-package-version.php b/projects/packages/sync/src/class-package-version.php index 9f356e4a48a78..3d9b7ffd3a052 100644 --- a/projects/packages/sync/src/class-package-version.php +++ b/projects/packages/sync/src/class-package-version.php @@ -12,7 +12,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '4.2.0'; + const PACKAGE_VERSION = '4.3.0'; const PACKAGE_SLUG = 'sync'; diff --git a/projects/plugins/automattic-for-agencies-client/CHANGELOG.md b/projects/plugins/automattic-for-agencies-client/CHANGELOG.md index 1a7ede7096ac7..c7a38bfeaf865 100644 --- a/projects/plugins/automattic-for-agencies-client/CHANGELOG.md +++ b/projects/plugins/automattic-for-agencies-client/CHANGELOG.md @@ -5,46 +5,42 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.4.0 - 2025-01-09 +### Changed +- Updated dependencies. [#40286] +- Updated package dependencies. [#40116] [#40258] [#40288] [#40363] [#40515] [#40564] [#40693] [#40792] [#40815] + +### Removed +- General: Update minimum PHP version to 7.2. [#40147] +- General: Update minimum WordPress version to 6.6. [#40146] + +### Fixed +- E2E Tests: Only install single browser used by Playwright. [#40827] + ## 0.3.0 - 2024-11-11 ### Added - Enable test coverage. [#39961] ### Changed -- General: indicate compatibility with the upcoming version of WordPress - 6.6. [#37962] -- General: indicate compatibility with the upcoming version of WordPress - 6.7. [#39786] +- General: Indicate compatibility with the upcoming version of WordPress - 6.6. [#37962] +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. [#39786] - Only include `wp-polyfill` as a script dependency when needed. [#39629] -- Updated package dependencies. [#38132] -- Updated package dependencies. [#38228] -- Updated package dependencies. [#38235] -- Updated package dependencies. [#38662] -- Updated package dependencies. [#38822] -- Updated package dependencies. [#39004] -- Updated package dependencies. [#39111] -- Updated package dependencies. [#39176] -- Updated package dependencies. [#39278] -- Updated package dependencies. [#39288] -- Updated package dependencies. [#39302] -- Updated package dependencies. [#39332] -- Updated package dependencies. [#39594] -- Updated package dependencies. [#39653] -- Updated package dependencies. [#39707] -- Updated package dependencies. [#39999] -- Updated package dependencies. [#40060] +- Updated package dependencies. [#38132] [#38228] [#38235] [#38662] [#38822] [#39004] [#39111] [#39176] [#39278] [#39288] [#39302] [#39332] [#39594] [#39653] [#39707] [#39999] [#40060] ### Removed - Connection: Removed deprecated method features_available [#39442] - Connection: Removed features_enabled deprecated method [#39475] -- General: update WordPress version requirements to WordPress 6.5. [#38382] +- General: Update WordPress version requirements to WordPress 6.5. [#38382] ### Fixed - Lossless image optimization of images in projects/plugins [subdirectories from a* through social] [#38573] ## 0.2.1 - 2024-06-12 ### Changed -- Dashboard: switch to a smaller and faster dependency (`clsx`) to handle class names. [#37708] -- Dashboard: update the connection screen's messaging to make our Terms of Service clearer. [#37536] -- Dependencies: remove the 'jetpack-identity-crisis' dependency. [#36968] -- Dependencies: update multiple dependencies. [#37669], [#37767], [#37776], [#37796] +- Dashboard: Switch to a smaller and faster dependency (`clsx`) to handle class names. [#37708] +- Dashboard: Update the connection screen's messaging to make our Terms of Service clearer. [#37536] +- Dependencies: Remove the 'jetpack-identity-crisis' dependency. [#36968] +- Dependencies: Update multiple dependencies. [#37669] [#37767] [#37776] [#37796] ## 0.2.0 - 2024-05-28 ### Added @@ -72,10 +68,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - General: update WordPress version requirements to WordPress 6.4. [#37047] - General: use wp_admin_notice function introduced in WP 6.4 to display notices. [#37051] - Updated details about sharing data with WordPress.com [#37039] -- Updated package dependencies. [#36585] -- Updated package dependencies. [#36760] -- Updated package dependencies. [#36775] -- Updated package dependencies. [#36788] +- Updated package dependencies. [#36585] [#36760] [#36775] [#36788] ### Removed - Removed the Jetpack-branded header and footer from the plugin. [#36930] diff --git a/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php b/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php index dbfda1ad822a5..376c956ceeafa 100644 --- a/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php +++ b/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php @@ -4,7 +4,7 @@ * Plugin Name: Automattic for Agencies Client * Plugin URI: https://wordpress.org/plugins/automattic-for-agencies-client * Description: Securely connect your clients’ sites to the Automattic for Agencies Sites Dashboard. Manage your sites from one place and see what needs attention. - * Version: 0.3.0 + * Version: 0.4.0 * Author: Automattic * Author URI: https://automattic.com/for-agencies/ * License: GPLv2 or later diff --git a/projects/plugins/automattic-for-agencies-client/changelog/add-ci-always-process-coverage b/projects/plugins/automattic-for-agencies-client/changelog/add-ci-always-process-coverage deleted file mode 100644 index 387ca599c4182..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/add-ci-always-process-coverage +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Always run JS coverage, even if PHP coverage fails. - - diff --git a/projects/plugins/automattic-for-agencies-client/changelog/fix-bump_composer_versions b/projects/plugins/automattic-for-agencies-client/changelog/fix-bump_composer_versions deleted file mode 100644 index 13cbf3392f78d..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/fix-bump_composer_versions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/fix-playwright_install_tweaks b/projects/plugins/automattic-for-agencies-client/changelog/fix-playwright_install_tweaks deleted file mode 100644 index ebeba9b69f473..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/fix-playwright_install_tweaks +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -E2E Tests: Only install single browser used by Playwright. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-automattic-color-studio-4.x b/projects/plugins/automattic-for-agencies-client/changelog/renovate-automattic-color-studio-4.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-automattic-color-studio-4.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-brain-monkey-2.x b/projects/plugins/automattic-for-agencies-client/changelog/renovate-brain-monkey-2.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-brain-monkey-2.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-config-3.x b/projects/plugins/automattic-for-agencies-client/changelog/renovate-config-3.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-config-3.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance b/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance#6 b/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance#6 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance#6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-playwright-monorepo b/projects/plugins/automattic-for-agencies-client/changelog/renovate-playwright-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-playwright-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo b/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#2 b/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#3 b/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#3 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_php_to_7.2 b/projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_wp_to_6.6 b/projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_wp_to_6.6 deleted file mode 100644 index b5daa14e55bc4..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_wp_to_6.6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum WordPress version to 6.6. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/update-eslint-9 b/projects/plugins/automattic-for-agencies-client/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/plugins/automattic-for-agencies-client/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/plugins/automattic-for-agencies-client/composer.json b/projects/plugins/automattic-for-agencies-client/composer.json index 4ac8a22093967..8c30216789f5f 100644 --- a/projects/plugins/automattic-for-agencies-client/composer.json +++ b/projects/plugins/automattic-for-agencies-client/composer.json @@ -77,6 +77,6 @@ "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true }, - "autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_automattic_for_agencies_clientⓥ0_3_0" + "autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_automattic_for_agencies_clientⓥ0_4_0" } } diff --git a/projects/plugins/automattic-for-agencies-client/composer.lock b/projects/plugins/automattic-for-agencies-client/composer.lock index 11c16d2a78dc8..32b841da29ffb 100644 --- a/projects/plugins/automattic-for-agencies-client/composer.lock +++ b/projects/plugins/automattic-for-agencies-client/composer.lock @@ -905,7 +905,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -938,7 +938,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/readme.txt b/projects/plugins/automattic-for-agencies-client/readme.txt index a804af627e859..b60857a50affc 100644 --- a/projects/plugins/automattic-for-agencies-client/readme.txt +++ b/projects/plugins/automattic-for-agencies-client/readme.txt @@ -44,17 +44,23 @@ Once connected, your site will display within Automattic for Agencies. 1. Manage your connection to the agency dashboard from the Settings screen in your WordPress dashboard. == Changelog == -### 0.3.0 - 2024-11-11 +### 0.4.0 - 2025-01-09 #### Changed -- General: indicate compatibility with the upcoming version of WordPress - 6.7. -- Only include `wp-polyfill` as a script dependency when needed. +- Updated dependencies. +- Updated package dependencies. +- Updated package dependencies. +- Updated package dependencies. +- Updated package dependencies. +- Updated package dependencies. +- Updated package dependencies. +- Updated package dependencies. +- Updated package dependencies. - Updated package dependencies. #### Removed -- Connection: Removed deprecated method features_available -- Connection: Removed features_enabled deprecated method -- General: update WordPress version requirements to WordPress 6.5. +- General: Update minimum PHP version to 7.2. +- General: Update minimum WordPress version to 6.6. #### Fixed -- Lossless image optimization of images +- E2E Tests: Only install single browser used by Playwright. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/fix-bump_composer_versions_round2#2 b/projects/plugins/backup/changelog/prerelease#7 similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/fix-bump_composer_versions_round2#2 rename to projects/plugins/backup/changelog/prerelease#7 diff --git a/projects/plugins/backup/composer.lock b/projects/plugins/backup/composer.lock index 89ab9018ca367..83ba821aacc8f 100644 --- a/projects/plugins/backup/composer.lock +++ b/projects/plugins/backup/composer.lock @@ -1822,7 +1822,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1855,7 +1855,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/prerelease b/projects/plugins/boost/changelog/prerelease similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/prerelease rename to projects/plugins/boost/changelog/prerelease diff --git a/projects/plugins/boost/composer.lock b/projects/plugins/boost/composer.lock index 0f419db440f0b..89b3bf090b46b 100644 --- a/projects/plugins/boost/composer.lock +++ b/projects/plugins/boost/composer.lock @@ -1876,7 +1876,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1909,7 +1909,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/update-composer b/projects/plugins/jetpack/changelog/prerelease similarity index 79% rename from projects/plugins/automattic-for-agencies-client/changelog/update-composer rename to projects/plugins/jetpack/changelog/prerelease index 9aa70e3ec1f75..a1c1831fa1ef7 100644 --- a/projects/plugins/automattic-for-agencies-client/changelog/update-composer +++ b/projects/plugins/jetpack/changelog/prerelease @@ -1,5 +1,5 @@ Significance: patch -Type: changed +Type: other Comment: Updated composer.lock. diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index f823169790931..9d9c35b72b5c9 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -2812,7 +2812,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -2845,7 +2845,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/prerelease#2 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#9 similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/prerelease#2 rename to projects/plugins/mu-wpcom-plugin/changelog/prerelease#9 diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index 886859d56f940..e722837776d98 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -1589,7 +1589,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1622,7 +1622,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/prerelease#3 b/projects/plugins/protect/changelog/prerelease#13 similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/prerelease#3 rename to projects/plugins/protect/changelog/prerelease#13 diff --git a/projects/plugins/protect/composer.lock b/projects/plugins/protect/composer.lock index a82bcb657ad97..69f202ac5d795 100644 --- a/projects/plugins/protect/composer.lock +++ b/projects/plugins/protect/composer.lock @@ -1732,7 +1732,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1765,7 +1765,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/prerelease#4 b/projects/plugins/search/changelog/prerelease#20 similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/prerelease#4 rename to projects/plugins/search/changelog/prerelease#20 diff --git a/projects/plugins/search/composer.lock b/projects/plugins/search/composer.lock index 65e3147ffcde3..57353d0219537 100644 --- a/projects/plugins/search/composer.lock +++ b/projects/plugins/search/composer.lock @@ -1827,7 +1827,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1860,7 +1860,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/prerelease#5 b/projects/plugins/social/changelog/prerelease#12 similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/prerelease#5 rename to projects/plugins/social/changelog/prerelease#12 diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index d703c4a28382e..c6bfa685897fd 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -1819,7 +1819,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1852,7 +1852,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-brain-monkey-2.x#2 b/projects/plugins/starter-plugin/changelog/prerelease#4 similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/renovate-brain-monkey-2.x#2 rename to projects/plugins/starter-plugin/changelog/prerelease#4 diff --git a/projects/plugins/starter-plugin/composer.lock b/projects/plugins/starter-plugin/composer.lock index 1d34db41069a8..433ef4b7fbeb8 100644 --- a/projects/plugins/starter-plugin/composer.lock +++ b/projects/plugins/starter-plugin/composer.lock @@ -1672,7 +1672,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1705,7 +1705,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance#7 b/projects/plugins/videopress/changelog/prerelease#19 similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance#7 rename to projects/plugins/videopress/changelog/prerelease#19 diff --git a/projects/plugins/videopress/composer.lock b/projects/plugins/videopress/composer.lock index 6a9e6604f9891..e63e4b6799751 100644 --- a/projects/plugins/videopress/composer.lock +++ b/projects/plugins/videopress/composer.lock @@ -1672,7 +1672,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1705,7 +1705,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_php_to_7.2#2 b/projects/plugins/wpcomsh/changelog/prerelease#5 similarity index 100% rename from projects/plugins/automattic-for-agencies-client/changelog/update-bump_min_php_to_7.2#2 rename to projects/plugins/wpcomsh/changelog/prerelease#5 diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index a403ee98f1463..97883d9e16e72 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -1791,7 +1791,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "ece2cb5be16c8bc399fb6681a61ffa42b42e3cf5" + "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1824,7 +1824,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.2.x-dev" + "dev-trunk": "4.3.x-dev" }, "dependencies": { "test-only": [ From 528db4f8ebe72b0935c53828c3f8a0fc16459a94 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:48:27 -0700 Subject: [PATCH 007/420] Backport jetpack 14.2.1 changes (#40940) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Changelog and readme.txt edits. * Changelog tweaks * WC Analytics: Disable session cookie that was breaking cache (#40937) * Disable setcookie and record * Add changelogs * Comment problematic code regarding cache --------- Co-authored-by: Miguel Pérez Pellicer <5908855+puntope@users.noreply.github.com> * Bump version to 14.2.1 * Write changelogs * Bump stable tag in release branch * Release packages/woocommerce-analytics 0.4.1 --------- Co-authored-by: Miguel Pérez Pellicer <5908855+puntope@users.noreply.github.com> --- projects/packages/woocommerce-analytics/CHANGELOG.md | 5 +++++ .../src/class-woocommerce-analytics.php | 2 +- projects/plugins/jetpack/CHANGELOG.md | 4 ++++ projects/plugins/jetpack/composer.json | 2 +- projects/plugins/jetpack/jetpack.php | 4 ++-- projects/plugins/jetpack/package.json | 2 +- projects/plugins/jetpack/readme.txt | 6 +++++- 7 files changed, 19 insertions(+), 6 deletions(-) diff --git a/projects/packages/woocommerce-analytics/CHANGELOG.md b/projects/packages/woocommerce-analytics/CHANGELOG.md index 34193fea647ae..4848a5a0b99f6 100644 --- a/projects/packages/woocommerce-analytics/CHANGELOG.md +++ b/projects/packages/woocommerce-analytics/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.1] - 2025-01-09 +### Fixed +- Temporarily disable setcookie to avoid caching issues. + ## [0.4.0] - 2025-01-06 ### Added - Add Search Event & landing Page support. [#40698] @@ -83,6 +87,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix namespace issue with WooCommerce class reference. [#35857] - General: bail early when WooCommerce is not active. [#36278] +[0.4.1]: https://github.com/Automattic/woocommerce-analytics/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/Automattic/woocommerce-analytics/compare/v0.3.1...v0.4.0 [0.3.1]: https://github.com/Automattic/woocommerce-analytics/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/Automattic/woocommerce-analytics/compare/v0.2.0...v0.3.0 diff --git a/projects/packages/woocommerce-analytics/src/class-woocommerce-analytics.php b/projects/packages/woocommerce-analytics/src/class-woocommerce-analytics.php index ce14a813278d4..6fd9295a75fd1 100644 --- a/projects/packages/woocommerce-analytics/src/class-woocommerce-analytics.php +++ b/projects/packages/woocommerce-analytics/src/class-woocommerce-analytics.php @@ -19,7 +19,7 @@ class Woocommerce_Analytics { /** * Package version. */ - const PACKAGE_VERSION = '0.4.0'; + const PACKAGE_VERSION = '0.4.1'; /** * Initializer. diff --git a/projects/plugins/jetpack/CHANGELOG.md b/projects/plugins/jetpack/CHANGELOG.md index 982301a91bbf2..b03bc9fa4105e 100644 --- a/projects/plugins/jetpack/CHANGELOG.md +++ b/projects/plugins/jetpack/CHANGELOG.md @@ -2,6 +2,10 @@ ### This is a list detailing changes for all Jetpack releases. +## 14.2.1 - 2025-01-09 +### Bug fixes +- WC Analytics: Temporarily disable setcookie to avoid caching issues. [#40937] + ## 14.2 - 2025-01-07 ### Enhancements - Social: Improve Jetpack Likes behavior for better theme integration if the post has likes. [#40544] diff --git a/projects/plugins/jetpack/composer.json b/projects/plugins/jetpack/composer.json index bd613184927c5..a15a3b5c01015 100644 --- a/projects/plugins/jetpack/composer.json +++ b/projects/plugins/jetpack/composer.json @@ -106,7 +106,7 @@ "platform": { "ext-intl": "0.0.0" }, - "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_2", + "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_2_1", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true diff --git a/projects/plugins/jetpack/jetpack.php b/projects/plugins/jetpack/jetpack.php index ceca5abe0be20..db680f6040026 100644 --- a/projects/plugins/jetpack/jetpack.php +++ b/projects/plugins/jetpack/jetpack.php @@ -4,7 +4,7 @@ * Plugin URI: https://jetpack.com * Description: Security, performance, and marketing tools made by WordPress experts. Jetpack keeps your site protected so you can focus on more important things. * Author: Automattic - * Version: 14.2 + * Version: 14.2.1 * Author URI: https://jetpack.com * License: GPL2+ * Text Domain: jetpack @@ -34,7 +34,7 @@ define( 'JETPACK__MINIMUM_WP_VERSION', '6.6' ); define( 'JETPACK__MINIMUM_PHP_VERSION', '7.2' ); -define( 'JETPACK__VERSION', '14.2' ); +define( 'JETPACK__VERSION', '14.2.1' ); /** * Constant used to fetch the connection owner token diff --git a/projects/plugins/jetpack/package.json b/projects/plugins/jetpack/package.json index aaf952434724d..80ab7460baf93 100644 --- a/projects/plugins/jetpack/package.json +++ b/projects/plugins/jetpack/package.json @@ -1,6 +1,6 @@ { "name": "Jetpack", - "version": "14.2.0", + "version": "14.2.1", "private": true, "description": "[Jetpack](https://jetpack.com/) is a WordPress plugin that supercharges your self-hosted WordPress site with the awesome cloud power of [WordPress.com](https://wordpress.com).", "homepage": "https://jetpack.com", diff --git a/projects/plugins/jetpack/readme.txt b/projects/plugins/jetpack/readme.txt index 99e34c13ea8eb..02a16ca255a97 100644 --- a/projects/plugins/jetpack/readme.txt +++ b/projects/plugins/jetpack/readme.txt @@ -1,7 +1,7 @@ === Jetpack - WP Security, Backup, Speed, & Growth === Contributors: automattic, adamkheckler, adrianmoldovanwp, aduth, akirk, allendav, alternatekev, andy, annamcphee, annezazu, apeatling, arcangelini, arsihasi, azaozz, barry, batmoo, beaulebens, bindlegirl, biskobe, bjorsch, blobaugh, brbrr, brileyhooper, cainm, cena, cfinke, cgastrell, chaselivingston, chellycat, clickysteve, csonnek, danielbachhuber, daniloercoli, davoraltman, delawski, designsimply, dkmyta, dllh, drawmyface, dsmart, dun2mis, dzver, ebinnion, egregor, eliorivero, enej, eoigal, erania-pinnera, ethitter, fgiannar, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, hypertextranch, iammattthomas, iandunn, joen, jblz, jeffgolenski, jeherve, jenhooks, jenia, jessefriedman, jgs, jkudish, jmdodd, joanrho, johnjamesjacoby, jshreve, kbrownkd, keoshi, koke, kraftbj, lancewillett, leogermani, lhkowalski, lschuyler, macmanx, martinremy, matt, mattwiebe, matveb, maverick3x6, mcsf, mdawaffe, mdbitz, MichaelArestad, migueluy, miguelxavierpenha, mikeyarce, mkaz, nancythanki, nickmomrik, njweller, nunyvega, obenland, oskosk, pento, professor44, rachelsquirrel, rdcoll, renatoagds, retrofox, richardmtl, richardmuscat, robertbpugh, roccotripaldi, ryancowles, samhotchkiss, samiff, scarstocea, scottsweb, sdixon194, sdquirk, sermitr, simison, stephdau, thehenridev, tmoorewp, tyxla, Viper007Bond, westi, williamvianas, wpkaren, yoavf, zinigor Tags: Security, backup, malware, scan, performance -Stable tag: 14.1 +Stable tag: 14.2 Requires at least: 6.6 Requires PHP: 7.2 Tested up to: 6.7 @@ -326,6 +326,10 @@ Jetpack Backup can do a full website migration to a new host, migrate theme file == Changelog == +## 14.2.1 - 2025-01-09 +### Bug fixes +- WC Analytics: Temporarily disable setcookie to avoid caching issues. + ### 14.2 - 2025-01-07 #### Enhancements - Social: Improve Jetpack Likes behavior for better theme integration if the post has likes. From 94841d73de5d676b120e3821ebf281ac814920f5 Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Fri, 10 Jan 2025 10:29:43 +0200 Subject: [PATCH 008/420] Forms: Fix success message color inside a dark Cover block (#40917) * Forms: Fix success message color inside a dark Cover block * add changelog entry --- .../forms/changelog/fix-form-go-back-color-success-message | 4 ++++ projects/packages/forms/src/contact-form/css/grunion.css | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 projects/packages/forms/changelog/fix-form-go-back-color-success-message diff --git a/projects/packages/forms/changelog/fix-form-go-back-color-success-message b/projects/packages/forms/changelog/fix-form-go-back-color-success-message new file mode 100644 index 0000000000000..cbcbf6b8b5f1d --- /dev/null +++ b/projects/packages/forms/changelog/fix-form-go-back-color-success-message @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Fix success message color inside a dark Cover block diff --git a/projects/packages/forms/src/contact-form/css/grunion.css b/projects/packages/forms/src/contact-form/css/grunion.css index 885326a247da1..ddd9335237fbc 100644 --- a/projects/packages/forms/src/contact-form/css/grunion.css +++ b/projects/packages/forms/src/contact-form/css/grunion.css @@ -183,7 +183,7 @@ .contact-form-submission .go-back-message .link { font-weight: 200; - color: #000; + color: inherit; } .contact-form-submission .field-name { From 10d1172a47974524ec98386b3a56aaf1497367c2 Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Fri, 10 Jan 2025 10:31:22 +0200 Subject: [PATCH 009/420] Forms: Update default URL field label to match front-end (#40921) * Forms: Update default URL field label to match front-end * add website keyword * feedback --- .../changelog/forms-update-default-url-field-label-value | 4 ++++ .../forms/src/blocks/contact-form/child-blocks.js | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 projects/packages/forms/changelog/forms-update-default-url-field-label-value diff --git a/projects/packages/forms/changelog/forms-update-default-url-field-label-value b/projects/packages/forms/changelog/forms-update-default-url-field-label-value new file mode 100644 index 0000000000000..bc41045c4ecee --- /dev/null +++ b/projects/packages/forms/changelog/forms-update-default-url-field-label-value @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Update default URL field label to match front-end diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index 1c33e75cb7a81..151ec195ce1b1 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -410,7 +410,12 @@ export const childBlocks = [ settings: { ...FieldDefaults, title: __( 'URL Field', 'jetpack-forms' ), - keywords: [ 'url', __( 'internet page', 'jetpack-forms' ), 'link' ], + keywords: [ + __( 'url', 'jetpack-forms' ), + __( 'internet page', 'jetpack-forms' ), + __( 'link', 'jetpack-forms' ), + __( 'website', 'jetpack-forms' ), + ], description: __( 'Collect a website address from your site visitors.', 'jetpack-forms' ), icon: renderMaterialIcon( <> @@ -430,7 +435,7 @@ export const childBlocks = [ ...FieldDefaults.attributes, label: { type: 'string', - default: 'URL', + default: __( 'Website', 'jetpack-forms' ), }, }, }, From 3374c193b10fdffe70fa68fc81a76208a1172730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20M=C3=A1rk=20Juh=C3=A1sz?= <36671565+gmjuhasz@users.noreply.github.com> Date: Fri, 10 Jan 2025 10:12:43 +0100 Subject: [PATCH 010/420] Social: Fix license activation message showing for paid users (#40931) * Show the license message only when they do not have paid features * changelog --- .../fix-social-show-pricing-page-default-value | 4 ++++ .../src/js/components/admin-page/header/index.jsx | 10 ++-------- 2 files changed, 6 insertions(+), 8 deletions(-) create mode 100644 projects/plugins/social/changelog/fix-social-show-pricing-page-default-value diff --git a/projects/plugins/social/changelog/fix-social-show-pricing-page-default-value b/projects/plugins/social/changelog/fix-social-show-pricing-page-default-value new file mode 100644 index 0000000000000..9eccf7666d154 --- /dev/null +++ b/projects/plugins/social/changelog/fix-social-show-pricing-page-default-value @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed an issue where we showed the license message even with a plan diff --git a/projects/plugins/social/src/js/components/admin-page/header/index.jsx b/projects/plugins/social/src/js/components/admin-page/header/index.jsx index 83ba6bc438f9d..31e52ebf1bd64 100644 --- a/projects/plugins/social/src/js/components/admin-page/header/index.jsx +++ b/projects/plugins/social/src/js/components/admin-page/header/index.jsx @@ -1,17 +1,11 @@ -import { store as socialStore } from '@automattic/jetpack-publicize-components'; +import { hasSocialPaidFeatures } from '@automattic/jetpack-publicize-components'; import { getMyJetpackUrl } from '@automattic/jetpack-script-data'; -import { useSelect } from '@wordpress/data'; import { createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import Logo from './../../logo'; import styles from './styles.module.scss'; const AdminPageHeader = () => { - const { showPricingPage } = useSelect( select => { - return { - showPricingPage: select( socialStore ).getSocialPluginSettings().show_pricing_page, - }; - } ); const activateLicenseUrl = getMyJetpackUrl( '#/add-license' ); return ( @@ -20,7 +14,7 @@ const AdminPageHeader = () => { - { showPricingPage && ( + { ! hasSocialPaidFeatures() && (

{ createInterpolateElement( __( From c6543c434108bfc22830a7de58a1c3ef78db6116 Mon Sep 17 00:00:00 2001 From: Brandon Kraft Date: Fri, 10 Jan 2025 08:09:56 -0600 Subject: [PATCH 011/420] JS Tools: update the GH action lint to use ESM for chalk v5 (#40944) --- .github/workflows/linting.yml | 6 ++++-- tools/js-tools/git-hooks/pre-commit-hook.mjs | 2 +- .../js-tools/{lint-gh-actions.js => lint-gh-actions.mjs} | 8 ++++---- 3 files changed, 9 insertions(+), 7 deletions(-) rename tools/js-tools/{lint-gh-actions.js => lint-gh-actions.mjs} (97%) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 5e5b2e6b0b60c..b8fdf3f47c14e 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -93,6 +93,8 @@ jobs: - '.github/workflows/*.{yml,yaml}' - '.github/actions/*/action.{yml,yaml}' - 'projects/github-actions/*/action.{yml,yaml}' + # If we edit the linting JS files, we need to run it. + - 'tools/js-tools/lint-gh-actions.{js,mjs}' misc_php: # If composer, phpcs config, or the codesniffer package itself changed, there may be a new standard. - 'composer.json' @@ -341,7 +343,7 @@ jobs: run: pnpm run lint-changed --git-base=$SHA $(jq -rn --argjson files "$FILES" '$files[]') ### Lints GitHub Actions yaml files. - # Local equivalent: `./tools/js-tools/lint-gh-actions.js ` + # Local equivalent: `./tools/js-tools/lint-gh-actions.mjs ` lint_gh_actions: name: Lint GitHub Actions yaml files runs-on: ubuntu-latest @@ -358,7 +360,7 @@ jobs: - run: pnpm install - name: Run lint - run: ./tools/js-tools/lint-gh-actions.js -v '.github/workflows/*.{yml,yaml}' '.github/actions/*/action.{yml,yaml}' 'projects/github-actions/*/action.{yml,yaml}' + run: ./tools/js-tools/lint-gh-actions.mjs -v '.github/workflows/*.{yml,yaml}' '.github/actions/*/action.{yml,yaml}' 'projects/github-actions/*/action.{yml,yaml}' ### Checks that copied files (e.g. readme, license) are in sync # Local equivalent: `./tools/check-copied-files.sh` diff --git a/tools/js-tools/git-hooks/pre-commit-hook.mjs b/tools/js-tools/git-hooks/pre-commit-hook.mjs index bd7e0073ead50..ab98a7046d384 100644 --- a/tools/js-tools/git-hooks/pre-commit-hook.mjs +++ b/tools/js-tools/git-hooks/pre-commit-hook.mjs @@ -439,7 +439,7 @@ function runCheckGitHubActionsYamlFiles() { return; } - const result = spawnSync( './tools/js-tools/lint-gh-actions.js', files, { + const result = spawnSync( './tools/js-tools/lint-gh-actions.mjs', files, { stdio: 'inherit', } ); if ( result && result.status ) { diff --git a/tools/js-tools/lint-gh-actions.js b/tools/js-tools/lint-gh-actions.mjs similarity index 97% rename from tools/js-tools/lint-gh-actions.js rename to tools/js-tools/lint-gh-actions.mjs index 2e89b66b32d27..1aa82d5220f84 100755 --- a/tools/js-tools/lint-gh-actions.js +++ b/tools/js-tools/lint-gh-actions.mjs @@ -2,10 +2,10 @@ /* eslint-env node */ -const fs = require( 'fs' ); -const chalk = require( 'chalk' ); -const { glob } = require( 'glob' ); -const YAML = require( 'yaml' ); +import fs from 'fs'; +import chalk from 'chalk'; +import { glob } from 'glob'; +import YAML from 'yaml'; const isCI = !! process.env.CI; From 59e2d931642816fa7b02230dc4c8b0fddf1cddc4 Mon Sep 17 00:00:00 2001 From: Omar Alshaker Date: Fri, 10 Jan 2025 15:26:20 +0100 Subject: [PATCH 012/420] Fix Verbum comments in Query Loop (#40933) --- ...llow-multiple-verbum-instances-on-one-page | 4 + .../verbum-comments/class-verbum-comments.php | 8 +- .../EmailForm/email-form-cookie-consent.tsx | 16 +- .../src/components/EmailForm/index.tsx | 52 ++-- .../src/components/EmailForm/style.scss | 2 +- .../components/SimpleSubscribeModal/index.tsx | 20 +- .../SimpleSubscribeModal/logged-in.tsx | 5 +- .../SimpleSubscribeModal/logged-out.tsx | 5 +- .../src/components/comment-footer.tsx | 11 +- .../src/components/comment-input-field.tsx | 6 +- .../src/components/editor-placeholder.tsx | 4 +- .../src/components/logged-in.tsx | 4 +- .../src/components/logged-out.tsx | 13 +- .../src/components/settings-button.tsx | 4 +- .../verbum-comments/src/components/types.d.ts | 8 + .../src/hooks/useFormMutations.tsx | 13 +- .../src/hooks/useSocialLogin.tsx | 6 +- .../src/hooks/useSubscriptionApi.tsx | 8 +- .../features/verbum-comments/src/index.tsx | 64 ++--- .../features/verbum-comments/src/state.tsx | 237 ++++++++++-------- .../features/verbum-comments/src/style.scss | 2 +- .../features/verbum-comments/src/types.tsx | 5 + .../src/features/verbum-comments/src/utils.ts | 2 +- .../simple/open_comments_for_everyone.test.ts | 2 +- ...egistered_and_logged_in_to_comment.test.ts | 4 +- 25 files changed, 295 insertions(+), 210 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/allow-multiple-verbum-instances-on-one-page diff --git a/projects/packages/jetpack-mu-wpcom/changelog/allow-multiple-verbum-instances-on-one-page b/projects/packages/jetpack-mu-wpcom/changelog/allow-multiple-verbum-instances-on-one-page new file mode 100644 index 0000000000000..06949a5bdb74d --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/allow-multiple-verbum-instances-on-one-page @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +To support adding a comment form inside a query loop diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php index c4902aed64a22..ec54e40df5fe5 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php @@ -96,7 +96,7 @@ public function verbum_render_element() { $color_scheme = 'transparent'; } - $verbum = '

' . $this->hidden_fields(); + $verbum = '
' . $this->hidden_fields(); // If the blog requires login, Verbum need to be wrapped in a
to work. // Verbum is given `mustLogIn` to handle the login flow. @@ -535,8 +535,12 @@ public function add_verbum_meta_data( $comment_id ) { * Get the hidden fields for the comment form. */ public function hidden_fields() { + // Ironically, get_queried_post_id doesn't work inside query loop. + // See: https://github.com/Automattic/wp-calypso/issues/98136 + $queried_post = get_post(); + $queried_post_id = $queried_post ? $queried_post->ID : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended - $post_id = isset( $_GET['postid'] ) ? intval( $_GET['postid'] ) : get_queried_object_id(); + $post_id = isset( $_GET['postid'] ) ? intval( $_GET['postid'] ) : $queried_post_id; // phpcs:ignore WordPress.Security.NonceVerification.Recommended $is_current_user_subscribed = isset( $_GET['is_current_user_subscribed'] ) ? intval( $_GET['is_current_user_subscribed'] ) : 0; $nonce = wp_create_nonce( 'highlander_comment' ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/email-form-cookie-consent.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/email-form-cookie-consent.tsx index 751f5daa6438e..d9f609e84c078 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/email-form-cookie-consent.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/email-form-cookie-consent.tsx @@ -1,12 +1,18 @@ +import { useContext, useCallback } from 'preact/hooks'; import { translate } from '../../i18n'; -import { shouldStoreEmailData } from '../../state'; +import { VerbumSignals } from '../../state'; import { ToggleControl } from '../ToggleControl'; -const handleChange = ( e: boolean ) => { - shouldStoreEmailData.value = e; -}; - export const EmailFormCookieConsent = () => { + const { shouldStoreEmailData } = useContext( VerbumSignals ); + + const handleChange = useCallback( + ( e: boolean ) => { + shouldStoreEmailData.value = e; + }, + [ shouldStoreEmailData ] + ); + const label = (

diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/index.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/index.tsx index aec84e0b61af7..abd71618aec23 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/index.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/index.tsx @@ -1,9 +1,9 @@ -import { signal, effect, batch, computed } from '@preact/signals'; +import { effect, batch, useSignal, useComputed } from '@preact/signals'; import clsx from 'clsx'; -import { useState, useEffect } from 'preact/hooks'; +import { useState, useEffect, useContext } from 'preact/hooks'; import { translate } from '../../i18n'; import { Name, Website, Email } from '../../images'; -import { mailLoginData, isMailFormInvalid, shouldStoreEmailData } from '../../state'; +import { VerbumSignals } from '../../state'; import { getUserInfoCookie, isAuthRequired } from '../../utils'; import { NewCommentEmail } from '../new-comment-email'; import { NewPostsEmail } from '../new-posts-email'; @@ -15,32 +15,34 @@ interface EmailFormProps { shouldShowEmailForm: boolean; } -const isValidEmail = signal( true ); -const isEmailTouched = signal( false ); -const isNameTouched = signal( false ); -const isValidAuthor = signal( true ); -const userEmail = computed( () => mailLoginData.value.email || '' ); -const userName = computed( () => mailLoginData.value.author || '' ); -const userUrl = computed( () => mailLoginData.value.url || '' ); +export const EmailForm = ( { shouldShowEmailForm }: EmailFormProps ) => { + const { mailLoginData, isMailFormInvalid, shouldStoreEmailData } = useContext( VerbumSignals ); -const validateFormData = () => { - const emailRegex = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i; - batch( () => { - isValidEmail.value = - Boolean( userEmail.value ) && Boolean( emailRegex.test( userEmail.value ) ); - isValidAuthor.value = Boolean( userName.value.length > 0 ); - } ); -}; + const isValidEmail = useSignal( true ); + const isEmailTouched = useSignal( false ); + const isNameTouched = useSignal( false ); + const isValidAuthor = useSignal( true ); + const userEmail = useComputed( () => mailLoginData.value.email || '' ); + const userName = useComputed( () => mailLoginData.value.author || '' ); + const userUrl = useComputed( () => mailLoginData.value.url || '' ); -const setFormData = ( event: ChangeEvent< HTMLInputElement > ) => { - mailLoginData.value = { - ...mailLoginData.peek(), - [ event.currentTarget.name ]: event.currentTarget.value, + const validateFormData = () => { + const emailRegex = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i; + batch( () => { + isValidEmail.value = + Boolean( userEmail.value ) && Boolean( emailRegex.test( userEmail.value ) ); + isValidAuthor.value = Boolean( userName.value.length > 0 ); + } ); + }; + + const setFormData = ( event: ChangeEvent< HTMLInputElement > ) => { + mailLoginData.value = { + ...mailLoginData.peek(), + [ event.currentTarget.name ]: event.currentTarget.value, + }; + validateFormData(); }; - validateFormData(); -}; -export const EmailForm = ( { shouldShowEmailForm }: EmailFormProps ) => { const { subscribeToComment, subscribeToBlog } = VerbumComments; const [ emailNewComment, setEmailNewComment ] = useState( false ); const [ emailNewPosts, setEmailNewPosts ] = useState( false ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/style.scss index 401bb63df6273..2982263226350 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/style.scss +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/EmailForm/style.scss @@ -1,4 +1,4 @@ -#comment-form__verbum .verbum-subscriptions .verbum-form +.comment-form__verbum .verbum-subscriptions .verbum-form { .verbum-form__content { // protect the button from style leaks from the site; reset all. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/index.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/index.tsx index def4226e3f437..f4fad5d7b06c3 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/index.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/index.tsx @@ -1,7 +1,7 @@ import clsx from 'clsx'; -import { useEffect, useState, useRef } from 'preact/hooks'; +import { useEffect, useState, useRef, useContext } from 'preact/hooks'; import { translate } from '../../i18n'; -import { userInfo, userLoggedIn, commentUrl, subscribeModalStatus } from '../../state'; +import { VerbumSignals } from '../../state'; import { SimpleSubscribeModalProps } from '../../types'; import { getSubscriptionModalViewCount, @@ -13,6 +13,7 @@ import { SimpleSubscribeModalLoggedOut } from './logged-out'; import './style.scss'; export const SimpleSubscribeModal = ( { closeModalHandler, email }: SimpleSubscribeModalProps ) => { + const { userInfo, userLoggedIn, commentUrl, subscribeModalStatus } = useContext( VerbumSignals ); const [ subscribeState, setSubscribeState ] = useState< 'SUBSCRIBING' | 'LOADING' | 'SUBSCRIBED' >(); @@ -51,6 +52,13 @@ export const SimpleSubscribeModal = ( { closeModalHandler, email }: SimpleSubscr // eslint-disable-next-line react-hooks/exhaustive-deps }, [] ); + // This is used to track how many times the modal was shown to the user. + useEffect( () => { + const userId = userInfo.value?.uid || 0; + const currentViewCount = getSubscriptionModalViewCount( userId ); + setSubscriptionModalViewCount( currentViewCount + 1, userId ); + }, [ userInfo ] ); + if ( ! commentUrl.value ) { // When not showing the modal, we check for modal conditions to show it. // This is done to avoid subscriptionApi calls for logged out users. @@ -69,14 +77,6 @@ export const SimpleSubscribeModal = ( { closeModalHandler, email }: SimpleSubscr return null; } - // This is used to track how many times the modal was shown to the user. - // eslint-disable-next-line react-hooks/rules-of-hooks - useEffect( () => { - const userId = userInfo.value?.uid || 0; - const currentViewCount = getSubscriptionModalViewCount( userId ); - setSubscriptionModalViewCount( currentViewCount + 1, userId ); - }, [] ); - if ( subscribeState === 'LOADING' ) { return (

diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/logged-in.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/logged-in.tsx index 5fb056021e793..cd71be6d08b41 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/logged-in.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/logged-in.tsx @@ -1,6 +1,7 @@ +import { useContext } from 'preact/hooks'; import useSubscriptionApi from '../../hooks/useSubscriptionApi'; import { translate } from '../../i18n'; -import { subscriptionSettings, userInfo, commentUrl, subscribeModalStatus } from '../../state'; +import { VerbumSignals } from '../../state'; import { SimpleSubscribeModalProps } from '../../types'; import { shouldShowSubscriptionModal } from '../../utils'; import SubscriptionModal from './subscription-modal'; @@ -8,6 +9,7 @@ import SubscriptionModal from './subscription-modal'; // This determines if the modal should be shown to the user. // It's called before the modal is rendered. export const SimpleSubscribeSetModalShowLoggedIn = () => { + const { subscriptionSettings, userInfo, subscribeModalStatus } = useContext( VerbumSignals ); const { email } = subscriptionSettings.value ?? { email: { send_posts: false, @@ -27,6 +29,7 @@ export const SimpleSubscribeModalLoggedIn = ( { closeModalHandler, }: SimpleSubscribeModalProps ) => { const { setEmailPostsSubscription } = useSubscriptionApi(); + const { userInfo, commentUrl } = useContext( VerbumSignals ); /** * Handle the subscribe button click. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/logged-out.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/logged-out.tsx index d6f904fbe8143..180d73e83ef4a 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/logged-out.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/SimpleSubscribeModal/logged-out.tsx @@ -1,6 +1,6 @@ -import { useEffect, useState } from 'preact/hooks'; +import { useContext, useEffect, useState } from 'preact/hooks'; import { translate } from '../../i18n'; -import { commentUrl } from '../../state'; +import { VerbumSignals } from '../../state'; import { SimpleSubscribeModalProps } from '../../types'; import SubscriptionModal from './subscription-modal'; import type { ChangeEvent } from 'preact/compat'; @@ -16,6 +16,7 @@ export const SimpleSubscribeModalLoggedOut = ( { const [ userEmail, setUserEmail ] = useState( '' ); const [ iframeUrl, setIframeUrl ] = useState( '' ); const [ subscribeDisabled, setSubscribeDisabled ] = useState( false ); + const { commentUrl } = useContext( VerbumSignals ); // Only want this to run once, when email is set for the first time useEffect( () => { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/comment-footer.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/comment-footer.tsx index 8a44653d2dc00..07377a48c1d0c 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/comment-footer.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/comment-footer.tsx @@ -1,12 +1,7 @@ import clsx from 'clsx'; +import { useContext } from 'preact/hooks'; import { translate } from '../i18n'; -import { - commentParent, - isReplyDisabled, - isSavingComment, - isTrayOpen, - userLoggedIn, -} from '../state'; +import { VerbumSignals } from '../state'; import { SettingsButton } from './settings-button'; interface CommentFooterProps { @@ -14,6 +9,8 @@ interface CommentFooterProps { } export const CommentFooter = ( { toggleTray }: CommentFooterProps ) => { + const { commentParent, isReplyDisabled, isSavingComment, isTrayOpen, userLoggedIn } = + useContext( VerbumSignals ); return (
) => { + const { commentParent, commentValue } = useContext( VerbumSignals ); const [ editorState, setEditorState ] = useState< 'LOADING' | 'LOADED' | 'ERROR' >( null ); const [ isGBEditorEnabled, setIsGBEditorEnabled ] = useState( false ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/editor-placeholder.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/editor-placeholder.tsx index 00753498edade..5d81e8f9173cd 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/editor-placeholder.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/editor-placeholder.tsx @@ -1,9 +1,11 @@ import clsx from 'clsx'; +import { useContext } from 'preact/hooks'; import { translate } from '../i18n'; -import { commentParent } from '../state'; +import { VerbumSignals } from '../state'; import { CustomLoadingSpinner } from './custom-loading-spinner'; export const EditorPlaceholder = ( { onClick, loading } ) => { + const { commentParent } = useContext( VerbumSignals ); return (
{ + const { isTrayOpen, subscriptionSettings, userInfo } = useContext( VerbumSignals ); const { setEmailPostsSubscription, setCommentSubscription, setNotificationSubscription } = useSubscriptionApi(); const { subscribeToComment, subscribeToBlog } = VerbumComments; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/logged-out.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/logged-out.tsx index deb16040612d9..b2a2f41b8c650 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/logged-out.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/logged-out.tsx @@ -1,7 +1,8 @@ +import { Signal } from '@preact/signals'; import clsx from 'clsx'; -import { useEffect, useState } from 'preact/hooks'; +import { useContext, useEffect, useState } from 'preact/hooks'; import { translate } from '../i18n'; -import { commentParent } from '../state'; +import { VerbumSignals } from '../state'; import { serviceData } from '../utils'; import { EmailForm } from './EmailForm'; @@ -12,7 +13,7 @@ interface LoggedOutProps { loginWindow: Window | null; } -const getLoginCommentText = () => { +const getLoginCommentText = ( commentParent: Signal ) => { let defaultText = translate( 'Log in to leave a comment.' ); let optionalText = translate( 'Leave a comment. (log in optional)' ); let nameAndEmailRequired = translate( @@ -80,13 +81,17 @@ export const LoggedOut = ( { login, canWeAccessCookies, loginWindow }: LoggedOut setActiveService( service ); }; + const { commentParent } = useContext( VerbumSignals ); + return (
{ canWeAccessCookies && ( <> -
{ getLoginCommentText() }
+
+ { getLoginCommentText( commentParent ) } +
{ + const { userInfo } = useContext( VerbumSignals ); const subscriptionOptionsVisible = hasSubscriptionOptionsVisible(); const handleOnClick = ( event: MouseEvent ) => { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/types.d.ts b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/types.d.ts index 5483f4cbf3797..6ab2338030982 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/types.d.ts +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/types.d.ts @@ -6,6 +6,14 @@ type ScriptLoader = { declare global { const VerbumComments: VerbumCommentsType; + const verbumBlockEditor: { + attachGutenberg: ( + textarea: HTMLTextAreaElement, + content: ( embedUrl: string ) => void, + isRtl: boolean, + onEmbedContent: ( embedUrl: string ) => void + ) => void; + }; const vbeCacheBuster: string; const WP_Enqueue_Dynamic_Script: ScriptLoader; const wp: Record< string, unknown >; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useFormMutations.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useFormMutations.tsx index 52fe81c655378..011efe1264bd6 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useFormMutations.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useFormMutations.tsx @@ -1,12 +1,15 @@ -import { useEffect } from 'preact/hooks'; -import { commentParent } from '../state'; +import { useEffect, useContext } from 'preact/hooks'; +import { VerbumSignals } from '../state'; /** * Hook to observe comment form changes and update state according to comment_parent changes. + * + * @param formElement - The form element to observe. */ -export default function useFormMutations() { +export default function useFormMutations( formElement: HTMLFormElement ) { + const { commentParent } = useContext( VerbumSignals ); + useEffect( () => { - const formElement = document.querySelector( '#commentform' ) as HTMLFormElement; const commentParentInput = formElement.querySelector( '#comment_parent' ); if ( ! formElement || ! commentParentInput ) { @@ -28,5 +31,5 @@ export default function useFormMutations() { return () => { mutationObserver.disconnect(); }; - }, [] ); + }, [ formElement, commentParent ] ); } diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useSocialLogin.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useSocialLogin.tsx index 1fd4a984ee340..421456bdf777c 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useSocialLogin.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useSocialLogin.tsx @@ -1,6 +1,6 @@ -import { useState, useEffect } from 'preact/hooks'; +import { useState, useEffect, useContext } from 'preact/hooks'; import wpcomRequest from 'wpcom-proxy-request'; -import { userInfo } from '../state'; +import { VerbumSignals } from '../state'; import { UserInfo } from '../types'; import { serviceData, setUserInfoCookie } from '../utils'; @@ -30,6 +30,7 @@ const addWordPressDomain = window.location.hostname.endsWith( '.wordpress.com' ) */ export default function useSocialLogin() { const [ loginWindowRef, setLoginWindowRef ] = useState< Window >(); + const { userInfo } = useContext( VerbumSignals ); useEffect( () => { wpcomRequest< UserInfo >( { @@ -42,6 +43,7 @@ export default function useSocialLogin() { .catch( () => { // User may not be logged in. } ); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [] ); if ( VerbumComments.isJetpackCommentsLoggedIn ) { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useSubscriptionApi.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useSubscriptionApi.tsx index 0fd1b1660bdbb..3ff058c6a7088 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useSubscriptionApi.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/hooks/useSubscriptionApi.tsx @@ -1,6 +1,6 @@ -import { useState, useEffect } from 'preact/hooks'; +import { useState, useEffect, useContext } from 'preact/hooks'; import wpcomRequest from 'wpcom-proxy-request'; -import { subscriptionSettings } from '../state'; +import { VerbumSignals } from '../state'; import { SubscriptionDetails, EmailPostsChange, EmailSubscriptionResponse } from '../types'; const getSubscriptionDetails = async () => { @@ -24,7 +24,8 @@ const getSubscriptionDetails = async () => { * * @return {object} Object containing functions to manage subscriptions. */ -export default function useSubscriptionApi(): object { +export default function useSubscriptionApi() { + const { subscriptionSettings } = useContext( VerbumSignals ); const { siteId } = VerbumComments; const [ subscriptionSettingsIsLoading, setSubscriptionSettingsIsLoading ] = useState( true ); @@ -61,6 +62,7 @@ export default function useSubscriptionApi(): object { .finally( () => { setSubscriptionSettingsIsLoading( false ); } ); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [] ); const setEmailPostsSubscription = async function ( change: EmailPostsChange ) { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/index.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/index.tsx index b3d38e8e67db0..da832a89da10a 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/index.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/index.tsx @@ -1,7 +1,7 @@ import { effect } from '@preact/signals'; import clsx from 'clsx'; import { render } from 'preact'; -import { useState, useEffect, useRef, useCallback } from 'preact/hooks'; +import { useState, useEffect, useRef, useCallback, useContext } from 'preact/hooks'; import { SimpleSubscribeModal } from './components/SimpleSubscribeModal'; import { CommentFooter } from './components/comment-footer'; import { CommentInputField } from './components/comment-input-field'; @@ -11,31 +11,32 @@ import { LoggedOut } from './components/logged-out'; import useFormMutations from './hooks/useFormMutations'; import useSocialLogin from './hooks/useSocialLogin'; import { translate } from './i18n'; -import { - hasOpenedTrayOnce, - isEmptyComment, - isSavingComment, - isTrayOpen, - mailLoginData, - shouldStoreEmailData, - userInfo, - userLoggedIn, - commentUrl, - commentParent, - subscribeModalStatus, -} from './state'; +import { createSignals, VerbumSignals } from './state'; import { canWeAccessCookies, setUserInfoCookie, addWordPressDomain, hasSubscriptionOptionsVisible, } from './utils'; -import type { VerbumComments } from './types'; +import type { VerbumAppProps, VerbumComments } from './types'; import './style.scss'; -const Verbum = ( { siteId }: VerbumComments ) => { - const formRef = useRef< HTMLFormElement >( null ); +const Verbum = ( { siteId, parentForm }: VerbumAppProps ) => { + const { + hasOpenedTrayOnce, + isEmptyComment, + isSavingComment, + isTrayOpen, + mailLoginData, + shouldStoreEmailData, + userInfo, + userLoggedIn, + commentUrl, + commentParent, + subscribeModalStatus, + } = useContext( VerbumSignals ); + const [ showMessage, setShowMessage ] = useState( '' ); const [ isErrorMessage, setIsErrorMessage ] = useState( false ); @@ -43,7 +44,7 @@ const Verbum = ( { siteId }: VerbumComments ) => { const [ email, setEmail ] = useState( '' ); const [ ignoreSubscriptionModal, setIgnoreSubscriptionModal ] = useState( false ); const { login, loginWindowRef, logout } = useSocialLogin(); - useFormMutations(); + useFormMutations( parentForm ); const dispose = effect( () => { // The tray, when there is no sub options, is pretty minimal. @@ -59,16 +60,14 @@ const Verbum = ( { siteId }: VerbumComments ) => { }, [] ); useEffect( () => { - formRef.current = document.getElementById( 'commentform' ) as HTMLFormElement | null; - - if ( formRef.current ) { - formRef.current.addEventListener( 'submit', handleCommentSubmit ); + if ( parentForm ) { + parentForm.addEventListener( 'submit', handleCommentSubmit ); return () => { - formRef.current.removeEventListener( 'submit', handleCommentSubmit ); + parentForm.removeEventListener( 'submit', handleCommentSubmit ); }; } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [] ); + }, [ parentForm ] ); useEffect( () => { if ( ! isEmptyComment.value ) { @@ -117,8 +116,8 @@ const Verbum = ( { siteId }: VerbumComments ) => { event.preventDefault(); setShowMessage( '' ); - const formAction = formRef.current.getAttribute( 'action' ); - const formData = new FormData( formRef.current ); + const formAction = parentForm.getAttribute( 'action' ); + const formData = new FormData( parentForm ); // if formData email address is set, set the newUserEmail state if ( formData.get( 'email' ) ) { @@ -155,8 +154,8 @@ const Verbum = ( { siteId }: VerbumComments ) => { // If no error message and not redirect, we re-submit the form as usual instead of using fetch. setIgnoreSubscriptionModal( true ); isSavingComment.value = false; - const submitFormFunction = Object.getPrototypeOf( formRef.current ).submit; - submitFormFunction.call( formRef.current ); + const submitFormFunction = Object.getPrototypeOf( parentForm ).submit; + submitFormFunction.call( parentForm ); }; const handleCommentSubmit = async event => { @@ -246,4 +245,11 @@ const { siteId } = { ...VerbumComments, }; -render( , document.getElementById( 'comment-form__verbum' ) ); +document.querySelectorAll( '.comment-form__verbum' ).forEach( element => { + render( + + + , + element + ); +} ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/state.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/state.tsx index 1c5702ede9bad..75734e981be0a 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/state.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/state.tsx @@ -1,110 +1,139 @@ import { signal, computed } from '@preact/signals'; +import { createContext } from 'preact'; import { canWeAccessCookies, getUserInfoCookie, isAuthRequired, isEmptyEditor } from './utils'; import type { UserInfo, SubscriptionDetails } from './types'; import type { Signal } from '@preact/signals'; -/* - * In userInfo we store the user data for logged-in users. +/** + * Creates an instance of the app state. + * + * @return An object containing all the signals used in the app. */ -export const userInfo: Signal< UserInfo > = signal( getUserInfoCookie() ); - -/* - * Calculate if user is logged in. For self-hosted sites this check is based only on VerbumComments.isJetpackCommentsLoggedIn. - * Here we also check if cookies are accessible, userInfo is set and the service is different from 'guest' or 'jetpack'. - */ -export const userLoggedIn = computed( () => { - return ( - VerbumComments.isJetpackCommentsLoggedIn || - ( canWeAccessCookies() && - userInfo.value && - userInfo.value?.service !== 'guest' && - userInfo.value?.service !== 'jetpack' ) - ); -} ); - -/* - * Store user input: email, author and url from email form. - */ -export const mailLoginData = signal( { - email: '', - author: '', - url: '', -} ); - -/* - * Indicate whether the tray showing the subscription options is open. - */ -export const isTrayOpen = signal( false ); - -/* - * Indicate whether the subscription option tray has been opened once. - */ -export const hasOpenedTrayOnce = signal( false ); - -/* - * Store the value of the comment input field. - */ -export const commentValue = signal( '' ); - -/* - * Calculate if the comment value is empty. - */ -export const isEmptyComment = computed( () => { - return isEmptyEditor( commentValue.value ); -} ); - -/* - * Indicate whether we are saving the comment. - */ -export const isSavingComment = signal( false ); - -/* - * isMailFormInvalid is used to if the required email form data was not properly filled. - */ -export const isMailFormInvalid = signal( false ); - -/* - * isMailFormMissingInput is used to determine if the mail input is not set. - */ -const isMailFormMissingInput = computed( () => { - return ! mailLoginData.value.email || ! mailLoginData.value.author; -} ); - -/* - * Calculate if the reply button should be disabled. When we have no user data we check the shouldDisableReply value, - * otherwise we check if the comment is empty or saving. - */ -export const isReplyDisabled = computed( () => { - return ( - ( isAuthRequired() && - ! userLoggedIn.value && - ( isMailFormMissingInput.value || isMailFormInvalid.value ) ) || - isEmptyComment.value || - isSavingComment.value - ); -} ); - -/* - * commentUrl is used to store the url of the comment page. - * This is used to redirect the user to the comment page after the comment is saved. - */ -export const commentUrl = signal( '' ); - -/* - * Indicate whether we need to store the email data. If set we use this to store the user info cookie. - */ -export const shouldStoreEmailData = signal( false ); - -// -export const subscriptionSettings: Signal< SubscriptionDetails > = signal( undefined ); - -/* - * Store the comment parent which is updated by external scripts - */ -export const commentParent = signal( 0 ); - -/* - * Store the subscription modal status calculated for the user. - * Can be one of these values: 'showed', 'hidden_cookies_disabled', 'hidden_subscribe_not_enabled', 'hidden_views_limit' and 'hidden_already_subscribed'. - */ -export const subscribeModalStatus = signal( undefined ); +export function createSignals() { + /* + * In userInfo we store the user data for logged-in users. + */ + const userInfo: Signal< UserInfo > = signal( getUserInfoCookie() ); + + /* + * Calculate if user is logged in. For self-hosted sites this check is based only on VerbumComments.isJetpackCommentsLoggedIn. + * Here we also check if cookies are accessible, userInfo is set and the service is different from 'guest' or 'jetpack'. + */ + const userLoggedIn = computed( () => { + return ( + VerbumComments.isJetpackCommentsLoggedIn || + ( canWeAccessCookies() && + userInfo.value && + userInfo.value?.service !== 'guest' && + userInfo.value?.service !== 'jetpack' ) + ); + } ); + + /* + * Store user input: email, author and url from email form. + */ + const mailLoginData = signal( { + email: '', + author: '', + url: '', + } ); + + /* + * Indicate whether the tray showing the subscription options is open. + */ + const isTrayOpen = signal( false ); + + /* + * Indicate whether the subscription option tray has been opened once. + */ + const hasOpenedTrayOnce = signal( false ); + + /* + * Store the value of the comment input field. + */ + const commentValue = signal( '' ); + + /* + * Calculate if the comment value is empty. + */ + const isEmptyComment = computed( () => { + return isEmptyEditor( commentValue.value ); + } ); + + /* + * Indicate whether we are saving the comment. + */ + const isSavingComment = signal( false ); + + /* + * isMailFormInvalid is used to if the required email form data was not properly filled. + */ + const isMailFormInvalid = signal( false ); + + /* + * isMailFormMissingInput is used to determine if the mail input is not set. + */ + const isMailFormMissingInput = computed( () => { + return ! mailLoginData.value.email || ! mailLoginData.value.author; + } ); + + /* + * Calculate if the reply button should be disabled. When we have no user data we check the shouldDisableReply value, + * otherwise we check if the comment is empty or saving. + */ + const isReplyDisabled = computed( () => { + return ( + ( isAuthRequired() && + ! userLoggedIn.value && + ( isMailFormMissingInput.value || isMailFormInvalid.value ) ) || + isEmptyComment.value || + isSavingComment.value + ); + } ); + + /* + * commentUrl is used to store the url of the comment page. + * This is used to redirect the user to the comment page after the comment is saved. + */ + const commentUrl = signal( '' ); + + /* + * Indicate whether we need to store the email data. If set we use this to store the user info cookie. + */ + const shouldStoreEmailData = signal( false ); + + // + const subscriptionSettings: Signal< SubscriptionDetails > = signal( undefined ); + + /* + * Store the comment parent which is updated by external scripts + */ + const commentParent = signal( 0 ); + + /* + * Store the subscription modal status calculated for the user. + * Can be one of these values: 'showed', 'hidden_cookies_disabled', 'hidden_subscribe_not_enabled', 'hidden_views_limit' and 'hidden_already_subscribed'. + */ + const subscribeModalStatus = signal( undefined ); + + return { + userInfo, + userLoggedIn, + mailLoginData, + isTrayOpen, + hasOpenedTrayOnce, + commentValue, + isEmptyComment, + isSavingComment, + isMailFormInvalid, + isMailFormMissingInput, + isReplyDisabled, + commentUrl, + shouldStoreEmailData, + subscriptionSettings, + commentParent, + subscribeModalStatus, + } as const; +} + +export const VerbumSignals = createContext( createSignals() ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/style.scss index 6e7e4229bd5ba..16d52d377945c 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/style.scss +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/style.scss @@ -89,7 +89,7 @@ display: none; } - #comment-form__verbum { + .comment-form__verbum { @include color-schemes; &.dark { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/types.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/types.tsx index 9ae4e3961b206..228bf852dc280 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/types.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/types.tsx @@ -36,6 +36,10 @@ export type EmailPostsChange = trackSource: 'verbum-subscription-modal' | 'verbum-toggle'; }; +export type VerbumAppProps = { + parentForm: HTMLFormElement; + siteId?: number; +}; export interface VerbumComments { loginPostMessage?: UserInfo; siteId?: number; @@ -67,6 +71,7 @@ export interface VerbumComments { * Contains the time we started loading Highlander. */ fullyLoadedTime: number; + vbeCacheBuster: string; } export type EmailSubscriptionResponse = { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/utils.ts b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/utils.ts index 9a28d20fb0291..d39846036940c 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/utils.ts +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/utils.ts @@ -1,6 +1,6 @@ import { translate } from './i18n'; import { Facebook, Mail, WordPress } from './images'; -import type { UserInfo, VerbumComments } from './types'; +import type { UserInfo } from './types'; export const serviceData = { wordpress: { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/tests/simple/open_comments_for_everyone.test.ts b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/tests/simple/open_comments_for_everyone.test.ts index 6b14ec8b07582..0fa2029ed6817 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/tests/simple/open_comments_for_everyone.test.ts +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/tests/simple/open_comments_for_everyone.test.ts @@ -21,7 +21,7 @@ test( 'Simple: open_comments_for_everyone - Anonymous', async ( { page } ) => { await page.getByPlaceholder( 'Write a comment...' ).click(); await page.getByPlaceholder( 'Write a comment...' ).pressSequentially( randomComment ); await expect( page.getByRole( 'button', { name: 'Comment' } ) ).toBeVisible(); - await expect( page.locator( '#comment-form__verbum' ) ).toContainText( + await expect( page.locator( '.comment-form__verbum' ) ).toContainText( 'Leave a comment. (log in optional)' ); await page.getByRole( 'button', { name: 'Comment' } ).click(); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/tests/simple/user_must_be_registered_and_logged_in_to_comment.test.ts b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/tests/simple/user_must_be_registered_and_logged_in_to_comment.test.ts index 58b2a6111ee92..49268612d0e31 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/tests/simple/user_must_be_registered_and_logged_in_to_comment.test.ts +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/tests/simple/user_must_be_registered_and_logged_in_to_comment.test.ts @@ -25,7 +25,7 @@ test( 'Simple: user_must_be_registered_and_logged_in_to_comment - Anonymous', as .locator( 'p[contenteditable="true"]' ) .pressSequentially( randomComment ); - await expect( page.locator( '#comment-form__verbum' ) ).toContainText( + await expect( page.locator( '.comment-form__verbum' ) ).toContainText( 'Log in to leave a comment.' ); // Reply button should be disabled before log in. @@ -41,7 +41,7 @@ test( 'Simple: user_must_be_registered_and_logged_in_to_comment - Anonymous', as await loginPopupPage.getByRole( 'button', { name: 'Log In' } ).click(); // - await expect( page.locator( '#comment-form__verbum' ) ).toContainText( + await expect( page.locator( '.comment-form__verbum' ) ).toContainText( `${ testingUser.username } - Logged in via WordPress.com` ); await page.getByRole( 'button', { name: 'Comment' } ).click(); From c09645164b1eb6891b49a90a1f81cdee41743ff6 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:06:50 -0700 Subject: [PATCH 013/420] Changelog and readme.txt edits. (#40959) --- projects/packages/my-jetpack/CHANGELOG.md | 8 ++++++++ ...planation-firewall-inactive-when-not-supported | 4 ---- ...-upgrade-button-if-one-is-available-my-jetpack | 4 ---- projects/packages/my-jetpack/package.json | 2 +- .../packages/my-jetpack/src/class-initializer.php | 2 +- projects/plugins/backup/CHANGELOG.md | 9 +++++++++ .../backup/changelog/fix-bump_composer_versions | 4 ---- .../changelog/fix-bump_composer_versions_round2#2 | 5 ----- projects/plugins/backup/changelog/prerelease | 5 ----- projects/plugins/backup/changelog/prerelease#2 | 5 ----- projects/plugins/backup/changelog/prerelease#3 | 5 ----- projects/plugins/backup/changelog/prerelease#4 | 5 ----- projects/plugins/backup/changelog/prerelease#5 | 5 ----- projects/plugins/backup/changelog/prerelease#6 | 5 ----- projects/plugins/backup/changelog/prerelease#7 | 5 ----- .../backup/changelog/renovate-brain-monkey-2.x | 5 ----- .../changelog/renovate-lock-file-maintenance | 4 ---- .../changelog/update-backup-plugin-screenshots | 4 ---- projects/plugins/backup/changelog/update-composer | 5 ----- projects/plugins/backup/changelog/update-eslint-9 | 5 ----- .../changelog/update-fetch-available-licenses | 4 ---- .../backup/changelog/update-my-jetpack-social-cta | 4 ---- projects/plugins/backup/composer.json | 2 +- projects/plugins/backup/jetpack-backup.php | 2 +- projects/plugins/backup/readme.txt | 15 +++++---------- 25 files changed, 26 insertions(+), 97 deletions(-) delete mode 100644 projects/packages/my-jetpack/changelog/add-explanation-firewall-inactive-when-not-supported delete mode 100644 projects/packages/my-jetpack/changelog/update-always-show-upgrade-button-if-one-is-available-my-jetpack delete mode 100644 projects/plugins/backup/changelog/fix-bump_composer_versions delete mode 100644 projects/plugins/backup/changelog/fix-bump_composer_versions_round2#2 delete mode 100644 projects/plugins/backup/changelog/prerelease delete mode 100644 projects/plugins/backup/changelog/prerelease#2 delete mode 100644 projects/plugins/backup/changelog/prerelease#3 delete mode 100644 projects/plugins/backup/changelog/prerelease#4 delete mode 100644 projects/plugins/backup/changelog/prerelease#5 delete mode 100644 projects/plugins/backup/changelog/prerelease#6 delete mode 100644 projects/plugins/backup/changelog/prerelease#7 delete mode 100644 projects/plugins/backup/changelog/renovate-brain-monkey-2.x delete mode 100644 projects/plugins/backup/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/backup/changelog/update-backup-plugin-screenshots delete mode 100644 projects/plugins/backup/changelog/update-composer delete mode 100644 projects/plugins/backup/changelog/update-eslint-9 delete mode 100644 projects/plugins/backup/changelog/update-fetch-available-licenses delete mode 100644 projects/plugins/backup/changelog/update-my-jetpack-social-cta diff --git a/projects/packages/my-jetpack/CHANGELOG.md b/projects/packages/my-jetpack/CHANGELOG.md index 8fdc37bdd613d..bc6fc7d7d69e8 100644 --- a/projects/packages/my-jetpack/CHANGELOG.md +++ b/projects/packages/my-jetpack/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [5.3.1] - 2025-01-10 +### Added +- Add new WAF status on Protect card for when WAF is unsupported. [#40880] + +### Changed +- Show an upgrade CTA anytime a product has an available upgrade. [#40900] + ## [5.3.0] - 2025-01-06 ### Added - My Jetpack: Added a new status for when Protect detects threats on the site. [#40628] @@ -1895,6 +1902,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Created package +[5.3.1]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.3.0...5.3.1 [5.3.0]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.2.0...5.3.0 [5.2.0]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.1.2...5.2.0 [5.1.2]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.1.1...5.1.2 diff --git a/projects/packages/my-jetpack/changelog/add-explanation-firewall-inactive-when-not-supported b/projects/packages/my-jetpack/changelog/add-explanation-firewall-inactive-when-not-supported deleted file mode 100644 index e4c40d9d62b87..0000000000000 --- a/projects/packages/my-jetpack/changelog/add-explanation-firewall-inactive-when-not-supported +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Add new WAF status on Protect card for when WAF is unsupported diff --git a/projects/packages/my-jetpack/changelog/update-always-show-upgrade-button-if-one-is-available-my-jetpack b/projects/packages/my-jetpack/changelog/update-always-show-upgrade-button-if-one-is-available-my-jetpack deleted file mode 100644 index 4d24945f126fc..0000000000000 --- a/projects/packages/my-jetpack/changelog/update-always-show-upgrade-button-if-one-is-available-my-jetpack +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Show an upgrade CTA anytime a product has an available upgrade diff --git a/projects/packages/my-jetpack/package.json b/projects/packages/my-jetpack/package.json index 01d60e36a9bb5..c074fd1e6887e 100644 --- a/projects/packages/my-jetpack/package.json +++ b/projects/packages/my-jetpack/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-my-jetpack", - "version": "5.3.0", + "version": "5.3.1", "description": "WP Admin page with information and configuration shared among all Jetpack stand-alone plugins", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/my-jetpack/#readme", "bugs": { diff --git a/projects/packages/my-jetpack/src/class-initializer.php b/projects/packages/my-jetpack/src/class-initializer.php index 1a871e3f76e13..5fd94ab919e18 100644 --- a/projects/packages/my-jetpack/src/class-initializer.php +++ b/projects/packages/my-jetpack/src/class-initializer.php @@ -41,7 +41,7 @@ class Initializer { * * @var string */ - const PACKAGE_VERSION = '5.3.0'; + const PACKAGE_VERSION = '5.3.1'; /** * HTML container ID for the IDC screen on My Jetpack page. diff --git a/projects/plugins/backup/CHANGELOG.md b/projects/plugins/backup/CHANGELOG.md index 27678b1d1cd8c..e18c5e526dc49 100644 --- a/projects/plugins/backup/CHANGELOG.md +++ b/projects/plugins/backup/CHANGELOG.md @@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [3.1] - 2025-01-10 +### Changed +- Resolve an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. [#40215] +- Social: Change My Jetpack CTA for Social from "Learn more" to "Activate". [#40359] +- Update backup plugin screenshots [#40386] +- Updated dependencies. [#40286] +- Updated package dependencies. [#40515] + ## [3.0] - 2024-11-14 ### Added - Display next scheduled daily backup time on the admin page. @@ -255,6 +263,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Use `absoluteRuntime` in babel JS build to avoid module not found errors. [2.2-beta]: https://github.com/Automattic/jetpack-backup-plugin/compare/2.1...2.2-beta +[3.1]: https://github.com/Automattic/jetpack-backup-plugin/compare/3.0...3.1 [3.0]: https://github.com/Automattic/jetpack-backup-plugin/compare/2.9...3.0 [2.9]: https://github.com/Automattic/jetpack-backup-plugin/compare/2.8...2.9 [2.8]: https://github.com/Automattic/jetpack-backup-plugin/compare/2.7...2.8 diff --git a/projects/plugins/backup/changelog/fix-bump_composer_versions b/projects/plugins/backup/changelog/fix-bump_composer_versions deleted file mode 100644 index 13cbf3392f78d..0000000000000 --- a/projects/plugins/backup/changelog/fix-bump_composer_versions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated dependencies. diff --git a/projects/plugins/backup/changelog/fix-bump_composer_versions_round2#2 b/projects/plugins/backup/changelog/fix-bump_composer_versions_round2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/fix-bump_composer_versions_round2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/prerelease b/projects/plugins/backup/changelog/prerelease deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/prerelease +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/prerelease#2 b/projects/plugins/backup/changelog/prerelease#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/prerelease#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/prerelease#3 b/projects/plugins/backup/changelog/prerelease#3 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/prerelease#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/prerelease#4 b/projects/plugins/backup/changelog/prerelease#4 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/prerelease#4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/prerelease#5 b/projects/plugins/backup/changelog/prerelease#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/prerelease#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/prerelease#6 b/projects/plugins/backup/changelog/prerelease#6 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/prerelease#6 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/prerelease#7 b/projects/plugins/backup/changelog/prerelease#7 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/prerelease#7 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/renovate-brain-monkey-2.x b/projects/plugins/backup/changelog/renovate-brain-monkey-2.x deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/renovate-brain-monkey-2.x +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/renovate-lock-file-maintenance b/projects/plugins/backup/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/backup/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/backup/changelog/update-backup-plugin-screenshots b/projects/plugins/backup/changelog/update-backup-plugin-screenshots deleted file mode 100644 index 44fa71bbec4d9..0000000000000 --- a/projects/plugins/backup/changelog/update-backup-plugin-screenshots +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated backup plugin screenshots diff --git a/projects/plugins/backup/changelog/update-composer b/projects/plugins/backup/changelog/update-composer deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/backup/changelog/update-composer +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/backup/changelog/update-eslint-9 b/projects/plugins/backup/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/plugins/backup/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/plugins/backup/changelog/update-fetch-available-licenses b/projects/plugins/backup/changelog/update-fetch-available-licenses deleted file mode 100644 index 3c349c8b1445e..0000000000000 --- a/projects/plugins/backup/changelog/update-fetch-available-licenses +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Resolved an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. diff --git a/projects/plugins/backup/changelog/update-my-jetpack-social-cta b/projects/plugins/backup/changelog/update-my-jetpack-social-cta deleted file mode 100644 index 6b1daf9c1b05e..0000000000000 --- a/projects/plugins/backup/changelog/update-my-jetpack-social-cta +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Social | Changed My Jetpack CTA for Social from "Learn more" to "Activate" diff --git a/projects/plugins/backup/composer.json b/projects/plugins/backup/composer.json index 85a968f326bdc..3b71d89a18de9 100644 --- a/projects/plugins/backup/composer.json +++ b/projects/plugins/backup/composer.json @@ -34,7 +34,7 @@ "minimum-stability": "dev", "prefer-stable": true, "config": { - "autoloader-suffix": "9559eef123208b7d1b9c15b978567267_backupⓥ3_0", + "autoloader-suffix": "9559eef123208b7d1b9c15b978567267_backupⓥ3_1", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true diff --git a/projects/plugins/backup/jetpack-backup.php b/projects/plugins/backup/jetpack-backup.php index 76cb6ad76b9e7..2983fb75f2039 100644 --- a/projects/plugins/backup/jetpack-backup.php +++ b/projects/plugins/backup/jetpack-backup.php @@ -4,7 +4,7 @@ * Plugin Name: Jetpack VaultPress Backup * Plugin URI: https://jetpack.com/jetpack-backup * Description: Easily restore or download a backup of your site from a specific moment in time. - * Version: 3.0 + * Version: 3.1 * Author: Automattic - Jetpack Backup team * Author URI: https://jetpack.com/ * License: GPLv2 or later diff --git a/projects/plugins/backup/readme.txt b/projects/plugins/backup/readme.txt index b150b57f94db3..1c747fbd739a7 100644 --- a/projects/plugins/backup/readme.txt +++ b/projects/plugins/backup/readme.txt @@ -175,18 +175,13 @@ No, Jetpack VaultPress Backup does not currently support split site or split hom 2. Your site backups are stored in multiple locations on our world-class cloud infrastructure so you can recover them at any moment. == Changelog == -### 3.0 - 2024-11-14 -#### Added -- Display next scheduled daily backup time on the admin page. - +### 3.1 - 2025-01-10 #### Changed -- Exclude discarded backups from being counted as successful on the admin page. -- General: Indicate compatibility with WordPress version 6.7. +- Resolve an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. +- Social: Change My Jetpack CTA for Social from "Learn more" to "Activate". +- Update backup plugin screenshots +- Updated dependencies. - Updated package dependencies. -- Various internal updates and improvements. - -#### Fixed -- Resolved an issue on the pricing page where the loading placeholder remained visible after the price loaded. -------- From 70951d340955abd81c4fc108c8c08be0ea7a729e Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:50:27 -0700 Subject: [PATCH 014/420] Changelog and readme.txt edits. (#40960) --- projects/packages/blaze/CHANGELOG.md | 6 +++ ...x-icon-alignment-on-blaze-this-post-button | 4 -- .../fix-show-quicklinks-after-quickedit | 4 -- projects/packages/blaze/package.json | 2 +- .../packages/blaze/src/class-dashboard.php | 2 +- projects/packages/calypsoify/CHANGELOG.md | 5 +++ .../changelog/renovate-wordpress-monorepo | 4 -- projects/packages/calypsoify/package.json | 2 +- .../src/class-jetpack-calypsoify.php | 2 +- .../classic-theme-helper/CHANGELOG.md | 5 +++ .../fix-testimonials-module-by-zero-error | 4 -- .../classic-theme-helper/package.json | 2 +- .../classic-theme-helper/src/class-main.php | 2 +- .../packages/jetpack-mu-wpcom/CHANGELOG.md | 41 +++++++++++++++++++ .../changelog/add-duplicate-views-assignment | 4 -- .../changelog/add-holiday-snow | 4 -- ...rove-upsell-notification-for-custom-styles | 4 -- .../changelog/add-jetpack-mu-wpcom-watch | 4 -- .../add-pre-option-filter-duplicate-views | 4 -- .../add-set-default-category-quick-action | 4 -- .../add-untangled-comments-experiment | 4 -- ...llow-multiple-verbum-instances-on-one-page | 4 -- .../benz56-add-mask-css-rule-to-allowlist | 4 -- .../changelog/fix-async-wpcom-sidebar-notice | 4 -- .../fix-global-styles-notice-distraction-free | 4 -- .../fix-jetpack-mu-wpcom-eslint_fixes | 4 -- .../jetpack-mu-wpcom/changelog/fix-lint-error | 5 --- ...ix-migration-diy-throws-403-on-page-reload | 4 -- .../changelog/fix-php-fatal-in-wpcom | 4 -- .../fix-rdv-regressions-on-treatment | 4 -- .../changelog/fix-starter-page-templates | 4 -- .../changelog/fix-theme-button-color | 4 -- .../changelog/fix-uselocation-exception | 4 -- .../changelog/fix-wp-admin-post-fixes | 5 --- .../changelog/fix-wp-admin-rdv | 4 -- .../changelog/hotfix-template-locked-bug | 4 -- .../remove-duplicate-views-redesign-notices | 4 -- .../renovate-automattic-color-studio-4.x | 4 -- .../changelog/renovate-babel-monorepo | 4 -- .../changelog/renovate-debug-4.x | 4 -- .../changelog/renovate-definitelytyped | 4 -- .../changelog/renovate-playwright-monorepo | 4 -- .../changelog/renovate-wordpress-monorepo | 4 -- .../update-async-wpcom-sidebar-notice | 4 -- .../update-duplicate-views-cpt-taxonomies | 4 -- .../update-duplicate-views-experiment-name | 4 -- .../changelog/update-eslint-9 | 5 --- .../update-eslint-config-for-ts-files | 4 -- .../update-hide-switcher-duplicated-views | 4 -- .../update-jetpack-mu-wpcom-translations | 4 -- .../changelog/update-no-scss-random | 4 -- .../update-packages-fix-eslint-9-lints | 5 --- .../update-remove-duplicate-view-pages | 4 -- .../update-remove-duplicate-views-notices | 4 -- ...remove-duplicate-views-pages-quick-actions | 4 -- .../changelog/update-snow-p2s | 4 -- .../changelog/update-snow-scss | 4 -- .../changelog/update-synced_newspack_blocks | 4 -- .../changelog/verbum-fix-stuff | 4 -- .../packages/jetpack-mu-wpcom/composer.json | 2 +- .../packages/jetpack-mu-wpcom/package.json | 2 +- .../src/class-jetpack-mu-wpcom.php | 2 +- .../holiday-snow/class-holiday-snow.php | 16 ++++---- projects/packages/masterbar/CHANGELOG.md | 5 +++ .../fix-self-hosted-product-redirect | 4 -- projects/packages/masterbar/package.json | 2 +- .../packages/masterbar/src/class-main.php | 2 +- projects/plugins/mu-wpcom-plugin/CHANGELOG.md | 13 ++++++ .../changelog/add-ci-always-process-coverage | 5 --- .../changelog/add-jetpack-mu-wpcom-watch | 5 --- .../add-pre-option-filter-duplicate-views | 5 --- .../changelog/fix-bump_composer_versions | 4 -- .../fix-bump_composer_versions_round2 | 5 --- .../fix-global-styles-notice-distraction-free | 4 -- .../fix-testimonials-module-by-zero-error | 4 -- .../mu-wpcom-plugin/changelog/prerelease | 5 --- .../mu-wpcom-plugin/changelog/prerelease#2 | 5 --- .../mu-wpcom-plugin/changelog/prerelease#3 | 5 --- .../mu-wpcom-plugin/changelog/prerelease#4 | 5 --- .../mu-wpcom-plugin/changelog/prerelease#5 | 5 --- .../mu-wpcom-plugin/changelog/prerelease#7 | 5 --- .../mu-wpcom-plugin/changelog/prerelease#8 | 5 --- .../mu-wpcom-plugin/changelog/prerelease#9 | 5 --- .../changelog/renovate-brain-monkey-2.x | 5 --- .../changelog/renovate-lock-file-maintenance | 4 -- .../renovate-lock-file-maintenance#4 | 4 -- .../renovate-lock-file-maintenance#5 | 5 --- .../changelog/update-bump_min_php_to_7.2 | 5 --- .../mu-wpcom-plugin/changelog/update-composer | 5 --- .../changelog/update-synced_newspack_blocks | 4 -- .../plugins/mu-wpcom-plugin/composer.json | 2 +- .../plugins/mu-wpcom-plugin/composer.lock | 4 +- .../mu-wpcom-plugin/mu-wpcom-plugin.php | 2 +- projects/plugins/mu-wpcom-plugin/package.json | 2 +- .../changelog/prerelease#6 | 0 projects/plugins/wpcomsh/composer.lock | 4 +- 96 files changed, 101 insertions(+), 334 deletions(-) delete mode 100644 projects/packages/blaze/changelog/fix-icon-alignment-on-blaze-this-post-button delete mode 100644 projects/packages/blaze/changelog/fix-show-quicklinks-after-quickedit delete mode 100644 projects/packages/calypsoify/changelog/renovate-wordpress-monorepo delete mode 100644 projects/packages/classic-theme-helper/changelog/fix-testimonials-module-by-zero-error delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-duplicate-views-assignment delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-holiday-snow delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-improve-upsell-notification-for-custom-styles delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-jetpack-mu-wpcom-watch delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-pre-option-filter-duplicate-views delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-set-default-category-quick-action delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-untangled-comments-experiment delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/allow-multiple-verbum-instances-on-one-page delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/benz56-add-mask-css-rule-to-allowlist delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-async-wpcom-sidebar-notice delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-global-styles-notice-distraction-free delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-jetpack-mu-wpcom-eslint_fixes delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-lint-error delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-migration-diy-throws-403-on-page-reload delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-php-fatal-in-wpcom delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-rdv-regressions-on-treatment delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-starter-page-templates delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-theme-button-color delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-uselocation-exception delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-wp-admin-post-fixes delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-wp-admin-rdv delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/hotfix-template-locked-bug delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/remove-duplicate-views-redesign-notices delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-automattic-color-studio-4.x delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-babel-monorepo delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-debug-4.x delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-definitelytyped delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-playwright-monorepo delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-async-wpcom-sidebar-notice delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-duplicate-views-cpt-taxonomies delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-duplicate-views-experiment-name delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-eslint-9 delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-eslint-config-for-ts-files delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-hide-switcher-duplicated-views delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-jetpack-mu-wpcom-translations delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-no-scss-random delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-packages-fix-eslint-9-lints delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-view-pages delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-notices delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-pages-quick-actions delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-snow-p2s delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-snow-scss delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-synced_newspack_blocks delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/verbum-fix-stuff delete mode 100644 projects/packages/masterbar/changelog/fix-self-hosted-product-redirect delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/add-ci-always-process-coverage delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/add-jetpack-mu-wpcom-watch delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/add-pre-option-filter-duplicate-views delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/fix-bump_composer_versions delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/fix-bump_composer_versions_round2 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/fix-global-styles-notice-distraction-free delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/fix-testimonials-module-by-zero-error delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/prerelease delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/prerelease#2 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/prerelease#3 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/prerelease#4 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/prerelease#5 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/prerelease#7 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/prerelease#8 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/prerelease#9 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/renovate-brain-monkey-2.x delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance#4 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance#5 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/update-composer delete mode 100644 projects/plugins/mu-wpcom-plugin/changelog/update-synced_newspack_blocks rename projects/plugins/{mu-wpcom-plugin => wpcomsh}/changelog/prerelease#6 (100%) diff --git a/projects/packages/blaze/CHANGELOG.md b/projects/packages/blaze/CHANGELOG.md index 8fdf025ed7ef3..457d7c1a8cc26 100644 --- a/projects/packages/blaze/CHANGELOG.md +++ b/projects/packages/blaze/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.25.5] - 2025-01-10 +### Fixed +- Blaze: Ensure post list quick link is added after quick edit. [#40889] +- Blaze: Fix external icon alignment on "Blaze this Post" button. [#40825] + ## [0.25.4] - 2024-12-16 ### Changed - Updated package dependencies. [#40564] @@ -501,6 +506,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated package dependencies. [#27906] +[0.25.5]: https://github.com/automattic/jetpack-blaze/compare/v0.25.4...v0.25.5 [0.25.4]: https://github.com/automattic/jetpack-blaze/compare/v0.25.3...v0.25.4 [0.25.3]: https://github.com/automattic/jetpack-blaze/compare/v0.25.2...v0.25.3 [0.25.2]: https://github.com/automattic/jetpack-blaze/compare/v0.25.1...v0.25.2 diff --git a/projects/packages/blaze/changelog/fix-icon-alignment-on-blaze-this-post-button b/projects/packages/blaze/changelog/fix-icon-alignment-on-blaze-this-post-button deleted file mode 100644 index fad7a9a33dbbd..0000000000000 --- a/projects/packages/blaze/changelog/fix-icon-alignment-on-blaze-this-post-button +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Blaze: Fix external icon alignment on "Blaze this Post" button diff --git a/projects/packages/blaze/changelog/fix-show-quicklinks-after-quickedit b/projects/packages/blaze/changelog/fix-show-quicklinks-after-quickedit deleted file mode 100644 index 1be619e65dffa..0000000000000 --- a/projects/packages/blaze/changelog/fix-show-quicklinks-after-quickedit +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Blaze: ensure post list quick link is added after quick edit diff --git a/projects/packages/blaze/package.json b/projects/packages/blaze/package.json index 9d73720732ff5..d2b553625c8b3 100644 --- a/projects/packages/blaze/package.json +++ b/projects/packages/blaze/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-blaze", - "version": "0.25.4", + "version": "0.25.5", "description": "Attract high-quality traffic to your site using Blaze. Using this service, you can advertise a post or page on some of the millions of pages across WordPress.com and Tumblr from just $5 per day.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/blaze/#readme", "bugs": { diff --git a/projects/packages/blaze/src/class-dashboard.php b/projects/packages/blaze/src/class-dashboard.php index 10cbec22d7c13..d1ea7471e6da5 100644 --- a/projects/packages/blaze/src/class-dashboard.php +++ b/projects/packages/blaze/src/class-dashboard.php @@ -21,7 +21,7 @@ class Dashboard { * * @var string */ - const PACKAGE_VERSION = '0.25.4'; + const PACKAGE_VERSION = '0.25.5'; /** * List of dependencies needed to render the dashboard in wp-admin. diff --git a/projects/packages/calypsoify/CHANGELOG.md b/projects/packages/calypsoify/CHANGELOG.md index fd7852dbf6ed2..d47aa85103eb9 100644 --- a/projects/packages/calypsoify/CHANGELOG.md +++ b/projects/packages/calypsoify/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.2.1] - 2025-01-10 +### Changed +- Updated package dependencies. [#40564] + ## [0.2.0] - 2024-12-04 ### Changed - Updated package dependencies. [#40288] [#40363] @@ -63,6 +67,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Calypsoify: Load feature from the Calypsoify package. [#37375] - Updated package dependencies. [#37379] +[0.2.1]: https://github.com/Automattic/jetpack-calypsoify/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/Automattic/jetpack-calypsoify/compare/v0.1.9...v0.2.0 [0.1.9]: https://github.com/Automattic/jetpack-calypsoify/compare/v0.1.8...v0.1.9 [0.1.8]: https://github.com/Automattic/jetpack-calypsoify/compare/v0.1.7...v0.1.8 diff --git a/projects/packages/calypsoify/changelog/renovate-wordpress-monorepo b/projects/packages/calypsoify/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/calypsoify/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/calypsoify/package.json b/projects/packages/calypsoify/package.json index 7c981666c04c1..b99bf9ccb485a 100644 --- a/projects/packages/calypsoify/package.json +++ b/projects/packages/calypsoify/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-calypsoify", - "version": "0.2.0", + "version": "0.2.1", "description": "Calypsoify is designed to make sure specific wp-admin pages include navigation that prioritizes the Calypso navigation experience.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/calypsoify/#readme", "bugs": { diff --git a/projects/packages/calypsoify/src/class-jetpack-calypsoify.php b/projects/packages/calypsoify/src/class-jetpack-calypsoify.php index 2633b23efd714..fedc3d3d547d0 100644 --- a/projects/packages/calypsoify/src/class-jetpack-calypsoify.php +++ b/projects/packages/calypsoify/src/class-jetpack-calypsoify.php @@ -15,7 +15,7 @@ */ class Jetpack_Calypsoify { - const PACKAGE_VERSION = '0.2.0'; + const PACKAGE_VERSION = '0.2.1'; /** * Singleton instance of `Jetpack_Calypsoify`. diff --git a/projects/packages/classic-theme-helper/CHANGELOG.md b/projects/packages/classic-theme-helper/CHANGELOG.md index 727931386a3cb..17b41e9fd78d9 100644 --- a/projects/packages/classic-theme-helper/CHANGELOG.md +++ b/projects/packages/classic-theme-helper/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.8.3] - 2025-01-10 +### Fixed +- Testimonials: Fix a shortcode-related bug which occurs if the column attribute is added and set to 0. [#40896] + ## [0.8.2] - 2025-01-06 ### Changed - Updated package dependencies. [#40784] [#40831] @@ -185,6 +189,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Add wordpress folder on gitignore. [#37177] +[0.8.3]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.2...v0.8.3 [0.8.2]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.1...v0.8.2 [0.8.1]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.0...v0.8.1 [0.8.0]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.7.4...v0.8.0 diff --git a/projects/packages/classic-theme-helper/changelog/fix-testimonials-module-by-zero-error b/projects/packages/classic-theme-helper/changelog/fix-testimonials-module-by-zero-error deleted file mode 100644 index cfcf858702e8b..0000000000000 --- a/projects/packages/classic-theme-helper/changelog/fix-testimonials-module-by-zero-error +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Testimonials: fix a shortcode related bug which ccurs if the column attribute is added and set to 0 diff --git a/projects/packages/classic-theme-helper/package.json b/projects/packages/classic-theme-helper/package.json index ed1ba8be35361..ac6c4d52c2d2b 100644 --- a/projects/packages/classic-theme-helper/package.json +++ b/projects/packages/classic-theme-helper/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-classic-theme-helper", - "version": "0.8.2", + "version": "0.8.3", "description": "Features used with classic themes", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/classic-theme-helper/#readme", "bugs": { diff --git a/projects/packages/classic-theme-helper/src/class-main.php b/projects/packages/classic-theme-helper/src/class-main.php index 8ba4c009194bb..376578fb7be19 100644 --- a/projects/packages/classic-theme-helper/src/class-main.php +++ b/projects/packages/classic-theme-helper/src/class-main.php @@ -14,7 +14,7 @@ */ class Main { - const PACKAGE_VERSION = '0.8.2'; + const PACKAGE_VERSION = '0.8.3'; /** * Modules to include. diff --git a/projects/packages/jetpack-mu-wpcom/CHANGELOG.md b/projects/packages/jetpack-mu-wpcom/CHANGELOG.md index f408523a2011c..5c6c85ff26622 100644 --- a/projects/packages/jetpack-mu-wpcom/CHANGELOG.md +++ b/projects/packages/jetpack-mu-wpcom/CHANGELOG.md @@ -5,6 +5,46 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [6.1.0] - 2025-01-10 +### Added +- Add watch command for this package in composer.json file. [#40927] +- Add comments page to the list of untangled pages under the experiment. [#40649] +- CSS Tidy: Add css rule mask to allowlist. [#40655] +- Pages: Add quick actions to change the homepage and the posts page. [#40699] +- Post categories: Add quick action to change default category. [#40667] +- Remove duplicate views: Show notices. [#40609] +- WordPress.com Features: Add Holiday Snow functionality. [#40478] + +### Changed +- Admin menu: Hide dashboard switcher when WP Admin view is enforced. [#40595] +- Holiday Snow: Switch to a CSS-only implementation. [#40629] +- Newspack Blocks: Update to version 4.5.2. [#40636] +- Remove the option to close upsell notification for custom styles. [#40520] +- Remove duplicate views: Enforce WP Admin for Pages. [#40706] +- Remove duplicate views: Redesign notices. [#40901] +- Use WP Admin for some sections while keeping some untangling changes. [#40479] +- Updated package dependencies. [#40564] [#40693] [#40792] [#40797] [#40798] [#40810] +- Use wp_add_inline_script. [#40465] + +### Fixed +- Add a function_exists guard for `wpcom_is_duplicate_views_experiment_enabled` function. [#40708] +- Code: Clean up JSDoc comments. [#40578] +- Comments: Add cookie consent input and fix console error. [#40494] +- Exclude wpcom_admin_interface from the admin_menu action. [#40669] +- Fix lints following ESLint rule changes for TypeScript. [#40584] +- Fix several regressions for Stats, Blaze and notices for RDV experiment. [#40690] +- Fix migration key fetch failing when DIY migration page is reloaded. [#40270] +- Global Styles: Stop showing the limited global styles notice in distraction-free mode. [#40907] +- Gutenberg 19.8.0 hotfix: Don't show the template-locked rendering mode for pages. [#40664] +- Holiday Snow: Do not display on p2s. [#40519] +- Holiday snow: Replace SCSS `random()` with pregenerated arrays of random numbers to make builds reproducable. [#40666] +- i18n: Update the .mo and .po translation files. [#40362] +- Load WPCOM sidebar notice async. [#40422] +- Restore visited button color in themes.php to Core's default. [#40517] +- Starter page templates: Insert the pattern to the Content block correctly when rendering mode is template-locked. [#40583] +- Support adding a comment form inside a query loop. [#40933] +- wpcom-block-editor-nux: Avoid using useLocation which now throws exception outside Site Editor in Gutenberg 19.9.0. [#40656] + ## [6.0.0] - 2024-12-04 ### Changed - Updated dependencies. [#40286] @@ -1316,6 +1356,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Testing initial package release. +[6.1.0]: https://github.com/Automattic/jetpack-mu-wpcom/compare/v6.0.0...v6.1.0 [6.0.0]: https://github.com/Automattic/jetpack-mu-wpcom/compare/v5.66.0...v6.0.0 [5.66.0]: https://github.com/Automattic/jetpack-mu-wpcom/compare/v5.65.0...v5.66.0 [5.65.0]: https://github.com/Automattic/jetpack-mu-wpcom/compare/v5.64.0...v5.65.0 diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-duplicate-views-assignment b/projects/packages/jetpack-mu-wpcom/changelog/add-duplicate-views-assignment deleted file mode 100644 index dbda2687742d8..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/add-duplicate-views-assignment +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - - diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-holiday-snow b/projects/packages/jetpack-mu-wpcom/changelog/add-holiday-snow deleted file mode 100644 index 59dee1913ffb6..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/add-holiday-snow +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -WordPress.com Features: add Holiday Snow functionality. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-improve-upsell-notification-for-custom-styles b/projects/packages/jetpack-mu-wpcom/changelog/add-improve-upsell-notification-for-custom-styles deleted file mode 100644 index 34b7d7d72adcc..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/add-improve-upsell-notification-for-custom-styles +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Removed the option to close upsell notification for custom styles diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-jetpack-mu-wpcom-watch b/projects/packages/jetpack-mu-wpcom/changelog/add-jetpack-mu-wpcom-watch deleted file mode 100644 index 369e85a23b697..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/add-jetpack-mu-wpcom-watch +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Add a watch command for this package in composer.json diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-pre-option-filter-duplicate-views b/projects/packages/jetpack-mu-wpcom/changelog/add-pre-option-filter-duplicate-views deleted file mode 100644 index cef38efd4b578..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/add-pre-option-filter-duplicate-views +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Switch to WP-Admin some sections while keeping some untangling changes diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-set-default-category-quick-action b/projects/packages/jetpack-mu-wpcom/changelog/add-set-default-category-quick-action deleted file mode 100644 index 562cea91dca9a..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/add-set-default-category-quick-action +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Post categories: Add quick action to change default category diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-untangled-comments-experiment b/projects/packages/jetpack-mu-wpcom/changelog/add-untangled-comments-experiment deleted file mode 100644 index ac7a04cbe6b38..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/add-untangled-comments-experiment +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Added the comments page to the list of untangled pages under the experiment diff --git a/projects/packages/jetpack-mu-wpcom/changelog/allow-multiple-verbum-instances-on-one-page b/projects/packages/jetpack-mu-wpcom/changelog/allow-multiple-verbum-instances-on-one-page deleted file mode 100644 index 06949a5bdb74d..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/allow-multiple-verbum-instances-on-one-page +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -To support adding a comment form inside a query loop diff --git a/projects/packages/jetpack-mu-wpcom/changelog/benz56-add-mask-css-rule-to-allowlist b/projects/packages/jetpack-mu-wpcom/changelog/benz56-add-mask-css-rule-to-allowlist deleted file mode 100644 index 0841f37a48c0e..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/benz56-add-mask-css-rule-to-allowlist +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -CSS Tidy: add css rule mask to allowlist diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-async-wpcom-sidebar-notice b/projects/packages/jetpack-mu-wpcom/changelog/fix-async-wpcom-sidebar-notice deleted file mode 100644 index 4b61f4337ea15..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-async-wpcom-sidebar-notice +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Load WPCOM sidebar notice async diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-global-styles-notice-distraction-free b/projects/packages/jetpack-mu-wpcom/changelog/fix-global-styles-notice-distraction-free deleted file mode 100644 index fb897e76fe370..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-global-styles-notice-distraction-free +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Global Styles: Stop showing the limited global styles notice in distraction free mode. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-jetpack-mu-wpcom-eslint_fixes b/projects/packages/jetpack-mu-wpcom/changelog/fix-jetpack-mu-wpcom-eslint_fixes deleted file mode 100644 index 812b9286ccba6..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-jetpack-mu-wpcom-eslint_fixes +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Clean up JSDoc comments. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-lint-error b/projects/packages/jetpack-mu-wpcom/changelog/fix-lint-error deleted file mode 100644 index b43bcfcf41a05..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-lint-error +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fix lint error from #40583 + #40578 - - diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-migration-diy-throws-403-on-page-reload b/projects/packages/jetpack-mu-wpcom/changelog/fix-migration-diy-throws-403-on-page-reload deleted file mode 100644 index f6c66cc0de6aa..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-migration-diy-throws-403-on-page-reload +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix migration key fetch failing when DIY migration page is reloaded diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-php-fatal-in-wpcom b/projects/packages/jetpack-mu-wpcom/changelog/fix-php-fatal-in-wpcom deleted file mode 100644 index e460fda027a8f..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-php-fatal-in-wpcom +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Add a function_exists guard for wpcom_is_duplicate_views_experiment_enabled function diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-rdv-regressions-on-treatment b/projects/packages/jetpack-mu-wpcom/changelog/fix-rdv-regressions-on-treatment deleted file mode 100644 index 5ce69e6f92aaf..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-rdv-regressions-on-treatment +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixed several regressions for Stats, Blaze and notices for RDV experiment diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-starter-page-templates b/projects/packages/jetpack-mu-wpcom/changelog/fix-starter-page-templates deleted file mode 100644 index e7caaa085dc62..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-starter-page-templates +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Starter page templates: correctly insert the pattern to the Content block when rendering mode is template-locked diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-theme-button-color b/projects/packages/jetpack-mu-wpcom/changelog/fix-theme-button-color deleted file mode 100644 index b94941918c157..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-theme-button-color +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Restore visited button color in themes.php to Core's default diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-uselocation-exception b/projects/packages/jetpack-mu-wpcom/changelog/fix-uselocation-exception deleted file mode 100644 index fc95eb7085776..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-uselocation-exception +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -wpcom-block-editor-nux: avoid using useLocation which now throws exception outside Site Editor in Gutenberg 19.9.0 diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-wp-admin-post-fixes b/projects/packages/jetpack-mu-wpcom/changelog/fix-wp-admin-post-fixes deleted file mode 100644 index bbf2e7375d50c..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-wp-admin-post-fixes +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fix the stats and promote with blaze quicklinks in edit.php for Simple sites that are part of the remove duplicate views experiment - - diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-wp-admin-rdv b/projects/packages/jetpack-mu-wpcom/changelog/fix-wp-admin-rdv deleted file mode 100644 index cc90987517731..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-wp-admin-rdv +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Exclude the wpcom_admin_interface from the admin_menu action diff --git a/projects/packages/jetpack-mu-wpcom/changelog/hotfix-template-locked-bug b/projects/packages/jetpack-mu-wpcom/changelog/hotfix-template-locked-bug deleted file mode 100644 index d3c084bd1a72d..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/hotfix-template-locked-bug +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Gutenberg 19.8.0 hotfix: don't show the template-locked rendering mode for pages diff --git a/projects/packages/jetpack-mu-wpcom/changelog/remove-duplicate-views-redesign-notices b/projects/packages/jetpack-mu-wpcom/changelog/remove-duplicate-views-redesign-notices deleted file mode 100644 index e5d06d7fa8603..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/remove-duplicate-views-redesign-notices +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Remove duplicate views: Redesign notices diff --git a/projects/packages/jetpack-mu-wpcom/changelog/renovate-automattic-color-studio-4.x b/projects/packages/jetpack-mu-wpcom/changelog/renovate-automattic-color-studio-4.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/renovate-automattic-color-studio-4.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/renovate-babel-monorepo b/projects/packages/jetpack-mu-wpcom/changelog/renovate-babel-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/renovate-babel-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/renovate-debug-4.x b/projects/packages/jetpack-mu-wpcom/changelog/renovate-debug-4.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/renovate-debug-4.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/renovate-definitelytyped b/projects/packages/jetpack-mu-wpcom/changelog/renovate-definitelytyped deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/renovate-definitelytyped +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/renovate-playwright-monorepo b/projects/packages/jetpack-mu-wpcom/changelog/renovate-playwright-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/renovate-playwright-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo b/projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-async-wpcom-sidebar-notice b/projects/packages/jetpack-mu-wpcom/changelog/update-async-wpcom-sidebar-notice deleted file mode 100644 index 1a85410bed57e..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-async-wpcom-sidebar-notice +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Use wp_add_inline_script diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-duplicate-views-cpt-taxonomies b/projects/packages/jetpack-mu-wpcom/changelog/update-duplicate-views-cpt-taxonomies deleted file mode 100644 index dbda2687742d8..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-duplicate-views-cpt-taxonomies +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - - diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-duplicate-views-experiment-name b/projects/packages/jetpack-mu-wpcom/changelog/update-duplicate-views-experiment-name deleted file mode 100644 index 05ffe09f19e66..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-duplicate-views-experiment-name +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - - diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-eslint-9 b/projects/packages/jetpack-mu-wpcom/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-eslint-config-for-ts-files b/projects/packages/jetpack-mu-wpcom/changelog/update-eslint-config-for-ts-files deleted file mode 100644 index fefec667583fd..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-eslint-config-for-ts-files +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixed lints following ESLint rule changes for TS diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-hide-switcher-duplicated-views b/projects/packages/jetpack-mu-wpcom/changelog/update-hide-switcher-duplicated-views deleted file mode 100644 index 6c2c108ea3e4b..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-hide-switcher-duplicated-views +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Admin menu: Hide dashboard switcher when WP Admin view is enforced diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-jetpack-mu-wpcom-translations b/projects/packages/jetpack-mu-wpcom/changelog/update-jetpack-mu-wpcom-translations deleted file mode 100644 index 5999804bb60de..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-jetpack-mu-wpcom-translations +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: fixed - -i18n: updated the .mo and .po translation files diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-no-scss-random b/projects/packages/jetpack-mu-wpcom/changelog/update-no-scss-random deleted file mode 100644 index dfbf589fd7a43..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-no-scss-random +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Holiday snow: Replace SCSS `random()` with pregenerated arrays of random numbers to make builds reproducable. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-packages-fix-eslint-9-lints b/projects/packages/jetpack-mu-wpcom/changelog/update-packages-fix-eslint-9-lints deleted file mode 100644 index b3176fbef2f88..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-packages-fix-eslint-9-lints +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fix some JS lints ahead of eslint 9 upgrade. - - diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-view-pages b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-view-pages deleted file mode 100644 index ba545d1b4eacb..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-view-pages +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Remove duplicate views: Enforce WP Admin for Pages diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-notices b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-notices deleted file mode 100644 index ffbc563527e4f..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-notices +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Remove duplicate views: Show notices diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-pages-quick-actions b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-pages-quick-actions deleted file mode 100644 index f7863e4d48100..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-pages-quick-actions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Pages: Add quick actions to change the homepage and the posts page diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-snow-p2s b/projects/packages/jetpack-mu-wpcom/changelog/update-snow-p2s deleted file mode 100644 index 5c05ef6f745fb..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-snow-p2s +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Holiday Snow: do not display on p2s. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-snow-scss b/projects/packages/jetpack-mu-wpcom/changelog/update-snow-scss deleted file mode 100644 index bb147025e71ef..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-snow-scss +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Holiday Snow: switch to a CSS-only implementation. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-synced_newspack_blocks b/projects/packages/jetpack-mu-wpcom/changelog/update-synced_newspack_blocks deleted file mode 100644 index 15206e680281d..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/update-synced_newspack_blocks +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Newspack Blocks: Updated to version 4.5.2. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/verbum-fix-stuff b/projects/packages/jetpack-mu-wpcom/changelog/verbum-fix-stuff deleted file mode 100644 index b887e0671ba5a..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/verbum-fix-stuff +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Comments: add cookie consent input and fix console error diff --git a/projects/packages/jetpack-mu-wpcom/composer.json b/projects/packages/jetpack-mu-wpcom/composer.json index 20481256bcf4c..5fdc9d3fb610b 100644 --- a/projects/packages/jetpack-mu-wpcom/composer.json +++ b/projects/packages/jetpack-mu-wpcom/composer.json @@ -69,7 +69,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "6.0.x-dev" + "dev-trunk": "6.1.x-dev" }, "textdomain": "jetpack-mu-wpcom", "version-constants": { diff --git a/projects/packages/jetpack-mu-wpcom/package.json b/projects/packages/jetpack-mu-wpcom/package.json index a2c12246bc23f..eca06a26709bc 100644 --- a/projects/packages/jetpack-mu-wpcom/package.json +++ b/projects/packages/jetpack-mu-wpcom/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-mu-wpcom", - "version": "6.0.0", + "version": "6.1.0", "description": "Enhances your site with features powered by WordPress.com", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/jetpack-mu-wpcom/#readme", "bugs": { diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index 8234c0d13aa7e..cebbfe5b39b7a 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -15,7 +15,7 @@ * Jetpack_Mu_Wpcom main class. */ class Jetpack_Mu_Wpcom { - const PACKAGE_VERSION = '6.0.0'; + const PACKAGE_VERSION = '6.1.0'; const PKG_DIR = __DIR__ . '/../'; const BASE_DIR = __DIR__ . '/'; const BASE_FILE = __FILE__; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/holiday-snow/class-holiday-snow.php b/projects/packages/jetpack-mu-wpcom/src/features/holiday-snow/class-holiday-snow.php index 90bcf477af7ad..881304093f60a 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/holiday-snow/class-holiday-snow.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/holiday-snow/class-holiday-snow.php @@ -3,7 +3,7 @@ * Holiday Snow * Adds falling snow to a blog starting December 1 and ending January 3. * - * @since $$next-version$$ + * @since 6.1.0 * * @package automattic/jetpack-mu-wpcom */ @@ -40,7 +40,7 @@ public static function is_snow_season() { * It allows to change the start and end dates of the season, * for regions where the holiday season may be different. * - * @since $$next-version$$ + * @since 6.1.0 * * @param bool $is_holiday_snow_season Is it the snow season? */ @@ -52,7 +52,7 @@ public static function is_snow_season() { * p2 is currently not compatible with Holiday Snow. * This covers both P2 and P2020 themes. * - * @deprecated $$next-version$$ + * @deprecated 6.1.0 * * @return bool */ @@ -95,7 +95,7 @@ public static function init() { * Add the snowstorm markup to the footer. * * @return void - * @since $$next-version$$ + * @since 6.1.0 */ public static function holiday_snow_markup() { echo '
'; @@ -111,7 +111,7 @@ public static function holiday_snow_script() { /** * Allow short-circuiting the snow, even when enabled on the site in settings. * - * @since $$next-version$$ + * @since 6.1.0 * * @param bool true Whether to show the snow. */ @@ -123,15 +123,15 @@ public static function holiday_snow_script() { /** * Fires when the snow is falling. * - * @since $$next-version$$ + * @since 6.1.0 */ do_action( 'jetpack_stats_extra', 'holiday_snow', 'snowing' ); /** * Filter the URL of the snowstorm script. * - * @since $$next-version$$ - * @deprecated $$next-version$$ We've switched to a CSS-only snow effect. + * @since 6.1.0 + * @deprecated 6.1.0 We've switched to a CSS-only snow effect. * * @param string $snowstorm_url URL of the snowstorm script. */ diff --git a/projects/packages/masterbar/CHANGELOG.md b/projects/packages/masterbar/CHANGELOG.md index 9e507d1372f91..55bfafe7ea4e8 100644 --- a/projects/packages/masterbar/CHANGELOG.md +++ b/projects/packages/masterbar/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.10.6] - 2025-01-10 +### Changed +- Fixes the self-hosted link when WooCommerce is installed alongside SSO. [#40840] + ## [0.10.5] - 2025-01-06 ### Changed - Updated package dependencies. [#40784] [#40792] [#40831] @@ -194,6 +198,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Notifications: Change Icon [#37676] - Updated package dependencies. [#37669] [#37706] +[0.10.6]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.5...v0.10.6 [0.10.5]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.4...v0.10.5 [0.10.4]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.3...v0.10.4 [0.10.3]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.2...v0.10.3 diff --git a/projects/packages/masterbar/changelog/fix-self-hosted-product-redirect b/projects/packages/masterbar/changelog/fix-self-hosted-product-redirect deleted file mode 100644 index d53735d91ecdd..0000000000000 --- a/projects/packages/masterbar/changelog/fix-self-hosted-product-redirect +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Fixes the self-hosted link when WooCommerce is installed alongside with the SSO. diff --git a/projects/packages/masterbar/package.json b/projects/packages/masterbar/package.json index 84e2be2c2c93b..6329dcc7de7a1 100644 --- a/projects/packages/masterbar/package.json +++ b/projects/packages/masterbar/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-masterbar", - "version": "0.10.5", + "version": "0.10.6", "description": "The WordPress.com Toolbar feature replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/masterbar/#readme", "bugs": { diff --git a/projects/packages/masterbar/src/class-main.php b/projects/packages/masterbar/src/class-main.php index fec630588715c..4cf4503ffc7fc 100644 --- a/projects/packages/masterbar/src/class-main.php +++ b/projects/packages/masterbar/src/class-main.php @@ -14,7 +14,7 @@ */ class Main { - const PACKAGE_VERSION = '0.10.5'; + const PACKAGE_VERSION = '0.10.6'; /** * Initializer. diff --git a/projects/plugins/mu-wpcom-plugin/CHANGELOG.md b/projects/plugins/mu-wpcom-plugin/CHANGELOG.md index cd93fc78e7131..4109e0ef0df9d 100644 --- a/projects/plugins/mu-wpcom-plugin/CHANGELOG.md +++ b/projects/plugins/mu-wpcom-plugin/CHANGELOG.md @@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 2.7.0 - 2025-01-10 +### Added +- WordPress.com Features: Add Holiday Snow functionality. [#40478] + +### Changed +- Newspack Blocks: Update to version 4.5.2. [#40636] +- Updated dependencies. [#40286] +- Updated package dependencies. [#40116] [#40515] + +### Fixed +- Global Styles: Stop showing the limited global styles notice in distraction-free mode. [#40907] +- Testimonials: Fix a shortcode related bug which ccurs if the column attribute is added and set to 0. [#40896] + ## 2.6.1 - 2024-11-11 ### Changed - Internal updates. diff --git a/projects/plugins/mu-wpcom-plugin/changelog/add-ci-always-process-coverage b/projects/plugins/mu-wpcom-plugin/changelog/add-ci-always-process-coverage deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/add-ci-always-process-coverage +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/add-jetpack-mu-wpcom-watch b/projects/plugins/mu-wpcom-plugin/changelog/add-jetpack-mu-wpcom-watch deleted file mode 100644 index 50f27fde68dca..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/add-jetpack-mu-wpcom-watch +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: update composer.lock file - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/add-pre-option-filter-duplicate-views b/projects/plugins/mu-wpcom-plugin/changelog/add-pre-option-filter-duplicate-views deleted file mode 100644 index 19105e05f270e..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/add-pre-option-filter-duplicate-views +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Changes related to WoA - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/fix-bump_composer_versions b/projects/plugins/mu-wpcom-plugin/changelog/fix-bump_composer_versions deleted file mode 100644 index 13cbf3392f78d..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/fix-bump_composer_versions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated dependencies. diff --git a/projects/plugins/mu-wpcom-plugin/changelog/fix-bump_composer_versions_round2 b/projects/plugins/mu-wpcom-plugin/changelog/fix-bump_composer_versions_round2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/fix-bump_composer_versions_round2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/fix-global-styles-notice-distraction-free b/projects/plugins/mu-wpcom-plugin/changelog/fix-global-styles-notice-distraction-free deleted file mode 100644 index fb897e76fe370..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/fix-global-styles-notice-distraction-free +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Global Styles: Stop showing the limited global styles notice in distraction free mode. diff --git a/projects/plugins/mu-wpcom-plugin/changelog/fix-testimonials-module-by-zero-error b/projects/plugins/mu-wpcom-plugin/changelog/fix-testimonials-module-by-zero-error deleted file mode 100644 index cfcf858702e8b..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/fix-testimonials-module-by-zero-error +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Testimonials: fix a shortcode related bug which ccurs if the column attribute is added and set to 0 diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease b/projects/plugins/mu-wpcom-plugin/changelog/prerelease deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/prerelease +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#2 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#3 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#3 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#4 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#4 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#5 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#7 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#7 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#7 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#8 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#8 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#8 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#9 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#9 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/renovate-brain-monkey-2.x b/projects/plugins/mu-wpcom-plugin/changelog/renovate-brain-monkey-2.x deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/renovate-brain-monkey-2.x +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance b/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance#4 b/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance#4 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance#4 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance#5 b/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/update-bump_min_php_to_7.2 b/projects/plugins/mu-wpcom-plugin/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/update-composer b/projects/plugins/mu-wpcom-plugin/changelog/update-composer deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/update-composer +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/mu-wpcom-plugin/changelog/update-synced_newspack_blocks b/projects/plugins/mu-wpcom-plugin/changelog/update-synced_newspack_blocks deleted file mode 100644 index 15206e680281d..0000000000000 --- a/projects/plugins/mu-wpcom-plugin/changelog/update-synced_newspack_blocks +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Newspack Blocks: Updated to version 4.5.2. diff --git a/projects/plugins/mu-wpcom-plugin/composer.json b/projects/plugins/mu-wpcom-plugin/composer.json index 27235894849c1..03c52b5fd753d 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.json +++ b/projects/plugins/mu-wpcom-plugin/composer.json @@ -45,6 +45,6 @@ "release-branch-prefix": "mu-wpcom" }, "config": { - "autoloader-suffix": "d9d132a783958a00a2c7cccff60ca42d_jetpack_mu_wpcom_pluginⓥ2_6_1" + "autoloader-suffix": "d9d132a783958a00a2c7cccff60ca42d_jetpack_mu_wpcom_pluginⓥ2_7_0" } } diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index e722837776d98..9f07e732a7923 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -1060,7 +1060,7 @@ "dist": { "type": "path", "url": "../../packages/jetpack-mu-wpcom", - "reference": "ed55315319c331275f4f0c715294d5a9350ed7ea" + "reference": "7004e837cd80b875b6bd42f1e984f9f5e9114e03" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1094,7 +1094,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "6.0.x-dev" + "dev-trunk": "6.1.x-dev" }, "textdomain": "jetpack-mu-wpcom", "version-constants": { diff --git a/projects/plugins/mu-wpcom-plugin/mu-wpcom-plugin.php b/projects/plugins/mu-wpcom-plugin/mu-wpcom-plugin.php index d93096398aaab..f5adad830cee9 100644 --- a/projects/plugins/mu-wpcom-plugin/mu-wpcom-plugin.php +++ b/projects/plugins/mu-wpcom-plugin/mu-wpcom-plugin.php @@ -3,7 +3,7 @@ * * Plugin Name: WordPress.com Features * Description: Test plugin for the jetpack-mu-wpcom package - * Version: 2.6.1 + * Version: 2.7.0 * Author: Automattic * License: GPLv2 or later * Text Domain: jetpack-mu-wpcom-plugin diff --git a/projects/plugins/mu-wpcom-plugin/package.json b/projects/plugins/mu-wpcom-plugin/package.json index b46cac42cc36c..bda5def29de5d 100644 --- a/projects/plugins/mu-wpcom-plugin/package.json +++ b/projects/plugins/mu-wpcom-plugin/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-mu-wpcom-plugin", - "version": "2.6.1", + "version": "2.7.0", "description": "Test plugin for the jetpack-mu-wpcom package", "homepage": "https://jetpack.com", "bugs": { diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#6 b/projects/plugins/wpcomsh/changelog/prerelease#6 similarity index 100% rename from projects/plugins/mu-wpcom-plugin/changelog/prerelease#6 rename to projects/plugins/wpcomsh/changelog/prerelease#6 diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index 97883d9e16e72..db45ee57759db 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -1197,7 +1197,7 @@ "dist": { "type": "path", "url": "../../packages/jetpack-mu-wpcom", - "reference": "ed55315319c331275f4f0c715294d5a9350ed7ea" + "reference": "7004e837cd80b875b6bd42f1e984f9f5e9114e03" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1231,7 +1231,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "6.0.x-dev" + "dev-trunk": "6.1.x-dev" }, "textdomain": "jetpack-mu-wpcom", "version-constants": { From fb06be1031fa29a238a15db26646d1034f440571 Mon Sep 17 00:00:00 2001 From: Mike Stott Date: Fri, 10 Jan 2025 17:03:33 +0000 Subject: [PATCH 015/420] Rebrander fixes in the core plugin (#40919) * some fixes to the white label version * version back to what it was * Changelog * some tweaks to be firmer with the WLREMOVE * tidy up * tidy up * Move white-label borders * Chop disabled no-op code * Linting party * Remove file from excludelist --------- Co-authored-by: tbradsha <32492176+tbradsha@users.noreply.github.com> --- .../crm/admin/settings/general.page.php | 2 - .../crm/changelog/crm-fix-rebrandr-issues | 4 + .../plugins/crm/includes/ZeroBSCRM.Core.php | 2 + .../includes/ZeroBSCRM.PluginAdminNotices.php | 113 +++++------------- tools/phpcs-excludelist.json | 1 - 5 files changed, 39 insertions(+), 83 deletions(-) create mode 100644 projects/plugins/crm/changelog/crm-fix-rebrandr-issues diff --git a/projects/plugins/crm/admin/settings/general.page.php b/projects/plugins/crm/admin/settings/general.page.php index 9b6c9d96797d8..01d81fd5c1a01 100644 --- a/projects/plugins/crm/admin/settings/general.page.php +++ b/projects/plugins/crm/admin/settings/general.page.php @@ -601,9 +601,7 @@ -
-
dependency_checker = new JPCRM_DependencyChecker(); // load feature sniffer to alert user to available integrations + ##WLREMOVE $this->feature_sniffer = new JPCRM_FeatureSniffer(); $this->jpcrm_sniff_features(); + ##/WLREMOVE // load WordPress User integrations $this->wordpress_user_integration = new Automattic\JetpackCRM\Wordpress_User_Integration(); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.PluginAdminNotices.php b/projects/plugins/crm/includes/ZeroBSCRM.PluginAdminNotices.php index 3fd18543d84e2..989679aef462a 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.PluginAdminNotices.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.PluginAdminNotices.php @@ -1,111 +1,64 @@ -hide_admin_pages` -*/ -function jpcrm_autohide_admin_notices_for_specific_pages(){ - - global $zbs; - - if ( isset( $zbs->hide_admin_pages ) && is_array( $zbs->hide_admin_pages ) ){ - - if ( !empty( $zbs->zbsvar('page') ) && in_array( $zbs->zbsvar('page'), $zbs->hide_admin_pages ) ){ - - remove_all_actions( 'admin_notices' ); - - } - - } -} - - - -// admin notices -// show/hide admin notice :) -//add_action( 'admin_notices', 'jpcrm_woo_promo_admin_notice' ); -function jpcrm_woo_promo_admin_notice(){ - - global $zbs; - $bundle = false; if ($zbs->hasFreelancerBundleMin()) $bundle = true; - - //default true if not set - $display_status = get_option( 'jpcrm_hide_woo_promo', 'show' ); - - /* Check transient, if available display notice */ - if ( current_user_can( 'activate_plugins' )){ - - if(is_plugin_active( 'woocommerce/woocommerce.php' ) && zeroBSCRM_isAdminPage() && !zeroBSCRM_isExtensionInstalled('woosync') && !$bundle && $display_status != "hide"){ - jpcrm_woo_promo_admin_notice_banner(); - } - - }else{ - - } - -} - - - /** - * WooCommerce promo if running one + * This function blocks display of admin_notices on pages specified in `$zbs->hide_admin_pages` */ -function jpcrm_woo_promo_admin_notice_banner(){ +function jpcrm_autohide_admin_notices_for_specific_pages() { + global $zbs; + if ( isset( $zbs->hide_admin_pages ) && is_array( $zbs->hide_admin_pages ) ) { + if ( ! empty( $zbs->zbsvar( 'page' ) ) && in_array( $zbs->zbsvar( 'page' ), $zbs->hide_admin_pages, true ) ) { + remove_all_actions( 'admin_notices' ); + } + } } +##WLREMOVE /** - * Usage Tracking + * Check if we should show Usage Tracking notice, and if so, trigger it. */ - -add_action( 'admin_notices', 'jpcrm_usage_tracking_notice' ); -function jpcrm_usage_tracking_notice(){ - - global $zbs; - - //default true if not set - $display_status = get_option( 'jpcrm_hide_track_notice', 'show' ); - /* Check transient, if available display notice to admins */ - if ( current_user_can( 'activate_plugins' )){ - - if(zeroBSCRM_isAdminPage() && $display_status != "hide"){ - jpcrm_usage_tracking_notice_banner(); - } - - }else{ - - } - +function jpcrm_usage_tracking_notice() { + // default true if not set + $display_status = get_option( 'jpcrm_hide_track_notice', 'show' ); + /* Check transient, if available display notice to admins */ + if ( + current_user_can( 'activate_plugins' ) + && zeroBSCRM_isAdminPage() + && $display_status !== 'hide' + ) { + jpcrm_usage_tracking_notice_banner(); + } } +add_action( 'admin_notices', 'jpcrm_usage_tracking_notice' ); - -function jpcrm_usage_tracking_notice_banner(){ - +/** + * Display usage tracking notice. + */ +function jpcrm_usage_tracking_notice_banner() { global $zbs; // don't show if wizard was completed if ( get_option( 'jpcrm_wizard_completed' ) ) { return; } - ?>
Date: Fri, 10 Jan 2025 17:09:08 +0000 Subject: [PATCH 016/420] Jetpack CRM - Modern Invoice template (improves CSS and layouts) (#40514) * modern invoice template * changelog * tidying up invoice builder * fix sass * add empty line --- .../crm/changelog/crm-fix-invoice-pdf-css | 4 + .../crm/includes/ZeroBSCRM.InvoiceBuilder.php | 22 +- .../crm/includes/ZeroBSCRM.List.Views.php | 28 -- .../crm/js/ZeroBSCRM.admin.listview.js | 30 +- .../sass/ZeroBSCRM.admin.invoicebuilder.scss | 14 +- .../plugins/crm/sass/_ZeroBSCRM.listview.scss | 4 + .../crm/sass/emerald/_listview-table.scss | 10 + .../invoices/invoice-pdf-template-modern.html | 335 ++++++++++++++++++ 8 files changed, 397 insertions(+), 50 deletions(-) create mode 100644 projects/plugins/crm/changelog/crm-fix-invoice-pdf-css create mode 100644 projects/plugins/crm/templates/invoices/invoice-pdf-template-modern.html diff --git a/projects/plugins/crm/changelog/crm-fix-invoice-pdf-css b/projects/plugins/crm/changelog/crm-fix-invoice-pdf-css new file mode 100644 index 0000000000000..a0adf8eb1afea --- /dev/null +++ b/projects/plugins/crm/changelog/crm-fix-invoice-pdf-css @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixing bugs in the default PDF template and other fixes. Created a new template to maintain backwards compatibility diff --git a/projects/plugins/crm/includes/ZeroBSCRM.InvoiceBuilder.php b/projects/plugins/crm/includes/ZeroBSCRM.InvoiceBuilder.php index 5610f26a62869..0ae623853d85e 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.InvoiceBuilder.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.InvoiceBuilder.php @@ -1000,11 +1000,11 @@ function zeroBSCRM_invoicing_generateInvoiceHTML( $invoice_id = -1, $template = // due to withTotals parameter on get above, we now don't need ot calc anything here, just expose $totals_table = ''; - $totals_table .= ''; + $totals_table .= '
'; if ( $invsettings['invtax'] != 0 || $invsettings['invpandp'] != 0 || $invsettings['invdis'] != 0 ) { // phpcs:ignore Universal.Operators.StrictComparisons.LooseNotEqual $totals_table .= ''; $totals_table .= ''; - $totals_table .= ' - - - - + + + '; } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.List.Views.php b/projects/plugins/crm/includes/ZeroBSCRM.List.Views.php index 3d02984ceebde..bfd933ed37f7f 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.List.Views.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.List.Views.php @@ -198,34 +198,6 @@ function zeroBSCRM_render_invoiceslist_page() { // phpcs:ignore WordPress.Naming global $zbs; $upsell_box_html = ''; - $bundle = false; - if ( $zbs->hasEntrepreneurBundleMin() ) { - $bundle = true; - } - - if ( ! zeroBSCRM_isExtensionInstalled( 'invpro' ) ) { - if ( ! $bundle ) { - $upsell_box_html = '
'; - - $up_title = esc_html__( 'Supercharged Invoicing', 'zero-bs-crm' ); - $up_desc = esc_html__( 'Get more out of invoicing, like accepting online payments!', 'zero-bs-crm' ); - $up_button = esc_html__( 'Get Invoicing Pro', 'zero-bs-crm' ); - $up_target = $zbs->urls['invpro']; - - $upsell_box_html .= zeroBSCRM_UI2_squareFeedbackUpsell( $up_title, $up_desc, $up_button, $up_target ); - $upsell_box_html .= '
'; - } else { - $upsell_box_html = '
'; - - $up_title = esc_html__( 'Supercharged Invoicing', 'zero-bs-crm' ); - $up_desc = esc_html__( 'You have Invoicing Pro available because you are using a bundle. Please download and install from your account:', 'zero-bs-crm' ); - $up_button = esc_html__( 'Your Account', 'zero-bs-crm' ); - $up_target = $zbs->urls['account']; - - $upsell_box_html .= zeroBSCRM_UI2_squareFeedbackUpsell( $up_title, $up_desc, $up_button, $up_target ); - $upsell_box_html .= '
'; - } - } $list = new zeroBSCRM_list( array( diff --git a/projects/plugins/crm/js/ZeroBSCRM.admin.listview.js b/projects/plugins/crm/js/ZeroBSCRM.admin.listview.js index a89e3b169a02e..0485e5caecf29 100644 --- a/projects/plugins/crm/js/ZeroBSCRM.admin.listview.js +++ b/projects/plugins/crm/js/ZeroBSCRM.admin.listview.js @@ -1835,7 +1835,11 @@ function zeroBSCRMJS_listView_generic_nameavatar( dataLine ) { let emailStr = ''; if ( typeof dataLine.email !== 'undefined' && dataLine.email != '' ) { emailStr = - '' + jpcrm.esc_html( dataLine.email ) + ''; + ''; } let imgStr = ''; if ( typeof dataLine.avatar !== 'undefined' && dataLine.avatar != '' ) { @@ -1853,7 +1857,7 @@ function zeroBSCRMJS_listView_generic_nameavatar( dataLine ) { `; @@ -1915,7 +1919,7 @@ function zeroBSCRMJS_listView_generic_customer( dataLine ) { `; @@ -1937,7 +1941,7 @@ function zeroBSCRMJS_listView_generic_customer( dataLine ) { `; } else { @@ -2557,7 +2561,11 @@ function zeroBSCRMJS_listView_customer_nameavatar( dataLine ) { let emailStr = ''; if ( typeof dataLine.email !== 'undefined' && dataLine.email != '' ) { emailStr = - '' + jpcrm.esc_html( dataLine.email ) + ''; + ''; } let imgStr = ''; if ( typeof dataLine.avatar !== 'undefined' && dataLine.avatar != '' ) { @@ -2575,7 +2583,7 @@ function zeroBSCRMJS_listView_customer_nameavatar( dataLine ) { `; @@ -3045,7 +3053,11 @@ function zeroBSCRMJS_listView_company_nameavatar( dataLine ) { let emailStr = ''; if ( typeof dataLine.email !== 'undefined' && dataLine.email != '' ) { emailStr = - '' + jpcrm.esc_html( dataLine.email ) + ''; + ''; } let imgStr = ''; if ( typeof dataLine.avatar !== 'undefined' && dataLine.avatar != '' ) { @@ -3065,8 +3077,8 @@ function zeroBSCRMJS_listView_company_nameavatar( dataLine ) { const td = ` `; diff --git a/projects/plugins/crm/sass/ZeroBSCRM.admin.invoicebuilder.scss b/projects/plugins/crm/sass/ZeroBSCRM.admin.invoicebuilder.scss index 74cedb00abba6..9413bca13bc0f 100644 --- a/projects/plugins/crm/sass/ZeroBSCRM.admin.invoicebuilder.scss +++ b/projects/plugins/crm/sass/ZeroBSCRM.admin.invoicebuilder.scss @@ -114,10 +114,15 @@ margin-right:1%; } .invoice-discount-total{ - margin-top:-6px; + margin-top:-9px; } #invoice_discount_total{ float:left; + width: 32% !important; + } + #invoice_postage_total{ + width: 32%; + float:right; } .half{ width:50%; @@ -182,10 +187,15 @@ margin-right:1%; } .invoice-discount-total{ - margin-top:-6px; + margin-top:-9px; } #invoice_discount_total{ float:left; + width: 32% !important; + } + #invoice_postage_total{ + width: 32%; + float:right; } .half{ width:50%; diff --git a/projects/plugins/crm/sass/_ZeroBSCRM.listview.scss b/projects/plugins/crm/sass/_ZeroBSCRM.listview.scss index ec0f3a40d4d7f..ea4f7de2a5eb3 100644 --- a/projects/plugins/crm/sass/_ZeroBSCRM.listview.scss +++ b/projects/plugins/crm/sass/_ZeroBSCRM.listview.scss @@ -148,3 +148,7 @@ text-align: right; margin-bottom: 10px; } + +.jpcrm-listview-table-container .jpcrm-listview-table a.name{ + font-weight: 700; +} diff --git a/projects/plugins/crm/sass/emerald/_listview-table.scss b/projects/plugins/crm/sass/emerald/_listview-table.scss index 0d5d1992e7d38..ddebead06f247 100644 --- a/projects/plugins/crm/sass/emerald/_listview-table.scss +++ b/projects/plugins/crm/sass/emerald/_listview-table.scss @@ -24,6 +24,16 @@ padding: 10px; } + .name{ + font-weight: 500; + font-size: 14px; + } + .email{ + color: #3C434A; + font-weight: 400; + font-size: 12px; + } + /* min-width except for checkbox column */ th:not(:first-child), td:not(:first-child) { min-width: 120px; diff --git a/projects/plugins/crm/templates/invoices/invoice-pdf-template-modern.html b/projects/plugins/crm/templates/invoices/invoice-pdf-template-modern.html new file mode 100644 index 0000000000000..73cd8cfcf9d6b --- /dev/null +++ b/projects/plugins/crm/templates/invoices/invoice-pdf-template-modern.html @@ -0,0 +1,335 @@ + + + + + + Invoice + + + + + +
+
+
+
+ Company Logo +
+
+ +
+
' . esc_html__( 'Subtotal', 'zero-bs-crm' ) . ''; + $totals_table .= ''; if ( isset( $invoice['net'] ) && ! empty( $invoice['net'] ) ) { $totals_table .= esc_html( zeroBSCRM_formatCurrency( $invoice['net'] ) ); } else { @@ -1094,7 +1094,7 @@ function zeroBSCRM_invoicing_generateInvoiceHTML( $invoice_id = -1, $template = $totals_table .= '
' . __( 'Total', 'zero-bs-crm' ) . ''; + '; if ( isset( $invoice['total'] ) && ! empty( $invoice['total'] ) ) { $totals_table .= esc_html( zeroBSCRM_formatCurrency( $invoice['total'] ) ); } else { @@ -1109,9 +1109,9 @@ function zeroBSCRM_invoicing_generateInvoiceHTML( $invoice_id = -1, $template = $partials_table = ''; if ( $invoice['total'] == 0 ) { // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual - $partials_table .= ''; + $partials_table .= '
'; } else { - $partials_table .= '
'; + $partials_table .= '
'; } $balance = $invoice['total']; @@ -1136,8 +1136,8 @@ function zeroBSCRM_invoicing_generateInvoiceHTML( $invoice_id = -1, $template = $balance = $balance - $partial['total']; } - $partials_table .= ''; - $partials_table .= ''; + $partials_table .= ''; + $partials_table .= ''; $partials_table .= ''; $partials_table .= ''; - $partials_table .= ''; + $partials_table .= ''; $partials_table .= ''; $partials_table .= '
' . esc_html__( 'Payment', 'zero-bs-crm' ) . '
(' . esc_html( $partial['ref'] ) . ')
' . esc_html( $partial['ref'] ) . ''; if ( ! empty( $partial['total'] ) ) { $partials_table .= esc_html( zeroBSCRM_formatCurrency( $partial['total'] ) ); @@ -1158,7 +1158,7 @@ function zeroBSCRM_invoicing_generateInvoiceHTML( $invoice_id = -1, $template = $partials_table .= '
' . esc_html__( 'Amount due', 'zero-bs-crm' ) . '' . esc_html( zeroBSCRM_formatCurrency( $balance ) ) . '' . esc_html( zeroBSCRM_formatCurrency( $balance ) ) . '
'; @@ -1573,9 +1573,9 @@ function zeroBSCRM_invoicing_generateInvPart_lineitems( $invlines = array() ) { $line_item_html .= '
' . esc_html( $invline['title'] ) . '
' . nl2br( esc_html( $invline['desc'] ) ) . '
' . esc_html( zeroBSCRM_format_quantity( $invline['quantity'] ) ) . '' . esc_html( zeroBSCRM_formatCurrency( $invline['price'] ) ) . '' . esc_html( zeroBSCRM_formatCurrency( $invline['net'] ) ) . '' . esc_html( zeroBSCRM_format_quantity( $invline['quantity'] ) ) . '' . esc_html( zeroBSCRM_formatCurrency( $invline['price'] ) ) . '' . esc_html( zeroBSCRM_formatCurrency( $invline['net'] ) ) . '
${ imgStr } ${ imgStr } ${ imgStr } ${ imgStr } -
+ + + + + + + + + + + + + + + + + + + + + ##INV-CUSTOM-FIELDS## +
###INVOICE-NUMBER##
##INVOICE-REF##
##INVOICE-DATE##
##INVOICE-DUE-DATE##
##INVOICE-HTML-STATUS##
+
+
+
+ +
+
+

##INVOICE-LABEL-FROM##

+
##BIZ-INFO##
+
+ +
+

##INVOICE-LABEL-TO##

+
##INVOICE-CUSTOMER-INFO##
+
+
+
+ + + + ##INVOICE-TABLE-HEADERS## + + + ##INVOICE-LINE-ITEMS## + +
+ +
##INVOICE-TOTALS-TABLE##
+ +
+ + + + + +
##PRE-INVOICE-PAYMENT-DETAILS####INVOICE-PARTIALS-TABLE##
+
+ +
+ ##INVOICE-PAYMENT-DETAILS## +
+
+
+ + From 9ec75b13cd4ff59ab8d5c8d4fe9ad48fff1f1bbb Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Fri, 10 Jan 2025 10:25:33 -0700 Subject: [PATCH 017/420] Changelog and readme.txt edits. (#40963) --- projects/plugins/vaultpress/CHANGELOG.md | 19 +++++++++++++++++++ ...add-bad-installation-notices-to-my-jetpack | 4 ---- .../plugins/vaultpress/changelog/add-phan | 5 ----- .../changelog/add-phan-more-constant-stubs | 5 ----- .../changelog/add-phan-wp-constant-stubs | 5 ----- .../fix-bump_composer_versions_round2#2 | 5 ----- .../changelog/fix-phan-in-changelogger | 5 ----- .../fix-phan-undeclared-in-autoloader | 5 ----- .../plugins/vaultpress/changelog/prerelease | 5 ----- .../plugins/vaultpress/changelog/prerelease#2 | 5 ----- .../plugins/vaultpress/changelog/prerelease#3 | 5 ----- .../plugins/vaultpress/changelog/prerelease#4 | 5 ----- .../plugins/vaultpress/changelog/prerelease#5 | 5 ----- .../plugins/vaultpress/changelog/prerelease#6 | 5 ----- .../plugins/vaultpress/changelog/prerelease#7 | 5 ----- .../plugins/vaultpress/changelog/prerelease#8 | 5 ----- .../remove-pre_wp6.6_and_php7.2_code | 4 ---- .../changelog/renovate-lock-file-maintenance | 4 ---- .../renovate-lock-file-maintenance#10 | 4 ---- .../renovate-lock-file-maintenance#11 | 5 ----- .../renovate-lock-file-maintenance#12 | 4 ---- .../renovate-lock-file-maintenance#2 | 4 ---- .../renovate-lock-file-maintenance#3 | 4 ---- .../renovate-lock-file-maintenance#4 | 4 ---- .../renovate-lock-file-maintenance#5 | 4 ---- .../renovate-lock-file-maintenance#6 | 4 ---- .../renovate-lock-file-maintenance#7 | 4 ---- .../renovate-lock-file-maintenance#8 | 4 ---- .../renovate-lock-file-maintenance#9 | 5 ----- .../renovate-yoast-phpunit-polyfills-1.x | 4 ---- .../changelog/restore-jp_test_coverage | 4 ---- .../changelog/restore-jp_test_coverage#2 | 5 ----- .../changelog/revert-svg-image-optimizations | 4 ---- .../try-lossless-image-optmization-part-3 | 4 ---- .../changelog/try-no-version-bumps-in-trunk | 5 ----- .../changelog/update-bump_min_php_to_7.2 | 4 ---- .../changelog/update-bump_min_php_to_7.2#2 | 5 ----- .../vaultpress/changelog/update-composer | 5 ----- ...llation-error-to-only-show-on-plugins-page | 4 ---- .../update-switch-to-raw-coverage-files | 5 ----- .../changelog/update-symfony-console | 5 ----- .../vaultpress/changelog/update-tested-to-6-6 | 4 ---- .../vaultpress/changelog/update-tested-to-6-7 | 4 ---- .../changelog/update-use-wp-admin-notice | 4 ---- projects/plugins/vaultpress/composer.json | 2 +- projects/plugins/vaultpress/readme.txt | 19 ++++++++++++++++--- projects/plugins/vaultpress/vaultpress.php | 4 ++-- 47 files changed, 38 insertions(+), 200 deletions(-) delete mode 100644 projects/plugins/vaultpress/changelog/add-bad-installation-notices-to-my-jetpack delete mode 100644 projects/plugins/vaultpress/changelog/add-phan delete mode 100644 projects/plugins/vaultpress/changelog/add-phan-more-constant-stubs delete mode 100644 projects/plugins/vaultpress/changelog/add-phan-wp-constant-stubs delete mode 100644 projects/plugins/vaultpress/changelog/fix-bump_composer_versions_round2#2 delete mode 100644 projects/plugins/vaultpress/changelog/fix-phan-in-changelogger delete mode 100644 projects/plugins/vaultpress/changelog/fix-phan-undeclared-in-autoloader delete mode 100644 projects/plugins/vaultpress/changelog/prerelease delete mode 100644 projects/plugins/vaultpress/changelog/prerelease#2 delete mode 100644 projects/plugins/vaultpress/changelog/prerelease#3 delete mode 100644 projects/plugins/vaultpress/changelog/prerelease#4 delete mode 100644 projects/plugins/vaultpress/changelog/prerelease#5 delete mode 100644 projects/plugins/vaultpress/changelog/prerelease#6 delete mode 100644 projects/plugins/vaultpress/changelog/prerelease#7 delete mode 100644 projects/plugins/vaultpress/changelog/prerelease#8 delete mode 100644 projects/plugins/vaultpress/changelog/remove-pre_wp6.6_and_php7.2_code delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#10 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#11 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#12 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#2 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#3 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#4 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#5 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#6 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#7 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#8 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#9 delete mode 100644 projects/plugins/vaultpress/changelog/renovate-yoast-phpunit-polyfills-1.x delete mode 100644 projects/plugins/vaultpress/changelog/restore-jp_test_coverage delete mode 100644 projects/plugins/vaultpress/changelog/restore-jp_test_coverage#2 delete mode 100644 projects/plugins/vaultpress/changelog/revert-svg-image-optimizations delete mode 100644 projects/plugins/vaultpress/changelog/try-lossless-image-optmization-part-3 delete mode 100644 projects/plugins/vaultpress/changelog/try-no-version-bumps-in-trunk delete mode 100644 projects/plugins/vaultpress/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/plugins/vaultpress/changelog/update-bump_min_php_to_7.2#2 delete mode 100644 projects/plugins/vaultpress/changelog/update-composer delete mode 100644 projects/plugins/vaultpress/changelog/update-installation-error-to-only-show-on-plugins-page delete mode 100644 projects/plugins/vaultpress/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/plugins/vaultpress/changelog/update-symfony-console delete mode 100644 projects/plugins/vaultpress/changelog/update-tested-to-6-6 delete mode 100644 projects/plugins/vaultpress/changelog/update-tested-to-6-7 delete mode 100644 projects/plugins/vaultpress/changelog/update-use-wp-admin-notice diff --git a/projects/plugins/vaultpress/CHANGELOG.md b/projects/plugins/vaultpress/CHANGELOG.md index ad8dcdaa8a3b3..4ec783b5a431e 100644 --- a/projects/plugins/vaultpress/CHANGELOG.md +++ b/projects/plugins/vaultpress/CHANGELOG.md @@ -2,6 +2,25 @@ All notable changes to this project will be documented in this file. +## 4.0.0 - 2025-01-10 +### Added +- Enable test coverage. [#39961] +- Hook into red bubble notification when bad installation is detected. [#36449] + +### Changed +- General: Indicate compatibility with the upcoming version of WordPress - 6.6. [#37962] +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. [#39786] +- General: Use wp_admin_notice function introduced in WP 6.4 to display notices. [#37051] +- Only show installation errors on plugins page. [#36390] +- Updated package dependencies. [#36309] [#36775] [#37348] [#37767] [#38228] [#38822] [#39004] [#39288] [#39653] [#40116] [#40515] + +### Removed +- Cleaned up legacy code. [#40200] +- General: Update minimum PHP version to 7.2. [#40147] + +### Fixed +- Lossless image optimization for images (should improve performance with no visible changes). [#38750] [#38981] + ## 3.0.0 - 2024-02-21 ### Changed - General: indicate compatibility with the upcoming version of WordPress, 6.5. [#35820] diff --git a/projects/plugins/vaultpress/changelog/add-bad-installation-notices-to-my-jetpack b/projects/plugins/vaultpress/changelog/add-bad-installation-notices-to-my-jetpack deleted file mode 100644 index 5cf6fb645e17e..0000000000000 --- a/projects/plugins/vaultpress/changelog/add-bad-installation-notices-to-my-jetpack +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Hook into red bubble notification when bad installation is detected diff --git a/projects/plugins/vaultpress/changelog/add-phan b/projects/plugins/vaultpress/changelog/add-phan deleted file mode 100644 index 976dd1167f5e1..0000000000000 --- a/projects/plugins/vaultpress/changelog/add-phan +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Add Phan configuration. No change to the project itself. - - diff --git a/projects/plugins/vaultpress/changelog/add-phan-more-constant-stubs b/projects/plugins/vaultpress/changelog/add-phan-more-constant-stubs deleted file mode 100644 index 40c026ae51a49..0000000000000 --- a/projects/plugins/vaultpress/changelog/add-phan-more-constant-stubs +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Update phan baseline for config changes. No change to functionality. - - diff --git a/projects/plugins/vaultpress/changelog/add-phan-wp-constant-stubs b/projects/plugins/vaultpress/changelog/add-phan-wp-constant-stubs deleted file mode 100644 index 94a5f73d3ea02..0000000000000 --- a/projects/plugins/vaultpress/changelog/add-phan-wp-constant-stubs +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update Phan baseline for config change. No change to functionality. - - diff --git a/projects/plugins/vaultpress/changelog/fix-bump_composer_versions_round2#2 b/projects/plugins/vaultpress/changelog/fix-bump_composer_versions_round2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/fix-bump_composer_versions_round2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/fix-phan-in-changelogger b/projects/plugins/vaultpress/changelog/fix-phan-in-changelogger deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/fix-phan-in-changelogger +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/fix-phan-undeclared-in-autoloader b/projects/plugins/vaultpress/changelog/fix-phan-undeclared-in-autoloader deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/fix-phan-undeclared-in-autoloader +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/prerelease b/projects/plugins/vaultpress/changelog/prerelease deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/prerelease +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/prerelease#2 b/projects/plugins/vaultpress/changelog/prerelease#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/prerelease#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/prerelease#3 b/projects/plugins/vaultpress/changelog/prerelease#3 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/prerelease#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/prerelease#4 b/projects/plugins/vaultpress/changelog/prerelease#4 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/prerelease#4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/prerelease#5 b/projects/plugins/vaultpress/changelog/prerelease#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/prerelease#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/prerelease#6 b/projects/plugins/vaultpress/changelog/prerelease#6 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/prerelease#6 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/prerelease#7 b/projects/plugins/vaultpress/changelog/prerelease#7 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/prerelease#7 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/prerelease#8 b/projects/plugins/vaultpress/changelog/prerelease#8 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/prerelease#8 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/remove-pre_wp6.6_and_php7.2_code b/projects/plugins/vaultpress/changelog/remove-pre_wp6.6_and_php7.2_code deleted file mode 100644 index 3652253bc0e2f..0000000000000 --- a/projects/plugins/vaultpress/changelog/remove-pre_wp6.6_and_php7.2_code +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -Cleaned up legacy code. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#10 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#10 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#10 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#11 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#11 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#11 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#12 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#12 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#12 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#2 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#3 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#3 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#4 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#4 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#4 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#5 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#5 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#5 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#6 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#6 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#7 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#7 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#8 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#8 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#8 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#9 b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#9 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance#9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/renovate-yoast-phpunit-polyfills-1.x b/projects/plugins/vaultpress/changelog/renovate-yoast-phpunit-polyfills-1.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/vaultpress/changelog/renovate-yoast-phpunit-polyfills-1.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/vaultpress/changelog/restore-jp_test_coverage b/projects/plugins/vaultpress/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/plugins/vaultpress/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/plugins/vaultpress/changelog/restore-jp_test_coverage#2 b/projects/plugins/vaultpress/changelog/restore-jp_test_coverage#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/restore-jp_test_coverage#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/revert-svg-image-optimizations b/projects/plugins/vaultpress/changelog/revert-svg-image-optimizations deleted file mode 100644 index 356496f8a1f8f..0000000000000 --- a/projects/plugins/vaultpress/changelog/revert-svg-image-optimizations +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Revert recent SVG image optimizations. diff --git a/projects/plugins/vaultpress/changelog/try-lossless-image-optmization-part-3 b/projects/plugins/vaultpress/changelog/try-lossless-image-optmization-part-3 deleted file mode 100644 index cf77a8b55bb43..0000000000000 --- a/projects/plugins/vaultpress/changelog/try-lossless-image-optmization-part-3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Lossless image optimization for images (should improve performance with no visible changes). diff --git a/projects/plugins/vaultpress/changelog/try-no-version-bumps-in-trunk b/projects/plugins/vaultpress/changelog/try-no-version-bumps-in-trunk deleted file mode 100644 index 91efe85c55e06..0000000000000 --- a/projects/plugins/vaultpress/changelog/try-no-version-bumps-in-trunk +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Un-bump version numbers in trunk. The build will now update the version numbers as needed for mirrors. - - diff --git a/projects/plugins/vaultpress/changelog/update-bump_min_php_to_7.2 b/projects/plugins/vaultpress/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/plugins/vaultpress/changelog/update-bump_min_php_to_7.2#2 b/projects/plugins/vaultpress/changelog/update-bump_min_php_to_7.2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-bump_min_php_to_7.2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/update-composer b/projects/plugins/vaultpress/changelog/update-composer deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-composer +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/update-installation-error-to-only-show-on-plugins-page b/projects/plugins/vaultpress/changelog/update-installation-error-to-only-show-on-plugins-page deleted file mode 100644 index 7f125b899fd84..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-installation-error-to-only-show-on-plugins-page +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Only show installation errors on plugins page diff --git a/projects/plugins/vaultpress/changelog/update-switch-to-raw-coverage-files b/projects/plugins/vaultpress/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/plugins/vaultpress/changelog/update-symfony-console b/projects/plugins/vaultpress/changelog/update-symfony-console deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-symfony-console +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/vaultpress/changelog/update-tested-to-6-6 b/projects/plugins/vaultpress/changelog/update-tested-to-6-6 deleted file mode 100644 index 6cf57dbe55f90..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-tested-to-6-6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -General: indicate compatibility with the upcoming version of WordPress - 6.6. diff --git a/projects/plugins/vaultpress/changelog/update-tested-to-6-7 b/projects/plugins/vaultpress/changelog/update-tested-to-6-7 deleted file mode 100644 index 9c1d5b4fabb5f..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-tested-to-6-7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -General: indicate compatibility with the upcoming version of WordPress - 6.7. diff --git a/projects/plugins/vaultpress/changelog/update-use-wp-admin-notice b/projects/plugins/vaultpress/changelog/update-use-wp-admin-notice deleted file mode 100644 index 2988ba2249366..0000000000000 --- a/projects/plugins/vaultpress/changelog/update-use-wp-admin-notice +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -General: use wp_admin_notice function introduced in WP 6.4 to display notices. diff --git a/projects/plugins/vaultpress/composer.json b/projects/plugins/vaultpress/composer.json index 9d3dedae2096c..454f86eb707d4 100644 --- a/projects/plugins/vaultpress/composer.json +++ b/projects/plugins/vaultpress/composer.json @@ -38,7 +38,7 @@ "minimum-stability": "dev", "prefer-stable": true, "config": { - "autoloader-suffix": "9559eef123208b7d1b9c15b978567267_vaultpressⓥ3_0_0", + "autoloader-suffix": "9559eef123208b7d1b9c15b978567267_vaultpressⓥ4_0_0", "allow-plugins": { "automattic/jetpack-autoloader": true } diff --git a/projects/plugins/vaultpress/readme.txt b/projects/plugins/vaultpress/readme.txt index 693f16b277fe8..741b37c2f09e8 100644 --- a/projects/plugins/vaultpress/readme.txt +++ b/projects/plugins/vaultpress/readme.txt @@ -32,12 +32,25 @@ View our full list of FAQs at [http://help.vaultpress.com/faq/](http://help.vaul A Jetpack VaultPress subscription is for a single WordPress site. == Changelog == -### 3.0.0 - 2024-02-21 +### 4.0.0 - 2025-01-10 +#### Added +- Enable test coverage. +- Hook into red bubble notification when bad installation is detected. + #### Changed -- General: indicate compatibility with the upcoming version of WordPress, 6.5. -- General: updated PHP requirement to PHP 7.0+ +- General: Indicate compatibility with the upcoming version of WordPress - 6.6. +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. +- General: Use wp_admin_notice function introduced in WP 6.4 to display notices. +- Only show installation errors on plugins page. - Updated package dependencies. +#### Removed +- Cleaned up legacy code. +- General: Update minimum PHP version to 7.2. + +#### Fixed +- Lossless image optimization for images (should improve performance with no visible changes). + -------- [See the previous changelogs here](https://github.com/Automattic/jetpack/blob/trunk/projects/plugins/vaultpress/CHANGELOG.md#changelog) diff --git a/projects/plugins/vaultpress/vaultpress.php b/projects/plugins/vaultpress/vaultpress.php index aa7970ac513c6..3107b05b3978a 100644 --- a/projects/plugins/vaultpress/vaultpress.php +++ b/projects/plugins/vaultpress/vaultpress.php @@ -3,7 +3,7 @@ * Plugin Name: VaultPress * Plugin URI: http://vaultpress.com/?utm_source=plugin-uri&utm_medium=plugin-description&utm_campaign=1.0 * Description: Protect your content, themes, plugins, and settings with realtime backup and automated security scanning from VaultPress. Activate, enter your registration key, and never worry again. Need some help? - * Version: 3.0.0 + * Version: 4.0.0 * Author: Automattic * Author URI: http://vaultpress.com/?utm_source=author-uri&utm_medium=plugin-description&utm_campaign=1.0 * License: GPL2+ @@ -17,7 +17,7 @@ defined( 'ABSPATH' ) || die(); define( 'VAULTPRESS__MINIMUM_PHP_VERSION', '7.2' ); -define( 'VAULTPRESS__VERSION', '3.0.0' ); +define( 'VAULTPRESS__VERSION', '4.0.0' ); define( 'VAULTPRESS__PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); /** From a996e15960aebc68177fbafaa09b08ceb22c72c0 Mon Sep 17 00:00:00 2001 From: Mike Stott Date: Fri, 10 Jan 2025 17:32:40 +0000 Subject: [PATCH 018/420] Fix/newsletter welcome message html wpses (#40218) * adding extra HTML kpses * Changelog * adding extra HTML kpses * Align array double arrows --------- Co-authored-by: gogdzl --- .../core-api/class.jetpack-core-api-module-endpoints.php | 8 +++++++- .../changelog/fix-newsletter-welcome-message-html_wpses | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/fix-newsletter-welcome-message-html_wpses diff --git a/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php b/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php index 9aa7ab1f03673..775f9c42b4126 100644 --- a/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php @@ -1009,7 +1009,13 @@ function ( &$value ) { $value = wp_kses( $value, array( - 'a' => array( + 'ul' => array(), + 'li' => array(), + 'p' => array(), + 'strong' => array(), + 'ol' => array(), + 'em' => array(), + 'a' => array( 'href' => array(), ), ) diff --git a/projects/plugins/jetpack/changelog/fix-newsletter-welcome-message-html_wpses b/projects/plugins/jetpack/changelog/fix-newsletter-welcome-message-html_wpses new file mode 100644 index 0000000000000..ba2a3a0c37a01 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-newsletter-welcome-message-html_wpses @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Adding extra html to be allowed in the welcome message From 6296b27eed5229ba0dbaf76968aa758a7ad52b83 Mon Sep 17 00:00:00 2001 From: Clemen Date: Fri, 10 Jan 2025 18:51:15 +0000 Subject: [PATCH 019/420] CRM: Add the order capability to the API events endpoint. (#38838) * Add to the API event the pagination order support. * changelog * Update API pagination processing with new function * Refactor jpcrm_api_process_pagination for cleaner syntax * Add sort order for customer search * Make ASC the default sort order * Add sort order for quotes * Add order for invoices * Add order for transactions * Update code to use DAL call * Update code to use DAL call * Remove unneeded ignoreowner argument * Make DESC the default sort order (better this way) --------- Co-authored-by: gogdzl --- projects/plugins/crm/api/customer_search.php | 8 +++---- projects/plugins/crm/api/events.php | 7 +++--- projects/plugins/crm/api/invoices.php | 14 +++++++---- projects/plugins/crm/api/quotes.php | 8 +++---- projects/plugins/crm/api/transactions.php | 14 +++++++---- ...dd-crm-api-events-pagination-order-support | 4 ++++ .../plugins/crm/includes/ZeroBSCRM.API.php | 23 ++++++++----------- 7 files changed, 46 insertions(+), 32 deletions(-) create mode 100644 projects/plugins/crm/changelog/add-crm-api-events-pagination-order-support diff --git a/projects/plugins/crm/api/customer_search.php b/projects/plugins/crm/api/customer_search.php index b8fa69b2d168d..78840e9c7f54a 100644 --- a/projects/plugins/crm/api/customer_search.php +++ b/projects/plugins/crm/api/customer_search.php @@ -26,15 +26,15 @@ jpcrm_api_check_http_method( array( 'GET' ) ); // Process the pagination parameters from the query -list( $page, $per_page ) = jpcrm_api_process_pagination(); - +$pagination = jpcrm_api_process_pagination(); $search_phrase = jpcrm_api_process_search(); $replace_hyphens_in_response = jpcrm_api_process_replace_hyphens_in_json_keys(); $args = array( 'searchPhrase' => $search_phrase, - 'perPage' => $per_page, - 'page' => $page, + 'page' => $pagination['page'], + 'perPage' => $pagination['per_page'], + 'sortOrder' => $pagination['order'], ); global $zbs; diff --git a/projects/plugins/crm/api/events.php b/projects/plugins/crm/api/events.php index 0bc7ae28bc1f6..99392f9b08dcc 100644 --- a/projects/plugins/crm/api/events.php +++ b/projects/plugins/crm/api/events.php @@ -26,7 +26,7 @@ jpcrm_api_check_http_method( array( 'GET' ) ); // Process the pagination parameters from the query -list( $page, $per_page ) = jpcrm_api_process_pagination(); +$pagination = jpcrm_api_process_pagination(); /** * Allow events to be filtered by owner. Docs are ambiguous about @@ -44,8 +44,9 @@ $args = array( 'withAssigned' => true, - 'page' => $page, - 'perPage' => $per_page, + 'page' => $pagination['page'], + 'perPage' => $pagination['per_page'], + 'sortOrder' => $pagination['order'], 'ownedBy' => $owner, 'ignoreowner' => zeroBSCRM_DAL2_ignoreOwnership( ZBS_TYPE_TASK ), ); diff --git a/projects/plugins/crm/api/invoices.php b/projects/plugins/crm/api/invoices.php index c346a66839e53..528120c906024 100644 --- a/projects/plugins/crm/api/invoices.php +++ b/projects/plugins/crm/api/invoices.php @@ -26,10 +26,16 @@ jpcrm_api_check_http_method( array( 'GET' ) ); // Process the pagination parameters from the query -list( $page, $per_page ) = jpcrm_api_process_pagination(); +$pagination = jpcrm_api_process_pagination(); +$args = array( + 'withAssigned' => false, + 'page' => $pagination['page'], + 'perPage' => $pagination['per_page'], + 'sortOrder' => $pagination['order'], +); + +global $zbs; +$invoices = $zbs->DAL->invoices->getInvoices( $args ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase -// needs moving to the $args version -// v3.0 needs these objects refined, including textify for html -$invoices = zeroBS_getInvoices( true, $per_page, $page ); wp_send_json( $invoices ); diff --git a/projects/plugins/crm/api/quotes.php b/projects/plugins/crm/api/quotes.php index 9550e99e4db9a..f47d508d319c4 100644 --- a/projects/plugins/crm/api/quotes.php +++ b/projects/plugins/crm/api/quotes.php @@ -26,7 +26,7 @@ jpcrm_api_check_http_method( array( 'GET' ) ); // Process the pagination parameters from the query -list( $page, $per_page ) = jpcrm_api_process_pagination(); +$pagination = jpcrm_api_process_pagination(); global $zbs; @@ -39,9 +39,9 @@ // 'withAssigned' => $withCustomerDeets, 'suppressContent' => true, // NO HTML! 'sortByField' => 'ID', - 'sortOrder' => 'DESC', - 'page' => $page, - 'perPage' => $per_page, + 'page' => $pagination['page'], + 'perPage' => $pagination['per_page'], + 'sortOrder' => $pagination['order'], 'ignoreowner' => zeroBSCRM_DAL2_ignoreOwnership( ZBS_TYPE_QUOTE ), ); diff --git a/projects/plugins/crm/api/transactions.php b/projects/plugins/crm/api/transactions.php index 729693f47c979..79cb81c3d9e8b 100644 --- a/projects/plugins/crm/api/transactions.php +++ b/projects/plugins/crm/api/transactions.php @@ -26,10 +26,16 @@ jpcrm_api_check_http_method( array( 'GET' ) ); // Process the pagination parameters from the query -list( $page, $per_page ) = jpcrm_api_process_pagination(); +$pagination = jpcrm_api_process_pagination(); +$args = array( + 'withAssigned' => false, + 'withTags' => false, + 'page' => $pagination['page'], + 'perPage' => $pagination['per_page'], + 'sortOrder' => $pagination['order'], +); -// needs moving to the $args version -// v3.0 needs these objects refined, including textify for html -$transactions = zeroBS_getTransactions( true, $per_page, $page ); +global $zbs; +$transactions = $zbs->DAL->transactions->getTransactions( $args ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase wp_send_json( $transactions ); diff --git a/projects/plugins/crm/changelog/add-crm-api-events-pagination-order-support b/projects/plugins/crm/changelog/add-crm-api-events-pagination-order-support new file mode 100644 index 0000000000000..b070a38901938 --- /dev/null +++ b/projects/plugins/crm/changelog/add-crm-api-events-pagination-order-support @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +API-events: Add the pagination result sort/order capability to the endpoint. diff --git a/projects/plugins/crm/includes/ZeroBSCRM.API.php b/projects/plugins/crm/includes/ZeroBSCRM.API.php index 460466f559129..50f397b7d55a8 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.API.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.API.php @@ -37,20 +37,17 @@ function zeroBS_api_rewrite_endpoint() { * Process the query and get page and items per page */ function jpcrm_api_process_pagination() { + // phpcs:disable WordPress.Security.NonceVerification.Recommended + $page = isset( $_GET['page'] ) ? max( (int) $_GET['page'], 1 ) : 1; + $per_page = isset( $_GET['perpage'] ) ? max( (int) $_GET['perpage'], 1 ) : 10; + $order = strtoupper( $_GET['order'] ?? '' ) === 'ASC' ? 'ASC' : 'DESC'; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + // phpcs:enable WordPress.Security.NonceVerification.Recommended - if ( isset( $_GET['page'] ) && (int) $_GET['page'] >= 0 ) { - $page = (int) $_GET['page']; - } else { - $page = 0; - } - - if ( isset( $_GET['perpage'] ) && (int) $_GET['perpage'] >= 0 ) { - $per_page = (int) $_GET['perpage']; - } else { - $per_page = 10; - } - - return array( $page, $per_page ); + return array( + 'page' => $page, + 'per_page' => $per_page, + 'order' => $order, + ); } /** From 08a46c9b101637695ef4e23c395628bae9b04305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donncha=20=C3=93=20Caoimh?= <5656673+donnchawp@users.noreply.github.com> Date: Fri, 10 Jan 2025 19:02:33 +0000 Subject: [PATCH 020/420] Allow the site owner to run extra code before the cache loads (#40920) * Allow the site owner to load extra code before the cache * changelog * Formatting fix. --- .../optimizations/page-cache/pre-wordpress/Boost_Cache.php | 7 +++++++ .../plugins/boost/changelog/add-boost-extra-code-loader | 4 ++++ 2 files changed, 11 insertions(+) create mode 100644 projects/plugins/boost/changelog/add-boost-extra-code-loader diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php index edf3b948f0924..6e9fdd2fa4780 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php @@ -81,6 +81,13 @@ public function init_actions() { add_action( 'wp_trash_post', array( $this, 'delete_on_post_trash' ), 10, 2 ); add_filter( 'wp_php_error_message', array( $this, 'disable_caching_on_error' ) ); add_filter( 'init', array( $this, 'init_do_cache' ) ); + $this->load_extra(); + } + + private function load_extra() { + if ( file_exists( WP_CONTENT_DIR . '/boost-cache-extra.php' ) ) { + include_once WP_CONTENT_DIR . '/boost-cache-extra.php'; + } } /** diff --git a/projects/plugins/boost/changelog/add-boost-extra-code-loader b/projects/plugins/boost/changelog/add-boost-extra-code-loader new file mode 100644 index 0000000000000..8620b717449e9 --- /dev/null +++ b/projects/plugins/boost/changelog/add-boost-extra-code-loader @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Cache: added extra PHP file the site owner can use to modify how the cache works. From 7dc8861fe1114813dc25c5f79b236c22a2a3845a Mon Sep 17 00:00:00 2001 From: gogdzl <37049295+gogdzl@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:11:32 -0300 Subject: [PATCH 021/420] Backport crm 6.5.0 Changes (#40966) * Changelog and readme.txt edits. * Manually update changelog and readme * Manually update changelog and readme - Part 2 * Correctly sort version --- projects/plugins/crm/CHANGELOG.md | 22 +++++++++++++++++-- projects/plugins/crm/ZeroBSCRM.php | 2 +- .../changelog/add-ci-always-process-coverage | 5 ----- .../changelog/add-consolidate-initial-state | 5 ----- ...dd-crm-api-events-pagination-order-support | 4 ---- .../add-dependency-extraction-auto-polyfill | 4 ---- ...int-wordpress-no-unused-vars-before-return | 5 ----- .../changelog/add-phpunit-coverage-configs | 5 ----- .../changelog/add-structure-lint-eslint-react | 5 ----- .../crm/changelog/crm-fix-invoice-pdf-css | 4 ---- .../crm/changelog/crm-fix-rebrandr-issues | 4 ---- .../crm/changelog/fix-bump_composer_versions | 4 ---- .../fix-bump_composer_versions_round2#2 | 5 ----- .../fix-crm-3468-dashboard-contact-graph-fix | 4 ---- ...fix-export-crash-when-company-custom-field | 4 ---- ...m-3504-hundreds-of-unnedded-db-queries-fix | 4 ---- .../plugins/crm/changelog/fix-crm-linting | 4 ---- .../plugins/crm/changelog/fix-crm-linting2 | 4 ---- .../plugins/crm/changelog/fix-crm-linting3 | 4 ---- .../fix-crm-migration_error_on_sqlite | 4 ---- .../crm/changelog/fix-crm-php_error_on_dash | 4 ---- .../crm/changelog/fix-crm-remove_legacy_code | 4 ---- ...crm-update-version-to-644-in-ZeroBSCRMCore | 3 --- .../changelog/fix-crm-use_jetpack_autoloader | 4 ---- .../fix-deprecated-react-test-renderer-usage | 4 ---- .../fix-phpcompatibility-new-dev-sniff | 4 ---- .../crm/changelog/fix-phpunit_covers_warnings | 4 ---- projects/plugins/crm/changelog/prerelease | 5 ----- projects/plugins/crm/changelog/prerelease#2 | 5 ----- projects/plugins/crm/changelog/prerelease#3 | 5 ----- projects/plugins/crm/changelog/prerelease#4 | 5 ----- projects/plugins/crm/changelog/prerelease#5 | 5 ----- projects/plugins/crm/changelog/prerelease#6 | 5 ----- projects/plugins/crm/changelog/prerelease#7 | 5 ----- .../remove-pre_wp6.6_and_php7.2_code | 5 ----- .../crm/changelog/renovate-babel-monorepo | 4 ---- .../crm/changelog/renovate-brain-monkey-2.x | 5 ----- .../crm/changelog/renovate-definitelytyped | 4 ---- .../crm/changelog/renovate-definitelytyped#2 | 4 ---- .../crm/changelog/renovate-definitelytyped#3 | 4 ---- .../plugins/crm/changelog/renovate-glob-11.x | 4 ---- .../renovate-js-unit-testing-packages | 4 ---- .../changelog/renovate-lock-file-maintenance | 4 ---- .../renovate-lock-file-maintenance#2 | 4 ---- .../renovate-lock-file-maintenance#3 | 4 ---- .../renovate-lock-file-maintenance#4 | 5 ----- .../renovate-lock-file-maintenance#5 | 4 ---- .../renovate-lock-file-maintenance#6 | 5 ----- .../renovate-lock-file-maintenance#7 | 4 ---- .../renovate-major-js-unit-testing-packages | 4 ---- ...ovate-mediawiki-mediawiki-codesniffer-44.x | 4 ---- .../renovate-npm-webpack-vulnerability | 4 ---- .../changelog/renovate-react-router-monorepo | 4 ---- .../crm/changelog/renovate-wordpress-monorepo | 4 ---- .../changelog/renovate-wordpress-monorepo#2 | 4 ---- .../changelog/renovate-wordpress-monorepo#3 | 4 ---- .../changelog/renovate-wordpress-monorepo#4 | 4 ---- .../changelog/renovate-wordpress-monorepo#5 | 4 ---- .../changelog/renovate-wordpress-monorepo#6 | 4 ---- .../changelog/renovate-wordpress-monorepo#7 | 4 ---- .../changelog/renovate-wordpress-monorepo#8 | 4 ---- .../changelog/renovate-wordpress-monorepo#9 | 4 ---- .../renovate-yoast-phpunit-polyfills-1.x | 4 ---- .../crm/changelog/restore-jp_test_coverage | 4 ---- .../crm/changelog/restore-jp_test_coverage#2 | 5 ----- .../changelog/revert-svg-image-optimizations | 4 ---- .../try-lossless-image-optmization-part-3 | 4 ---- .../changelog/try-no-version-bumps-in-trunk | 5 ----- .../crm/changelog/update-bump_min_php_to_7.2 | 5 ----- .../crm/changelog/update-bump_min_wp_to_6.6 | 4 ---- .../crm/changelog/update-ci-tests-in-parallel | 5 ----- .../plugins/crm/changelog/update-composer | 5 ----- .../plugins/crm/changelog/update-eslint-9 | 5 ----- .../update-eslint-config-for-ts-files | 4 ---- ...ate-jsdoc-comments-for-wp-coding-standards | 5 ----- .../update-plugins-fix-eslint-9-lints | 5 ----- ...e-abandoned-eslint-import-resolver-exports | 5 ----- .../update-switch-to-raw-coverage-files | 5 ----- .../crm/changelog/update-tested-to-6-7 | 4 ---- .../changelog/update-various-eslint-plugins | 5 ----- projects/plugins/crm/composer.json | 2 +- projects/plugins/crm/package.json | 2 +- projects/plugins/crm/readme.txt | 17 ++++++++++---- 83 files changed, 36 insertions(+), 348 deletions(-) delete mode 100644 projects/plugins/crm/changelog/add-ci-always-process-coverage delete mode 100644 projects/plugins/crm/changelog/add-consolidate-initial-state delete mode 100644 projects/plugins/crm/changelog/add-crm-api-events-pagination-order-support delete mode 100644 projects/plugins/crm/changelog/add-dependency-extraction-auto-polyfill delete mode 100644 projects/plugins/crm/changelog/add-enable-eslint-wordpress-no-unused-vars-before-return delete mode 100644 projects/plugins/crm/changelog/add-phpunit-coverage-configs delete mode 100644 projects/plugins/crm/changelog/add-structure-lint-eslint-react delete mode 100644 projects/plugins/crm/changelog/crm-fix-invoice-pdf-css delete mode 100644 projects/plugins/crm/changelog/crm-fix-rebrandr-issues delete mode 100644 projects/plugins/crm/changelog/fix-bump_composer_versions delete mode 100644 projects/plugins/crm/changelog/fix-bump_composer_versions_round2#2 delete mode 100644 projects/plugins/crm/changelog/fix-crm-3468-dashboard-contact-graph-fix delete mode 100644 projects/plugins/crm/changelog/fix-crm-3477-fix-export-crash-when-company-custom-field delete mode 100644 projects/plugins/crm/changelog/fix-crm-3504-hundreds-of-unnedded-db-queries-fix delete mode 100644 projects/plugins/crm/changelog/fix-crm-linting delete mode 100644 projects/plugins/crm/changelog/fix-crm-linting2 delete mode 100644 projects/plugins/crm/changelog/fix-crm-linting3 delete mode 100644 projects/plugins/crm/changelog/fix-crm-migration_error_on_sqlite delete mode 100644 projects/plugins/crm/changelog/fix-crm-php_error_on_dash delete mode 100644 projects/plugins/crm/changelog/fix-crm-remove_legacy_code delete mode 100644 projects/plugins/crm/changelog/fix-crm-update-version-to-644-in-ZeroBSCRMCore delete mode 100644 projects/plugins/crm/changelog/fix-crm-use_jetpack_autoloader delete mode 100644 projects/plugins/crm/changelog/fix-deprecated-react-test-renderer-usage delete mode 100644 projects/plugins/crm/changelog/fix-phpcompatibility-new-dev-sniff delete mode 100644 projects/plugins/crm/changelog/fix-phpunit_covers_warnings delete mode 100644 projects/plugins/crm/changelog/prerelease delete mode 100644 projects/plugins/crm/changelog/prerelease#2 delete mode 100644 projects/plugins/crm/changelog/prerelease#3 delete mode 100644 projects/plugins/crm/changelog/prerelease#4 delete mode 100644 projects/plugins/crm/changelog/prerelease#5 delete mode 100644 projects/plugins/crm/changelog/prerelease#6 delete mode 100644 projects/plugins/crm/changelog/prerelease#7 delete mode 100644 projects/plugins/crm/changelog/remove-pre_wp6.6_and_php7.2_code delete mode 100644 projects/plugins/crm/changelog/renovate-babel-monorepo delete mode 100644 projects/plugins/crm/changelog/renovate-brain-monkey-2.x delete mode 100644 projects/plugins/crm/changelog/renovate-definitelytyped delete mode 100644 projects/plugins/crm/changelog/renovate-definitelytyped#2 delete mode 100644 projects/plugins/crm/changelog/renovate-definitelytyped#3 delete mode 100644 projects/plugins/crm/changelog/renovate-glob-11.x delete mode 100644 projects/plugins/crm/changelog/renovate-js-unit-testing-packages delete mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance#2 delete mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance#3 delete mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance#4 delete mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance#5 delete mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance#6 delete mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance#7 delete mode 100644 projects/plugins/crm/changelog/renovate-major-js-unit-testing-packages delete mode 100644 projects/plugins/crm/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x delete mode 100644 projects/plugins/crm/changelog/renovate-npm-webpack-vulnerability delete mode 100644 projects/plugins/crm/changelog/renovate-react-router-monorepo delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo#2 delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo#3 delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo#4 delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo#5 delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo#6 delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo#7 delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo#8 delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo#9 delete mode 100644 projects/plugins/crm/changelog/renovate-yoast-phpunit-polyfills-1.x delete mode 100644 projects/plugins/crm/changelog/restore-jp_test_coverage delete mode 100644 projects/plugins/crm/changelog/restore-jp_test_coverage#2 delete mode 100644 projects/plugins/crm/changelog/revert-svg-image-optimizations delete mode 100644 projects/plugins/crm/changelog/try-lossless-image-optmization-part-3 delete mode 100644 projects/plugins/crm/changelog/try-no-version-bumps-in-trunk delete mode 100644 projects/plugins/crm/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/plugins/crm/changelog/update-bump_min_wp_to_6.6 delete mode 100644 projects/plugins/crm/changelog/update-ci-tests-in-parallel delete mode 100644 projects/plugins/crm/changelog/update-composer delete mode 100644 projects/plugins/crm/changelog/update-eslint-9 delete mode 100644 projects/plugins/crm/changelog/update-eslint-config-for-ts-files delete mode 100644 projects/plugins/crm/changelog/update-jsdoc-comments-for-wp-coding-standards delete mode 100644 projects/plugins/crm/changelog/update-plugins-fix-eslint-9-lints delete mode 100644 projects/plugins/crm/changelog/update-replace-abandoned-eslint-import-resolver-exports delete mode 100644 projects/plugins/crm/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/plugins/crm/changelog/update-tested-to-6-7 delete mode 100644 projects/plugins/crm/changelog/update-various-eslint-plugins diff --git a/projects/plugins/crm/CHANGELOG.md b/projects/plugins/crm/CHANGELOG.md index 1b54edb90f045..ab454bb1027c1 100644 --- a/projects/plugins/crm/CHANGELOG.md +++ b/projects/plugins/crm/CHANGELOG.md @@ -5,8 +5,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [6.4.4] - 2024-08-07 +## [6.5.0] - 2025-01-10 + +### Removed +- General: Remove unused legacy code. [#40267] + +### Changed +- General: Update minimum WordPress version to 6.6. [#40146] +- API: Allow sort order in endpoints. [#38838] +### Fixed +- CRM: Fix bug which caused duplicated queries to run. [#40711] +- CRM: Fix a fatal error that occurred when exporting contacts with a custom field that had the same name as a linked field (e.g., 'company'). [#38851] +- Dashboard: Fix an issue where the CRM contacts graph displayed incorrect values in some instances. [#38316] +- Dashboard: Show correct avatar for recent activity. [#40280] +- Invoices: Fix bugs in the default PDF template and other fixes. Created a new template to maintain backwards compatibility. [#40514] +- Code: Ensure we use Jetpack Autoloader throughout the codebase. [#40061] +- Migrations: Improve WP Playground compatibility. [#39956] + +## [6.4.4] - 2024-08-07 ### Removed - MailPoet: Remove unused MailPoet use statements. [#38453] @@ -3600,7 +3617,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Tested across 4 common web hosts - Tested with extensions: WooCommerce CRM Sync, PayPal CRM Sync, CSV Importer, ZBS CRM Mail Campaigns, and CRM Sales Dashboard -[5.5.4-a.1]: https://github.com/Automattic/jetpack-crm/compare/v5.5.3...v5.5.4-a.1 +[6.5.0]: https://github.com/Automattic/jetpack-crm/compare/6.4.4...6.5.0 [6.4.4]: https://github.com/Automattic/jetpack-crm/compare/6.4.3...6.4.4 [6.4.3]: https://github.com/Automattic/jetpack-crm/compare/6.4.2...6.4.3 [6.4.2]: https://github.com/Automattic/jetpack-crm/compare/6.4.1...6.4.2 @@ -3615,3 +3632,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [5.8.0]: https://github.com/Automattic/jetpack-crm/compare/5.7.0...5.8.0 [5.7.0]: https://github.com/Automattic/jetpack-crm/compare/v5.6.0...v5.7.0 [5.6.0]: https://github.com/Automattic/jetpack-crm/compare/v5.5.4-a.1...v5.6.0 +[5.5.4-a.1]: https://github.com/Automattic/jetpack-crm/compare/v5.5.3...v5.5.4-a.1 diff --git a/projects/plugins/crm/ZeroBSCRM.php b/projects/plugins/crm/ZeroBSCRM.php index 510e48fecc161..7c8dcbe70a5c0 100644 --- a/projects/plugins/crm/ZeroBSCRM.php +++ b/projects/plugins/crm/ZeroBSCRM.php @@ -3,7 +3,7 @@ * Plugin Name: Jetpack CRM * Plugin URI: https://jetpackcrm.com * Description: Jetpack CRM is the simplest CRM for WordPress. Self host your own Customer Relationship Manager using WP. - * Version: 6.4.4 + * Version: 6.5.0 * Author: Automattic - Jetpack CRM team * Author URI: https://jetpackcrm.com * Text Domain: zero-bs-crm diff --git a/projects/plugins/crm/changelog/add-ci-always-process-coverage b/projects/plugins/crm/changelog/add-ci-always-process-coverage deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/add-ci-always-process-coverage +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/add-consolidate-initial-state b/projects/plugins/crm/changelog/add-consolidate-initial-state deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/add-consolidate-initial-state +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/add-crm-api-events-pagination-order-support b/projects/plugins/crm/changelog/add-crm-api-events-pagination-order-support deleted file mode 100644 index b070a38901938..0000000000000 --- a/projects/plugins/crm/changelog/add-crm-api-events-pagination-order-support +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -API-events: Add the pagination result sort/order capability to the endpoint. diff --git a/projects/plugins/crm/changelog/add-dependency-extraction-auto-polyfill b/projects/plugins/crm/changelog/add-dependency-extraction-auto-polyfill deleted file mode 100644 index f4cd286e166af..0000000000000 --- a/projects/plugins/crm/changelog/add-dependency-extraction-auto-polyfill +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Only include `wp-polyfill` as a script dependency when needed. diff --git a/projects/plugins/crm/changelog/add-enable-eslint-wordpress-no-unused-vars-before-return b/projects/plugins/crm/changelog/add-enable-eslint-wordpress-no-unused-vars-before-return deleted file mode 100644 index 7f30b15d5fb4c..0000000000000 --- a/projects/plugins/crm/changelog/add-enable-eslint-wordpress-no-unused-vars-before-return +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Rearranged some variable assignments for new eslint `@wordpress/no-unused-vars-before-return` rule. Should be no changes to functionality. - - diff --git a/projects/plugins/crm/changelog/add-phpunit-coverage-configs b/projects/plugins/crm/changelog/add-phpunit-coverage-configs deleted file mode 100644 index 714f2593c8f4b..0000000000000 --- a/projects/plugins/crm/changelog/add-phpunit-coverage-configs +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Add missing files/dirs to phpunit coverage config. - - diff --git a/projects/plugins/crm/changelog/add-structure-lint-eslint-react b/projects/plugins/crm/changelog/add-structure-lint-eslint-react deleted file mode 100644 index deab1a20d649c..0000000000000 --- a/projects/plugins/crm/changelog/add-structure-lint-eslint-react +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Add `@todo` comment about enabling jetpack-js-tools/eslintrc/react. - - diff --git a/projects/plugins/crm/changelog/crm-fix-invoice-pdf-css b/projects/plugins/crm/changelog/crm-fix-invoice-pdf-css deleted file mode 100644 index a0adf8eb1afea..0000000000000 --- a/projects/plugins/crm/changelog/crm-fix-invoice-pdf-css +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixing bugs in the default PDF template and other fixes. Created a new template to maintain backwards compatibility diff --git a/projects/plugins/crm/changelog/crm-fix-rebrandr-issues b/projects/plugins/crm/changelog/crm-fix-rebrandr-issues deleted file mode 100644 index e55aebf32e9aa..0000000000000 --- a/projects/plugins/crm/changelog/crm-fix-rebrandr-issues +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -fixes some issues with the white label diff --git a/projects/plugins/crm/changelog/fix-bump_composer_versions b/projects/plugins/crm/changelog/fix-bump_composer_versions deleted file mode 100644 index 13cbf3392f78d..0000000000000 --- a/projects/plugins/crm/changelog/fix-bump_composer_versions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated dependencies. diff --git a/projects/plugins/crm/changelog/fix-bump_composer_versions_round2#2 b/projects/plugins/crm/changelog/fix-bump_composer_versions_round2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/fix-bump_composer_versions_round2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/fix-crm-3468-dashboard-contact-graph-fix b/projects/plugins/crm/changelog/fix-crm-3468-dashboard-contact-graph-fix deleted file mode 100644 index 99116cdb2a395..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-3468-dashboard-contact-graph-fix +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Dashboard: Fixed an issue where the CRM contacts graph displayed incorrect values in some instances diff --git a/projects/plugins/crm/changelog/fix-crm-3477-fix-export-crash-when-company-custom-field b/projects/plugins/crm/changelog/fix-crm-3477-fix-export-crash-when-company-custom-field deleted file mode 100644 index 9a81dde96f524..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-3477-fix-export-crash-when-company-custom-field +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixed a fatal error that occurred when exporting contacts with a custom field that had the same name as a linked field (e.g., 'company'). \ No newline at end of file diff --git a/projects/plugins/crm/changelog/fix-crm-3504-hundreds-of-unnedded-db-queries-fix b/projects/plugins/crm/changelog/fix-crm-3504-hundreds-of-unnedded-db-queries-fix deleted file mode 100644 index 83a1f7de5368e..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-3504-hundreds-of-unnedded-db-queries-fix +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -CRM: Fix bug which caused duplicated queries to run. diff --git a/projects/plugins/crm/changelog/fix-crm-linting b/projects/plugins/crm/changelog/fix-crm-linting deleted file mode 100644 index 9e62896e5faa0..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-linting +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -General: Enable JavaScript linting. diff --git a/projects/plugins/crm/changelog/fix-crm-linting2 b/projects/plugins/crm/changelog/fix-crm-linting2 deleted file mode 100644 index e221da8a25ff0..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-linting2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -Removed legacy beta feedback code. diff --git a/projects/plugins/crm/changelog/fix-crm-linting3 b/projects/plugins/crm/changelog/fix-crm-linting3 deleted file mode 100644 index 71e036226da1e..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-linting3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -Removed old build file. diff --git a/projects/plugins/crm/changelog/fix-crm-migration_error_on_sqlite b/projects/plugins/crm/changelog/fix-crm-migration_error_on_sqlite deleted file mode 100644 index 29767e3f5c183..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-migration_error_on_sqlite +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Migrations: Improve WP Playground compatibility. diff --git a/projects/plugins/crm/changelog/fix-crm-php_error_on_dash b/projects/plugins/crm/changelog/fix-crm-php_error_on_dash deleted file mode 100644 index 25d1f6ffc89d3..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-php_error_on_dash +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Dashboard: Show correct avatar for recent activity. diff --git a/projects/plugins/crm/changelog/fix-crm-remove_legacy_code b/projects/plugins/crm/changelog/fix-crm-remove_legacy_code deleted file mode 100644 index b72565da98fe1..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-remove_legacy_code +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -General: Remove unused legacy code. diff --git a/projects/plugins/crm/changelog/fix-crm-update-version-to-644-in-ZeroBSCRMCore b/projects/plugins/crm/changelog/fix-crm-update-version-to-644-in-ZeroBSCRMCore deleted file mode 100644 index 8e05271dbbb32..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-update-version-to-644-in-ZeroBSCRMCore +++ /dev/null @@ -1,3 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fixed the version (to 6.4.4) in includes/ZeroBSCRM.Core.php \ No newline at end of file diff --git a/projects/plugins/crm/changelog/fix-crm-use_jetpack_autoloader b/projects/plugins/crm/changelog/fix-crm-use_jetpack_autoloader deleted file mode 100644 index 365e1c02a52ad..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-use_jetpack_autoloader +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Ensure we use Jetpack Autoloader throughout the codebase. diff --git a/projects/plugins/crm/changelog/fix-deprecated-react-test-renderer-usage b/projects/plugins/crm/changelog/fix-deprecated-react-test-renderer-usage deleted file mode 100644 index c72b599f7c01e..0000000000000 --- a/projects/plugins/crm/changelog/fix-deprecated-react-test-renderer-usage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -Tests: Removed react-test-renderer. diff --git a/projects/plugins/crm/changelog/fix-phpcompatibility-new-dev-sniff b/projects/plugins/crm/changelog/fix-phpcompatibility-new-dev-sniff deleted file mode 100644 index 4c112ce236ea6..0000000000000 --- a/projects/plugins/crm/changelog/fix-phpcompatibility-new-dev-sniff +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Improve spec compliance of CSV output: `\"` sequences will now be correctly escaped by doubling the `"`. diff --git a/projects/plugins/crm/changelog/fix-phpunit_covers_warnings b/projects/plugins/crm/changelog/fix-phpunit_covers_warnings deleted file mode 100644 index 9a705736d2ebc..0000000000000 --- a/projects/plugins/crm/changelog/fix-phpunit_covers_warnings +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix PHPUnit coverage warnings. diff --git a/projects/plugins/crm/changelog/prerelease b/projects/plugins/crm/changelog/prerelease deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/prerelease +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/prerelease#2 b/projects/plugins/crm/changelog/prerelease#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/prerelease#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/prerelease#3 b/projects/plugins/crm/changelog/prerelease#3 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/prerelease#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/prerelease#4 b/projects/plugins/crm/changelog/prerelease#4 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/prerelease#4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/prerelease#5 b/projects/plugins/crm/changelog/prerelease#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/prerelease#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/prerelease#6 b/projects/plugins/crm/changelog/prerelease#6 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/prerelease#6 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/prerelease#7 b/projects/plugins/crm/changelog/prerelease#7 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/prerelease#7 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/remove-pre_wp6.6_and_php7.2_code b/projects/plugins/crm/changelog/remove-pre_wp6.6_and_php7.2_code deleted file mode 100644 index 8bc7df4543fb6..0000000000000 --- a/projects/plugins/crm/changelog/remove-pre_wp6.6_and_php7.2_code +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: removed -Comment: Additional cleanup of old PHP + WP version support. - - diff --git a/projects/plugins/crm/changelog/renovate-babel-monorepo b/projects/plugins/crm/changelog/renovate-babel-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-babel-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-brain-monkey-2.x b/projects/plugins/crm/changelog/renovate-brain-monkey-2.x deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/renovate-brain-monkey-2.x +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/renovate-definitelytyped b/projects/plugins/crm/changelog/renovate-definitelytyped deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-definitelytyped +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-definitelytyped#2 b/projects/plugins/crm/changelog/renovate-definitelytyped#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-definitelytyped#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-definitelytyped#3 b/projects/plugins/crm/changelog/renovate-definitelytyped#3 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-definitelytyped#3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-glob-11.x b/projects/plugins/crm/changelog/renovate-glob-11.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-glob-11.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-js-unit-testing-packages b/projects/plugins/crm/changelog/renovate-js-unit-testing-packages deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-js-unit-testing-packages +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance b/projects/plugins/crm/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#2 b/projects/plugins/crm/changelog/renovate-lock-file-maintenance#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#3 b/projects/plugins/crm/changelog/renovate-lock-file-maintenance#3 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#4 b/projects/plugins/crm/changelog/renovate-lock-file-maintenance#4 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#5 b/projects/plugins/crm/changelog/renovate-lock-file-maintenance#5 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#5 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#6 b/projects/plugins/crm/changelog/renovate-lock-file-maintenance#6 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#6 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#7 b/projects/plugins/crm/changelog/renovate-lock-file-maintenance#7 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-lock-file-maintenance#7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-major-js-unit-testing-packages b/projects/plugins/crm/changelog/renovate-major-js-unit-testing-packages deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-major-js-unit-testing-packages +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x b/projects/plugins/crm/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x deleted file mode 100644 index 5ab42f8a0abd8..0000000000000 --- a/projects/plugins/crm/changelog/renovate-mediawiki-mediawiki-codesniffer-44.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fix missing types in phpdoc comments. - diff --git a/projects/plugins/crm/changelog/renovate-npm-webpack-vulnerability b/projects/plugins/crm/changelog/renovate-npm-webpack-vulnerability deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-npm-webpack-vulnerability +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-react-router-monorepo b/projects/plugins/crm/changelog/renovate-react-router-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-react-router-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo b/projects/plugins/crm/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#2 b/projects/plugins/crm/changelog/renovate-wordpress-monorepo#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#3 b/projects/plugins/crm/changelog/renovate-wordpress-monorepo#3 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#4 b/projects/plugins/crm/changelog/renovate-wordpress-monorepo#4 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#4 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#5 b/projects/plugins/crm/changelog/renovate-wordpress-monorepo#5 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#5 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#6 b/projects/plugins/crm/changelog/renovate-wordpress-monorepo#6 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#7 b/projects/plugins/crm/changelog/renovate-wordpress-monorepo#7 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#8 b/projects/plugins/crm/changelog/renovate-wordpress-monorepo#8 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#8 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#9 b/projects/plugins/crm/changelog/renovate-wordpress-monorepo#9 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo#9 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-yoast-phpunit-polyfills-1.x b/projects/plugins/crm/changelog/renovate-yoast-phpunit-polyfills-1.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-yoast-phpunit-polyfills-1.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/restore-jp_test_coverage b/projects/plugins/crm/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/plugins/crm/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/plugins/crm/changelog/restore-jp_test_coverage#2 b/projects/plugins/crm/changelog/restore-jp_test_coverage#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/restore-jp_test_coverage#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/revert-svg-image-optimizations b/projects/plugins/crm/changelog/revert-svg-image-optimizations deleted file mode 100644 index 356496f8a1f8f..0000000000000 --- a/projects/plugins/crm/changelog/revert-svg-image-optimizations +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Revert recent SVG image optimizations. diff --git a/projects/plugins/crm/changelog/try-lossless-image-optmization-part-3 b/projects/plugins/crm/changelog/try-lossless-image-optmization-part-3 deleted file mode 100644 index cf77a8b55bb43..0000000000000 --- a/projects/plugins/crm/changelog/try-lossless-image-optmization-part-3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Lossless image optimization for images (should improve performance with no visible changes). diff --git a/projects/plugins/crm/changelog/try-no-version-bumps-in-trunk b/projects/plugins/crm/changelog/try-no-version-bumps-in-trunk deleted file mode 100644 index 91efe85c55e06..0000000000000 --- a/projects/plugins/crm/changelog/try-no-version-bumps-in-trunk +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Un-bump version numbers in trunk. The build will now update the version numbers as needed for mirrors. - - diff --git a/projects/plugins/crm/changelog/update-bump_min_php_to_7.2 b/projects/plugins/crm/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/update-bump_min_wp_to_6.6 b/projects/plugins/crm/changelog/update-bump_min_wp_to_6.6 deleted file mode 100644 index b5daa14e55bc4..0000000000000 --- a/projects/plugins/crm/changelog/update-bump_min_wp_to_6.6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum WordPress version to 6.6. diff --git a/projects/plugins/crm/changelog/update-ci-tests-in-parallel b/projects/plugins/crm/changelog/update-ci-tests-in-parallel deleted file mode 100644 index 5dbb1d9f0de65..0000000000000 --- a/projects/plugins/crm/changelog/update-ci-tests-in-parallel +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Use WP_TESTS_CONFIG_FILE_PATH env var in tests. - - diff --git a/projects/plugins/crm/changelog/update-composer b/projects/plugins/crm/changelog/update-composer deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/crm/changelog/update-composer +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/crm/changelog/update-eslint-9 b/projects/plugins/crm/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/plugins/crm/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/plugins/crm/changelog/update-eslint-config-for-ts-files b/projects/plugins/crm/changelog/update-eslint-config-for-ts-files deleted file mode 100644 index fefec667583fd..0000000000000 --- a/projects/plugins/crm/changelog/update-eslint-config-for-ts-files +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixed lints following ESLint rule changes for TS diff --git a/projects/plugins/crm/changelog/update-jsdoc-comments-for-wp-coding-standards b/projects/plugins/crm/changelog/update-jsdoc-comments-for-wp-coding-standards deleted file mode 100644 index 0e655b2b8b7a3..0000000000000 --- a/projects/plugins/crm/changelog/update-jsdoc-comments-for-wp-coding-standards +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Reformat jsdoc comments. No change to meaning or functionality. - - diff --git a/projects/plugins/crm/changelog/update-plugins-fix-eslint-9-lints b/projects/plugins/crm/changelog/update-plugins-fix-eslint-9-lints deleted file mode 100644 index b3176fbef2f88..0000000000000 --- a/projects/plugins/crm/changelog/update-plugins-fix-eslint-9-lints +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fix some JS lints ahead of eslint 9 upgrade. - - diff --git a/projects/plugins/crm/changelog/update-replace-abandoned-eslint-import-resolver-exports b/projects/plugins/crm/changelog/update-replace-abandoned-eslint-import-resolver-exports deleted file mode 100644 index 255a37584b603..0000000000000 --- a/projects/plugins/crm/changelog/update-replace-abandoned-eslint-import-resolver-exports +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Adjust orders of JS imports in various files for new eslint config. Should make no difference to functionality. - - diff --git a/projects/plugins/crm/changelog/update-switch-to-raw-coverage-files b/projects/plugins/crm/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/plugins/crm/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/plugins/crm/changelog/update-tested-to-6-7 b/projects/plugins/crm/changelog/update-tested-to-6-7 deleted file mode 100644 index 9c1d5b4fabb5f..0000000000000 --- a/projects/plugins/crm/changelog/update-tested-to-6-7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -General: indicate compatibility with the upcoming version of WordPress - 6.7. diff --git a/projects/plugins/crm/changelog/update-various-eslint-plugins b/projects/plugins/crm/changelog/update-various-eslint-plugins deleted file mode 100644 index b98fdbffe73bd..0000000000000 --- a/projects/plugins/crm/changelog/update-various-eslint-plugins +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Update code to fix new eslint rules. - - diff --git a/projects/plugins/crm/composer.json b/projects/plugins/crm/composer.json index de79afc121a6f..9b764e3c0e24b 100644 --- a/projects/plugins/crm/composer.json +++ b/projects/plugins/crm/composer.json @@ -45,7 +45,7 @@ ] }, "config": { - "autoloader-suffix": "06c775433a83ed276f0a1d8ac25f93ba_crmⓥ6_4_4", + "autoloader-suffix": "06c775433a83ed276f0a1d8ac25f93ba_crmⓥ6_5_0", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true, diff --git a/projects/plugins/crm/package.json b/projects/plugins/crm/package.json index 3de41eae9ddd4..23915120fca2e 100644 --- a/projects/plugins/crm/package.json +++ b/projects/plugins/crm/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-crm", - "version": "6.4.4", + "version": "6.5.0", "description": "The CRM for WordPress", "author": "Automattic", "license": "GPL-2.0", diff --git a/projects/plugins/crm/readme.txt b/projects/plugins/crm/readme.txt index 85fc40e13a5de..c0187822be163 100644 --- a/projects/plugins/crm/readme.txt +++ b/projects/plugins/crm/readme.txt @@ -362,11 +362,20 @@ We offer a full, no-hassle refund within 14 days. You can read more about that, == Changelog == -### 6.4.4 - 2024-08-07 +### [6.5.0] - 2025-01-10 #### Removed -- MailPoet: Remove unused MailPoet use statements. +- General: Remove unused legacy code. -#### Fixed -- WooSync: Fix a warning message on sync and fatal error when a fee value is not a number +#### Changed +- General: Update minimum WordPress version to 6.6. +- API: Allow sort order in endpoints. +#### Fixed +- CRM: Fix bug which caused duplicated queries to run. +- CRM: Fix a fatal error that occurred when exporting contacts with a custom field that had the same name as a linked field (e.g., 'company'). +- Dashboard: Fix an issue where the CRM contacts graph displayed incorrect values in some instances. +- Dashboard: Show correct avatar for recent activity. +- Invoices: Fix bugs in the default PDF template and other fixes. Created a new template to maintain backwards compatibility. +- Code: Ensure we use Jetpack Autoloader throughout the codebase. +- Migrations: Improve WP Playground compatibility. From 33cea4832d5a206d5a1aa45907d9cdb6516ec88c Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:43:40 -0700 Subject: [PATCH 022/420] Changelog and readme.txt edits. (#40968) --- projects/plugins/search/CHANGELOG.md | 26 +++++++++++++++++++ .../changelog/add-ci-always-process-coverage | 5 ---- .../add-dependency-extraction-auto-polyfill | 4 --- .../add-features-enabled-rest-endpoint | 4 --- .../add-jetpack-search-custom-results | 4 --- .../add-my-jetpack-recommendations-slider | 4 --- .../changelog/add-restful-features-available | 4 --- .../changelog/fix-bump_composer_versions | 4 --- .../fix-bump_composer_versions_round2#2 | 5 ---- .../changelog/fix-playwright_install_tweaks | 4 --- .../changelog/fix-sync-filter-null-array | 5 ---- projects/plugins/search/changelog/prerelease | 5 ---- .../plugins/search/changelog/prerelease#10 | 5 ---- .../plugins/search/changelog/prerelease#11 | 5 ---- .../plugins/search/changelog/prerelease#12 | 5 ---- .../plugins/search/changelog/prerelease#13 | 5 ---- .../plugins/search/changelog/prerelease#14 | 5 ---- .../plugins/search/changelog/prerelease#15 | 5 ---- .../plugins/search/changelog/prerelease#16 | 5 ---- .../plugins/search/changelog/prerelease#17 | 5 ---- .../plugins/search/changelog/prerelease#18 | 5 ---- .../plugins/search/changelog/prerelease#19 | 5 ---- .../plugins/search/changelog/prerelease#2 | 5 ---- .../plugins/search/changelog/prerelease#20 | 5 ---- .../plugins/search/changelog/prerelease#3 | 5 ---- .../plugins/search/changelog/prerelease#4 | 5 ---- .../plugins/search/changelog/prerelease#5 | 5 ---- .../plugins/search/changelog/prerelease#6 | 5 ---- .../plugins/search/changelog/prerelease#7 | 5 ---- .../plugins/search/changelog/prerelease#8 | 5 ---- .../plugins/search/changelog/prerelease#9 | 5 ---- .../changelog/renovate-brain-monkey-2.x | 5 ---- .../search/changelog/renovate-config-3.x | 4 --- .../changelog/renovate-lock-file-maintenance | 4 --- .../renovate-lock-file-maintenance#2 | 4 --- .../renovate-lock-file-maintenance#3 | 5 ---- .../renovate-lock-file-maintenance#4 | 4 --- .../renovate-lock-file-maintenance#5 | 5 ---- .../renovate-lock-file-maintenance#6 | 4 --- .../changelog/renovate-playwright-monorepo | 4 --- .../search/changelog/restore-jp_test_coverage | 4 --- .../changelog/restore-jp_test_coverage#2 | 5 ---- .../changelog/update-bump_min_php_to_7.2 | 4 --- .../changelog/update-bump_min_php_to_7.2#2 | 5 ---- .../changelog/update-bump_min_wp_to_6.6 | 4 --- .../plugins/search/changelog/update-composer | 5 ---- .../plugins/search/changelog/update-eslint-9 | 5 ---- .../changelog/update-fetch-available-licenses | 4 --- .../update-my-jetpack-notice-mobile-style | 4 --- .../changelog/update-my-jetpack-social-cta | 4 --- .../update-switch-to-raw-coverage-files | 5 ---- .../search/changelog/update-tested-to-6-7 | 4 --- .../update-widgets-enqueuing-strategy | 4 --- projects/plugins/search/composer.json | 2 +- projects/plugins/search/jetpack-search.php | 4 +-- projects/plugins/search/readme.txt | 25 ++++++++++++++++-- 56 files changed, 52 insertions(+), 244 deletions(-) delete mode 100644 projects/plugins/search/changelog/add-ci-always-process-coverage delete mode 100644 projects/plugins/search/changelog/add-dependency-extraction-auto-polyfill delete mode 100644 projects/plugins/search/changelog/add-features-enabled-rest-endpoint delete mode 100644 projects/plugins/search/changelog/add-jetpack-search-custom-results delete mode 100644 projects/plugins/search/changelog/add-my-jetpack-recommendations-slider delete mode 100644 projects/plugins/search/changelog/add-restful-features-available delete mode 100644 projects/plugins/search/changelog/fix-bump_composer_versions delete mode 100644 projects/plugins/search/changelog/fix-bump_composer_versions_round2#2 delete mode 100644 projects/plugins/search/changelog/fix-playwright_install_tweaks delete mode 100644 projects/plugins/search/changelog/fix-sync-filter-null-array delete mode 100644 projects/plugins/search/changelog/prerelease delete mode 100644 projects/plugins/search/changelog/prerelease#10 delete mode 100644 projects/plugins/search/changelog/prerelease#11 delete mode 100644 projects/plugins/search/changelog/prerelease#12 delete mode 100644 projects/plugins/search/changelog/prerelease#13 delete mode 100644 projects/plugins/search/changelog/prerelease#14 delete mode 100644 projects/plugins/search/changelog/prerelease#15 delete mode 100644 projects/plugins/search/changelog/prerelease#16 delete mode 100644 projects/plugins/search/changelog/prerelease#17 delete mode 100644 projects/plugins/search/changelog/prerelease#18 delete mode 100644 projects/plugins/search/changelog/prerelease#19 delete mode 100644 projects/plugins/search/changelog/prerelease#2 delete mode 100644 projects/plugins/search/changelog/prerelease#20 delete mode 100644 projects/plugins/search/changelog/prerelease#3 delete mode 100644 projects/plugins/search/changelog/prerelease#4 delete mode 100644 projects/plugins/search/changelog/prerelease#5 delete mode 100644 projects/plugins/search/changelog/prerelease#6 delete mode 100644 projects/plugins/search/changelog/prerelease#7 delete mode 100644 projects/plugins/search/changelog/prerelease#8 delete mode 100644 projects/plugins/search/changelog/prerelease#9 delete mode 100644 projects/plugins/search/changelog/renovate-brain-monkey-2.x delete mode 100644 projects/plugins/search/changelog/renovate-config-3.x delete mode 100644 projects/plugins/search/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/search/changelog/renovate-lock-file-maintenance#2 delete mode 100644 projects/plugins/search/changelog/renovate-lock-file-maintenance#3 delete mode 100644 projects/plugins/search/changelog/renovate-lock-file-maintenance#4 delete mode 100644 projects/plugins/search/changelog/renovate-lock-file-maintenance#5 delete mode 100644 projects/plugins/search/changelog/renovate-lock-file-maintenance#6 delete mode 100644 projects/plugins/search/changelog/renovate-playwright-monorepo delete mode 100644 projects/plugins/search/changelog/restore-jp_test_coverage delete mode 100644 projects/plugins/search/changelog/restore-jp_test_coverage#2 delete mode 100644 projects/plugins/search/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/plugins/search/changelog/update-bump_min_php_to_7.2#2 delete mode 100644 projects/plugins/search/changelog/update-bump_min_wp_to_6.6 delete mode 100644 projects/plugins/search/changelog/update-composer delete mode 100644 projects/plugins/search/changelog/update-eslint-9 delete mode 100644 projects/plugins/search/changelog/update-fetch-available-licenses delete mode 100644 projects/plugins/search/changelog/update-my-jetpack-notice-mobile-style delete mode 100644 projects/plugins/search/changelog/update-my-jetpack-social-cta delete mode 100644 projects/plugins/search/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/plugins/search/changelog/update-tested-to-6-7 delete mode 100644 projects/plugins/search/changelog/update-widgets-enqueuing-strategy diff --git a/projects/plugins/search/CHANGELOG.md b/projects/plugins/search/CHANGELOG.md index 3413d46a5abe4..4fa4eb275d737 100644 --- a/projects/plugins/search/CHANGELOG.md +++ b/projects/plugins/search/CHANGELOG.md @@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.0.0] - 2025-01-10 +### Added +- Enable test coverage. [#39961] +- My Jetpack: Update recommendations section in My Jetpack to include a slider interaction for the cards. [#39850] +- Search: Added ability to customize results. [#36378] + +### Changed +- Classic Widget: Update asset enqueuing strategy to ensure compatibility with the Elementor plugin. [#39820] +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. [#39786] +- Include `wp-polyfill` as a script dependency only when needed. [#39629] +- Resolve an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. [#40215] +- Social: Changed My Jetpack CTA for Social from "Learn more" to "Activate" [#40359] +- Updated dependencies. [#40286] +- Updated package dependencies. [#39288] [#39653] [#40116] [#40515] [#40693] [#40815] + +### Removed +- Connection: Removed deprecated `features_available` method. [#39442] +- Connection: Removed deprecated `features_enabled` method. [#39475] +- General: Update minimum PHP version to 7.2. [#40147] +- General: Update minimum WordPress version to 6.6. [#40146] + +### Fixed +- E2E Tests: Only install single browser used by Playwright. [#40827] +- My Jetpack: Update GlobalNotice component to look better on mobile. [#39537] + ## [3.0.1] - 2024-09-06 ### Changed - Internal updates. @@ -149,6 +174,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [1.1.0-beta]: https://github.com/Automattic/jetpack-search-plugin/compare/1.0.0...1.1.0-beta [1.2.0-beta]: https://github.com/Automattic/jetpack-search-plugin/compare/1.1.0...1.2.0-beta +[4.0.0]: https://github.com/Automattic/jetpack-search-plugin/compare/3.0.1...4.0.0 [3.0.1]: https://github.com/Automattic/jetpack-search-plugin/compare/3.0.0...3.0.1 [3.0.0]: https://github.com/Automattic/jetpack-search-plugin/compare/2.1.0...3.0.0 [2.1.0]: https://github.com/Automattic/jetpack-search-plugin/compare/2.0.0...2.1.0 diff --git a/projects/plugins/search/changelog/add-ci-always-process-coverage b/projects/plugins/search/changelog/add-ci-always-process-coverage deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/add-ci-always-process-coverage +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/add-dependency-extraction-auto-polyfill b/projects/plugins/search/changelog/add-dependency-extraction-auto-polyfill deleted file mode 100644 index f4cd286e166af..0000000000000 --- a/projects/plugins/search/changelog/add-dependency-extraction-auto-polyfill +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Only include `wp-polyfill` as a script dependency when needed. diff --git a/projects/plugins/search/changelog/add-features-enabled-rest-endpoint b/projects/plugins/search/changelog/add-features-enabled-rest-endpoint deleted file mode 100644 index 57cf25c290a35..0000000000000 --- a/projects/plugins/search/changelog/add-features-enabled-rest-endpoint +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: removed - -Connection: Removed features_enabled deprecated method diff --git a/projects/plugins/search/changelog/add-jetpack-search-custom-results b/projects/plugins/search/changelog/add-jetpack-search-custom-results deleted file mode 100644 index a9875522e2ff6..0000000000000 --- a/projects/plugins/search/changelog/add-jetpack-search-custom-results +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Search: Added ability to customize results diff --git a/projects/plugins/search/changelog/add-my-jetpack-recommendations-slider b/projects/plugins/search/changelog/add-my-jetpack-recommendations-slider deleted file mode 100644 index 0658a74e13790..0000000000000 --- a/projects/plugins/search/changelog/add-my-jetpack-recommendations-slider +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -My Jetpack: update the recommendations section in My Jetpack to include a slider interaction for the cards. diff --git a/projects/plugins/search/changelog/add-restful-features-available b/projects/plugins/search/changelog/add-restful-features-available deleted file mode 100644 index 152ef1efc4b7f..0000000000000 --- a/projects/plugins/search/changelog/add-restful-features-available +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: removed - -Connection: Removed deprecated method features_available diff --git a/projects/plugins/search/changelog/fix-bump_composer_versions b/projects/plugins/search/changelog/fix-bump_composer_versions deleted file mode 100644 index 13cbf3392f78d..0000000000000 --- a/projects/plugins/search/changelog/fix-bump_composer_versions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated dependencies. diff --git a/projects/plugins/search/changelog/fix-bump_composer_versions_round2#2 b/projects/plugins/search/changelog/fix-bump_composer_versions_round2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/fix-bump_composer_versions_round2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/fix-playwright_install_tweaks b/projects/plugins/search/changelog/fix-playwright_install_tweaks deleted file mode 100644 index ebeba9b69f473..0000000000000 --- a/projects/plugins/search/changelog/fix-playwright_install_tweaks +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -E2E Tests: Only install single browser used by Playwright. diff --git a/projects/plugins/search/changelog/fix-sync-filter-null-array b/projects/plugins/search/changelog/fix-sync-filter-null-array deleted file mode 100644 index 3f56c90b3a7bf..0000000000000 --- a/projects/plugins/search/changelog/fix-sync-filter-null-array +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Sync: update filter parameter to avoid conflicts with other plugins. - - diff --git a/projects/plugins/search/changelog/prerelease b/projects/plugins/search/changelog/prerelease deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#10 b/projects/plugins/search/changelog/prerelease#10 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#10 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#11 b/projects/plugins/search/changelog/prerelease#11 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#11 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#12 b/projects/plugins/search/changelog/prerelease#12 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#12 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#13 b/projects/plugins/search/changelog/prerelease#13 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#13 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#14 b/projects/plugins/search/changelog/prerelease#14 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#14 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#15 b/projects/plugins/search/changelog/prerelease#15 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#15 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#16 b/projects/plugins/search/changelog/prerelease#16 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#16 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#17 b/projects/plugins/search/changelog/prerelease#17 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#17 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#18 b/projects/plugins/search/changelog/prerelease#18 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#18 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#19 b/projects/plugins/search/changelog/prerelease#19 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#19 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#2 b/projects/plugins/search/changelog/prerelease#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#20 b/projects/plugins/search/changelog/prerelease#20 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#20 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#3 b/projects/plugins/search/changelog/prerelease#3 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#4 b/projects/plugins/search/changelog/prerelease#4 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#5 b/projects/plugins/search/changelog/prerelease#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#6 b/projects/plugins/search/changelog/prerelease#6 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#6 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#7 b/projects/plugins/search/changelog/prerelease#7 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#7 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#8 b/projects/plugins/search/changelog/prerelease#8 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#8 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/prerelease#9 b/projects/plugins/search/changelog/prerelease#9 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/prerelease#9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/renovate-brain-monkey-2.x b/projects/plugins/search/changelog/renovate-brain-monkey-2.x deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/renovate-brain-monkey-2.x +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/renovate-config-3.x b/projects/plugins/search/changelog/renovate-config-3.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/search/changelog/renovate-config-3.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/search/changelog/renovate-lock-file-maintenance b/projects/plugins/search/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/search/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/search/changelog/renovate-lock-file-maintenance#2 b/projects/plugins/search/changelog/renovate-lock-file-maintenance#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/search/changelog/renovate-lock-file-maintenance#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/search/changelog/renovate-lock-file-maintenance#3 b/projects/plugins/search/changelog/renovate-lock-file-maintenance#3 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/renovate-lock-file-maintenance#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/renovate-lock-file-maintenance#4 b/projects/plugins/search/changelog/renovate-lock-file-maintenance#4 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/search/changelog/renovate-lock-file-maintenance#4 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/search/changelog/renovate-lock-file-maintenance#5 b/projects/plugins/search/changelog/renovate-lock-file-maintenance#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/renovate-lock-file-maintenance#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/renovate-lock-file-maintenance#6 b/projects/plugins/search/changelog/renovate-lock-file-maintenance#6 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/search/changelog/renovate-lock-file-maintenance#6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/search/changelog/renovate-playwright-monorepo b/projects/plugins/search/changelog/renovate-playwright-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/search/changelog/renovate-playwright-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/search/changelog/restore-jp_test_coverage b/projects/plugins/search/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/plugins/search/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/plugins/search/changelog/restore-jp_test_coverage#2 b/projects/plugins/search/changelog/restore-jp_test_coverage#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/restore-jp_test_coverage#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/update-bump_min_php_to_7.2 b/projects/plugins/search/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/plugins/search/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/plugins/search/changelog/update-bump_min_php_to_7.2#2 b/projects/plugins/search/changelog/update-bump_min_php_to_7.2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/update-bump_min_php_to_7.2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/update-bump_min_wp_to_6.6 b/projects/plugins/search/changelog/update-bump_min_wp_to_6.6 deleted file mode 100644 index b5daa14e55bc4..0000000000000 --- a/projects/plugins/search/changelog/update-bump_min_wp_to_6.6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum WordPress version to 6.6. diff --git a/projects/plugins/search/changelog/update-composer b/projects/plugins/search/changelog/update-composer deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/search/changelog/update-composer +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/search/changelog/update-eslint-9 b/projects/plugins/search/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/plugins/search/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/plugins/search/changelog/update-fetch-available-licenses b/projects/plugins/search/changelog/update-fetch-available-licenses deleted file mode 100644 index 3c349c8b1445e..0000000000000 --- a/projects/plugins/search/changelog/update-fetch-available-licenses +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Resolved an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. diff --git a/projects/plugins/search/changelog/update-my-jetpack-notice-mobile-style b/projects/plugins/search/changelog/update-my-jetpack-notice-mobile-style deleted file mode 100644 index c740afea846ef..0000000000000 --- a/projects/plugins/search/changelog/update-my-jetpack-notice-mobile-style +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -My Jetpack: visual update to the GlobalNotice component look better on mobile. diff --git a/projects/plugins/search/changelog/update-my-jetpack-social-cta b/projects/plugins/search/changelog/update-my-jetpack-social-cta deleted file mode 100644 index 6b1daf9c1b05e..0000000000000 --- a/projects/plugins/search/changelog/update-my-jetpack-social-cta +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Social | Changed My Jetpack CTA for Social from "Learn more" to "Activate" diff --git a/projects/plugins/search/changelog/update-switch-to-raw-coverage-files b/projects/plugins/search/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/plugins/search/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/plugins/search/changelog/update-tested-to-6-7 b/projects/plugins/search/changelog/update-tested-to-6-7 deleted file mode 100644 index 9c1d5b4fabb5f..0000000000000 --- a/projects/plugins/search/changelog/update-tested-to-6-7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -General: indicate compatibility with the upcoming version of WordPress - 6.7. diff --git a/projects/plugins/search/changelog/update-widgets-enqueuing-strategy b/projects/plugins/search/changelog/update-widgets-enqueuing-strategy deleted file mode 100644 index 69a55655c5ca9..0000000000000 --- a/projects/plugins/search/changelog/update-widgets-enqueuing-strategy +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Classic Widget: update assets' enqueuing strategy to ensure compatibility with the Elementor plugin. diff --git a/projects/plugins/search/composer.json b/projects/plugins/search/composer.json index f337f2c557322..6b36aaef99309 100644 --- a/projects/plugins/search/composer.json +++ b/projects/plugins/search/composer.json @@ -65,7 +65,7 @@ }, "config": { "sort-packages": true, - "autoloader-suffix": "b462338fb66be23595d68a93345c9e3d_jetpack_searchⓥ3_0_1", + "autoloader-suffix": "b462338fb66be23595d68a93345c9e3d_jetpack_searchⓥ4_0_0", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true, diff --git a/projects/plugins/search/jetpack-search.php b/projects/plugins/search/jetpack-search.php index 53b82104dd200..39418fe18f7b9 100644 --- a/projects/plugins/search/jetpack-search.php +++ b/projects/plugins/search/jetpack-search.php @@ -4,7 +4,7 @@ * Plugin Name: Jetpack Search * Plugin URI: https://jetpack.com/search/ * Description: Easily add cloud-powered instant search and filters to your website or WooCommerce store with advanced algorithms that boost your search results based on traffic to your site. - * Version: 3.0.1 + * Version: 4.0.0 * Author: Automattic - Jetpack Search team * Author URI: https://jetpack.com/ * License: GPLv2 or later @@ -26,7 +26,7 @@ define( 'JETPACK_SEARCH_PLUGIN__FILE', __FILE__ ); define( 'JETPACK_SEARCH_PLUGIN__FILE_RELATIVE_PATH', plugin_basename( __FILE__ ) ); define( 'JETPACK_SEARCH_PLUGIN__SLUG', 'jetpack-search' ); -define( 'JETPACK_SEARCH_PLUGIN__VERSION', '3.0.1' ); +define( 'JETPACK_SEARCH_PLUGIN__VERSION', '4.0.0' ); defined( 'JETPACK_CLIENT__AUTH_LOCATION' ) || define( 'JETPACK_CLIENT__AUTH_LOCATION', 'header' ); defined( 'JETPACK__API_BASE' ) || define( 'JETPACK__API_BASE', 'https://jetpack.wordpress.com/jetpack.' ); diff --git a/projects/plugins/search/readme.txt b/projects/plugins/search/readme.txt index 2041c4a205ff8..888cacfbb0279 100644 --- a/projects/plugins/search/readme.txt +++ b/projects/plugins/search/readme.txt @@ -122,9 +122,30 @@ If you are using the Jetpack Search free option, and you have more than 5000 rec 5. Manage all of your Jetpack products, including Search, in a single place. == Changelog == -### 3.0.1 - 2024-09-06 +### 4.0.0 - 2025-01-10 +#### Added +- Enable test coverage. +- My Jetpack: Update recommendations section in My Jetpack to include a slider interaction for the cards. +- Search: Added ability to customize results. + #### Changed -- Internal updates. +- Classic Widget: Update asset enqueuing strategy to ensure compatibility with the Elementor plugin. +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. +- Include `wp-polyfill` as a script dependency only when needed. +- Resolve an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. +- Social: Changed My Jetpack CTA for Social from "Learn more" to "Activate" +- Updated dependencies. +- Updated package dependencies. + +#### Removed +- Connection: Removed deprecated `features_available` method. +- Connection: Removed deprecated `features_enabled` method. +- General: Update minimum PHP version to 7.2. +- General: Update minimum WordPress version to 6.6. + +#### Fixed +- E2E Tests: Only install single browser used by Playwright. +- My Jetpack: Update GlobalNotice component to look better on mobile. == Testimonials == From 17036f7405597b6778f6ec9d4c2b7a25ea6bbf28 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:18:53 -0700 Subject: [PATCH 023/420] Changelog and readme.txt edits. (#40970) --- projects/plugins/super-cache/CHANGELOG.md | 21 +++++++++++++++++++ .../changelog/add-phpunit-coverage-configs | 5 ----- .../changelog/bugfix-supercache-unpublish | 4 ---- .../fix-bump_composer_versions_round2 | 5 ----- .../changelog/fix-mu-wpcom-scssphp | 5 ----- .../plugins/super-cache/changelog/prerelease | 5 ----- .../super-cache/changelog/prerelease#2 | 5 ----- .../remove-eslintrc-unneeded-parseroptions | 5 ----- .../remove-pre_wp6.6_and_php7.2_code | 4 ---- .../renovate-js-unit-testing-packages | 4 ---- .../changelog/renovate-lock-file-maintenance | 4 ---- .../renovate-lock-file-maintenance#2 | 4 ---- .../renovate-lock-file-maintenance#3 | 4 ---- .../renovate-lock-file-maintenance#4 | 5 ----- .../renovate-lock-file-maintenance#5 | 4 ---- .../renovate-lock-file-maintenance#6 | 5 ----- .../renovate-lock-file-maintenance#7 | 4 ---- .../renovate-npm-axios-vulnerability | 4 ---- .../renovate-yoast-phpunit-polyfills-1.x | 4 ---- .../changelog/restore-jp_test_coverage | 4 ---- .../changelog/restore-jp_test_coverage#2 | 5 ----- .../changelog/revert-svg-image-optimizations | 4 ---- .../try-lossless-image-optmization-part-3 | 4 ---- .../changelog/try-no-version-bumps-in-trunk | 5 ----- .../changelog/update-bump_min_php_to_7.2 | 4 ---- .../changelog/update-bump_min_php_to_7.2#2 | 5 ----- .../changelog/update-bump_min_wp_to_6.6 | 4 ---- .../update-cleanup-deprecated-eslint-rules | 5 ----- ...date-cleanup-project-level-eslint-prettier | 5 ----- .../super-cache/changelog/update-composer | 5 ----- .../super-cache/changelog/update-eslint-9 | 5 ----- .../update-plugins-fix-eslint-9-lints | 5 ----- ...date-super-cache-cache-file-race-condition | 4 ---- .../update-super-cache-get-apache-headers | 4 ---- .../update-super-cache-version-tested-bump | 5 ----- .../update-switch-to-raw-coverage-files | 5 ----- .../changelog/update-tested-to-6-7 | 4 ---- .../changelog/update-wordpress-eslint-plugin | 4 ---- projects/plugins/super-cache/composer.json | 2 +- projects/plugins/super-cache/package.json | 2 +- projects/plugins/super-cache/readme.txt | 19 ++++++++++++++--- projects/plugins/super-cache/wp-cache.php | 2 +- 42 files changed, 40 insertions(+), 172 deletions(-) delete mode 100644 projects/plugins/super-cache/changelog/add-phpunit-coverage-configs delete mode 100644 projects/plugins/super-cache/changelog/bugfix-supercache-unpublish delete mode 100644 projects/plugins/super-cache/changelog/fix-bump_composer_versions_round2 delete mode 100644 projects/plugins/super-cache/changelog/fix-mu-wpcom-scssphp delete mode 100644 projects/plugins/super-cache/changelog/prerelease delete mode 100644 projects/plugins/super-cache/changelog/prerelease#2 delete mode 100644 projects/plugins/super-cache/changelog/remove-eslintrc-unneeded-parseroptions delete mode 100644 projects/plugins/super-cache/changelog/remove-pre_wp6.6_and_php7.2_code delete mode 100644 projects/plugins/super-cache/changelog/renovate-js-unit-testing-packages delete mode 100644 projects/plugins/super-cache/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#2 delete mode 100644 projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#3 delete mode 100644 projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#4 delete mode 100644 projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#5 delete mode 100644 projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#6 delete mode 100644 projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#7 delete mode 100644 projects/plugins/super-cache/changelog/renovate-npm-axios-vulnerability delete mode 100644 projects/plugins/super-cache/changelog/renovate-yoast-phpunit-polyfills-1.x delete mode 100644 projects/plugins/super-cache/changelog/restore-jp_test_coverage delete mode 100644 projects/plugins/super-cache/changelog/restore-jp_test_coverage#2 delete mode 100644 projects/plugins/super-cache/changelog/revert-svg-image-optimizations delete mode 100644 projects/plugins/super-cache/changelog/try-lossless-image-optmization-part-3 delete mode 100644 projects/plugins/super-cache/changelog/try-no-version-bumps-in-trunk delete mode 100644 projects/plugins/super-cache/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/plugins/super-cache/changelog/update-bump_min_php_to_7.2#2 delete mode 100644 projects/plugins/super-cache/changelog/update-bump_min_wp_to_6.6 delete mode 100644 projects/plugins/super-cache/changelog/update-cleanup-deprecated-eslint-rules delete mode 100644 projects/plugins/super-cache/changelog/update-cleanup-project-level-eslint-prettier delete mode 100644 projects/plugins/super-cache/changelog/update-composer delete mode 100644 projects/plugins/super-cache/changelog/update-eslint-9 delete mode 100644 projects/plugins/super-cache/changelog/update-plugins-fix-eslint-9-lints delete mode 100644 projects/plugins/super-cache/changelog/update-super-cache-cache-file-race-condition delete mode 100644 projects/plugins/super-cache/changelog/update-super-cache-get-apache-headers delete mode 100644 projects/plugins/super-cache/changelog/update-super-cache-version-tested-bump delete mode 100644 projects/plugins/super-cache/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/plugins/super-cache/changelog/update-tested-to-6-7 delete mode 100644 projects/plugins/super-cache/changelog/update-wordpress-eslint-plugin diff --git a/projects/plugins/super-cache/CHANGELOG.md b/projects/plugins/super-cache/CHANGELOG.md index 22bcc1f332c5c..6f7886efac254 100644 --- a/projects/plugins/super-cache/CHANGELOG.md +++ b/projects/plugins/super-cache/CHANGELOG.md @@ -5,6 +5,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.0.0] - 2025-01-10 +### Added +- Enable test coverage. [#39961] + +### Changed +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. [#39786] +- Updated package dependencies. [#38822] [#38870] [#39004] [#39278] [#39288] [#39653] [#40116] [#40515] + +### Removed +- Cleaned up legacy code. [#40200] +- General: Update minimum PHP version to 7.2. [#40147] +- General: Update minimum WordPress version to 6.6. [#40146] + +### Fixed +- Caching: make sure there is cache content to serve, even if the cache file was found [#40342] +- Ensure homepage cache gets flushed when a post is unpublished. [#40879] +- Lossless image optimization for images (should improve performance with no visible changes). [#38750] [#38981] +- Move trailing space out of i18n message. [#39305] +- Fix apache_request_headers fallback so it works when that command is disabled. [#39951] + ## [1.12.4] - 2024-07-17 ### Removed - General: update WordPress version requirements to WordPress 6.5. [#38382] @@ -764,6 +784,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Misc fixes +[2.0.0]: https://github.com/Automattic/wp-super-cache/compare/v1.12.4...v2.0.0 [1.12.4]: https://github.com/Automattic/wp-super-cache/compare/v1.12.3...v1.12.4 [1.12.3]: https://github.com/Automattic/wp-super-cache/compare/v1.12.2...v1.12.3 [1.12.2]: https://github.com/Automattic/wp-super-cache/compare/v1.12.1...v1.12.2 diff --git a/projects/plugins/super-cache/changelog/add-phpunit-coverage-configs b/projects/plugins/super-cache/changelog/add-phpunit-coverage-configs deleted file mode 100644 index 714f2593c8f4b..0000000000000 --- a/projects/plugins/super-cache/changelog/add-phpunit-coverage-configs +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Add missing files/dirs to phpunit coverage config. - - diff --git a/projects/plugins/super-cache/changelog/bugfix-supercache-unpublish b/projects/plugins/super-cache/changelog/bugfix-supercache-unpublish deleted file mode 100644 index f6716f90fa058..0000000000000 --- a/projects/plugins/super-cache/changelog/bugfix-supercache-unpublish +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Ensure homepage cache gets flushed when a post is unpublished. diff --git a/projects/plugins/super-cache/changelog/fix-bump_composer_versions_round2 b/projects/plugins/super-cache/changelog/fix-bump_composer_versions_round2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/super-cache/changelog/fix-bump_composer_versions_round2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/super-cache/changelog/fix-mu-wpcom-scssphp b/projects/plugins/super-cache/changelog/fix-mu-wpcom-scssphp deleted file mode 100644 index 25e5011cf37d0..0000000000000 --- a/projects/plugins/super-cache/changelog/fix-mu-wpcom-scssphp +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Change blanket `vendor/**` production-include entry to include only what we know we want. - - diff --git a/projects/plugins/super-cache/changelog/prerelease b/projects/plugins/super-cache/changelog/prerelease deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/super-cache/changelog/prerelease +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/super-cache/changelog/prerelease#2 b/projects/plugins/super-cache/changelog/prerelease#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/super-cache/changelog/prerelease#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/super-cache/changelog/remove-eslintrc-unneeded-parseroptions b/projects/plugins/super-cache/changelog/remove-eslintrc-unneeded-parseroptions deleted file mode 100644 index e9871ae770e2f..0000000000000 --- a/projects/plugins/super-cache/changelog/remove-eslintrc-unneeded-parseroptions +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: removed -Comment: Remove unneeded `parserOptions` from eslintrc. - - diff --git a/projects/plugins/super-cache/changelog/remove-pre_wp6.6_and_php7.2_code b/projects/plugins/super-cache/changelog/remove-pre_wp6.6_and_php7.2_code deleted file mode 100644 index 3652253bc0e2f..0000000000000 --- a/projects/plugins/super-cache/changelog/remove-pre_wp6.6_and_php7.2_code +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -Cleaned up legacy code. diff --git a/projects/plugins/super-cache/changelog/renovate-js-unit-testing-packages b/projects/plugins/super-cache/changelog/renovate-js-unit-testing-packages deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-js-unit-testing-packages +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#2 b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#3 b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#3 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#4 b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#4 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#5 b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#5 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#5 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#6 b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#6 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#6 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#7 b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#7 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance#7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/super-cache/changelog/renovate-npm-axios-vulnerability b/projects/plugins/super-cache/changelog/renovate-npm-axios-vulnerability deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-npm-axios-vulnerability +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/super-cache/changelog/renovate-yoast-phpunit-polyfills-1.x b/projects/plugins/super-cache/changelog/renovate-yoast-phpunit-polyfills-1.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/super-cache/changelog/renovate-yoast-phpunit-polyfills-1.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/super-cache/changelog/restore-jp_test_coverage b/projects/plugins/super-cache/changelog/restore-jp_test_coverage deleted file mode 100644 index 7bb19dc79dd19..0000000000000 --- a/projects/plugins/super-cache/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Enable test coverage. diff --git a/projects/plugins/super-cache/changelog/restore-jp_test_coverage#2 b/projects/plugins/super-cache/changelog/restore-jp_test_coverage#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/super-cache/changelog/restore-jp_test_coverage#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/super-cache/changelog/revert-svg-image-optimizations b/projects/plugins/super-cache/changelog/revert-svg-image-optimizations deleted file mode 100644 index 356496f8a1f8f..0000000000000 --- a/projects/plugins/super-cache/changelog/revert-svg-image-optimizations +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Revert recent SVG image optimizations. diff --git a/projects/plugins/super-cache/changelog/try-lossless-image-optmization-part-3 b/projects/plugins/super-cache/changelog/try-lossless-image-optmization-part-3 deleted file mode 100644 index cf77a8b55bb43..0000000000000 --- a/projects/plugins/super-cache/changelog/try-lossless-image-optmization-part-3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Lossless image optimization for images (should improve performance with no visible changes). diff --git a/projects/plugins/super-cache/changelog/try-no-version-bumps-in-trunk b/projects/plugins/super-cache/changelog/try-no-version-bumps-in-trunk deleted file mode 100644 index 91efe85c55e06..0000000000000 --- a/projects/plugins/super-cache/changelog/try-no-version-bumps-in-trunk +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Un-bump version numbers in trunk. The build will now update the version numbers as needed for mirrors. - - diff --git a/projects/plugins/super-cache/changelog/update-bump_min_php_to_7.2 b/projects/plugins/super-cache/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/plugins/super-cache/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/plugins/super-cache/changelog/update-bump_min_php_to_7.2#2 b/projects/plugins/super-cache/changelog/update-bump_min_php_to_7.2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/super-cache/changelog/update-bump_min_php_to_7.2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/super-cache/changelog/update-bump_min_wp_to_6.6 b/projects/plugins/super-cache/changelog/update-bump_min_wp_to_6.6 deleted file mode 100644 index b5daa14e55bc4..0000000000000 --- a/projects/plugins/super-cache/changelog/update-bump_min_wp_to_6.6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum WordPress version to 6.6. diff --git a/projects/plugins/super-cache/changelog/update-cleanup-deprecated-eslint-rules b/projects/plugins/super-cache/changelog/update-cleanup-deprecated-eslint-rules deleted file mode 100644 index 94aaa5b70a786..0000000000000 --- a/projects/plugins/super-cache/changelog/update-cleanup-deprecated-eslint-rules +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Remove unnecessary overrides from eslintrc. - - diff --git a/projects/plugins/super-cache/changelog/update-cleanup-project-level-eslint-prettier b/projects/plugins/super-cache/changelog/update-cleanup-project-level-eslint-prettier deleted file mode 100644 index a323d1564a187..0000000000000 --- a/projects/plugins/super-cache/changelog/update-cleanup-project-level-eslint-prettier +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Enable prettier via eslint, and fix issues. - - diff --git a/projects/plugins/super-cache/changelog/update-composer b/projects/plugins/super-cache/changelog/update-composer deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/super-cache/changelog/update-composer +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/super-cache/changelog/update-eslint-9 b/projects/plugins/super-cache/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/plugins/super-cache/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/plugins/super-cache/changelog/update-plugins-fix-eslint-9-lints b/projects/plugins/super-cache/changelog/update-plugins-fix-eslint-9-lints deleted file mode 100644 index b3176fbef2f88..0000000000000 --- a/projects/plugins/super-cache/changelog/update-plugins-fix-eslint-9-lints +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fix some JS lints ahead of eslint 9 upgrade. - - diff --git a/projects/plugins/super-cache/changelog/update-super-cache-cache-file-race-condition b/projects/plugins/super-cache/changelog/update-super-cache-cache-file-race-condition deleted file mode 100644 index 142a0ba3b9648..0000000000000 --- a/projects/plugins/super-cache/changelog/update-super-cache-cache-file-race-condition +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Caching: make sure there is cache content to serve, even if the cache file was found diff --git a/projects/plugins/super-cache/changelog/update-super-cache-get-apache-headers b/projects/plugins/super-cache/changelog/update-super-cache-get-apache-headers deleted file mode 100644 index d43c4d6b80f59..0000000000000 --- a/projects/plugins/super-cache/changelog/update-super-cache-get-apache-headers +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Super Cache: Fixed the apache_request_headers fallback so it works when that command is disabled diff --git a/projects/plugins/super-cache/changelog/update-super-cache-version-tested-bump b/projects/plugins/super-cache/changelog/update-super-cache-version-tested-bump deleted file mode 100644 index 36468bb8fd394..0000000000000 --- a/projects/plugins/super-cache/changelog/update-super-cache-version-tested-bump +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Bumped the the tested version to 6.7.1 - - diff --git a/projects/plugins/super-cache/changelog/update-switch-to-raw-coverage-files b/projects/plugins/super-cache/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index bfd48f31ebc60..0000000000000 --- a/projects/plugins/super-cache/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Generate raw phpunit and/or jest coverage data instead of clover. - - diff --git a/projects/plugins/super-cache/changelog/update-tested-to-6-7 b/projects/plugins/super-cache/changelog/update-tested-to-6-7 deleted file mode 100644 index 9c1d5b4fabb5f..0000000000000 --- a/projects/plugins/super-cache/changelog/update-tested-to-6-7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -General: indicate compatibility with the upcoming version of WordPress - 6.7. diff --git a/projects/plugins/super-cache/changelog/update-wordpress-eslint-plugin b/projects/plugins/super-cache/changelog/update-wordpress-eslint-plugin deleted file mode 100644 index 1b5211fc7fb1d..0000000000000 --- a/projects/plugins/super-cache/changelog/update-wordpress-eslint-plugin +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Move trailing space out of i18n message. diff --git a/projects/plugins/super-cache/composer.json b/projects/plugins/super-cache/composer.json index 6329d22f872ff..e8fdb4f6dc68b 100644 --- a/projects/plugins/super-cache/composer.json +++ b/projects/plugins/super-cache/composer.json @@ -54,6 +54,6 @@ "wp-svn-autopublish": true }, "config": { - "autoloader-suffix": "6fe342bc02f0b440f7b3c8d8ade42286_super_cacheⓥ1_12_4" + "autoloader-suffix": "6fe342bc02f0b440f7b3c8d8ade42286_super_cacheⓥ2_0_0" } } diff --git a/projects/plugins/super-cache/package.json b/projects/plugins/super-cache/package.json index 8ed695628f84f..dfdef9da30307 100644 --- a/projects/plugins/super-cache/package.json +++ b/projects/plugins/super-cache/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-super-cache", - "version": "1.12.4", + "version": "2.0.0", "description": "A very fast caching engine for WordPress that produces static html files.", "homepage": "https://jetpack.com", "bugs": { diff --git a/projects/plugins/super-cache/readme.txt b/projects/plugins/super-cache/readme.txt index 44fedef3db2ed..f6374d4146dd1 100644 --- a/projects/plugins/super-cache/readme.txt +++ b/projects/plugins/super-cache/readme.txt @@ -268,12 +268,25 @@ Your theme is probably responsive which means it resizes the page to suit whatev == Changelog == -### 1.12.4 - 2024-07-17 +### 2.0.0 - 2025-01-10 +#### Added +- Enable test coverage. + +#### Changed +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. +- Updated package dependencies. + #### Removed -- General: update WordPress version requirements to WordPress 6.5. +- Cleaned up legacy code. +- General: Update minimum PHP version to 7.2. +- General: Update minimum WordPress version to 6.6. #### Fixed -- Fixed problem with is_utf8_charset missing in WP 6.6 +- Caching: make sure there is cache content to serve, even if the cache file was found +- Ensure homepage cache gets flushed when a post is unpublished. +- Lossless image optimization for images (should improve performance with no visible changes). +- Move trailing space out of i18n message. +- Fix apache_request_headers fallback so it works when that command is disabled. -------- diff --git a/projects/plugins/super-cache/wp-cache.php b/projects/plugins/super-cache/wp-cache.php index 5aa1c630b8af9..a976034c21d0a 100644 --- a/projects/plugins/super-cache/wp-cache.php +++ b/projects/plugins/super-cache/wp-cache.php @@ -3,7 +3,7 @@ * Plugin Name: WP Super Cache * Plugin URI: https://wordpress.org/plugins/wp-super-cache/ * Description: Very fast caching plugin for WordPress. - * Version: 1.12.4 + * Version: 2.0.0 * Author: Automattic * Author URI: https://automattic.com/ * License: GPL2+ From 233074af7ecb227023d493e30653074b4c474593 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:12:52 -0700 Subject: [PATCH 024/420] Changelog and readme.txt edits. (#40972) --- projects/plugins/videopress/CHANGELOG.md | 23 +++++++++++++++++++ .../changelog/add-ci-always-process-coverage | 5 ---- .../add-dependency-extraction-auto-polyfill | 4 ---- ...or-blocks-add-tracks-for-connection-banner | 4 ---- .../add-features-enabled-rest-endpoint | 4 ---- .../add-my-jetpack-recommendations-slider | 4 ---- .../changelog/add-restful-features-available | 4 ---- .../changelog/fix-bump_composer_versions | 4 ---- .../fix-bump_composer_versions_round2#2 | 5 ---- .../changelog/fix-playwright_install_tweaks | 4 ---- .../changelog/fix-sync-filter-null-array | 5 ---- .../plugins/videopress/changelog/prerelease | 5 ---- .../videopress/changelog/prerelease#10 | 5 ---- .../videopress/changelog/prerelease#11 | 5 ---- .../videopress/changelog/prerelease#12 | 5 ---- .../videopress/changelog/prerelease#13 | 5 ---- .../videopress/changelog/prerelease#14 | 5 ---- .../videopress/changelog/prerelease#15 | 5 ---- .../videopress/changelog/prerelease#16 | 5 ---- .../videopress/changelog/prerelease#17 | 5 ---- .../videopress/changelog/prerelease#18 | 5 ---- .../videopress/changelog/prerelease#19 | 5 ---- .../plugins/videopress/changelog/prerelease#2 | 5 ---- .../plugins/videopress/changelog/prerelease#3 | 5 ---- .../plugins/videopress/changelog/prerelease#4 | 5 ---- .../plugins/videopress/changelog/prerelease#5 | 5 ---- .../plugins/videopress/changelog/prerelease#6 | 5 ---- .../plugins/videopress/changelog/prerelease#7 | 5 ---- .../plugins/videopress/changelog/prerelease#8 | 5 ---- .../plugins/videopress/changelog/prerelease#9 | 5 ---- .../changelog/renovate-babel-monorepo | 4 ---- .../changelog/renovate-brain-monkey-2.x | 5 ---- .../videopress/changelog/renovate-config-3.x | 4 ---- .../changelog/renovate-lock-file-maintenance | 4 ---- .../renovate-lock-file-maintenance#2 | 4 ---- .../renovate-lock-file-maintenance#3 | 5 ---- .../renovate-lock-file-maintenance#4 | 4 ---- .../renovate-lock-file-maintenance#5 | 5 ---- .../renovate-lock-file-maintenance#6 | 4 ---- .../changelog/renovate-playwright-monorepo | 4 ---- .../changelog/renovate-wordpress-monorepo | 4 ---- .../changelog/renovate-wordpress-monorepo#2 | 4 ---- .../changelog/renovate-wordpress-monorepo#3 | 4 ---- .../changelog/renovate-wordpress-monorepo#4 | 4 ---- .../changelog/renovate-wordpress-monorepo#5 | 4 ---- .../changelog/renovate-wordpress-monorepo#6 | 4 ---- .../changelog/renovate-wordpress-monorepo#7 | 4 ---- .../changelog/restore-jp_test_coverage | 5 ---- .../changelog/update-bump_min_php_to_7.2 | 4 ---- .../changelog/update-bump_min_php_to_7.2#2 | 5 ---- .../changelog/update-bump_min_wp_to_6.6 | 4 ---- .../videopress/changelog/update-composer | 5 ---- .../videopress/changelog/update-eslint-9 | 5 ---- .../changelog/update-fetch-available-licenses | 4 ---- .../update-my-jetpack-notice-mobile-style | 4 ---- .../changelog/update-my-jetpack-social-cta | 4 ---- .../update-switch-to-raw-coverage-files | 5 ---- .../videopress/changelog/update-tested-to-6-7 | 4 ---- projects/plugins/videopress/composer.json | 2 +- .../plugins/videopress/jetpack-videopress.php | 2 +- projects/plugins/videopress/readme.txt | 23 +++++++++++++++++-- 61 files changed, 46 insertions(+), 262 deletions(-) delete mode 100644 projects/plugins/videopress/changelog/add-ci-always-process-coverage delete mode 100644 projects/plugins/videopress/changelog/add-dependency-extraction-auto-polyfill delete mode 100644 projects/plugins/videopress/changelog/add-editor-blocks-add-tracks-for-connection-banner delete mode 100644 projects/plugins/videopress/changelog/add-features-enabled-rest-endpoint delete mode 100644 projects/plugins/videopress/changelog/add-my-jetpack-recommendations-slider delete mode 100644 projects/plugins/videopress/changelog/add-restful-features-available delete mode 100644 projects/plugins/videopress/changelog/fix-bump_composer_versions delete mode 100644 projects/plugins/videopress/changelog/fix-bump_composer_versions_round2#2 delete mode 100644 projects/plugins/videopress/changelog/fix-playwright_install_tweaks delete mode 100644 projects/plugins/videopress/changelog/fix-sync-filter-null-array delete mode 100644 projects/plugins/videopress/changelog/prerelease delete mode 100644 projects/plugins/videopress/changelog/prerelease#10 delete mode 100644 projects/plugins/videopress/changelog/prerelease#11 delete mode 100644 projects/plugins/videopress/changelog/prerelease#12 delete mode 100644 projects/plugins/videopress/changelog/prerelease#13 delete mode 100644 projects/plugins/videopress/changelog/prerelease#14 delete mode 100644 projects/plugins/videopress/changelog/prerelease#15 delete mode 100644 projects/plugins/videopress/changelog/prerelease#16 delete mode 100644 projects/plugins/videopress/changelog/prerelease#17 delete mode 100644 projects/plugins/videopress/changelog/prerelease#18 delete mode 100644 projects/plugins/videopress/changelog/prerelease#19 delete mode 100644 projects/plugins/videopress/changelog/prerelease#2 delete mode 100644 projects/plugins/videopress/changelog/prerelease#3 delete mode 100644 projects/plugins/videopress/changelog/prerelease#4 delete mode 100644 projects/plugins/videopress/changelog/prerelease#5 delete mode 100644 projects/plugins/videopress/changelog/prerelease#6 delete mode 100644 projects/plugins/videopress/changelog/prerelease#7 delete mode 100644 projects/plugins/videopress/changelog/prerelease#8 delete mode 100644 projects/plugins/videopress/changelog/prerelease#9 delete mode 100644 projects/plugins/videopress/changelog/renovate-babel-monorepo delete mode 100644 projects/plugins/videopress/changelog/renovate-brain-monkey-2.x delete mode 100644 projects/plugins/videopress/changelog/renovate-config-3.x delete mode 100644 projects/plugins/videopress/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/videopress/changelog/renovate-lock-file-maintenance#2 delete mode 100644 projects/plugins/videopress/changelog/renovate-lock-file-maintenance#3 delete mode 100644 projects/plugins/videopress/changelog/renovate-lock-file-maintenance#4 delete mode 100644 projects/plugins/videopress/changelog/renovate-lock-file-maintenance#5 delete mode 100644 projects/plugins/videopress/changelog/renovate-lock-file-maintenance#6 delete mode 100644 projects/plugins/videopress/changelog/renovate-playwright-monorepo delete mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo delete mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo#2 delete mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo#3 delete mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo#4 delete mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo#5 delete mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo#6 delete mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo#7 delete mode 100644 projects/plugins/videopress/changelog/restore-jp_test_coverage delete mode 100644 projects/plugins/videopress/changelog/update-bump_min_php_to_7.2 delete mode 100644 projects/plugins/videopress/changelog/update-bump_min_php_to_7.2#2 delete mode 100644 projects/plugins/videopress/changelog/update-bump_min_wp_to_6.6 delete mode 100644 projects/plugins/videopress/changelog/update-composer delete mode 100644 projects/plugins/videopress/changelog/update-eslint-9 delete mode 100644 projects/plugins/videopress/changelog/update-fetch-available-licenses delete mode 100644 projects/plugins/videopress/changelog/update-my-jetpack-notice-mobile-style delete mode 100644 projects/plugins/videopress/changelog/update-my-jetpack-social-cta delete mode 100644 projects/plugins/videopress/changelog/update-switch-to-raw-coverage-files delete mode 100644 projects/plugins/videopress/changelog/update-tested-to-6-7 diff --git a/projects/plugins/videopress/CHANGELOG.md b/projects/plugins/videopress/CHANGELOG.md index e76629394a876..4b659009f9ab1 100644 --- a/projects/plugins/videopress/CHANGELOG.md +++ b/projects/plugins/videopress/CHANGELOG.md @@ -4,6 +4,29 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## 2.2 - 2025-01-10 +### Added +- Add tracks for connection banner [#39732] +- My Jetpack: Update the recommendations section in My Jetpack to include a slider interaction for the cards. [#39850] + +### Changed +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. [#39786] +- Include `wp-polyfill` as a script dependency only when needed. [#39629] +- Resolve an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. [#40215] +- Social: Change My Jetpack CTA for Social from "Learn more" to "Activate". [#40359] +- Updated dependencies. [#40286] +- Updated package dependencies. [#39288] [#39302] [#39594] [#39653] [#39707] [#39999] [#40060] [#40116] [#40288] [#40363] [#40515] [#40564] [#40693] [#40815] + +### Removed +- Connection: Remove deprecated `features_available` method. [#39442] +- Connection: Remove deprecated `features_enabled` method. [#39475] +- General: Update minimum PHP version to 7.2. [#40147] +- General: Update minimum WordPress version to 6.6. [#40146] + +### Fixed +- E2E Tests: Only install single browser used by Playwright. [#40827] +- My Jetpack: Update GlobalNotice component to look better on mobile. [#39537] + ## 2.1 - 2024-09-06 ### Changed - Internal updates. diff --git a/projects/plugins/videopress/changelog/add-ci-always-process-coverage b/projects/plugins/videopress/changelog/add-ci-always-process-coverage deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/add-ci-always-process-coverage +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/add-dependency-extraction-auto-polyfill b/projects/plugins/videopress/changelog/add-dependency-extraction-auto-polyfill deleted file mode 100644 index f4cd286e166af..0000000000000 --- a/projects/plugins/videopress/changelog/add-dependency-extraction-auto-polyfill +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Only include `wp-polyfill` as a script dependency when needed. diff --git a/projects/plugins/videopress/changelog/add-editor-blocks-add-tracks-for-connection-banner b/projects/plugins/videopress/changelog/add-editor-blocks-add-tracks-for-connection-banner deleted file mode 100644 index 824195750d601..0000000000000 --- a/projects/plugins/videopress/changelog/add-editor-blocks-add-tracks-for-connection-banner +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Add tracks for connection banner diff --git a/projects/plugins/videopress/changelog/add-features-enabled-rest-endpoint b/projects/plugins/videopress/changelog/add-features-enabled-rest-endpoint deleted file mode 100644 index 57cf25c290a35..0000000000000 --- a/projects/plugins/videopress/changelog/add-features-enabled-rest-endpoint +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: removed - -Connection: Removed features_enabled deprecated method diff --git a/projects/plugins/videopress/changelog/add-my-jetpack-recommendations-slider b/projects/plugins/videopress/changelog/add-my-jetpack-recommendations-slider deleted file mode 100644 index 0658a74e13790..0000000000000 --- a/projects/plugins/videopress/changelog/add-my-jetpack-recommendations-slider +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -My Jetpack: update the recommendations section in My Jetpack to include a slider interaction for the cards. diff --git a/projects/plugins/videopress/changelog/add-restful-features-available b/projects/plugins/videopress/changelog/add-restful-features-available deleted file mode 100644 index 152ef1efc4b7f..0000000000000 --- a/projects/plugins/videopress/changelog/add-restful-features-available +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: removed - -Connection: Removed deprecated method features_available diff --git a/projects/plugins/videopress/changelog/fix-bump_composer_versions b/projects/plugins/videopress/changelog/fix-bump_composer_versions deleted file mode 100644 index 13cbf3392f78d..0000000000000 --- a/projects/plugins/videopress/changelog/fix-bump_composer_versions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated dependencies. diff --git a/projects/plugins/videopress/changelog/fix-bump_composer_versions_round2#2 b/projects/plugins/videopress/changelog/fix-bump_composer_versions_round2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/fix-bump_composer_versions_round2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/fix-playwright_install_tweaks b/projects/plugins/videopress/changelog/fix-playwright_install_tweaks deleted file mode 100644 index ebeba9b69f473..0000000000000 --- a/projects/plugins/videopress/changelog/fix-playwright_install_tweaks +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -E2E Tests: Only install single browser used by Playwright. diff --git a/projects/plugins/videopress/changelog/fix-sync-filter-null-array b/projects/plugins/videopress/changelog/fix-sync-filter-null-array deleted file mode 100644 index 3f56c90b3a7bf..0000000000000 --- a/projects/plugins/videopress/changelog/fix-sync-filter-null-array +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Sync: update filter parameter to avoid conflicts with other plugins. - - diff --git a/projects/plugins/videopress/changelog/prerelease b/projects/plugins/videopress/changelog/prerelease deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#10 b/projects/plugins/videopress/changelog/prerelease#10 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#10 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#11 b/projects/plugins/videopress/changelog/prerelease#11 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#11 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#12 b/projects/plugins/videopress/changelog/prerelease#12 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#12 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#13 b/projects/plugins/videopress/changelog/prerelease#13 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#13 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#14 b/projects/plugins/videopress/changelog/prerelease#14 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#14 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#15 b/projects/plugins/videopress/changelog/prerelease#15 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#15 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#16 b/projects/plugins/videopress/changelog/prerelease#16 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#16 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#17 b/projects/plugins/videopress/changelog/prerelease#17 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#17 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#18 b/projects/plugins/videopress/changelog/prerelease#18 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#18 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#19 b/projects/plugins/videopress/changelog/prerelease#19 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#19 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#2 b/projects/plugins/videopress/changelog/prerelease#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#3 b/projects/plugins/videopress/changelog/prerelease#3 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#4 b/projects/plugins/videopress/changelog/prerelease#4 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#4 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#5 b/projects/plugins/videopress/changelog/prerelease#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#6 b/projects/plugins/videopress/changelog/prerelease#6 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#6 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#7 b/projects/plugins/videopress/changelog/prerelease#7 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#7 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#8 b/projects/plugins/videopress/changelog/prerelease#8 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#8 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/prerelease#9 b/projects/plugins/videopress/changelog/prerelease#9 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/prerelease#9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/renovate-babel-monorepo b/projects/plugins/videopress/changelog/renovate-babel-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-babel-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-brain-monkey-2.x b/projects/plugins/videopress/changelog/renovate-brain-monkey-2.x deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-brain-monkey-2.x +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/renovate-config-3.x b/projects/plugins/videopress/changelog/renovate-config-3.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-config-3.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance b/projects/plugins/videopress/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#2 b/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#3 b/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#3 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#3 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#4 b/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#4 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#4 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#5 b/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#5 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#5 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#6 b/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#6 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance#6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-playwright-monorepo b/projects/plugins/videopress/changelog/renovate-playwright-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-playwright-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo b/projects/plugins/videopress/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#2 b/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#2 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#3 b/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#3 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#4 b/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#4 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#4 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#5 b/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#5 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#5 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#6 b/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#6 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#7 b/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#7 deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/videopress/changelog/renovate-wordpress-monorepo#7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/videopress/changelog/restore-jp_test_coverage b/projects/plugins/videopress/changelog/restore-jp_test_coverage deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/restore-jp_test_coverage +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/update-bump_min_php_to_7.2 b/projects/plugins/videopress/changelog/update-bump_min_php_to_7.2 deleted file mode 100644 index 712ab5f494aaa..0000000000000 --- a/projects/plugins/videopress/changelog/update-bump_min_php_to_7.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum PHP version to 7.2. diff --git a/projects/plugins/videopress/changelog/update-bump_min_php_to_7.2#2 b/projects/plugins/videopress/changelog/update-bump_min_php_to_7.2#2 deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/update-bump_min_php_to_7.2#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/update-bump_min_wp_to_6.6 b/projects/plugins/videopress/changelog/update-bump_min_wp_to_6.6 deleted file mode 100644 index b5daa14e55bc4..0000000000000 --- a/projects/plugins/videopress/changelog/update-bump_min_wp_to_6.6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: removed - -General: Update minimum WordPress version to 6.6. diff --git a/projects/plugins/videopress/changelog/update-composer b/projects/plugins/videopress/changelog/update-composer deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/update-composer +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/update-eslint-9 b/projects/plugins/videopress/changelog/update-eslint-9 deleted file mode 100644 index 1cb10572ab69e..0000000000000 --- a/projects/plugins/videopress/changelog/update-eslint-9 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Update eslint config for eslint 9. - - diff --git a/projects/plugins/videopress/changelog/update-fetch-available-licenses b/projects/plugins/videopress/changelog/update-fetch-available-licenses deleted file mode 100644 index 3c349c8b1445e..0000000000000 --- a/projects/plugins/videopress/changelog/update-fetch-available-licenses +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Resolved an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. diff --git a/projects/plugins/videopress/changelog/update-my-jetpack-notice-mobile-style b/projects/plugins/videopress/changelog/update-my-jetpack-notice-mobile-style deleted file mode 100644 index c740afea846ef..0000000000000 --- a/projects/plugins/videopress/changelog/update-my-jetpack-notice-mobile-style +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -My Jetpack: visual update to the GlobalNotice component look better on mobile. diff --git a/projects/plugins/videopress/changelog/update-my-jetpack-social-cta b/projects/plugins/videopress/changelog/update-my-jetpack-social-cta deleted file mode 100644 index 6b1daf9c1b05e..0000000000000 --- a/projects/plugins/videopress/changelog/update-my-jetpack-social-cta +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Social | Changed My Jetpack CTA for Social from "Learn more" to "Activate" diff --git a/projects/plugins/videopress/changelog/update-switch-to-raw-coverage-files b/projects/plugins/videopress/changelog/update-switch-to-raw-coverage-files deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/videopress/changelog/update-switch-to-raw-coverage-files +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/videopress/changelog/update-tested-to-6-7 b/projects/plugins/videopress/changelog/update-tested-to-6-7 deleted file mode 100644 index 9c1d5b4fabb5f..0000000000000 --- a/projects/plugins/videopress/changelog/update-tested-to-6-7 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -General: indicate compatibility with the upcoming version of WordPress - 6.7. diff --git a/projects/plugins/videopress/composer.json b/projects/plugins/videopress/composer.json index 8976f01a5114a..cf9be999c39f9 100644 --- a/projects/plugins/videopress/composer.json +++ b/projects/plugins/videopress/composer.json @@ -58,6 +58,6 @@ "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true }, - "autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_videopressⓥ2_1" + "autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_videopressⓥ2_2" } } diff --git a/projects/plugins/videopress/jetpack-videopress.php b/projects/plugins/videopress/jetpack-videopress.php index a7f659ec8882d..e35192e00e268 100644 --- a/projects/plugins/videopress/jetpack-videopress.php +++ b/projects/plugins/videopress/jetpack-videopress.php @@ -4,7 +4,7 @@ * Plugin Name: Jetpack VideoPress * Plugin URI: https://wordpress.org/plugins/jetpack-videopress * Description: High quality, ad-free video. - * Version: 2.1 + * Version: 2.2 * Author: Automattic - Jetpack Video team * Author URI: https://jetpack.com/videopress/ * License: GPLv2 or later diff --git a/projects/plugins/videopress/readme.txt b/projects/plugins/videopress/readme.txt index f2e1a317c67ec..70f6e71972111 100644 --- a/projects/plugins/videopress/readme.txt +++ b/projects/plugins/videopress/readme.txt @@ -84,7 +84,26 @@ The file size limit is 5 GB. However, on slower networks, there is a chance the 4. Edit your video details, cover image, and privacy from your VideoPress library. == Changelog == -### 2.1 - 2024-09-06 +### 2.2 - 2025-01-10 +#### Added +- Add tracks for connection banner +- My Jetpack: Update the recommendations section in My Jetpack to include a slider interaction for the cards. + #### Changed -- Internal updates. +- General: Indicate compatibility with the upcoming version of WordPress - 6.7. +- Include `wp-polyfill` as a script dependency only when needed. +- Resolve an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. +- Social: Change My Jetpack CTA for Social from "Learn more" to "Activate". +- Updated dependencies. +- Updated package dependencies. + +#### Removed +- Connection: Remove deprecated `features_available` method. +- Connection: Remove deprecated `features_enabled` method. +- General: Update minimum PHP version to 7.2. +- General: Update minimum WordPress version to 6.6. + +#### Fixed +- E2E Tests: Only install single browser used by Playwright. +- My Jetpack: Update GlobalNotice component to look better on mobile. From 15f21523a636ad874b70870e2d67e3c09435e24d Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Mon, 13 Jan 2025 10:09:08 +1300 Subject: [PATCH 025/420] Charts: Replace Rollup with Webpack (#40912) * replace rollup with webpack * update scripts * changelog * Delete projects/js-packages/charts/eslint.config.mjs * remove rollup from dependencies * Update projects/js-packages/charts/package.json * separate directory for cjs and esm * refactoring * move types to top * replaced remaining types imports * rename esm to mjs to be consistent * fix color access * fix type errors * fix type errors * add index to accessors * add types build * change exports etc * remove unecessary options * remove unecessary ts-loader * make babel/runtime external * we might want to export the types here * fixed export file names * fix pnpm lock * adding build:prod script * use a single webpack config * fix pnpm locks --- pnpm-lock.yaml | 440 +++++++++++++++--- .../update-change-to-webpack-charts-2 | 4 + projects/js-packages/charts/index.ts | 2 +- projects/js-packages/charts/package.json | 78 ++-- projects/js-packages/charts/rollup.config.mjs | 142 ------ .../src/components/bar-chart/bar-chart.tsx | 2 +- .../components/grid-control/grid-control.tsx | 2 +- .../src/components/line-chart/line-chart.tsx | 2 +- .../line-chart/stories/sample-data.ts | 2 +- .../src/components/pie-chart/pie-chart.tsx | 20 +- .../pie-semi-circle-chart.tsx | 2 +- .../src/hooks/use-chart-mouse-handler.ts | 2 +- projects/js-packages/charts/src/index.ts | 4 - .../src/providers/theme/theme-provider.tsx | 2 +- .../charts/src/providers/theme/themes.ts | 2 +- .../shared/types.d.ts => types.ts} | 0 projects/js-packages/charts/tools/fixup.sh | 11 + projects/js-packages/charts/tsconfig.json | 21 +- .../js-packages/charts/webpack.config.cjs | 132 ++++++ 19 files changed, 594 insertions(+), 276 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-change-to-webpack-charts-2 delete mode 100644 projects/js-packages/charts/rollup.config.mjs rename projects/js-packages/charts/src/{components/shared/types.d.ts => types.ts} (100%) create mode 100644 projects/js-packages/charts/tools/fixup.sh create mode 100644 projects/js-packages/charts/webpack.config.cjs diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 381294a9066fb..3e859a95425fd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -295,6 +295,9 @@ importers: projects/js-packages/charts: dependencies: + '@babel/runtime': + specifier: 7.26.0 + version: 7.26.0 '@react-spring/web': specifier: 9.7.3 version: 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -338,21 +341,21 @@ importers: specifier: 2.5.0 version: 2.5.0 devDependencies: - '@rollup/plugin-commonjs': - specifier: 26.0.1 - version: 26.0.1(rollup@3.29.5) - '@rollup/plugin-json': - specifier: 6.1.0 - version: 6.1.0(rollup@3.29.5) - '@rollup/plugin-node-resolve': - specifier: 15.3.0 - version: 15.3.0(rollup@3.29.5) - '@rollup/plugin-terser': - specifier: 0.4.3 - version: 0.4.3(rollup@3.29.5) - '@rollup/plugin-typescript': - specifier: 12.1.0 - version: 12.1.0(rollup@3.29.5)(tslib@2.5.0)(typescript@5.7.2) + '@babel/core': + specifier: 7.26.0 + version: 7.26.0 + '@babel/plugin-transform-runtime': + specifier: 7.25.9 + version: 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': + specifier: 7.26.0 + version: 7.26.0(@babel/core@7.26.0) + '@babel/preset-react': + specifier: 7.26.3 + version: 7.26.3(@babel/core@7.26.0) + '@babel/preset-typescript': + specifier: 7.26.0 + version: 7.26.0(@babel/core@7.26.0) '@storybook/blocks': specifier: 8.4.7 version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) @@ -365,6 +368,18 @@ importers: '@types/react-dom': specifier: 18.3.5 version: 18.3.5(@types/react@18.3.18) + babel-loader: + specifier: 9.1.2 + version: 9.1.2(@babel/core@7.26.0)(webpack@5.94.0) + clean-webpack-plugin: + specifier: ^4.0.0 + version: 4.0.0(webpack@5.94.0) + css-loader: + specifier: ^6.7.0 + version: 6.11.0(webpack@5.94.0) + fork-ts-checker-webpack-plugin: + specifier: 9.0.2 + version: 9.0.2(typescript@5.7.2)(webpack@5.94.0) jest: specifier: 29.7.0 version: 29.7.0 @@ -374,9 +389,15 @@ importers: jest-extended: specifier: 4.0.2 version: 4.0.2(jest@29.7.0) + mini-css-extract-plugin: + specifier: ^2.7.0 + version: 2.9.1(webpack@5.94.0) postcss: specifier: 8.4.47 version: 8.4.47 + postcss-loader: + specifier: ^7.0.0 + version: 7.3.4(postcss@8.4.47)(typescript@5.7.2)(webpack@5.94.0) postcss-modules: specifier: 6.0.1 version: 6.0.1(postcss@8.4.47) @@ -386,30 +407,30 @@ importers: react-dom: specifier: 18.3.1 version: 18.3.1(react@18.3.1) - rollup: - specifier: 3.29.5 - version: 3.29.5 - rollup-plugin-dts: - specifier: 6.1.1 - version: 6.1.1(rollup@3.29.5)(typescript@5.7.2) - rollup-plugin-peer-deps-external: - specifier: 2.2.4 - version: 2.2.4(rollup@3.29.5) - rollup-plugin-postcss: - specifier: 4.0.2 - version: 4.0.2(postcss@8.4.47) sass: specifier: 1.64.1 version: 1.64.1 sass-embedded: specifier: 1.83.0 version: 1.83.0 + sass-loader: + specifier: ^13.0.0 + version: 13.3.3(sass-embedded@1.83.0)(sass@1.64.1)(webpack@5.94.0) storybook: specifier: 8.4.7 version: 8.4.7 + tsconfig-paths-webpack-plugin: + specifier: 4.2.0 + version: 4.2.0 typescript: specifier: 5.7.2 version: 5.7.2 + webpack: + specifier: ^5.88.0 + version: 5.94.0(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.0 + version: 5.1.4(webpack@5.94.0) projects/js-packages/components: dependencies: @@ -7871,11 +7892,25 @@ packages: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x + '@webpack-cli/configtest@2.1.1': + resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + '@webpack-cli/info@1.5.0': resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} peerDependencies: webpack-cli: 4.x.x + '@webpack-cli/info@2.0.2': + resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + '@webpack-cli/serve@1.7.0': resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} peerDependencies: @@ -7885,6 +7920,17 @@ packages: webpack-dev-server: optional: true + '@webpack-cli/serve@2.0.5': + resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + '@wordpress/a11y@4.13.0': resolution: {integrity: sha512-ZCNhj8GDi6cOVm7L0vfwG5y7XPZONfRbb1KEsJjfgiLY9BnjmfpI5TAqYXcoXbm+Xkea84dQWw1J03EfkuSyIg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -8486,10 +8532,18 @@ packages: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} + array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + array.prototype.findlast@1.2.5: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} @@ -8901,6 +8955,12 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + clean-webpack-plugin@4.0.0: + resolution: {integrity: sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: '>=4.0.0 <6.0.0' + cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} engines: {node: '>=4'} @@ -8994,6 +9054,10 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -9435,6 +9499,10 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} + del@4.1.1: + resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} + engines: {node: '>=6'} + delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} @@ -10454,6 +10522,10 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} + good-listener@1.2.2: resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} @@ -10710,6 +10782,10 @@ packages: resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} engines: {node: '>= 0.10'} + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + intl-messageformat@10.7.11: resolution: {integrity: sha512-IB2N1tmI24k2EFH3PWjU7ivJsnWyLwOWOva0jnXFa29WzB6fb0JZ5EMQGu+XN5lDtjHYFo0/UooP67zBwUg7rQ==} @@ -10844,6 +10920,18 @@ packages: resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} engines: {node: '>=4'} + is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + + is-path-in-cwd@2.1.0: + resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} + engines: {node: '>=6'} + + is-path-inside@2.1.0: + resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} + engines: {node: '>=6'} + is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -11182,6 +11270,10 @@ packages: node-notifier: optional: true + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + jiti@2.4.1: resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==} hasBin: true @@ -12162,6 +12254,9 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -12218,10 +12313,26 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + pify@5.0.0: resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} engines: {node: '>=10'} + pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + + pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -12332,6 +12443,13 @@ packages: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 + postcss-loader@7.3.4: + resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} + engines: {node: '>= 14.15.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + postcss-merge-longhand@6.0.5: resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} engines: {node: ^14 || ^16 || >=18.0} @@ -12868,6 +12986,10 @@ packages: resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} engines: {node: '>= 0.10'} + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -13042,6 +13164,11 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -13054,22 +13181,10 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup-plugin-dts@6.1.1: - resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} - engines: {node: '>=16'} - peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 - rollup-plugin-livereload@2.0.5: resolution: {integrity: sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==} engines: {node: '>=8.3'} - rollup-plugin-peer-deps-external@2.2.4: - resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==} - peerDependencies: - rollup: '*' - rollup-plugin-postcss@4.0.2: resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} engines: {node: '>=10'} @@ -13281,6 +13396,25 @@ packages: sass: optional: true + sass-loader@13.3.3: + resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + sass@1.64.1: resolution: {integrity: sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==} engines: {node: '>=14.0.0'} @@ -14009,6 +14143,10 @@ packages: esbuild: optional: true + tsconfig-paths-webpack-plugin@4.2.0: + resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==} + engines: {node: '>=10.13.0'} + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -14372,6 +14510,23 @@ packages: webpack-dev-server: optional: true + webpack-cli@5.1.4: + resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} + engines: {node: '>=14.15.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + webpack-dev-middleware@5.3.4: resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} engines: {node: '>= 12.13.0'} @@ -16859,15 +17014,6 @@ snapshots: rollup: 3.29.5 tslib: 2.5.0 - '@rollup/plugin-typescript@12.1.0(rollup@3.29.5)(tslib@2.5.0)(typescript@5.7.2)': - dependencies: - '@rollup/pluginutils': 5.1.3(rollup@3.29.5) - resolve: 1.22.8 - typescript: 5.7.2 - optionalDependencies: - rollup: 3.29.5 - tslib: 2.5.0 - '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 @@ -18380,15 +18526,30 @@ snapshots: webpack: 5.94.0(webpack-cli@4.9.1) webpack-cli: 4.9.1(webpack@5.94.0) + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.94.0)': + dependencies: + webpack: 5.94.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.94.0) + '@webpack-cli/info@1.5.0(webpack-cli@4.9.1)': dependencies: envinfo: 7.14.0 webpack-cli: 4.9.1(webpack@5.94.0) + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.94.0)': + dependencies: + webpack: 5.94.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.94.0) + '@webpack-cli/serve@1.7.0(webpack-cli@4.9.1)': dependencies: webpack-cli: 4.9.1(webpack@5.94.0) + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.94.0)': + dependencies: + webpack: 5.94.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.94.0) + '@wordpress/a11y@4.13.0': dependencies: '@babel/runtime': 7.25.7 @@ -20417,8 +20578,14 @@ snapshots: get-intrinsic: 1.2.5 is-string: 1.1.0 + array-union@1.0.2: + dependencies: + array-uniq: 1.0.3 + array-union@2.1.0: {} + array-uniq@1.0.3: {} + array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.8 @@ -20571,7 +20738,7 @@ snapshots: '@babel/core': 7.26.0 find-cache-dir: 3.3.2 schema-utils: 4.2.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@5.1.4) babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.94.0): dependencies: @@ -20982,6 +21149,11 @@ snapshots: clean-stack@2.2.0: {} + clean-webpack-plugin@4.0.0(webpack@5.94.0): + dependencies: + del: 4.1.1 + webpack: 5.94.0(webpack-cli@5.1.4) + cli-cursor@2.1.0: dependencies: restore-cursor: 2.0.0 @@ -21123,6 +21295,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + commander@10.0.1: {} + commander@12.1.0: {} commander@13.0.0: {} @@ -21244,6 +21418,15 @@ snapshots: optionalDependencies: typescript: 5.0.4 + cosmiconfig@8.3.6(typescript@5.7.2): + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.7.2 + crc32@0.2.2: {} create-jest@29.7.0: @@ -21303,7 +21486,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@5.1.4) css-loader@6.5.1(webpack@5.94.0): dependencies: @@ -21595,6 +21778,16 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 + del@4.1.1: + dependencies: + '@types/glob': 7.2.0 + globby: 6.1.0 + is-path-cwd: 2.2.0 + is-path-in-cwd: 2.1.0 + p-map: 2.1.0 + pify: 4.0.1 + rimraf: 2.7.1 + delaunator@5.0.1: dependencies: robust-predicates: 3.0.2 @@ -22650,6 +22843,23 @@ snapshots: typescript: 5.0.4 webpack: 5.94.0(webpack-cli@4.9.1) + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.94.0): + dependencies: + '@babel/code-frame': 7.26.2 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 8.3.6(typescript@5.7.2) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.6.3 + tapable: 2.2.1 + typescript: 5.7.2 + webpack: 5.94.0(webpack-cli@5.1.4) + form-data-encoder@1.7.2: {} form-data@4.0.1: @@ -22855,6 +23065,14 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 + globby@6.1.0: + dependencies: + array-union: 1.0.2 + glob: 7.2.3 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + good-listener@1.2.2: dependencies: delegate: 3.2.0 @@ -23103,6 +23321,8 @@ snapshots: interpret@2.2.0: {} + interpret@3.1.1: {} + intl-messageformat@10.7.11: dependencies: '@formatjs/ecma402-abstract': 2.3.2 @@ -23219,6 +23439,16 @@ snapshots: dependencies: symbol-observable: 1.2.0 + is-path-cwd@2.2.0: {} + + is-path-in-cwd@2.1.0: + dependencies: + is-path-inside: 2.1.0 + + is-path-inside@2.1.0: + dependencies: + path-is-inside: 1.0.2 + is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} @@ -23852,6 +24082,8 @@ snapshots: - supports-color - ts-node + jiti@1.21.7: {} + jiti@2.4.1: {} joi@17.13.3: @@ -24661,7 +24893,7 @@ snapshots: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@5.1.4) minimatch@10.0.1: dependencies: @@ -25085,6 +25317,8 @@ snapshots: path-is-absolute@1.0.1: {} + path-is-inside@1.0.2: {} + path-key@3.1.1: {} path-key@4.0.0: {} @@ -25138,8 +25372,18 @@ snapshots: picomatch@4.0.2: {} + pify@2.3.0: {} + + pify@4.0.1: {} + pify@5.0.0: {} + pinkie-promise@2.0.1: + dependencies: + pinkie: 2.0.4 + + pinkie@2.0.4: {} + pirates@4.0.6: {} pkg-dir@4.2.0: @@ -25228,6 +25472,16 @@ snapshots: semver: 7.6.3 webpack: 5.94.0(webpack-cli@4.9.1) + postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.7.2)(webpack@5.94.0): + dependencies: + cosmiconfig: 8.3.6(typescript@5.7.2) + jiti: 1.21.7 + postcss: 8.4.47 + semver: 7.6.3 + webpack: 5.94.0(webpack-cli@5.1.4) + transitivePeerDependencies: + - typescript + postcss-merge-longhand@6.0.5(postcss@8.4.47): dependencies: postcss: 8.4.47 @@ -25807,6 +26061,10 @@ snapshots: dependencies: resolve: 1.22.8 + rechoir@0.8.0: + dependencies: + resolve: 1.22.8 + redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -26000,6 +26258,10 @@ snapshots: reusify@1.0.4: {} + rimraf@2.7.1: + dependencies: + glob: 7.2.3 + rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -26008,14 +26270,6 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-dts@6.1.1(rollup@3.29.5)(typescript@5.7.2): - dependencies: - magic-string: 0.30.14 - rollup: 3.29.5 - typescript: 5.7.2 - optionalDependencies: - '@babel/code-frame': 7.26.2 - rollup-plugin-livereload@2.0.5: dependencies: livereload: 0.9.3 @@ -26023,10 +26277,6 @@ snapshots: - bufferutil - utf-8-validate - rollup-plugin-peer-deps-external@2.2.4(rollup@3.29.5): - dependencies: - rollup: 3.29.5 - rollup-plugin-postcss@4.0.2(postcss@8.4.47): dependencies: chalk: 4.1.2 @@ -26213,6 +26463,14 @@ snapshots: optionalDependencies: sass: 1.64.1 + sass-loader@13.3.3(sass-embedded@1.83.0)(sass@1.64.1)(webpack@5.94.0): + dependencies: + neo-async: 2.6.2 + webpack: 5.94.0(webpack-cli@5.1.4) + optionalDependencies: + sass: 1.64.1 + sass-embedded: 1.83.0 + sass@1.64.1: dependencies: chokidar: 3.5.3 @@ -26969,6 +27227,13 @@ snapshots: typescript: 5.0.4 yargs-parser: 21.1.1 + tsconfig-paths-webpack-plugin@4.2.0: + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.17.1 + tapable: 2.2.1 + tsconfig-paths: 4.2.0 + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -27360,6 +27625,23 @@ snapshots: webpack: 5.94.0(webpack-cli@4.9.1) webpack-merge: 5.10.0 + webpack-cli@5.1.4(webpack@5.94.0): + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.94.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.94.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.94.0) + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.6 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.94.0(webpack-cli@5.1.4) + webpack-merge: 5.10.0 + webpack-dev-middleware@5.3.4(webpack@5.94.0): dependencies: colorette: 2.0.20 @@ -27432,6 +27714,38 @@ snapshots: - esbuild - uglify-js + webpack@5.94.0(webpack-cli@5.1.4): + dependencies: + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + acorn-import-attributes: 1.9.5(acorn@8.14.0) + browserslist: 4.24.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(webpack@5.94.0) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + optionalDependencies: + webpack-cli: 5.1.4(webpack@5.94.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 diff --git a/projects/js-packages/charts/changelog/update-change-to-webpack-charts-2 b/projects/js-packages/charts/changelog/update-change-to-webpack-charts-2 new file mode 100644 index 0000000000000..3868adb76fd3e --- /dev/null +++ b/projects/js-packages/charts/changelog/update-change-to-webpack-charts-2 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Replace Rollup with Webpack for charts diff --git a/projects/js-packages/charts/index.ts b/projects/js-packages/charts/index.ts index c5666e2773e38..95eee9d57711a 100644 --- a/projects/js-packages/charts/index.ts +++ b/projects/js-packages/charts/index.ts @@ -15,5 +15,5 @@ export { ThemeProvider } from './src/providers/theme'; export { default as useChartMouseHandler } from './src/hooks/use-chart-mouse-handler'; // Types -export type * from './src/components/shared/types'; +export type * from './src/types'; export type { BaseTooltipProps } from './src/components/tooltip'; diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index a54c6d5460578..672ce1edea04a 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -19,13 +19,33 @@ "test-coverage": "pnpm run test --coverage", "storybook": "cd ../storybook && pnpm run storybook:dev", "compile-ts": "tsc --pretty", - "build": "rollup -c", - "build:prod": "rollup -c --environment NODE_ENV:production", - "build:dev": "rollup -c --environment NODE_ENV:development", - "build:watch": "rollup -c -w", - "clean-build": "rm -rf dist/" + "clean-build": "rm -rf dist/", + "build": "pnpm run build:prod", + "build:prod": "pnpm run clean-build && webpack --config webpack.config.cjs --mode production && bash ./tools/fixup.sh && pnpm run build:types", + "build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types" + }, + "main": "./dist/cjs/index.js", + "module": "./dist/mjs/index.js", + "types": "./dist/types/index.d.ts", + "sideEffects": [ + "*.css", + "*.scss" + ], + "exports": { + ".": { + "import": "./dist/mjs/index.js", + "require": "./dist/cjs/index.js", + "types": "./dist/types/*.d.ts" + }, + "./components/*": { + "import": "./dist/mjs/components/*/index.js", + "require": "./dist/cjs/components/*/index.js", + "types": "./dist/types/*.d.ts" + }, + "./style.css": "./dist/cjs/style.css" }, "dependencies": { + "@babel/runtime": "7.26.0", "@react-spring/web": "9.7.3", "@visx/axis": "^3.12.0", "@visx/event": "^3.8.0", @@ -42,53 +62,39 @@ "tslib": "2.5.0" }, "devDependencies": { - "@rollup/plugin-commonjs": "26.0.1", - "@rollup/plugin-json": "6.1.0", - "@rollup/plugin-node-resolve": "15.3.0", - "@rollup/plugin-terser": "0.4.3", - "@rollup/plugin-typescript": "12.1.0", + "@babel/core": "7.26.0", + "@babel/plugin-transform-runtime": "7.25.9", + "@babel/preset-env": "7.26.0", + "@babel/preset-react": "7.26.3", + "@babel/preset-typescript": "7.26.0", "@storybook/blocks": "8.4.7", "@storybook/react": "8.4.7", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", + "babel-loader": "9.1.2", + "clean-webpack-plugin": "^4.0.0", + "css-loader": "^6.7.0", + "fork-ts-checker-webpack-plugin": "9.0.2", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-extended": "4.0.2", + "mini-css-extract-plugin": "^2.7.0", "postcss": "8.4.47", + "postcss-loader": "^7.0.0", "postcss-modules": "6.0.1", "react": "18.3.1", "react-dom": "18.3.1", - "rollup": "3.29.5", - "rollup-plugin-dts": "6.1.1", - "rollup-plugin-peer-deps-external": "2.2.4", - "rollup-plugin-postcss": "4.0.2", "sass": "1.64.1", "sass-embedded": "1.83.0", + "sass-loader": "^13.0.0", "storybook": "8.4.7", - "typescript": "5.7.2" + "tsconfig-paths-webpack-plugin": "4.2.0", + "typescript": "5.7.2", + "webpack": "^5.88.0", + "webpack-cli": "^5.1.0" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" - }, - "exports": { - ".": { - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "types": "./dist/index.d.ts" - }, - "./components/*": { - "import": "./dist/components/*/index.js", - "require": "./dist/components/*/index.cjs.js", - "types": "./dist/components/*/index.d.ts" - }, - "./style.css": "./dist/style.css" - }, - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts", - "sideEffects": [ - "*.css", - "*.scss" - ] + } } diff --git a/projects/js-packages/charts/rollup.config.mjs b/projects/js-packages/charts/rollup.config.mjs deleted file mode 100644 index 38123bdd7bd63..0000000000000 --- a/projects/js-packages/charts/rollup.config.mjs +++ /dev/null @@ -1,142 +0,0 @@ -// Import necessary plugins for building the library -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; -import resolve from '@rollup/plugin-node-resolve'; -import terser from '@rollup/plugin-terser'; -import typescript from '@rollup/plugin-typescript'; -import { defineConfig } from 'rollup'; -import dts from 'rollup-plugin-dts'; -import peerDepsExternal from 'rollup-plugin-peer-deps-external'; -import postcss from 'rollup-plugin-postcss'; - -// Common plugins used across all build configurations -const commonPlugins = [ - // Automatically externalize peer dependencies - peerDepsExternal( { - includeDependencies: true, - } ), - // Locate and bundle third-party dependencies from node_modules - resolve( { - preferBuiltins: true, - extensions: [ '.tsx', '.ts', '.js', '.jsx' ], - } ), - // Convert CommonJS modules to ES6 - commonjs(), - // Allow importing JSON files - json(), - // Process SCSS/CSS modules - postcss( { - // Configure CSS modules with scoped names - modules: { - generateScopedName: '[name]__[local]__[hash:base64:5]', - }, - extract: 'style.css', - autoModules: false, - use: [ 'sass' ], - } ), -]; - -// Main bundle configuration for the entire library -const mainConfig = { - // Entry point for the bundle - input: 'src/index.ts', - // Output configuration for different module formats - output: [ - { - file: './dist/index.js', - format: 'cjs', // CommonJS format for Node.js - sourcemap: true, - sourcemapPathTransform: relativeSourcePath => { - return `/@automattic/charts/${ relativeSourcePath }`; - }, - }, - { - file: './dist/index.mjs', - format: 'esm', // ES modules for modern bundlers - sourcemap: true, - }, - ], - // Mark all dependencies as external to avoid bundling them - external: [ 'react', 'react-dom', /^@visx\/.*/, '@react-spring/web', 'clsx', 'tslib' ], - plugins: [ - ...commonPlugins, - // TypeScript compilation - typescript( { - tsconfig: './tsconfig.json', - declaration: false, // Declarations handled by dts plugin - sourceMap: true, - compilerOptions: { - verbatimModuleSyntax: true, - }, - } ), - terser(), - ], - // Handle circular dependencies warning - onwarn( warning, warn ) { - if ( warning.code === 'CIRCULAR_DEPENDENCY' ) { - return; - } - warn( warning ); - }, -}; - -// List of components to build individually -const components = [ - 'components/bar-chart', - 'components/line-chart', - 'components/pie-chart', - 'components/pie-semi-circle-chart', - 'components/tooltip', - 'components/legend', - 'components/grid-control', - 'providers/theme', -]; - -// Generate individual bundles for each component -const componentConfigs = components.map( component => ( { - // Component entry point - try both .tsx and .ts extensions - input: `src/${ component }/index`, - // Output both ESM and CJS formats - output: [ - { - file: `dist/${ component }/index.js`, - format: 'esm', - sourcemap: true, - }, - { - file: `dist/${ component }/index.cjs.js`, - format: 'cjs', - sourcemap: true, - }, - ], - // Same external config as main bundle - external: [ 'react', 'react-dom', /^@visx\/.*/, '@react-spring/web', 'clsx', 'tslib' ], - plugins: [ - ...commonPlugins, - typescript( { - tsconfig: './tsconfig.json', - declaration: false, - sourceMap: true, - compilerOptions: { - verbatimModuleSyntax: true, - }, - } ), - terser(), - ], -} ) ); - -// Configuration for generating TypeScript declaration files -const typesConfig = { - input: 'src/index.ts', - output: [ { file: 'dist/index.d.ts', format: 'es' } ], - plugins: [ - dts( { - respectExternal: true, - } ), - ], - // Don't include style imports in type definitions - external: [ /\.scss$/, /\.css$/, 'react', '@types/react' ], -}; - -// Export all configurations to be built in parallel -export default defineConfig( [ mainConfig, ...componentConfigs, typesConfig ] ); diff --git a/projects/js-packages/charts/src/components/bar-chart/bar-chart.tsx b/projects/js-packages/charts/src/components/bar-chart/bar-chart.tsx index 37531106b542e..6ce0fcdf4fc08 100644 --- a/projects/js-packages/charts/src/components/bar-chart/bar-chart.tsx +++ b/projects/js-packages/charts/src/components/bar-chart/bar-chart.tsx @@ -11,7 +11,7 @@ import { GridControl } from '../grid-control'; import { Legend } from '../legend'; import { BaseTooltip } from '../tooltip'; import styles from './bar-chart.module.scss'; -import type { BaseChartProps, SeriesData } from '../shared/types'; +import type { BaseChartProps, SeriesData } from '../../types'; interface BarChartProps extends BaseChartProps< SeriesData[] > {} diff --git a/projects/js-packages/charts/src/components/grid-control/grid-control.tsx b/projects/js-packages/charts/src/components/grid-control/grid-control.tsx index eda5c462d59c0..1363dd6ca4d1b 100644 --- a/projects/js-packages/charts/src/components/grid-control/grid-control.tsx +++ b/projects/js-packages/charts/src/components/grid-control/grid-control.tsx @@ -1,7 +1,7 @@ import { GridRows, GridColumns } from '@visx/grid'; import React from 'react'; import styles from './grid-control.module.scss'; -import type { GridProps } from '../shared/types'; +import type { GridProps } from '../../types'; const GridControl: React.FC< GridProps > = ( { width, diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index ad5a7a2d0562e..963e975b4f638 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -11,7 +11,7 @@ import { FC } from 'react'; import { useChartTheme } from '../../providers/theme/theme-provider'; import { Legend } from '../legend'; import styles from './line-chart.module.scss'; -import type { BaseChartProps, DataPointDate, SeriesData } from '../shared/types'; +import type { BaseChartProps, DataPointDate, SeriesData } from '../../types'; // TODO: revisit grid and axis options - accept as props for frid lines, axis, values: x, y, all, none diff --git a/projects/js-packages/charts/src/components/line-chart/stories/sample-data.ts b/projects/js-packages/charts/src/components/line-chart/stories/sample-data.ts index 1231466c476d4..2486715b1789f 100644 --- a/projects/js-packages/charts/src/components/line-chart/stories/sample-data.ts +++ b/projects/js-packages/charts/src/components/line-chart/stories/sample-data.ts @@ -1,4 +1,4 @@ -import type { SeriesData } from '../../shared/types'; +import type { SeriesData } from '../../../types'; // Sample data const temperatureData: SeriesData[] = [ diff --git a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx index f925ea7faa4c0..e420e7a4be5a4 100644 --- a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx @@ -7,8 +7,7 @@ import { useChartTheme, defaultTheme } from '../../providers/theme'; import { Legend } from '../legend'; import { BaseTooltip } from '../tooltip'; import styles from './pie-chart.module.scss'; -import type { BaseChartProps, DataPointPercentage } from '../shared/types'; -import type { PieArcDatum } from '@visx/shape/lib/shapes/Pie'; +import type { BaseChartProps, DataPointPercentage } from '../../types'; // TODO: add animation @@ -46,10 +45,17 @@ const PieChart = ( { const centerX = width / 2; const centerY = height / 2; + // Map the data to include index for color assignment + const dataWithIndex = data.map( ( d, index ) => ( { + ...d, + index, + } ) ); + const accessors = { - value: ( d: PieArcDatum< DataPointPercentage > ) => d.value, + value: ( d: DataPointPercentage ) => d.value, // Use the color property from the data object as a last resort. The theme provides colours by default. - fill: ( d: PieArcDatum< DataPointPercentage > ) => d?.color || providerTheme.colors[ d.index ], + fill: ( d: DataPointPercentage & { index: number } ) => + d?.color || providerTheme.colors[ d.index ], }; // Create legend items from data @@ -63,8 +69,8 @@ const PieChart = ( {
- + data={ dataWithIndex } pieValue={ accessors.value } outerRadius={ radius - 20 } // Leave space for labels/tooltips innerRadius={ innerRadius } @@ -78,7 +84,7 @@ const PieChart = ( { const pathProps: SVGProps< SVGPathElement > = { d: pie.path( arc ) || '', - fill: accessors.fill( arc ), + fill: accessors.fill( arc.data ), }; if ( withTooltips ) { diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx index 9077d45b5c363..13dcb46fcd240 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx @@ -9,7 +9,7 @@ import { useChartTheme } from '../../providers/theme/theme-provider'; import { Legend } from '../legend'; import { BaseTooltip } from '../tooltip'; import styles from './pie-semi-circle-chart.module.scss'; -import type { BaseChartProps, DataPointPercentage } from '../shared/types'; +import type { BaseChartProps, DataPointPercentage } from '../../types'; interface PieSemiCircleChartProps extends BaseChartProps< DataPointPercentage[] > { /** diff --git a/projects/js-packages/charts/src/hooks/use-chart-mouse-handler.ts b/projects/js-packages/charts/src/hooks/use-chart-mouse-handler.ts index b229f1d0ad41c..5cfe6c9d33498 100644 --- a/projects/js-packages/charts/src/hooks/use-chart-mouse-handler.ts +++ b/projects/js-packages/charts/src/hooks/use-chart-mouse-handler.ts @@ -1,7 +1,7 @@ import { localPoint } from '@visx/event'; import { useTooltip } from '@visx/tooltip'; import { useCallback, type MouseEvent } from 'react'; -import type { DataPoint } from '../components/shared/types'; +import type { DataPoint } from '../types'; type UseChartMouseHandlerProps = { /** diff --git a/projects/js-packages/charts/src/index.ts b/projects/js-packages/charts/src/index.ts index cd8a712946e4b..2a3db6fe2f870 100644 --- a/projects/js-packages/charts/src/index.ts +++ b/projects/js-packages/charts/src/index.ts @@ -13,7 +13,3 @@ export { ThemeProvider } from './providers/theme'; // Hooks export { default as useChartMouseHandler } from './hooks/use-chart-mouse-handler'; - -// Types -export type * from './components/shared/types'; -export type { BaseTooltipProps } from './components/tooltip'; diff --git a/projects/js-packages/charts/src/providers/theme/theme-provider.tsx b/projects/js-packages/charts/src/providers/theme/theme-provider.tsx index 211499ae73583..92ab9d27fc8f3 100644 --- a/projects/js-packages/charts/src/providers/theme/theme-provider.tsx +++ b/projects/js-packages/charts/src/providers/theme/theme-provider.tsx @@ -1,6 +1,6 @@ import { createContext, useContext, FC, type ReactNode } from 'react'; import { defaultTheme } from './themes'; -import type { ChartTheme } from '../../components/shared/types'; +import type { ChartTheme } from '../../types'; /** * Context for sharing theme configuration across components diff --git a/projects/js-packages/charts/src/providers/theme/themes.ts b/projects/js-packages/charts/src/providers/theme/themes.ts index 58bcf3c3fcb31..d00aab9fcb6ef 100644 --- a/projects/js-packages/charts/src/providers/theme/themes.ts +++ b/projects/js-packages/charts/src/providers/theme/themes.ts @@ -1,4 +1,4 @@ -import type { ChartTheme } from '../../components/shared/types'; +import type { ChartTheme } from '../../types'; /** * Default theme configuration diff --git a/projects/js-packages/charts/src/components/shared/types.d.ts b/projects/js-packages/charts/src/types.ts similarity index 100% rename from projects/js-packages/charts/src/components/shared/types.d.ts rename to projects/js-packages/charts/src/types.ts diff --git a/projects/js-packages/charts/tools/fixup.sh b/projects/js-packages/charts/tools/fixup.sh new file mode 100644 index 0000000000000..39177d086577c --- /dev/null +++ b/projects/js-packages/charts/tools/fixup.sh @@ -0,0 +1,11 @@ +cat >dist/cjs/package.json <dist/mjs/package.json < ( { + module: { + rules: [ + { + test: /\.(ts|tsx)$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: [ '@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript' ], + plugins: [ [ '@babel/plugin-transform-runtime', { useESModules: isESM } ] ], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.(scss|css)$/, + use: [ MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'sass-loader' ], + }, + ], + }, + resolve: { + extensions: [ '.tsx', '.ts', '.js', '.jsx' ], + plugins: [ new TsconfigPathsPlugin() ], + }, + externals: [ + 'react', + 'react-dom', + /^@visx\/.*/, + '@react-spring/web', + 'clsx', + 'tslib', + '@babel/runtime', + ], + plugins: [ + new CleanWebpackPlugin(), + new MiniCssExtractPlugin( { + filename: pathData => { + const name = pathData.chunk.name; + if ( name === 'index' ) { + return 'style.css'; + } + return `${ name }/style.css`; + }, + } ), + new ForkTsCheckerWebpackPlugin( { + typescript: { + configFile: './tsconfig.json', + mode: 'write-dts', + }, + } ), + ], +} ); + +// Generate entry points for components +const getComponentEntries = () => { + const entries = { + index: './src/index.ts', + }; + + components.forEach( component => { + entries[ component ] = `./src/${ component }/index`; + } ); + + return entries; +}; + +const cjsConfig = { + ...getCommonConfig( false ), + entry: getComponentEntries(), + output: { + path: path.resolve( './', 'dist/cjs' ), + filename: pathData => { + const name = pathData.chunk.name; + if ( name === 'index' ) { + return 'index.js'; + } + return `${ name }/index.js`; + }, + library: { + type: 'commonjs2', + }, + }, + devtool: 'source-map', +}; + +const mjsConfig = { + ...getCommonConfig( true ), + entry: getComponentEntries(), + output: { + path: path.resolve( './', 'dist/mjs' ), + filename: pathData => { + const name = pathData.chunk.name; + if ( name === 'index' ) { + return 'index.js'; + } + return `${ name }/index.js`; + }, + library: { + type: 'module', + }, + environment: { + module: true, + }, + }, + experiments: { + outputModule: true, + }, + devtool: 'source-map', +}; + +module.exports = [ cjsConfig, mjsConfig ]; From 570b4bacb3472482c03a9b119d4098f8da0b23d7 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Mon, 13 Jan 2025 11:23:09 +1300 Subject: [PATCH 026/420] 0.2.3 release (#40977) --- projects/js-packages/charts/CHANGELOG.md | 6 ++++++ .../charts/changelog/renovate-storybook-monorepo | 4 ---- .../charts/changelog/update-change-to-webpack-charts-2 | 4 ---- projects/js-packages/charts/package.json | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 projects/js-packages/charts/changelog/renovate-storybook-monorepo delete mode 100644 projects/js-packages/charts/changelog/update-change-to-webpack-charts-2 diff --git a/projects/js-packages/charts/CHANGELOG.md b/projects/js-packages/charts/CHANGELOG.md index 98eafba30b5f5..228aa74791d64 100644 --- a/projects/js-packages/charts/CHANGELOG.md +++ b/projects/js-packages/charts/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.2.3] - 2025-01-12 +### Changed +- Replace Rollup with Webpack for charts [#40912] +- Updated package dependencies. [#40841] + ## [0.2.2] - 2025-01-03 ### Changed - Switching esbuild to rollup for better treeshaking. [#40817] @@ -42,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed lints following ESLint rule changes for TS [#40584] - Fixing a bug in Chart storybook data. [#40640] +[0.2.3]: https://github.com/Automattic/charts/compare/v0.2.2...v0.2.3 [0.2.2]: https://github.com/Automattic/charts/compare/v0.2.1...v0.2.2 [0.2.1]: https://github.com/Automattic/charts/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/Automattic/charts/compare/v0.1.0...v0.2.0 diff --git a/projects/js-packages/charts/changelog/renovate-storybook-monorepo b/projects/js-packages/charts/changelog/renovate-storybook-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/js-packages/charts/changelog/renovate-storybook-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/js-packages/charts/changelog/update-change-to-webpack-charts-2 b/projects/js-packages/charts/changelog/update-change-to-webpack-charts-2 deleted file mode 100644 index 3868adb76fd3e..0000000000000 --- a/projects/js-packages/charts/changelog/update-change-to-webpack-charts-2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Replace Rollup with Webpack for charts diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 672ce1edea04a..6dd4fae63aa4c 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/charts", - "version": "0.2.2", + "version": "0.2.3", "description": "Display charts within Automattic products.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/charts/#readme", "bugs": { From 921995f86e956abf519b60ab3d235dfe58bc030c Mon Sep 17 00:00:00 2001 From: Anna McPhee <30754158+annacmc@users.noreply.github.com> Date: Mon, 13 Jan 2025 09:34:15 +1100 Subject: [PATCH 027/420] Chart Library: Responsive Charts (#40922) * add withResponsive HOC for chart size adaptation * changelog * Makes the chart responsive by default + removes need for non-responsive version * make chart responsive to screen size + resize * add responsiveness to pie chart * apply responsiveness to semi circle chart * accidental regression fix * tidy up bar chart + story * fix import * fix resizable ability * apply to line chart * backward compacity with width and height * remove width/height for line bar chart stories * fix import * fix conflict --------- Co-authored-by: Jasper Kang --- .../add-chart-library-responsiveness | 4 ++ .../src/components/bar-chart/bar-chart.tsx | 16 ++++-- .../bar-chart/stories/index.stories.tsx | 30 +++++++---- .../src/components/line-chart/line-chart.tsx | 7 ++- .../line-chart/stories/index.stories.tsx | 26 ++++----- .../src/components/pie-chart/pie-chart.tsx | 4 +- .../pie-semi-circle-chart.tsx | 4 +- .../src/components/shared/with-responsive.tsx | 53 +++++++++++++++++++ projects/js-packages/charts/src/types.ts | 2 +- 9 files changed, 113 insertions(+), 33 deletions(-) create mode 100644 projects/js-packages/charts/changelog/add-chart-library-responsiveness create mode 100644 projects/js-packages/charts/src/components/shared/with-responsive.tsx diff --git a/projects/js-packages/charts/changelog/add-chart-library-responsiveness b/projects/js-packages/charts/changelog/add-chart-library-responsiveness new file mode 100644 index 0000000000000..9610ced200d8d --- /dev/null +++ b/projects/js-packages/charts/changelog/add-chart-library-responsiveness @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +make charts responsive diff --git a/projects/js-packages/charts/src/components/bar-chart/bar-chart.tsx b/projects/js-packages/charts/src/components/bar-chart/bar-chart.tsx index 6ce0fcdf4fc08..c68bbed0b27a4 100644 --- a/projects/js-packages/charts/src/components/bar-chart/bar-chart.tsx +++ b/projects/js-packages/charts/src/components/bar-chart/bar-chart.tsx @@ -9,24 +9,30 @@ import { FC, useCallback, type MouseEvent } from 'react'; import { useChartTheme } from '../../providers/theme'; import { GridControl } from '../grid-control'; import { Legend } from '../legend'; +import { withResponsive } from '../shared/with-responsive'; import { BaseTooltip } from '../tooltip'; import styles from './bar-chart.module.scss'; import type { BaseChartProps, SeriesData } from '../../types'; -interface BarChartProps extends BaseChartProps< SeriesData[] > {} +type BarChartTooltipData = { + value: number; + xLabel: string; + yLabel: string; + seriesIndex: number; +}; -type BarChartTooltipData = { value: number; xLabel: string; yLabel: string; seriesIndex: number }; +interface BarChartProps extends BaseChartProps< SeriesData[] > {} const BarChart: FC< BarChartProps > = ( { data, - width = 500, //TODO: replace when making the components responsive - height = 500, //TODO: replace when making the components responsive margin = { top: 20, right: 20, bottom: 40, left: 40 }, withTooltips = false, showLegend = false, legendOrientation = 'horizontal', className, gridVisibility = 'x', + width, + height = 400, } ) => { const theme = useChartTheme(); const { tooltipOpen, tooltipLeft, tooltipTop, tooltipData, hideTooltip, showTooltip } = @@ -161,4 +167,4 @@ const BarChart: FC< BarChartProps > = ( { }; BarChart.displayName = 'BarChart'; -export default BarChart; +export default withResponsive< BarChartProps >( BarChart ); diff --git a/projects/js-packages/charts/src/components/bar-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/bar-chart/stories/index.stories.tsx index 10a7a84c14263..0b63d7b411cff 100644 --- a/projects/js-packages/charts/src/components/bar-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/bar-chart/stories/index.stories.tsx @@ -1,8 +1,8 @@ -import { BarChart } from '../index'; +import BarChart from '../bar-chart'; import data from './sample-data'; import type { Meta, StoryObj } from '@storybook/react'; -export default { +const meta: Meta< typeof BarChart > = { title: 'JS Packages/Charts/Types/Bar Chart', component: BarChart, parameters: { @@ -10,20 +10,30 @@ export default { }, decorators: [ Story => ( -
+
), ], -} satisfies Meta< typeof BarChart >; +}; + +export default meta; -type StoryType = StoryObj< typeof BarChart >; +type Story = StoryObj< typeof BarChart >; // Default story with multiple series -export const Default: StoryType = { +export const Default: Story = { args: { - width: 800, - height: 500, withTooltips: true, data: [ data[ 0 ], data[ 1 ], data[ 2 ] ], // limit to 3 series for better readability showLegend: false, @@ -33,7 +43,7 @@ export const Default: StoryType = { }; // Story with single data series -export const SingleSeries: StoryType = { +export const SingleSeries: Story = { args: { ...Default.args, data: [ data[ 0 ] ], @@ -48,7 +58,7 @@ export const SingleSeries: StoryType = { }; // Story without tooltip -export const ManyDataSeries: StoryType = { +export const ManyDataSeries: Story = { args: { ...Default.args, width: 1200, diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index 963e975b4f638..c105f26f39ac0 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -10,12 +10,15 @@ import clsx from 'clsx'; import { FC } from 'react'; import { useChartTheme } from '../../providers/theme/theme-provider'; import { Legend } from '../legend'; +import { withResponsive } from '../shared/with-responsive'; import styles from './line-chart.module.scss'; import type { BaseChartProps, DataPointDate, SeriesData } from '../../types'; // TODO: revisit grid and axis options - accept as props for frid lines, axis, values: x, y, all, none -interface LineChartProps extends BaseChartProps< SeriesData[] > {} +interface LineChartProps extends BaseChartProps< SeriesData[] > { + margin?: { top: number; right: number; bottom: number; left: number }; +} type TooltipData = { date: Date; @@ -156,4 +159,4 @@ const LineChart: FC< LineChartProps > = ( { ); }; -export default LineChart; +export default withResponsive< LineChartProps >( LineChart ); diff --git a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx index df65960c8ec4b..d5a9852f0abdc 100644 --- a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx @@ -1,8 +1,8 @@ -import { LineChart } from '../index'; +import LineChart from '../line-chart'; import sampleData from './sample-data'; -import type { Meta } from '@storybook/react'; +import type { Meta, StoryFn, StoryObj } from '@storybook/react'; -export default { +const meta: Meta< typeof LineChart > = { title: 'JS Packages/Charts/Types/Line Chart', component: LineChart, parameters: { @@ -15,22 +15,22 @@ export default {
), ], -} satisfies Meta< typeof LineChart >; +}; + +export default meta; -const Template = args => ; +const Template: StoryFn< typeof LineChart > = args => ; // Default story with multiple series -export const Default = Template.bind( {} ); +export const Default: StoryObj< typeof LineChart > = Template.bind( {} ); Default.args = { - width: 500, - height: 300, data: sampleData, showLegend: false, legendOrientation: 'horizontal', }; // Story with single data series -export const SingleSeries = Template.bind( {} ); +export const SingleSeries: StoryObj< typeof LineChart > = Template.bind( {} ); SingleSeries.args = { width: 500, height: 300, @@ -38,14 +38,14 @@ SingleSeries.args = { }; // Story without tooltip -export const WithoutTooltip = Template.bind( {} ); +export const WithoutTooltip: StoryObj< typeof LineChart > = Template.bind( {} ); WithoutTooltip.args = { ...Default.args, withTooltips: false, }; // Story with custom dimensions -export const CustomDimensions = Template.bind( {} ); +export const CustomDimensions: StoryObj< typeof LineChart > = Template.bind( {} ); CustomDimensions.args = { width: 800, height: 400, @@ -53,14 +53,14 @@ CustomDimensions.args = { }; // Story with horizontal legend -export const WithLegend = Template.bind( {} ); +export const WithLegend: StoryObj< typeof LineChart > = Template.bind( {} ); WithLegend.args = { ...Default.args, showLegend: true, }; // Story with vertical legend -export const WithVerticalLegend = Template.bind( {} ); +export const WithVerticalLegend: StoryObj< typeof LineChart > = Template.bind( {} ); WithVerticalLegend.args = { ...Default.args, showLegend: true, diff --git a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx index e420e7a4be5a4..6e30641f25a40 100644 --- a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx @@ -5,6 +5,7 @@ import { SVGProps, type MouseEvent } from 'react'; import useChartMouseHandler from '../../hooks/use-chart-mouse-handler'; import { useChartTheme, defaultTheme } from '../../providers/theme'; import { Legend } from '../legend'; +import { withResponsive } from '../shared/with-responsive'; import { BaseTooltip } from '../tooltip'; import styles from './pie-chart.module.scss'; import type { BaseChartProps, DataPointPercentage } from '../../types'; @@ -140,4 +141,5 @@ const PieChart = ( { ); }; -export default PieChart; +PieChart.displayName = 'PieChart'; +export default withResponsive< PieChartProps >( PieChart ); diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx index 13dcb46fcd240..7e0f5a9c9fb7c 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx @@ -7,6 +7,7 @@ import clsx from 'clsx'; import { FC, useCallback } from 'react'; import { useChartTheme } from '../../providers/theme/theme-provider'; import { Legend } from '../legend'; +import { withResponsive } from '../shared/with-responsive'; import { BaseTooltip } from '../tooltip'; import styles from './pie-semi-circle-chart.module.scss'; import type { BaseChartProps, DataPointPercentage } from '../../types'; @@ -184,4 +185,5 @@ const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { ); }; -export default PieSemiCircleChart; +PieSemiCircleChart.displayName = 'PieSemiCircleChart'; +export default withResponsive< PieSemiCircleChartProps >( PieSemiCircleChart ); diff --git a/projects/js-packages/charts/src/components/shared/with-responsive.tsx b/projects/js-packages/charts/src/components/shared/with-responsive.tsx new file mode 100644 index 0000000000000..8dfd5be2b4630 --- /dev/null +++ b/projects/js-packages/charts/src/components/shared/with-responsive.tsx @@ -0,0 +1,53 @@ +import { useParentSize } from '@visx/responsive'; +import { ComponentType } from 'react'; +import type { BaseChartProps } from '../../types'; + +type ResponsiveConfig = { + maxWidth?: number; + aspectRatio?: number; + debounceTime?: number; +}; + +/** + * A higher-order component that provides responsive width and height + * to the wrapped chart component using useParentSize from @visx/responsive. + * + * @param WrappedComponent - The chart component to be wrapped. + * @param config - Optional configuration for responsive behavior + * @return A functional component that renders the wrapped component with responsive dimensions. + */ +export function withResponsive< T extends BaseChartProps< unknown > >( + WrappedComponent: ComponentType< T >, + config?: ResponsiveConfig +) { + const { maxWidth = 1200, aspectRatio = 0.5, debounceTime = 50 } = config || {}; + + return function ResponsiveChart( props: Omit< T, 'width' | 'height' > ) { + const { parentRef, width: parentWidth } = useParentSize( { + debounceTime, + enableDebounceLeadingCall: true, + initialSize: { width: 600, height: 400 }, + } ); + + // Calculate dimensions + const containerWidth = parentWidth ? Math.min( parentWidth, maxWidth ) : 600; + const containerHeight = containerWidth * aspectRatio; + + return ( +
+ +
+ ); + }; +} diff --git a/projects/js-packages/charts/src/types.ts b/projects/js-packages/charts/src/types.ts index b6cb767706657..ee935709981cb 100644 --- a/projects/js-packages/charts/src/types.ts +++ b/projects/js-packages/charts/src/types.ts @@ -80,7 +80,7 @@ export type BaseChartProps< T = DataPoint | DataPointDate > = { /** * Width of the chart in pixels */ - width: number; + width?: number; /** * Height of the chart in pixels */ From 9a5091d726ec1a0dec93aca844c2d539176247db Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Mon, 13 Jan 2025 11:56:44 +1300 Subject: [PATCH 028/420] Charts: Fix React ref for charts (#40978) * React runtime set to automatic * changelog --- .../charts/changelog/fix-react-ref-for-charts | 4 ++++ projects/js-packages/charts/webpack.config.cjs | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 projects/js-packages/charts/changelog/fix-react-ref-for-charts diff --git a/projects/js-packages/charts/changelog/fix-react-ref-for-charts b/projects/js-packages/charts/changelog/fix-react-ref-for-charts new file mode 100644 index 0000000000000..295bd784b56f8 --- /dev/null +++ b/projects/js-packages/charts/changelog/fix-react-ref-for-charts @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed React reference diff --git a/projects/js-packages/charts/webpack.config.cjs b/projects/js-packages/charts/webpack.config.cjs index 5d7eec8c7ecf7..956ca6e1fb4f7 100644 --- a/projects/js-packages/charts/webpack.config.cjs +++ b/projects/js-packages/charts/webpack.config.cjs @@ -26,7 +26,16 @@ const getCommonConfig = isESM => ( { { loader: 'babel-loader', options: { - presets: [ '@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript' ], + presets: [ + '@babel/preset-env', + [ + '@babel/preset-react', + { + runtime: 'automatic', + }, + ], + '@babel/preset-typescript', + ], plugins: [ [ '@babel/plugin-transform-runtime', { useESModules: isESM } ] ], }, }, From 920c3e29f6a489a268e7e05848b595f1f8c25e89 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Mon, 13 Jan 2025 12:29:23 +1300 Subject: [PATCH 029/420] 0.3.0 charts (#40979) --- projects/js-packages/charts/CHANGELOG.md | 8 ++++++++ .../charts/changelog/add-chart-library-responsiveness | 4 ---- .../js-packages/charts/changelog/fix-react-ref-for-charts | 4 ---- projects/js-packages/charts/package.json | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 projects/js-packages/charts/changelog/add-chart-library-responsiveness delete mode 100644 projects/js-packages/charts/changelog/fix-react-ref-for-charts diff --git a/projects/js-packages/charts/CHANGELOG.md b/projects/js-packages/charts/CHANGELOG.md index 228aa74791d64..2263c6db45c48 100644 --- a/projects/js-packages/charts/CHANGELOG.md +++ b/projects/js-packages/charts/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.0] - 2025-01-12 +### Changed +- make charts responsive [#40922] + +### Fixed +- Fixed React reference [#40978] + ## [0.2.3] - 2025-01-12 ### Changed - Replace Rollup with Webpack for charts [#40912] @@ -47,6 +54,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed lints following ESLint rule changes for TS [#40584] - Fixing a bug in Chart storybook data. [#40640] +[0.3.0]: https://github.com/Automattic/charts/compare/v0.2.3...v0.3.0 [0.2.3]: https://github.com/Automattic/charts/compare/v0.2.2...v0.2.3 [0.2.2]: https://github.com/Automattic/charts/compare/v0.2.1...v0.2.2 [0.2.1]: https://github.com/Automattic/charts/compare/v0.2.0...v0.2.1 diff --git a/projects/js-packages/charts/changelog/add-chart-library-responsiveness b/projects/js-packages/charts/changelog/add-chart-library-responsiveness deleted file mode 100644 index 9610ced200d8d..0000000000000 --- a/projects/js-packages/charts/changelog/add-chart-library-responsiveness +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -make charts responsive diff --git a/projects/js-packages/charts/changelog/fix-react-ref-for-charts b/projects/js-packages/charts/changelog/fix-react-ref-for-charts deleted file mode 100644 index 295bd784b56f8..0000000000000 --- a/projects/js-packages/charts/changelog/fix-react-ref-for-charts +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixed React reference diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 6dd4fae63aa4c..90c194c7e95a9 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/charts", - "version": "0.2.3", + "version": "0.3.0", "description": "Display charts within Automattic products.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/charts/#readme", "bugs": { From e808340598bc1baa3e318441451a5473ca2220d7 Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Mon, 13 Jan 2025 09:53:30 +0200 Subject: [PATCH 030/420] Fix form submission with no name but mail (#40898) * Fix form submission view if name field kept empty, email entry shows in name field * add changelog entry --- .../try-fix-form-submission-with-no-name-but-mail | 4 ++++ .../forms/src/contact-form/class-contact-form-plugin.php | 5 +---- .../forms/src/contact-form/class-contact-form.php | 8 ++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 projects/packages/forms/changelog/try-fix-form-submission-with-no-name-but-mail diff --git a/projects/packages/forms/changelog/try-fix-form-submission-with-no-name-but-mail b/projects/packages/forms/changelog/try-fix-form-submission-with-no-name-but-mail new file mode 100644 index 0000000000000..8ae57117118f8 --- /dev/null +++ b/projects/packages/forms/changelog/try-fix-form-submission-with-no-name-but-mail @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix form submission view if name field kept empty, email entry shows in name field diff --git a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php index 837f89c7a7bfd..3ddc8262ff53d 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php @@ -2046,10 +2046,7 @@ public static function parse_fields_from_content( $post_id ) { if ( str_contains( $content, 'JSON_DATA' ) ) { $chunks = explode( "\nJSON_DATA", $content ); $all_values = json_decode( $chunks[1], true ); - if ( is_array( $all_values ) ) { - $fields_array = array_keys( $all_values ); - } - $lines = array_filter( explode( "\n", $chunks[0] ) ); + $lines = array_filter( explode( "\n", $chunks[0] ) ); } else { $fields_array = preg_replace( '/.*Array\s\( (.*)\)/msx', '$1', $content ); diff --git a/projects/packages/forms/src/contact-form/class-contact-form.php b/projects/packages/forms/src/contact-form/class-contact-form.php index 5c54ec765b4bf..5f820fa3c2440 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form.php +++ b/projects/packages/forms/src/contact-form/class-contact-form.php @@ -508,6 +508,14 @@ public static function get_compiled_form( $feedback_id, $form ) { if ( $meta_key ) { if ( isset( $content_fields[ "_feedback_{$meta_key}" ] ) ) { + if ( 'name' === $type ) { + // If a form contains both email and name fields but the user doesn't provide a name, we don't need to show the name field + // in the success message after submision. We have this specific check because in the above case the `author` field gets + // a fallback value of the provided email and is used in the backend in various places. + if ( isset( $content_fields['_feedback_author_email'] ) && $content_fields['_feedback_author'] === $content_fields['_feedback_author_email'] ) { + continue; + } + } $value = $content_fields[ "_feedback_{$meta_key}" ]; } } else { From c8662ceca6d0893b0057a2766470049c1e6f54ab Mon Sep 17 00:00:00 2001 From: Karen Attfield Date: Mon, 13 Jan 2025 10:45:44 +0000 Subject: [PATCH 031/420] Classic Theme Helper: Require Nova Restaurant CPT from the package (#40782) --- ...ova-restaurant-cpt-in-classic-theme-helper | 4 + .../src/custom-content-types.php | 6 +- projects/plugins/jetpack/.phan/baseline.php | 5 +- ...ova-restaurant-cpt-in-classic-theme-helper | 4 + .../modules/custom-post-types/nova.php | 1449 +++-------------- .../plugins/jetpack/modules/module-extras.php | 1 - 6 files changed, 254 insertions(+), 1215 deletions(-) create mode 100644 projects/packages/classic-theme-helper/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper create mode 100644 projects/plugins/jetpack/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper diff --git a/projects/packages/classic-theme-helper/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper b/projects/packages/classic-theme-helper/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper new file mode 100644 index 0000000000000..2c07e0f164500 --- /dev/null +++ b/projects/packages/classic-theme-helper/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Nova Restaurant: ensuring the custom post type is now being required via the package. diff --git a/projects/packages/classic-theme-helper/src/custom-content-types.php b/projects/packages/classic-theme-helper/src/custom-content-types.php index 2bb5d164b96c0..5b2b3deeb15a7 100644 --- a/projects/packages/classic-theme-helper/src/custom-content-types.php +++ b/projects/packages/classic-theme-helper/src/custom-content-types.php @@ -8,7 +8,7 @@ * Module Tags: Writing * Sort Order: 34 * Feature: Writing - * Additional Search Queries: cpt, custom post types, portfolio, portfolios, testimonial, testimonials + * Additional Search Queries: cpt, custom post types, portfolio, portfolios, testimonial, testimonials, nova * * @package automattic/jetpack-classic-theme-helper */ @@ -18,11 +18,12 @@ if ( ! function_exists( 'jetpack_load_custom_post_types' ) ) { /** - * Load Portfolio CPT. + * Load Portfolio, Testimonial, and Nova CPT. */ function jetpack_load_custom_post_types() { include __DIR__ . '/custom-post-types/class-jetpack-portfolio.php'; include __DIR__ . '/custom-post-types/class-jetpack-testimonial.php'; + include __DIR__ . '/custom-post-types/class-nova-restaurant.php'; } add_action( 'init', array( '\Automattic\Jetpack\Classic_Theme_Helper\Jetpack_Portfolio', 'init' ) ); register_activation_hook( __FILE__, array( '\Automattic\Jetpack\Classic_Theme_Helper\Jetpack_Portfolio', 'activation_post_type_support' ) ); @@ -32,6 +33,7 @@ function jetpack_load_custom_post_types() { register_activation_hook( __FILE__, array( '\Automattic\Jetpack\Classic_Theme_Helper\Jetpack_Testimonial', 'activation_post_type_support' ) ); add_action( 'jetpack_activate_module_custom-content-types', array( '\Automattic\Jetpack\Classic_Theme_Helper\Jetpack_Testimonial', 'activation_post_type_support' ) ); + add_action( 'init', array( '\Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant', 'init' ) ); } if ( ! function_exists( 'jetpack_custom_post_types_loaded' ) ) { diff --git a/projects/plugins/jetpack/.phan/baseline.php b/projects/plugins/jetpack/.phan/baseline.php index 26ebb777f9d7f..4deb8b388d2d3 100644 --- a/projects/plugins/jetpack/.phan/baseline.php +++ b/projects/plugins/jetpack/.phan/baseline.php @@ -24,9 +24,9 @@ // PhanTypeMismatchArgumentNullable : 50+ occurrences // PhanParamTooMany : 40+ occurrences // PhanPluginDuplicateAdjacentStatement : 40+ occurrences - // PhanTypeExpectedObjectPropAccess : 40+ occurrences // PhanTypeMismatchArgumentInternal : 40+ occurrences // PhanUndeclaredProperty : 40+ occurrences + // PhanTypeExpectedObjectPropAccess : 35+ occurrences // PhanParamSignatureMismatch : 25+ occurrences // PhanTypeMismatchDefault : 25+ occurrences // PhanTypeMismatchPropertyProbablyReal : 25+ occurrences @@ -35,12 +35,12 @@ // PhanPluginSimplifyExpressionBool : 20+ occurrences // PhanTypeArraySuspicious : 20+ occurrences // PhanTypeMismatchDimFetch : 20+ occurrences - // PhanTypeSuspiciousNonTraversableForeach : 20+ occurrences // PhanPluginMixedKeyNoKey : 15+ occurrences // PhanSuspiciousMagicConstant : 15+ occurrences // PhanTypeExpectedObjectPropAccessButGotNull : 15+ occurrences // PhanTypeMismatchArgumentNullableInternal : 15+ occurrences // PhanTypeMismatchPropertyDefault : 15+ occurrences + // PhanTypeSuspiciousNonTraversableForeach : 15+ occurrences // PhanPluginDuplicateExpressionAssignmentOperation : 10+ occurrences // PhanRedefineClass : 10+ occurrences // PhanRedundantConditionInLoop : 10+ occurrences @@ -321,7 +321,6 @@ 'modules/comments/subscription-modal-on-comment/class-jetpack-subscription-modal-on-comment.php' => ['PhanTypeMismatchReturnNullable'], 'modules/copy-post.php' => ['PhanNoopNew'], 'modules/custom-content-types.php' => ['PhanRedefineFunction'], - 'modules/custom-post-types/nova.php' => ['PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeSuspiciousNonTraversableForeach'], 'modules/geo-location.php' => ['PhanTypeMismatchArgumentNullable'], 'modules/geo-location/class.jetpack-geo-location.php' => ['PhanTypeMismatchArgument'], 'modules/google-fonts/current/class-jetpack-google-font-face.php' => ['PhanUndeclaredFunctionInCallable'], diff --git a/projects/plugins/jetpack/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper b/projects/plugins/jetpack/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper new file mode 100644 index 0000000000000..e588751ac9732 --- /dev/null +++ b/projects/plugins/jetpack/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper @@ -0,0 +1,4 @@ +Significance: patch +Type: compat + +Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. diff --git a/projects/plugins/jetpack/modules/custom-post-types/nova.php b/projects/plugins/jetpack/modules/custom-post-types/nova.php index b01bc0287b0bb..3d6ef5e8e64f9 100644 --- a/projects/plugins/jetpack/modules/custom-post-types/nova.php +++ b/projects/plugins/jetpack/modules/custom-post-types/nova.php @@ -25,9 +25,6 @@ * @package automattic/jetpack */ -use Automattic\Jetpack\Assets; -use Automattic\Jetpack\Roles; - if ( ! class_exists( '\Nova_Restaurant' ) ) { /** @@ -38,9 +35,18 @@ class Nova_Restaurant { const MENU_ITEM_LABEL_TAX = 'nova_menu_item_label'; const MENU_TAX = 'nova_menu'; + /** + * Store an instance of the new class + * + * @var Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant + */ + protected $new_instance; + /** * Version number used when enqueuing all resources (css and js). * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @var string */ public $version = '20210303'; @@ -48,6 +54,8 @@ class Nova_Restaurant { /** * Default markup for the menu items. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @var array */ protected $default_menu_item_loop_markup = array( @@ -64,6 +72,8 @@ class Nova_Restaurant { /** * Array of markup for the menu items. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @var array */ protected $menu_item_loop_markup = array(); @@ -71,6 +81,8 @@ class Nova_Restaurant { /** * Last term ID of a loop of menu items. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @var bool|int */ protected $menu_item_loop_last_term_id = false; @@ -78,6 +90,8 @@ class Nova_Restaurant { /** * Current term ID of a loop of menu items. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @var bool|int */ protected $menu_item_loop_current_term = false; @@ -85,22 +99,15 @@ class Nova_Restaurant { /** * Initialize class. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param array $menu_item_loop_markup Array of markup for the menu items. * - * @return self + * @return Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant */ public static function init( $menu_item_loop_markup = array() ) { - static $instance = false; - - if ( ! $instance ) { - $instance = new Nova_Restaurant(); - } - - if ( $menu_item_loop_markup ) { - $instance->menu_item_loop_markup = wp_parse_args( $menu_item_loop_markup, $instance->default_menu_item_loop_markup ); - } - - return $instance; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant::init( $menu_item_loop_markup ); } /** @@ -108,519 +115,208 @@ public static function init( $menu_item_loop_markup = array() ) { * Hook into WordPress to create CPT and utilities if needed. */ public function __construct() { - if ( ! $this->site_supports_nova() ) { - return; - } - - $this->register_taxonomies(); - $this->register_post_types(); - add_action( 'admin_menu', array( $this, 'add_admin_menus' ) ); - add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_nova_styles' ) ); - add_action( 'admin_head', array( $this, 'set_custom_font_icon' ) ); - - // Always sort menu items correctly - add_action( 'parse_query', array( $this, 'sort_menu_item_queries_by_menu_order' ) ); - add_filter( 'posts_results', array( $this, 'sort_menu_item_queries_by_menu_taxonomy' ), 10, 2 ); - - add_action( 'wp_insert_post', array( $this, 'add_post_meta' ) ); - - $this->menu_item_loop_markup = $this->default_menu_item_loop_markup; + $this->new_instance = new Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant(); + } - // Only output our Menu Item Loop Markup on a real blog view. Not feeds, XML-RPC, admin, etc. - add_filter( 'template_include', array( $this, 'setup_menu_item_loop_markup__in_filter' ) ); + /** + * Forward all method calls to the Nova_Restaurant class. + * + * @param string $name The name of the method. + * @param array $arguments The arguments to pass to the method. + * + * @throws Exception If the method is not found. + */ + public function __call( $name, $arguments ) { + if ( method_exists( $this->new_instance, $name ) ) { + return call_user_func_array( array( $this->new_instance, $name ), $arguments ); + } else { + // Handle cases where the method is not found + throw new Exception( sprintf( 'Undefined method: %s', esc_html( $name ) ) ); + } + } - add_filter( 'enter_title_here', array( $this, 'change_default_title' ) ); - add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) ); - add_filter( 'dashboard_glance_items', array( $this, 'add_to_dashboard' ) ); + /** + * Forward all static method calls to the Nova_Restaurant class. + * + * @param string $name The name of the method. + * @param array $arguments The arguments to pass to the method. + * + * @throws Exception If the method is not found. + */ + public static function __callStatic( $name, $arguments ) { + if ( method_exists( Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant::class, $name ) ) { + return call_user_func_array( array( Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant::class, $name ), $arguments ); + } else { + // Handle cases where the method is not found + throw new Exception( sprintf( 'Undefined static method: %s', esc_html( $name ) ) ); + } } /** * Should this Custom Post Type be made available? * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return bool */ public function site_supports_nova() { - // If we're on WordPress.com, and it has the menu site vertical. - if ( function_exists( 'site_vertical' ) && 'nova_menu' === site_vertical() ) { - return true; - } - - // Else, if the current theme requests it. - if ( current_theme_supports( self::MENU_ITEM_POST_TYPE ) ) { - return true; - } - - // Otherwise, say no unless something wants to filter us to say yes. - /** - * Allow something else to hook in and enable this CPT. - * - * @module custom-content-types - * - * @since 2.6.0 - * - * @param bool false Whether or not to enable this CPT. - * @param string $var The slug for this CPT. - */ - return (bool) apply_filters( 'jetpack_enable_cpt', false, self::MENU_ITEM_POST_TYPE ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->site_supports_nova(); } /* Setup */ /** * Register Taxonomies and Post Type + * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. */ public function register_taxonomies() { - if ( ! taxonomy_exists( self::MENU_ITEM_LABEL_TAX ) ) { - register_taxonomy( - self::MENU_ITEM_LABEL_TAX, - self::MENU_ITEM_POST_TYPE, - array( - 'labels' => array( - /* translators: this is about a food menu */ - 'name' => __( 'Menu Item Labels', 'jetpack' ), - /* translators: this is about a food menu */ - 'singular_name' => __( 'Menu Item Label', 'jetpack' ), - /* translators: this is about a food menu */ - 'search_items' => __( 'Search Menu Item Labels', 'jetpack' ), - 'popular_items' => __( 'Popular Labels', 'jetpack' ), - /* translators: this is about a food menu */ - 'all_items' => __( 'All Menu Item Labels', 'jetpack' ), - /* translators: this is about a food menu */ - 'edit_item' => __( 'Edit Menu Item Label', 'jetpack' ), - /* translators: this is about a food menu */ - 'view_item' => __( 'View Menu Item Label', 'jetpack' ), - /* translators: this is about a food menu */ - 'update_item' => __( 'Update Menu Item Label', 'jetpack' ), - /* translators: this is about a food menu */ - 'add_new_item' => __( 'Add New Menu Item Label', 'jetpack' ), - /* translators: this is about a food menu */ - 'new_item_name' => __( 'New Menu Item Label Name', 'jetpack' ), - 'separate_items_with_commas' => __( 'For example, spicy, favorite, etc.
Separate Labels with commas', 'jetpack' ), - 'add_or_remove_items' => __( 'Add or remove Labels', 'jetpack' ), - 'choose_from_most_used' => __( 'Choose from the most used Labels', 'jetpack' ), - 'items_list_navigation' => __( 'Menu item label list navigation', 'jetpack' ), - 'items_list' => __( 'Menu item labels list', 'jetpack' ), - ), - 'no_tagcloud' => __( 'No Labels found', 'jetpack' ), - 'hierarchical' => false, - ) - ); - } - - if ( ! taxonomy_exists( self::MENU_TAX ) ) { - register_taxonomy( - self::MENU_TAX, - self::MENU_ITEM_POST_TYPE, - array( - 'labels' => array( - /* translators: this is about a food menu */ - 'name' => __( 'Menu Sections', 'jetpack' ), - /* translators: this is about a food menu */ - 'singular_name' => __( 'Menu Section', 'jetpack' ), - /* translators: this is about a food menu */ - 'search_items' => __( 'Search Menu Sections', 'jetpack' ), - /* translators: this is about a food menu */ - 'all_items' => __( 'All Menu Sections', 'jetpack' ), - /* translators: this is about a food menu */ - 'parent_item' => __( 'Parent Menu Section', 'jetpack' ), - /* translators: this is about a food menu */ - 'parent_item_colon' => __( 'Parent Menu Section:', 'jetpack' ), - /* translators: this is about a food menu */ - 'edit_item' => __( 'Edit Menu Section', 'jetpack' ), - /* translators: this is about a food menu */ - 'view_item' => __( 'View Menu Section', 'jetpack' ), - /* translators: this is about a food menu */ - 'update_item' => __( 'Update Menu Section', 'jetpack' ), - /* translators: this is about a food menu */ - 'add_new_item' => __( 'Add New Menu Section', 'jetpack' ), - /* translators: this is about a food menu */ - 'new_item_name' => __( 'New Menu Sections Name', 'jetpack' ), - 'items_list_navigation' => __( 'Menu section list navigation', 'jetpack' ), - 'items_list' => __( 'Menu section list', 'jetpack' ), - ), - 'rewrite' => array( - 'slug' => 'menu', - 'with_front' => false, - 'hierarchical' => true, - ), - 'hierarchical' => true, - 'show_tagcloud' => false, - 'query_var' => 'menu', - ) - ); - } + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->register_taxonomies(); } /** * Register our Post Type. + * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. */ public function register_post_types() { - if ( post_type_exists( self::MENU_ITEM_POST_TYPE ) ) { - return; - } - - register_post_type( - self::MENU_ITEM_POST_TYPE, - array( - 'description' => __( "Items on your restaurant's menu", 'jetpack' ), - - 'labels' => array( - /* translators: this is about a food menu */ - 'name' => __( 'Menu Items', 'jetpack' ), - /* translators: this is about a food menu */ - 'singular_name' => __( 'Menu Item', 'jetpack' ), - /* translators: this is about a food menu */ - 'menu_name' => __( 'Food Menus', 'jetpack' ), - /* translators: this is about a food menu */ - 'all_items' => __( 'Menu Items', 'jetpack' ), - /* translators: this is about a food menu */ - 'add_new' => __( 'Add One Item', 'jetpack' ), - /* translators: this is about a food menu */ - 'add_new_item' => __( 'Add Menu Item', 'jetpack' ), - /* translators: this is about a food menu */ - 'edit_item' => __( 'Edit Menu Item', 'jetpack' ), - /* translators: this is about a food menu */ - 'new_item' => __( 'New Menu Item', 'jetpack' ), - /* translators: this is about a food menu */ - 'view_item' => __( 'View Menu Item', 'jetpack' ), - /* translators: this is about a food menu */ - 'search_items' => __( 'Search Menu Items', 'jetpack' ), - /* translators: this is about a food menu */ - 'not_found' => __( 'No Menu Items found', 'jetpack' ), - /* translators: this is about a food menu */ - 'not_found_in_trash' => __( 'No Menu Items found in Trash', 'jetpack' ), - 'filter_items_list' => __( 'Filter menu items list', 'jetpack' ), - 'items_list_navigation' => __( 'Menu item list navigation', 'jetpack' ), - 'items_list' => __( 'Menu items list', 'jetpack' ), - ), - 'supports' => array( - 'title', - 'editor', - 'thumbnail', - 'excerpt', - ), - 'rewrite' => array( - 'slug' => 'item', - 'with_front' => false, - 'feeds' => false, - 'pages' => false, - ), - 'register_meta_box_cb' => array( $this, 'register_menu_item_meta_boxes' ), - - 'public' => true, - 'show_ui' => true, // set to false to replace with custom UI - 'menu_position' => 20, // below Pages - 'capability_type' => 'page', - 'map_meta_cap' => true, - 'has_archive' => false, - 'query_var' => 'item', - ) - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->register_post_types(); } /** * Update messages for the Menu Item admin. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param array $messages Existing post update messages. * * @return array $messages Updated post update messages. */ public function updated_messages( $messages ) { - global $post; - - $messages[ self::MENU_ITEM_POST_TYPE ] = array( - 0 => '', // Unused. Messages start at index 1. - 1 => sprintf( - /* translators: this is about a food menu. Placeholder is a link to the food menu. */ - __( 'Menu item updated. View item', 'jetpack' ), - esc_url( get_permalink( $post->ID ) ) - ), - 2 => esc_html__( 'Custom field updated.', 'jetpack' ), - 3 => esc_html__( 'Custom field deleted.', 'jetpack' ), - /* translators: this is about a food menu */ - 4 => esc_html__( 'Menu item updated.', 'jetpack' ), - 5 => isset( $_GET['revision'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Copying core message handling. - ? sprintf( - /* translators: %s: date and time of the revision */ - esc_html__( 'Menu item restored to revision from %s', 'jetpack' ), - wp_post_revision_title( (int) $_GET['revision'], false ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Copying core message handling. - ) - : false, - 6 => sprintf( - /* translators: this is about a food menu. Placeholder is a link to the food menu. */ - __( 'Menu item published. View item', 'jetpack' ), - esc_url( get_permalink( $post->ID ) ) - ), - /* translators: this is about a food menu */ - 7 => esc_html__( 'Menu item saved.', 'jetpack' ), - 8 => sprintf( - /* translators: this is about a food menu */ - __( 'Menu item submitted. Preview item', 'jetpack' ), - esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) - ), - 9 => sprintf( - /* translators: this is about a food menu. 1. Publish box date format, see https://php.net/date 2. link to the food menu. */ - __( 'Menu item scheduled for: %1$s. Preview item', 'jetpack' ), - /* translators: Publish box date format, see https://php.net/date */ - date_i18n( __( 'M j, Y @ G:i', 'jetpack' ), strtotime( $post->post_date ) ), - esc_url( get_permalink( $post->ID ) ) - ), - 10 => sprintf( - /* translators: this is about a food menu. Placeholder is a link to the food menu. */ - __( 'Menu item draft updated. Preview item', 'jetpack' ), - esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) - ), - ); - - return $messages; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->updated_messages( $messages ); } /** * Nova styles and scripts. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param string $hook Page hook. * * @return void */ public function enqueue_nova_styles( $hook ) { - global $post_type; - $pages = array( 'edit.php', 'post.php', 'post-new.php' ); - - if ( in_array( $hook, $pages, true ) && $post_type === self::MENU_ITEM_POST_TYPE ) { - wp_enqueue_style( 'nova-style', plugins_url( 'css/nova.css', __FILE__ ), array(), $this->version ); - } - - wp_enqueue_style( 'nova-font', plugins_url( 'css/nova-font.css', __FILE__ ), array(), $this->version ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->enqueue_nova_styles( $hook ); } /** * Change ‘Enter Title Here’ text for the Menu Item. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param string $title Default title placeholder text. * * @return string */ public function change_default_title( $title ) { - if ( self::MENU_ITEM_POST_TYPE === get_post_type() ) { - /* translators: this is about a food menu */ - $title = esc_html__( "Enter the menu item's name here", 'jetpack' ); - } - - return $title; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->change_default_title( $title ); } /** * Add to Dashboard At A Glance * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function add_to_dashboard() { - $number_menu_items = wp_count_posts( self::MENU_ITEM_POST_TYPE ); - - $roles = new Roles(); - if ( current_user_can( $roles->translate_role_to_cap( 'administrator' ) ) ) { - $number_menu_items_published = sprintf( - '%2$s', - esc_url( - get_admin_url( - get_current_blog_id(), - 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE - ) - ), - sprintf( - /* translators: Placehoder is a number of items. */ - _n( - '%1$d Food Menu Item', - '%1$d Food Menu Items', - (int) $number_menu_items->publish, - 'jetpack' - ), - number_format_i18n( $number_menu_items->publish ) - ) - ); - } else { - $number_menu_items_published = sprintf( - '%1$s', - sprintf( - /* translators: Placehoder is a number of items. */ - _n( - '%1$d Food Menu Item', - '%1$d Food Menu Items', - (int) $number_menu_items->publish, - 'jetpack' - ), - number_format_i18n( $number_menu_items->publish ) - ) - ); - } - - echo '
  • ' . $number_menu_items_published . '
  • '; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- we escape things above. + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->add_to_dashboard(); } /** * If the WP query for our menu items. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param WP_Query $query WP Query. * * @return bool */ public function is_menu_item_query( $query ) { - if ( - ( isset( $query->query_vars['taxonomy'] ) && self::MENU_TAX === $query->query_vars['taxonomy'] ) - || - ( isset( $query->query_vars['post_type'] ) && self::MENU_ITEM_POST_TYPE === $query->query_vars['post_type'] ) - ) { - return true; - } - - return false; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->is_menu_item_query( $query ); } /** * Custom sort the menu item queries by menu order. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param WP_Query $query WP Query. * * @return void */ public function sort_menu_item_queries_by_menu_order( $query ) { - if ( ! $this->is_menu_item_query( $query ) ) { - return; - } - - $query->query_vars['orderby'] = 'menu_order'; - $query->query_vars['order'] = 'ASC'; - - // For now, just turn off paging so we can sort by taxonmy later - // If we want paging in the future, we'll need to add the taxonomy sort here (or at least before the DB query is made) - $query->query_vars['posts_per_page'] = -1; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->sort_menu_item_queries_by_menu_order( $query ); } /** * Custom sort the menu item queries by menu taxonomies. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param WP_Post[] $posts Array of post objects. * @param WP_Query $query The WP_Query instance. * * @return WP_Post[] */ public function sort_menu_item_queries_by_menu_taxonomy( $posts, $query ) { - if ( ! $posts ) { - return $posts; - } - - if ( ! $this->is_menu_item_query( $query ) ) { - return $posts; - } - - $grouped_by_term = array(); - - foreach ( $posts as $post ) { - $term = $this->get_menu_item_menu_leaf( $post->ID ); - if ( ! $term || is_wp_error( $term ) ) { - $term_id = 0; - } else { - $term_id = $term->term_id; - } - - if ( ! isset( $grouped_by_term[ "$term_id" ] ) ) { - $grouped_by_term[ "$term_id" ] = array(); - } - - $grouped_by_term[ "$term_id" ][] = $post; - } - - $term_order = get_option( 'nova_menu_order', array() ); - - $return = array(); - foreach ( $term_order as $term_id ) { - if ( isset( $grouped_by_term[ "$term_id" ] ) ) { - $return = array_merge( $return, $grouped_by_term[ "$term_id" ] ); - unset( $grouped_by_term[ "$term_id" ] ); - } - } - - foreach ( $grouped_by_term as $term_id => $posts ) { - $return = array_merge( $return, $posts ); - } - - return $return; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->sort_menu_item_queries_by_menu_taxonomy( $posts, $query ); } /** * Add new "Add many items" submenu, custom colunmns, and custom bulk actions. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function add_admin_menus() { - $hook = add_submenu_page( - 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE, - __( 'Add Many Items', 'jetpack' ), - __( 'Add Many Items', 'jetpack' ), - 'edit_pages', - 'add_many_nova_items', - array( $this, 'add_many_new_items_page' ) - ); - - add_action( "load-$hook", array( $this, 'add_many_new_items_page_load' ) ); - - add_action( 'current_screen', array( $this, 'current_screen_load' ) ); - - /* - * Adjust 'Add Many Items' submenu position - * We're making changes to the menu global, but no other choice unfortunately. - * phpcs:disable WordPress.WP.GlobalVariablesOverride.Prohibited - */ - if ( isset( $GLOBALS['submenu'][ 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE ] ) ) { - $submenu_item = array_pop( $GLOBALS['submenu'][ 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE ] ); - $GLOBALS['submenu'][ 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE ][11] = $submenu_item; - ksort( $GLOBALS['submenu'][ 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE ] ); - } - // phpcs:enable WordPress.WP.GlobalVariablesOverride.Prohibited - - $this->setup_menu_item_columns(); - - wp_register_script( - 'nova-menu-checkboxes', - Assets::get_file_url_for_environment( - '_inc/build/custom-post-types/js/menu-checkboxes.min.js', - 'modules/custom-post-types/js/menu-checkboxes.js' - ), - array(), - $this->version, - true - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->add_admin_menus(); } /** * Custom Nova Icon CSS * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function set_custom_font_icon() { - ?> - - new_instance->set_custom_font_icon(); } /** * Load Nova menu management tools on the CPT admin screen. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function current_screen_load() { - $screen = get_current_screen(); - if ( 'edit-nova_menu_item' !== $screen->id ) { - return; - } - - $this->edit_menu_items_page_load(); - add_filter( 'admin_notices', array( $this, 'admin_notices' ) ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->current_screen_load(); } /* Edit Items List */ @@ -628,492 +324,131 @@ public function current_screen_load() { /** * Display a notice in wp-admin after items have been changed. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function admin_notices() { - if ( isset( $_GET['nova_reordered'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- this is only displaying a message with no dynamic values. - printf( - '

    %s

    ', - /* translators: this is about a food menu */ - esc_html__( 'Menu Items re-ordered.', 'jetpack' ) - ); - } + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->admin_notices(); } /** * Do not allow sorting by title. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param array $columns An array of sortable columns. * * @return array $columns. */ public function no_title_sorting( $columns ) { - if ( isset( $columns['title'] ) ) { - unset( $columns['title'] ); - } - return $columns; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->no_title_sorting( $columns ); } /** * Set up custom columns for our Nova menu. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function setup_menu_item_columns() { - add_filter( sprintf( 'manage_edit-%s_sortable_columns', self::MENU_ITEM_POST_TYPE ), array( $this, 'no_title_sorting' ) ); - add_filter( sprintf( 'manage_%s_posts_columns', self::MENU_ITEM_POST_TYPE ), array( $this, 'menu_item_columns' ) ); - - add_action( sprintf( 'manage_%s_posts_custom_column', self::MENU_ITEM_POST_TYPE ), array( $this, 'menu_item_column_callback' ), 10, 2 ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->setup_menu_item_columns(); } /** * Add custom columns to the Nova menu item list. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param array $columns An array of columns. * * @return array $columns. */ public function menu_item_columns( $columns ) { - unset( $columns['date'], $columns['likes'] ); - - $columns['thumbnail'] = __( 'Thumbnail', 'jetpack' ); - $columns['labels'] = __( 'Labels', 'jetpack' ); - $columns['price'] = __( 'Price', 'jetpack' ); - $columns['order'] = __( 'Order', 'jetpack' ); - - return $columns; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->menu_item_columns( $columns ); } /** * Display custom data in each new custom column we created. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param string $column The name of the column to display. * @param int $post_id The current post ID. * * @return void */ public function menu_item_column_callback( $column, $post_id ) { - $screen = get_current_screen(); - - switch ( $column ) { - case 'thumbnail': - echo get_the_post_thumbnail( $post_id, array( 50, 50 ) ); - break; - case 'labels': - $this->list_admin_labels( $post_id ); - break; - case 'price': - $this->display_price( $post_id ); - break; - case 'order': - $url = admin_url( $screen->parent_file ); - - $up_url = add_query_arg( - array( - 'action' => 'move-item-up', - 'post_id' => (int) $post_id, - ), - wp_nonce_url( $url, 'nova_move_item_up_' . $post_id ) - ); - - $down_url = add_query_arg( - array( - 'action' => 'move-item-down', - 'post_id' => (int) $post_id, - ), - wp_nonce_url( $url, 'nova_move_item_down_' . $post_id ) - ); - $menu_item = get_post( $post_id ); - $this->get_menu_by_post_id( $post_id ); - $term_id = $this->get_menu_by_post_id( $post_id ); - if ( $term_id ) { - $term_id = $term_id->term_id; - } - ?> - - - - -     — up -
    -     — down -
    - new_instance->menu_item_column_callback( $column, $post_id ); } /** * Get menu item by post ID. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param int $post_id Post ID. * * @return bool|WP_Term */ public function get_menu_by_post_id( $post_id = null ) { - if ( ! $post_id ) { - return false; - } - - $terms = get_the_terms( $post_id, self::MENU_TAX ); - - if ( ! is_array( $terms ) ) { - return false; - } - - return array_pop( $terms ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->get_menu_by_post_id( $post_id ); } /** * Fires on a menu edit page. We might have drag-n-drop reordered + * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. */ public function maybe_reorder_menu_items() { - // make sure we clicked our button. - if ( - empty( $_REQUEST['menu_reorder_submit'] ) - || __( 'Save New Order', 'jetpack' ) !== $_REQUEST['menu_reorder_submit'] - ) { - return; - } - - // make sure we have the nonce. - if ( - empty( $_REQUEST['drag-drop-reorder'] ) - || ! wp_verify_nonce( sanitize_key( $_REQUEST['drag-drop-reorder'] ), 'drag-drop-reorder' ) - ) { - return; - } - - // make sure we have data to work with. - if ( empty( $_REQUEST['nova_menu_term'] ) || empty( $_REQUEST['nova_order'] ) ) { - return; - } - - $term_pairs = array_map( 'absint', $_REQUEST['nova_menu_term'] ); - $order_pairs = array_map( 'absint', $_REQUEST['nova_order'] ); - - foreach ( $order_pairs as $id => $menu_order ) { - $id = absint( $id ); - unset( $order_pairs[ $id ] ); - if ( $id < 0 ) { - continue; - } - - $post = get_post( $id ); - if ( ! $post ) { - continue; - } - - // save a write if the order hasn't changed - if ( (int) $menu_order !== $post->menu_order ) { - $args = array( - 'ID' => $id, - 'menu_order' => $menu_order, - ); - wp_update_post( $args ); - } - - // save a write if the term hasn't changed - if ( (int) $term_pairs[ $id ] !== $this->get_menu_by_post_id( $id )->term_id ) { - wp_set_object_terms( $id, $term_pairs[ $id ], self::MENU_TAX ); - } - } - - $redirect = add_query_arg( - array( - 'post_type' => self::MENU_ITEM_POST_TYPE, - 'nova_reordered' => '1', - ), - admin_url( 'edit.php' ) - ); - wp_safe_redirect( $redirect ); - exit; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->maybe_reorder_menu_items(); } /** * Handle changes to menu items. * (process actions, update data, enqueue necessary scripts). * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function edit_menu_items_page_load() { - if ( isset( $_GET['action'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- we process the form and check nonces in handle_menu_item_actions. - $this->handle_menu_item_actions(); - } - - $this->maybe_reorder_menu_items(); - - wp_enqueue_script( - 'nova-drag-drop', - Assets::get_file_url_for_environment( - '_inc/build/custom-post-types/js/nova-drag-drop.min.js', - 'modules/custom-post-types/js/nova-drag-drop.js' - ), - array( 'jquery', 'jquery-ui-sortable' ), - $this->version, - true - ); - - wp_localize_script( - 'nova-drag-drop', - '_novaDragDrop', - array( - 'nonce' => wp_create_nonce( 'drag-drop-reorder' ), - 'nonceName' => 'drag-drop-reorder', - 'reorder' => __( 'Save New Order', 'jetpack' ), - 'reorderName' => 'menu_reorder_submit', - ) - ); - add_action( 'the_post', array( $this, 'show_menu_titles_in_menu_item_list' ) ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->edit_menu_items_page_load(); } /** * Process actions to move menu items around. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function handle_menu_item_actions() { - if ( isset( $_GET['action'] ) ) { - $action = (string) wp_unslash( $_GET['action'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- we check for nonces below, and check against specific strings in switch statement. - } else { - return; - } - - switch ( $action ) { - case 'move-item-up': - case 'move-item-down': - $reorder = false; - - if ( empty( $_GET['post_id'] ) ) { - break; - } - - $post_id = (int) $_GET['post_id']; - - $term = $this->get_menu_item_menu_leaf( $post_id ); - - // Get all posts in that term. - $query = new WP_Query( - array( - 'taxonomy' => self::MENU_TAX, - 'term' => $term->slug, - ) - ); - - $order = array(); - foreach ( $query->posts as $post ) { - $order[] = $post->ID; - } - - if ( 'move-item-up' === $action ) { - check_admin_referer( 'nova_move_item_up_' . $post_id ); - - $first_post_id = $order[0]; - if ( $post_id === $first_post_id ) { - break; - } - - foreach ( $order as $menu_order => $order_post_id ) { - if ( $post_id !== $order_post_id ) { - continue; - } - - $swap_post_id = $order[ $menu_order - 1 ]; - $order[ $menu_order - 1 ] = $post_id; - $order[ $menu_order ] = $swap_post_id; - - $reorder = true; - break; - } - } else { - check_admin_referer( 'nova_move_item_down_' . $post_id ); - - $last_post_id = end( $order ); - if ( $post_id === $last_post_id ) { - break; - } - - foreach ( $order as $menu_order => $order_post_id ) { - if ( $post_id !== $order_post_id ) { - continue; - } - - $swap_post_id = $order[ $menu_order + 1 ]; - $order[ $menu_order + 1 ] = $post_id; - $order[ $menu_order ] = $swap_post_id; - - $reorder = true; - } - } - - if ( $reorder ) { - foreach ( $order as $menu_order => $id ) { - wp_update_post( compact( 'id', 'menu_order' ) ); - } - } - - break; - case 'move-menu-up': - case 'move-menu-down': - $reorder = false; - - if ( empty( $_GET['term_id'] ) ) { - break; - } - - $term_id = (int) $_GET['term_id']; - - $terms = $this->get_menus(); - - $order = array(); - foreach ( $terms as $term ) { - $order[] = $term->term_id; - } - - if ( 'move-menu-up' === $action ) { - check_admin_referer( 'nova_move_menu_up_' . $term_id ); - - $first_term_id = $order[0]; - if ( $term_id === $first_term_id ) { - break; - } - - foreach ( $order as $menu_order => $order_term_id ) { - if ( $term_id !== $order_term_id ) { - continue; - } - - $swap_term_id = $order[ $menu_order - 1 ]; - $order[ $menu_order - 1 ] = $term_id; - $order[ $menu_order ] = $swap_term_id; - - $reorder = true; - break; - } - } else { - check_admin_referer( 'nova_move_menu_down_' . $term_id ); - - $last_term_id = end( $order ); - if ( $term_id === $last_term_id ) { - break; - } - - foreach ( $order as $menu_order => $order_term_id ) { - if ( $term_id !== $order_term_id ) { - continue; - } - - $swap_term_id = $order[ $menu_order + 1 ]; - $order[ $menu_order + 1 ] = $term_id; - $order[ $menu_order ] = $swap_term_id; - - $reorder = true; - } - } - - if ( $reorder ) { - update_option( 'nova_menu_order', $order ); - } - - break; - default: - return; - } - - $redirect = add_query_arg( - array( - 'post_type' => self::MENU_ITEM_POST_TYPE, - 'nova_reordered' => '1', - ), - admin_url( 'edit.php' ) - ); - wp_safe_redirect( $redirect ); - exit; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->handle_menu_item_actions(); } /** * Add menu title rows to the list table * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param WP_Post $post The Post object. * * @return void */ public function show_menu_titles_in_menu_item_list( $post ) { - global $wp_list_table; - - static $last_term_id = false; - - $term = $this->get_menu_item_menu_leaf( $post->ID ); - - $term_id = $term instanceof WP_Term ? $term->term_id : null; - - if ( false !== $last_term_id && $last_term_id === $term_id ) { - return; - } - - if ( $term_id === null ) { - $last_term_id = null; - $term_name = ''; - $parent_count = 0; - } else { - $last_term_id = $term->term_id; - $term_name = $term->name; - $parent_count = 0; - $current_term = $term; - while ( $current_term->parent ) { - ++$parent_count; - $current_term = get_term( $current_term->parent, self::MENU_TAX ); - } - } - - $non_order_column_count = $wp_list_table->get_column_count() - 1; - - $screen = get_current_screen(); - - $url = admin_url( $screen->parent_file ); - - $up_url = add_query_arg( - array( - 'action' => 'move-menu-up', - 'term_id' => (int) $term_id, - ), - wp_nonce_url( $url, 'nova_move_menu_up_' . $term_id ) - ); - - $down_url = add_query_arg( - array( - 'action' => 'move-menu-down', - 'term_id' => (int) $term_id, - ), - wp_nonce_url( $url, 'nova_move_menu_down_' . $term_id ) - ); - - ?> - - -

    - ', '', $term ); - - } else { - esc_html_e( 'Uncategorized', 'jetpack' ); - } - ?> -

    - - - - -
    - - - - - new_instance->show_menu_titles_in_menu_item_list( $post ); } /* Edit Many Items */ @@ -1122,205 +457,49 @@ public function show_menu_titles_in_menu_item_list( $post ) { * Handle form submissions that aim to add many menu items at once. * (process posted data and enqueue necessary script). * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function add_many_new_items_page_load() { - if ( - isset( $_SERVER['REQUEST_METHOD'] ) - && 'POST' === strtoupper( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) ) - ) { - $this->process_form_request(); - exit; - } - - $this->enqueue_many_items_scripts(); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->add_many_new_items_page_load(); } /** * Enqueue script to create many items at once. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function enqueue_many_items_scripts() { - wp_enqueue_script( - 'nova-many-items', - Assets::get_file_url_for_environment( - '_inc/build/custom-post-types/js/many-items.min.js', - 'modules/custom-post-types/js/many-items.js' - ), - array(), - $this->version, - true - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->enqueue_many_items_scripts(); } /** * Process form request to create many items at once. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function process_form_request() { - if ( ! isset( $_POST['nova_title'] ) || ! is_array( $_POST['nova_title'] ) ) { - return; - } - - $is_ajax = ! empty( $_POST['ajax'] ); - - if ( $is_ajax ) { - check_ajax_referer( 'nova_many_items' ); - } else { - check_admin_referer( 'nova_many_items' ); - } - - /* - * $_POST is already slashed - * phpcs:disable WordPress.Security.ValidatedSanitizedInput.MissingUnslash - */ - foreach ( array_keys( $_POST['nova_title'] ) as $key ) : // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- we sanitize below. - $post_details = array( - 'post_status' => 'publish', - 'post_type' => self::MENU_ITEM_POST_TYPE, - 'post_content' => ! empty( $_POST['nova_content'] ) && ! empty( $_POST['nova_content'][ $key ] ) - ? sanitize_text_field( $_POST['nova_content'][ $key ] ) - : '', - 'post_title' => isset( $_POST['nova_title'][ $key ] ) - ? sanitize_title( $_POST['nova_title'][ $key ] ) - : '', - 'tax_input' => array( - self::MENU_ITEM_LABEL_TAX => isset( $_POST['nova_labels'][ $key ] ) - ? sanitize_meta( self::MENU_ITEM_LABEL_TAX, $_POST['nova_labels'][ $key ], 'term' ) - : null, - self::MENU_TAX => isset( $_POST['nova_menu_tax'] ) - ? sanitize_meta( self::MENU_TAX, $_POST['nova_menu_tax'], 'term' ) - : null, - ), - ); - - $post_id = wp_insert_post( $post_details ); - if ( ! $post_id || is_wp_error( $post_id ) ) { - continue; - } - - $this->set_price( - $post_id, - isset( $_POST['nova_price'][ $key ] ) - ? sanitize_meta( 'nova_price', $_POST['nova_price'][ $key ], 'post' ) - : '' - ); - // phpcs:enable WordPress.Security.ValidatedSanitizedInput.MissingUnslash - - if ( $is_ajax ) : - $post = get_post( $post_id ); - $GLOBALS['post'] = $post; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited - setup_postdata( $post ); - - ?> - - display_price(); ?> - list_labels( $post_id ); ?> - - new_instance->process_form_request(); } /** * Admin page contents for adding many menu items at once. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function add_many_new_items_page() { - ?> -
    -

    - -

    - TAB key on your keyboard to move between colums and the ENTER or RETURN key to save each row and move on to the next.', 'jetpack' ), - array( - 'kbd' => array(), - ) - ); - ?> -

    - - -

    -

    - 'nova-menu-tax', - 'name' => 'nova_menu_tax', - 'taxonomy' => self::MENU_TAX, - 'hide_empty' => false, - 'hierarchical' => true, - ) - ); - ?> -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - spicy, favorite, etc. Separate Labels with commas', 'jetpack' ), - array( - 'small' => array(), - 'em' => array(), - ) - ); - ?> -
    -
    -
    - -

    - - -

    - -
    - new_instance->add_many_new_items_page(); } /* Edit One Item */ @@ -1329,51 +508,39 @@ public function add_many_new_items_page() { * Create admin meta box to save price for a menu item, * and add script to add extra checkboxes to the UI. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function register_menu_item_meta_boxes() { - wp_enqueue_script( 'nova-menu-checkboxes' ); - - add_meta_box( - 'menu_item_price', - __( 'Price', 'jetpack' ), - array( $this, 'menu_item_price_meta_box' ), - null, - 'side', - 'high' - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->register_menu_item_meta_boxes(); } /** * Meta box to edit the price of a menu item. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param WP_Post $post The post object. * * @return void */ public function menu_item_price_meta_box( $post ) { - printf( - '', - (int) $post->ID, - esc_html__( 'Price', 'jetpack' ), - esc_attr( $this->get_price( (int) $post->ID ) ) - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->menu_item_price_meta_box( $post ); } /** * Save the price of a menu item. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param int $post_id Post ID. */ public function add_post_meta( $post_id ) { - if ( ! isset( $_POST['nova_price'][ $post_id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce handling happens via core, since we hook into wp_insert_post. - return; - } - - $this->set_price( - $post_id, - sanitize_meta( 'nova_price', wp_unslash( $_POST['nova_price'][ $post_id ] ), 'post' ) // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce handling happens via core, since we hook into wp_insert_post. - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->add_post_meta( $post_id ); } /* Data */ @@ -1381,152 +548,100 @@ public function add_post_meta( $post_id ) { /** * Get ordered array of menu items. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param array $args Optional argumments. * * @return array */ public function get_menus( $args = array() ) { - $args = wp_parse_args( - $args, - array( - 'hide_empty' => false, - ) - ); - $args['taxonomy'] = self::MENU_TAX; - - $terms = get_terms( $args ); - if ( ! $terms || is_wp_error( $terms ) ) { - return array(); - } - - $terms_by_id = array(); - foreach ( $terms as $term ) { - $terms_by_id[ "{$term->term_id}" ] = $term; - } - - $term_order = get_option( 'nova_menu_order', array() ); - - $return = array(); - foreach ( $term_order as $term_id ) { - if ( isset( $terms_by_id[ "$term_id" ] ) ) { - $return[] = $terms_by_id[ "$term_id" ]; - unset( $terms_by_id[ "$term_id" ] ); - } - } - - foreach ( $terms_by_id as $term_id => $term ) { - $return[] = $term; - } - - return $return; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->get_menus( $args ); } /** * Get first menu taxonomy "leaf". * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param int $post_id Post ID. * * @return bool|WP_Term|WP_Error|null */ public function get_menu_item_menu_leaf( $post_id ) { - // Get first menu taxonomy "leaf". - $term_ids = wp_get_object_terms( $post_id, self::MENU_TAX, array( 'fields' => 'ids' ) ); - - foreach ( $term_ids as $term_id ) { - $children = get_term_children( $term_id, self::MENU_TAX ); - if ( ! $children ) { - break; - } - } - - if ( ! isset( $term_id ) ) { - return false; - } - - return get_term( $term_id, self::MENU_TAX ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->get_menu_item_menu_leaf( $post_id ); } /** * Get a list of the labels linked to a menu item. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param int $post_id Post ID. * * @return void */ public function list_labels( $post_id = 0 ) { - $post = get_post( $post_id ); - echo get_the_term_list( $post->ID, self::MENU_ITEM_LABEL_TAX, '', _x( ', ', 'Nova label separator', 'jetpack' ), '' ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->list_labels( $post_id ); } /** * Get a list of the labels linked to a menu item, with links to manage them. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param int $post_id Post ID. * * @return void */ public function list_admin_labels( $post_id = 0 ) { - $post = get_post( $post_id ); - $labels = get_the_terms( $post->ID, self::MENU_ITEM_LABEL_TAX ); - if ( ! empty( $labels ) ) { - $out = array(); - foreach ( $labels as $label ) { - $out[] = sprintf( - '%s', - esc_url( - add_query_arg( - array( - 'post_type' => self::MENU_ITEM_POST_TYPE, - 'taxonomy' => self::MENU_ITEM_LABEL_TAX, - 'term' => $label->slug, - ), - 'edit.php' - ) - ), - esc_html( - sanitize_term_field( 'name', $label->name, $label->term_id, self::MENU_ITEM_LABEL_TAX, 'display' ) - ) - ); - } - - echo implode( _x( ', ', 'Nova label separator', 'jetpack' ), $out ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- we build $out ourselves and escape things there. - } else { - esc_html_e( 'No Labels', 'jetpack' ); - } + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->list_admin_labels( $post_id ); } /** * Update post meta with the price defined in meta box. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param int $post_id Post ID. * @param string $price Price. * * @return int|bool */ public function set_price( $post_id = 0, $price = '' ) { - return update_post_meta( $post_id, 'nova_price', $price ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->set_price( $post_id, $price ); } /** * Get the price of a menu item. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param int $post_id Post ID. * * @return bool|string */ public function get_price( $post_id = 0 ) { - return get_post_meta( $post_id, 'nova_price', true ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->get_price( $post_id ); } /** * Echo the price of a menu item. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param int $post_id Post ID. * * @return void */ public function display_price( $post_id = 0 ) { - echo esc_html( $this->get_price( $post_id ) ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->display_price( $post_id ); } /* Menu Item Loop Markup */ @@ -1535,12 +650,15 @@ public function display_price( $post_id = 0 ) { * Get markup for a menu item. * Note: Does not support nested loops. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param null|string $field The field to get the value for. * * @return array */ public function get_menu_item_loop_markup( $field = null ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->menu_item_loop_markup; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->get_menu_item_loop_markup( $field ); } /** @@ -1548,201 +666,114 @@ public function get_menu_item_loop_markup( $field = null ) { // phpcs:ignore Var * Attached to the 'template_include' *filter*, * which fires only during a real blog view (not in admin, feeds, etc.) * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param string $template Template File. * * @return string Template File. VERY Important. */ public function setup_menu_item_loop_markup__in_filter( $template ) { - add_action( 'loop_start', array( $this, 'start_menu_item_loop' ) ); - - return $template; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->setup_menu_item_loop_markup__in_filter( $template ); } /** * If the Query is a Menu Item Query, start outputing the Menu Item Loop Marku * Attached to the 'loop_start' action. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param WP_Query $query Post query. * * @return void */ public function start_menu_item_loop( $query ) { - if ( ! $this->is_menu_item_query( $query ) ) { - return; - } - - $this->menu_item_loop_last_term_id = false; - $this->menu_item_loop_current_term = false; - - add_action( 'the_post', array( $this, 'menu_item_loop_each_post' ) ); - add_action( 'loop_end', array( $this, 'stop_menu_item_loop' ) ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->start_menu_item_loop( $query ); } /** * Outputs the Menu Item Loop Marku * Attached to the 'the_post' action. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param WP_Post $post Post object. * * @return void */ public function menu_item_loop_each_post( $post ) { - $this->menu_item_loop_current_term = $this->get_menu_item_menu_leaf( $post->ID ); - - if ( - false === $this->menu_item_loop_current_term - || null === $this->menu_item_loop_current_term - || is_wp_error( $this->menu_item_loop_current_term ) - ) { - return; - } - - if ( false === $this->menu_item_loop_last_term_id ) { - // We're at the very beginning of the loop - - $this->menu_item_loop_open_element( 'menu' ); // Start a new menu section - $this->menu_item_loop_header(); // Output the menu's header - } elseif ( $this->menu_item_loop_last_term_id !== $this->menu_item_loop_current_term->term_id ) { - // We're not at the very beginning but still need to start a new menu section. End the previous menu section first. - - $this->menu_item_loop_close_element( 'menu' ); // End the previous menu section - $this->menu_item_loop_open_element( 'menu' ); // Start a new menu section - $this->menu_item_loop_header(); // Output the menu's header - } - - $this->menu_item_loop_last_term_id = $this->menu_item_loop_current_term->term_id; + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->menu_item_loop_each_post( $post ); } /** * If the Query is a Menu Item Query, stop outputing the Menu Item Loop Marku * Attached to the 'loop_end' action. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param WP_Query $query Post query. * * @return void */ public function stop_menu_item_loop( $query ) { - if ( ! $this->is_menu_item_query( $query ) ) { - return; - } - - remove_action( 'the_post', array( $this, 'menu_item_loop_each_post' ) ); - remove_action( 'loop_start', array( $this, 'start_menu_item_loop' ) ); - remove_action( 'loop_end', array( $this, 'stop_menu_item_loop' ) ); - - $this->menu_item_loop_close_element( 'menu' ); // End the last menu section + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->stop_menu_item_loop( $query ); } /** * Outputs the Menu Group Header * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @return void */ public function menu_item_loop_header() { - $this->menu_item_loop_open_element( 'menu_header' ); - $this->menu_item_loop_open_element( 'menu_title' ); - echo esc_html( $this->menu_item_loop_current_term->name ); // @todo tax filter - $this->menu_item_loop_close_element( 'menu_title' ); - if ( $this->menu_item_loop_current_term->description ) : - $this->menu_item_loop_open_element( 'menu_description' ); - echo esc_html( $this->menu_item_loop_current_term->description ); // @todo kses, tax filter - $this->menu_item_loop_close_element( 'menu_description' ); - endif; - $this->menu_item_loop_close_element( 'menu_header' ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->menu_item_loop_header(); } /** * Outputs a Menu Item Markup element opening tag * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param string $field - Menu Item Markup settings field. * * @return void */ public function menu_item_loop_open_element( $field ) { - $markup = $this->get_menu_item_loop_markup(); - /** - * Filter a menu item's element opening tag. - * - * @module custom-content-types - * - * @since 4.4.0 - * - * @param string $tag Menu item's element opening tag. - * @param string $field Menu Item Markup settings field. - * @param array $markup Array of markup elements for the menu item. - * @param false|object $term Taxonomy term for current menu item. - */ - echo apply_filters( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- it's escaped in menu_item_loop_class. - 'jetpack_nova_menu_item_loop_open_element', - '<' . tag_escape( $markup[ "{$field}_tag" ] ) . $this->menu_item_loop_class( $markup[ "{$field}_class" ] ) . ">\n", - $field, - $markup, - $this->menu_item_loop_current_term - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->menu_item_loop_open_element( $field ); } /** * Outputs a Menu Item Markup element closing tag * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param string $field - Menu Item Markup settings field. * * @return void */ public function menu_item_loop_close_element( $field ) { - $markup = $this->get_menu_item_loop_markup(); - /** - * Filter a menu item's element closing tag. - * - * @module custom-content-types - * - * @since 4.4.0 - * - * @param string $tag Menu item's element closing tag. - * @param string $field Menu Item Markup settings field. - * @param array $markup Array of markup elements for the menu item. - * @param false|object $term Taxonomy term for current menu item. - */ - echo apply_filters( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- tag_escape is used. - 'jetpack_nova_menu_item_loop_close_element', - '\n", - $field, - $markup, - $this->menu_item_loop_current_term - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + $this->new_instance->menu_item_loop_close_element( $field ); } /** * Returns a Menu Item Markup element's class attribute. * + * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * * @param string $class Class name. * * @return string HTML class attribute with leading whitespace. */ public function menu_item_loop_class( $class ) { - if ( ! $class ) { - return ''; - } - - /** - * Filter a menu Item Markup element's class attribute. - * - * @module custom-content-types - * - * @since 4.4.0 - * - * @param string $tag Menu Item Markup element's class attribute. - * @param string $class Menu Item Class name. - * @param false|object $term Taxonomy term for current menu item. - */ - return apply_filters( - 'jetpack_nova_menu_item_loop_class', - ' class="' . esc_attr( $class ) . '"', - $class, - $this->menu_item_loop_current_term - ); + _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + return $this->new_instance->menu_item_loop_class( $class ); } } - - add_action( 'init', array( 'Nova_Restaurant', 'init' ) ); - -} \ No newline at end of file +} diff --git a/projects/plugins/jetpack/modules/module-extras.php b/projects/plugins/jetpack/modules/module-extras.php index 3d06191331bb7..5fe23809b9ed0 100644 --- a/projects/plugins/jetpack/modules/module-extras.php +++ b/projects/plugins/jetpack/modules/module-extras.php @@ -14,7 +14,6 @@ */ $tools = array( // Always loaded, but only registered if theme supports it. - 'custom-post-types/nova.php', 'geo-location.php', // Those oEmbed providers are always available. 'shortcodes/facebook.php', From 322a79f0b06c54d2405e4aa2020822498ca3059b Mon Sep 17 00:00:00 2001 From: Peter Petrov Date: Mon, 13 Jan 2025 14:36:24 +0200 Subject: [PATCH 032/420] Boost: Fix checkout page when running WC Shipping and Concat JS (#40874) --- .../changelog/fix-woocommerce-shipping-concat-js-conflict | 4 ++++ projects/plugins/boost/compatibility/js-concatenate.php | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 projects/plugins/boost/changelog/fix-woocommerce-shipping-concat-js-conflict diff --git a/projects/plugins/boost/changelog/fix-woocommerce-shipping-concat-js-conflict b/projects/plugins/boost/changelog/fix-woocommerce-shipping-concat-js-conflict new file mode 100644 index 0000000000000..0dc8fa2292958 --- /dev/null +++ b/projects/plugins/boost/changelog/fix-woocommerce-shipping-concat-js-conflict @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Concatenate JS: Improve compatibility with WooCommerce shipping. diff --git a/projects/plugins/boost/compatibility/js-concatenate.php b/projects/plugins/boost/compatibility/js-concatenate.php index 3b1d2855b3268..b4aca14772b45 100644 --- a/projects/plugins/boost/compatibility/js-concatenate.php +++ b/projects/plugins/boost/compatibility/js-concatenate.php @@ -10,6 +10,8 @@ function maybe_do_not_concat( $do_concat, $handle ) { // Plugin: `event-tickets` 'tribe-tickets-block', 'tribe-tickets-provider', + // Plugin: `woocommerce-shipping` + 'woocommerce-shipping-checkout-address-validation', ); if ( in_array( $handle, $excluded_handles, true ) ) { From 854e7ec4cdddb76d8556ff773e7aedf7a4a48f9c Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Mon, 13 Jan 2025 08:24:05 -0700 Subject: [PATCH 033/420] Resolves #40969 - Allow three-letter language code translations in notifications pane (#40973) * Support three-letter language codes * Add changelog * Remove unnecessary if statement --- .../changelog/fix-40969-notifications_pane_language_bug | 4 ++++ projects/plugins/jetpack/modules/notes.php | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/fix-40969-notifications_pane_language_bug diff --git a/projects/plugins/jetpack/changelog/fix-40969-notifications_pane_language_bug b/projects/plugins/jetpack/changelog/fix-40969-notifications_pane_language_bug new file mode 100644 index 0000000000000..4e47b5a5aa1d9 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-40969-notifications_pane_language_bug @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Notifications: Support three-letter language code translations. diff --git a/projects/plugins/jetpack/modules/notes.php b/projects/plugins/jetpack/modules/notes.php index 58f2d612759a0..8f6118938c413 100644 --- a/projects/plugins/jetpack/modules/notes.php +++ b/projects/plugins/jetpack/modules/notes.php @@ -192,12 +192,16 @@ public function admin_bar_menu() { $third_party_cookie_check_iframe = ''; $title = self::get_notes_markup(); + + // The default fallback is `en_US`. Remove underscore if present, noting that lang codes can be more than three chars. + $user_locale = strtolower( explode( '_', $user_locale, 2 )[0] ); + $wp_admin_bar->add_menu( array( 'id' => 'notes', 'title' => $title, 'meta' => array( - 'html' => '' . $third_party_cookie_check_iframe, + 'html' => '' . $third_party_cookie_check_iframe, 'class' => 'menupop', ), 'parent' => 'top-secondary', From 94621b35b07d6da5faa59181b263eb86ed976d64 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Mon, 13 Jan 2025 08:36:02 -0700 Subject: [PATCH 034/420] Code coverage: Fix warnings in scheduled updates package (#40975) * Fix @covers annotations * Add changelog --- .../changelog/fix-scheduled-updates-coverage_warnings | 4 ++++ .../tests/php/class-scheduled-updates-admin-test.php | 2 +- .../php/class-scheduled-updates-health-paths-test.php | 2 +- .../tests/php/class-scheduled-updates-logs-test.php | 2 +- .../tests/php/class-scheduled-updates-test.php | 8 ++++---- ...st-api-v2-endpoint-update-schedules-active-test.php | 10 +++++----- ...pcom-rest-api-v2-endpoint-update-schedules-test.php | 2 +- 7 files changed, 17 insertions(+), 13 deletions(-) create mode 100644 projects/packages/scheduled-updates/changelog/fix-scheduled-updates-coverage_warnings diff --git a/projects/packages/scheduled-updates/changelog/fix-scheduled-updates-coverage_warnings b/projects/packages/scheduled-updates/changelog/fix-scheduled-updates-coverage_warnings new file mode 100644 index 0000000000000..a5b7c21cb2e72 --- /dev/null +++ b/projects/packages/scheduled-updates/changelog/fix-scheduled-updates-coverage_warnings @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Fix @covers annotations. diff --git a/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-admin-test.php b/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-admin-test.php index 86c2051995217..13080476b5c8c 100644 --- a/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-admin-test.php +++ b/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-admin-test.php @@ -10,7 +10,7 @@ /** * Test class for Scheduled_Updates_Admin. * - * @coversDefaultClass Scheduled_Updates_Admin + * @coversDefaultClass Automattic\Jetpack\Scheduled_Updates_Admin */ class Scheduled_Updates_Admin_Test extends \WorDBless\BaseTestCase { /** diff --git a/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-health-paths-test.php b/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-health-paths-test.php index 918615ed1dc8e..5b6b98b5b02af 100644 --- a/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-health-paths-test.php +++ b/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-health-paths-test.php @@ -11,7 +11,7 @@ /** * Test class for Scheduled_Updates_Health_Paths. * - * @coversDefaultClass Scheduled_Updates_Health_Paths + * @coversDefaultClass Automattic\Jetpack\Scheduled_Updates_Health_Paths */ class Scheduled_Updates_Health_Paths_Test extends \WorDBless\BaseTestCase { diff --git a/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-logs-test.php b/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-logs-test.php index 766531cb1381a..93fded7805d70 100644 --- a/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-logs-test.php +++ b/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-logs-test.php @@ -10,7 +10,7 @@ /** * Test class for Scheduled_Updates_Logs. * - * @coversDefaultClass Scheduled_Updates_Logs + * @coversDefaultClass Automattic\Jetpack\Scheduled_Updates_Logs */ class Scheduled_Updates_Logs_Test extends \WorDBless\BaseTestCase { diff --git a/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-test.php b/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-test.php index 443f9cc9ed14c..0dfbbc4975468 100644 --- a/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-test.php +++ b/projects/packages/scheduled-updates/tests/php/class-scheduled-updates-test.php @@ -10,7 +10,7 @@ /** * Test class for Scheduled_Updates. * - * @coversDefaultClass Scheduled_Updates + * @coversDefaultClass Automattic\Jetpack\Scheduled_Updates */ class Scheduled_Updates_Test extends \WorDBless\BaseTestCase { @@ -659,7 +659,7 @@ private function populate_file_with_plugin_header( $plugin_file, $plugin_name ) /** * Test when all requested plugins are not installed. * - * @covers ::verify_plugins + * @covers WPCOM_REST_API_V2_Endpoint_Update_Schedules::validate_plugins_param */ public function test_verify_plugins_not_installed() { $plugins = array( 'not-installed-plugin-1/not-installed-plugin-1.php', 'not-installed-plugin-2/not-installed-plugin-2.php' ); @@ -686,7 +686,7 @@ public function test_verify_plugins_not_installed() { /** * Test when all requested plugins are managed. * - * @covers ::verify_plugins + * @covers WPCOM_REST_API_V2_Endpoint_Update_Schedules::validate_plugins_param */ public function test_verify_plugins_all_managed() { $plugins = array( 'managed-plugin-1/managed-plugin-1.php', 'managed-plugin-2/managed-plugin-2.php' ); @@ -713,7 +713,7 @@ public function test_verify_plugins_all_managed() { /** * Test when one requested plugin is installed and not managed, and another is installed but managed. * - * @covers ::verify_plugins + * @covers WPCOM_REST_API_V2_Endpoint_Update_Schedules::validate_plugins_param */ public function test_verify_plugins_installed_mixed() { $plugins = array( 'managed-plugin/managed-plugin.php', 'installed-plugin/installed-plugin.php' ); diff --git a/projects/packages/scheduled-updates/tests/php/class-wpcom-rest-api-v2-endpoint-update-schedules-active-test.php b/projects/packages/scheduled-updates/tests/php/class-wpcom-rest-api-v2-endpoint-update-schedules-active-test.php index 52e61bb5aec00..63afe14864870 100644 --- a/projects/packages/scheduled-updates/tests/php/class-wpcom-rest-api-v2-endpoint-update-schedules-active-test.php +++ b/projects/packages/scheduled-updates/tests/php/class-wpcom-rest-api-v2-endpoint-update-schedules-active-test.php @@ -91,7 +91,7 @@ public function tear_down() { /** * Test update_item. * - * @covers update_item + * @covers ::update_item */ public function test_active_is_true_by_default() { $plugins = array( 'gutenberg/gutenberg.php' ); @@ -124,7 +124,7 @@ public function test_active_is_true_by_default() { /** * Test update_item. * - * @covers update_item + * @covers ::update_item */ public function test_set_active_false_update_active_flag() { $plugins = array( @@ -179,7 +179,7 @@ public function test_set_active_false_update_active_flag() { /** * Test update_item. * - * @covers update_item + * @covers ::update_item */ public function test_run_inactive_schedule() { $plugins = array( @@ -217,7 +217,7 @@ public function test_run_inactive_schedule() { /** * Test update_item. * - * @covers update_item + * @covers ::update_item */ public function test_run_active_schedule() { $plugins = array( 'gutenberg/gutenberg.php' ); @@ -251,7 +251,7 @@ public function test_run_active_schedule() { /** * Test update_item update cron. * - * @covers update_item + * @covers ::update_item */ public function test_set_active_false_update_sync_option() { $plugins = array( diff --git a/projects/packages/scheduled-updates/tests/php/class-wpcom-rest-api-v2-endpoint-update-schedules-test.php b/projects/packages/scheduled-updates/tests/php/class-wpcom-rest-api-v2-endpoint-update-schedules-test.php index 2381dcecae470..f3cafd5c8e99b 100644 --- a/projects/packages/scheduled-updates/tests/php/class-wpcom-rest-api-v2-endpoint-update-schedules-test.php +++ b/projects/packages/scheduled-updates/tests/php/class-wpcom-rest-api-v2-endpoint-update-schedules-test.php @@ -385,7 +385,7 @@ public function test_updating_autoupdate_plugins_on_create() { /** * Can't have more than two schedules. * - * @covers ::create + * @covers ::create_item */ public function test_empty_last_run() { $plugins = array( 'gutenberg/gutenberg.php' ); From 31e16d51ab857ac91abfc025bc98037a723fb540 Mon Sep 17 00:00:00 2001 From: Calypso Bot Date: Mon, 13 Jan 2025 20:25:54 +0100 Subject: [PATCH 035/420] Lock file maintenance (#40980) Co-authored-by: Renovate Bot --- composer.lock | 73 +- pnpm-lock.yaml | 2349 +++++++++-------- .../changelog/renovate-lock-file-maintenance | 4 + .../composer.lock | 66 +- .../changelog/renovate-lock-file-maintenance | 4 + projects/plugins/backup/composer.lock | 54 +- .../changelog/renovate-lock-file-maintenance | 4 + projects/plugins/boost/composer.lock | 66 +- .../renovate-lock-file-maintenance#11 | 4 + .../classic-theme-helper-plugin/composer.lock | 66 +- .../changelog/renovate-lock-file-maintenance | 4 + projects/plugins/crm/composer.lock | 86 +- .../renovate-lock-file-maintenance#2 | 4 + projects/plugins/debug-helper/composer.lock | 32 +- .../renovate-lock-file-maintenance#21 | 4 + projects/plugins/inspect/composer.lock | 54 +- .../changelog/renovate-lock-file-maintenance | 4 + projects/plugins/jetpack/composer.lock | 66 +- .../changelog/renovate-lock-file-maintenance | 4 + .../plugins/mu-wpcom-plugin/composer.lock | 44 +- .../renovate-lock-file-maintenance#4 | 4 + projects/plugins/protect/composer.lock | 54 +- .../changelog/renovate-lock-file-maintenance | 4 + projects/plugins/search/composer.lock | 54 +- .../renovate-lock-file-maintenance#4 | 4 + projects/plugins/social/composer.lock | 66 +- .../renovate-lock-file-maintenance#2 | 4 + projects/plugins/starter-plugin/composer.lock | 66 +- .../changelog/renovate-lock-file-maintenance | 4 + projects/plugins/super-cache/composer.lock | 54 +- .../changelog/renovate-lock-file-maintenance | 4 + projects/plugins/vaultpress/composer.lock | 54 +- .../changelog/renovate-lock-file-maintenance | 4 + projects/plugins/videopress/composer.lock | 54 +- .../renovate-lock-file-maintenance#2 | 4 + projects/plugins/wpcomsh/composer.lock | 54 +- 36 files changed, 1838 insertions(+), 1642 deletions(-) create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/backup/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/boost/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/renovate-lock-file-maintenance#11 create mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/debug-helper/changelog/renovate-lock-file-maintenance#2 create mode 100644 projects/plugins/inspect/changelog/renovate-lock-file-maintenance#21 create mode 100644 projects/plugins/jetpack/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/protect/changelog/renovate-lock-file-maintenance#4 create mode 100644 projects/plugins/search/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/social/changelog/renovate-lock-file-maintenance#4 create mode 100644 projects/plugins/starter-plugin/changelog/renovate-lock-file-maintenance#2 create mode 100644 projects/plugins/super-cache/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/videopress/changelog/renovate-lock-file-maintenance create mode 100644 projects/plugins/wpcomsh/changelog/renovate-lock-file-maintenance#2 diff --git a/composer.lock b/composer.lock index eb8141cea1f3b..c266642289899 100644 --- a/composer.lock +++ b/composer.lock @@ -318,13 +318,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - }, "phpstan": { "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-main": "3.x-dev" } }, "autoload": { @@ -1058,16 +1058,16 @@ }, { "name": "php-stubs/woocommerce-stubs", - "version": "v9.4.2", + "version": "v9.5.0", "source": { "type": "git", "url": "https://github.com/php-stubs/woocommerce-stubs.git", - "reference": "d4347943eac3af274089abf1af9449e9dab45a96" + "reference": "813f3cad9892bd3b6ffae9334a4ccaa73692b439" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/woocommerce-stubs/zipball/d4347943eac3af274089abf1af9449e9dab45a96", - "reference": "d4347943eac3af274089abf1af9449e9dab45a96", + "url": "https://api.github.com/repos/php-stubs/woocommerce-stubs/zipball/813f3cad9892bd3b6ffae9334a4ccaa73692b439", + "reference": "813f3cad9892bd3b6ffae9334a4ccaa73692b439", "shasum": "" }, "require": { @@ -1096,9 +1096,9 @@ ], "support": { "issues": "https://github.com/php-stubs/woocommerce-stubs/issues", - "source": "https://github.com/php-stubs/woocommerce-stubs/tree/v9.4.2" + "source": "https://github.com/php-stubs/woocommerce-stubs/tree/v9.5.0" }, - "time": "2024-11-19T19:49:15+00:00" + "time": "2024-12-17T03:31:31+00:00" }, { "name": "php-stubs/wordpress-stubs", @@ -1995,16 +1995,16 @@ }, { "name": "sirbrillig/phpcs-changed", - "version": "v2.11.5", + "version": "v2.11.6", "source": { "type": "git", "url": "https://github.com/sirbrillig/phpcs-changed.git", - "reference": "aaa144eb4f14697b6b06e3dcf74081b5a02f85f6" + "reference": "284c394d7c5fd292a8876be6edb18781c28d612a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sirbrillig/phpcs-changed/zipball/aaa144eb4f14697b6b06e3dcf74081b5a02f85f6", - "reference": "aaa144eb4f14697b6b06e3dcf74081b5a02f85f6", + "url": "https://api.github.com/repos/sirbrillig/phpcs-changed/zipball/284c394d7c5fd292a8876be6edb18781c28d612a", + "reference": "284c394d7c5fd292a8876be6edb18781c28d612a", "shasum": "" }, "require": { @@ -2043,22 +2043,22 @@ "description": "Run phpcs on files, but only report warnings/errors from lines which were changed.", "support": { "issues": "https://github.com/sirbrillig/phpcs-changed/issues", - "source": "https://github.com/sirbrillig/phpcs-changed/tree/v2.11.5" + "source": "https://github.com/sirbrillig/phpcs-changed/tree/v2.11.6" }, - "time": "2024-05-23T20:01:41+00:00" + "time": "2024-12-15T17:22:37+00:00" }, { "name": "sirbrillig/phpcs-variable-analysis", - "version": "v2.11.21", + "version": "v2.11.22", "source": { "type": "git", "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", - "reference": "eb2b351927098c24860daa7484e290d3eed693be" + "reference": "ffb6f16c6033ec61ed84446b479a31d6529f0eb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/eb2b351927098c24860daa7484e290d3eed693be", - "reference": "eb2b351927098c24860daa7484e290d3eed693be", + "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/ffb6f16c6033ec61ed84446b479a31d6529f0eb7", + "reference": "ffb6f16c6033ec61ed84446b479a31d6529f0eb7", "shasum": "" }, "require": { @@ -2070,7 +2070,6 @@ "phpcsstandards/phpcsdevcs": "^1.1", "phpstan/phpstan": "^1.7", "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0 || ^10.5.32 || ^11.3.3", - "sirbrillig/phpcs-import-detection": "^1.1", "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0" }, "type": "phpcodesniffer-standard", @@ -2103,7 +2102,7 @@ "source": "https://github.com/sirbrillig/phpcs-variable-analysis", "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" }, - "time": "2024-12-02T16:37:49+00:00" + "time": "2025-01-06T17:54:24+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -2200,16 +2199,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -2273,7 +2272,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -2289,7 +2288,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2310,12 +2309,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2622,8 +2621,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -2780,12 +2779,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e859a95425fd..06a5aa4d5a108 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -700,13 +700,13 @@ importers: version: 2.3.10 '@types/node': specifier: ^20.4.2 - version: 20.17.11 + version: 20.17.12 express: specifier: 4.21.2 version: 4.21.2 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.17.11) + version: 29.7.0(@types/node@20.17.12) path-browserify: specifier: 1.0.1 version: 1.0.1 @@ -1522,7 +1522,7 @@ importers: version: 8.4.7(storybook@8.4.7) '@storybook/addon-webpack5-compiler-babel': specifier: ^3.0.3 - version: 3.0.3(webpack@5.94.0) + version: 3.0.5(webpack@5.94.0) '@storybook/blocks': specifier: 8.4.7 version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) @@ -2147,7 +2147,7 @@ importers: version: 7.26.0 '@types/node': specifier: ^20.4.2 - version: 20.17.11 + version: 20.17.12 '@types/qs': specifier: 6.9.17 version: 6.9.17 @@ -2156,7 +2156,7 @@ importers: version: 7.6.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.17.11) + version: 29.7.0(@types/node@20.17.12) typescript: specifier: 5.0.4 version: 5.0.4 @@ -2452,7 +2452,7 @@ importers: version: 1.48.2 '@types/node': specifier: ^20.4.2 - version: 20.17.11 + version: 20.17.12 '@types/react': specifier: ^18.2.28 version: 18.3.18 @@ -5118,8 +5118,8 @@ packages: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.26.3': - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.25.9': @@ -5165,8 +5165,8 @@ packages: resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} '@babel/helper-remap-async-to-generator@7.25.9': @@ -5175,8 +5175,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.9': - resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -5205,8 +5205,8 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + '@babel/parser@7.26.5': + resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} engines: {node: '>=6.0.0'} hasBin: true @@ -5367,8 +5367,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.25.9': - resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} + '@babel/plugin-transform-block-scoped-functions@7.26.5': + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5517,8 +5517,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': - resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + '@babel/plugin-transform-nullish-coalescing-operator@7.26.5': + resolution: {integrity: sha512-OHqczNm4NTQlW1ghrVY43FPoiRzbmzNVbcgVnMKZN/RQYezHUSdjACjaX50CD3B7UIAjv39+MlsrVDb3v741FA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5661,8 +5661,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.26.3': - resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==} + '@babel/plugin-transform-typescript@7.26.5': + resolution: {integrity: sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5726,12 +5726,12 @@ packages: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + '@babel/traverse@7.26.5': + resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.3': - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + '@babel/types@7.26.5': + resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -6129,6 +6129,10 @@ packages: resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.9.1': resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6145,19 +6149,19 @@ packages: resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.4': - resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@floating-ui/core@1.6.8': - resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - '@floating-ui/dom@1.6.12': - resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} @@ -6165,8 +6169,8 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.8': - resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} '@formatjs/ecma402-abstract@2.3.2': resolution: {integrity: sha512-6sE5nyvDloULiyOMbOTJEEgWL32w+VHkZQs8S02Lnn8Y/O5aQhjOEXwWzvR7SsBE/exxlSpY2EsWZgqHbtLatg==} @@ -6295,8 +6299,8 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': @@ -6402,8 +6406,8 @@ packages: '@octokit/openapi-types@20.0.0': resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} - '@octokit/openapi-types@22.2.0': - resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} + '@octokit/openapi-types@23.0.1': + resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} '@octokit/plugin-paginate-rest@11.3.1': resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} @@ -6450,8 +6454,8 @@ packages: '@octokit/types@12.6.0': resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} - '@octokit/types@13.6.2': - resolution: {integrity: sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==} + '@octokit/types@13.7.0': + resolution: {integrity: sha512-BXfRP+3P3IN6fd4uF3SniaHKOO4UXWBfkdR3vA8mIvaoO/wLjGN5qivUtW0QRitBHHMcfC41SLhNVYIZZE+wkA==} '@paulirish/trace_engine@0.0.39': resolution: {integrity: sha512-2Y/ejHX5DDi5bjfWY/0c/BLVSfQ61Jw1Hy60Hnh0hfEO632D3FVctkzT4Q/lVAdvIPR0bUaok9JDTr1pu/OziA==} @@ -6485,21 +6489,21 @@ packages: engines: {node: '>=18'} hasBin: true - '@puppeteer/browsers@2.6.0': - resolution: {integrity: sha512-jESwj3APl78YUWHf28s2EjL0OIxcvl1uLU6Ge68KQ9ZXNsekUcbdr9dCi6vEO8naXS18lWXCV56shVkPStzXSQ==} + '@puppeteer/browsers@2.6.1': + resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} engines: {node: '>=18'} hasBin: true - '@puppeteer/browsers@2.6.1': - resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} + '@puppeteer/browsers@2.7.0': + resolution: {integrity: sha512-bO61XnTuopsz9kvtfqhVbH6LTM1koxK0IlBR+yuVrM2LB7mk8+5o1w18l5zqd5cs8xlf+ntgambqRqGifMDjog==} engines: {node: '>=18'} hasBin: true - '@radix-ui/primitive@1.1.0': - resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + '@radix-ui/primitive@1.1.1': + resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} - '@radix-ui/react-compose-refs@1.1.0': - resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6516,8 +6520,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.2': - resolution: {integrity: sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==} + '@radix-ui/react-dialog@1.1.4': + resolution: {integrity: sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6529,8 +6533,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dismissable-layer@1.1.1': - resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==} + '@radix-ui/react-dismissable-layer@1.1.3': + resolution: {integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6551,8 +6555,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.1.0': - resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + '@radix-ui/react-focus-scope@1.1.1': + resolution: {integrity: sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6573,8 +6577,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-portal@1.1.2': - resolution: {integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==} + '@radix-ui/react-portal@1.1.3': + resolution: {integrity: sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6586,8 +6590,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.1': - resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==} + '@radix-ui/react-presence@1.1.2': + resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6599,8 +6603,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.0.0': - resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + '@radix-ui/react-primitive@2.0.1': + resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6612,8 +6616,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.1.0': - resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + '@radix-ui/react-slot@1.1.1': + resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6781,8 +6785,8 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/pluginutils@5.1.3': - resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -6821,40 +6825,40 @@ packages: resolution: {integrity: sha512-GFBaDA4yhlEf3wTXOVXnJVG/diuKxeqZuXcuhsAwJb+YcFR0NhgsRn3wIGuYOZZF8GBXzx9PFnb9yIuFgx5Nbw==} engines: {node: '>=14.18'} - '@sentry-internal/tracing@7.120.2': - resolution: {integrity: sha512-eo2F8cP6X+vr54Mp6vu+NoQEDz0M5O24Tz8jPY0T1CpiWdwCmHb7Sln+oLXeQ3/LlWdVQihBfKDBZfBdUfsBTg==} + '@sentry-internal/tracing@7.120.3': + resolution: {integrity: sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==} engines: {node: '>=8'} '@sentry/browser@8.33.0': resolution: {integrity: sha512-qu/g20ZskywEU8BWc4Fts1kXFFBtw1vS+XvPq7Ta9zCeRG5dlXhhYDVQ4/v4nAL/cs0o6aLCq73m109CFF0Kig==} engines: {node: '>=14.18'} - '@sentry/core@7.120.2': - resolution: {integrity: sha512-eurLBFQJC7WWWYoEna25Z9I/GJjqAmH339tv52XP8sqXV7B5hRcHDcfrsT/UGHpU316M24p3lWhj0eimtCZ0SQ==} + '@sentry/core@7.120.3': + resolution: {integrity: sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==} engines: {node: '>=8'} '@sentry/core@8.33.0': resolution: {integrity: sha512-618PQGHQLBVCpAq1s+e/rpIUaLUnj19IPUgn97rUGXLLna8ETIAoyQoG70wz4q9niw4Z4GlS5kZNrael2O3+2w==} engines: {node: '>=14.18'} - '@sentry/integrations@7.120.2': - resolution: {integrity: sha512-bMvL2fD3TGLM5YAUoQ2Qz6bYeVU8f7YRFNSjKNxK4EbvFgAU9j1FD6EKg0V0RNOJYnJjGIZYMmcWTXBbVTJL6w==} + '@sentry/integrations@7.120.3': + resolution: {integrity: sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==} engines: {node: '>=8'} - '@sentry/node@7.120.2': - resolution: {integrity: sha512-ZnW9gpIGaoU+vYZyVZca9dObfmWYiXEWIMUM/JXaFb8AhP1OXvYweNiU0Pe/gNrz4oGAogU8scJc70ar7Vj0ww==} + '@sentry/node@7.120.3': + resolution: {integrity: sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q==} engines: {node: '>=8'} - '@sentry/types@7.120.2': - resolution: {integrity: sha512-FWVoiblHQJ892GaOqdXx/5/n5XDLF28z81vJ0lCY49PMh8waz8LJ0b9RSmt9tasSDl0OQ7eUlPl1xu1jTrv1NA==} + '@sentry/types@7.120.3': + resolution: {integrity: sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==} engines: {node: '>=8'} '@sentry/types@8.33.0': resolution: {integrity: sha512-V/A+72ZdnfGtXeXIpz1kUo3LRdq3WKEYYFUR2RKpCdPh9yeOrHq6u/rmzTWx49+om0yhZN+JhVoxDzt75UoFRg==} engines: {node: '>=14.18'} - '@sentry/utils@7.120.2': - resolution: {integrity: sha512-jgnQlw11mRfQrQRAXbq4zEd+tbYwHel5eqeS/oU6EImXRjmHNtS79nB8MHvJeQu1FMCpFs1Ymrrs5FICwS6VeQ==} + '@sentry/utils@7.120.3': + resolution: {integrity: sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==} engines: {node: '>=8'} '@sentry/utils@8.33.0': @@ -6976,8 +6980,8 @@ packages: peerDependencies: storybook: ^8.4.7 - '@storybook/addon-webpack5-compiler-babel@3.0.3': - resolution: {integrity: sha512-rVQTTw+oxJltbVKaejIWSHwVKOBJs3au21f/pYXhV0aiNgNhxEa3vr79t/j0j8ox8uJtzM8XYOb7FlkvGfHlwQ==} + '@storybook/addon-webpack5-compiler-babel@3.0.5': + resolution: {integrity: sha512-9dlc5PrehEFUHqkgj8x+aKtOY9XH9Zk6WBbtpgY/JCQ7waJ2VvhyDnrgJeXfek+WYlSkJElnta6SlqP+XRG0PQ==} engines: {node: '>=18'} '@storybook/blocks@8.4.7': @@ -7044,8 +7048,8 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/csf@0.1.12': - resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} + '@storybook/csf@0.1.13': + resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -7210,68 +7214,68 @@ packages: resolution: {integrity: sha512-XWzIhLTr5WYns/cNFXpXrmFy+LFf2xp60VnNUBZCpM1CGTx47FCDuUj2DQjxirMf2L6CP2jTRELK8ef01TecFQ==} engines: {node: '>=14'} - '@swc/core-darwin-arm64@1.10.1': - resolution: {integrity: sha512-NyELPp8EsVZtxH/mEqvzSyWpfPJ1lugpTQcSlMduZLj1EASLO4sC8wt8hmL1aizRlsbjCX+r0PyL+l0xQ64/6Q==} + '@swc/core-darwin-arm64@1.10.7': + resolution: {integrity: sha512-SI0OFg987P6hcyT0Dbng3YRISPS9uhLX1dzW4qRrfqQdb0i75lPJ2YWe9CN47HBazrIA5COuTzrD2Dc0TcVsSQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.10.1': - resolution: {integrity: sha512-L4BNt1fdQ5ZZhAk5qoDfUnXRabDOXKnXBxMDJ+PWLSxOGBbWE6aJTnu4zbGjJvtot0KM46m2LPAPY8ttknqaZA==} + '@swc/core-darwin-x64@1.10.7': + resolution: {integrity: sha512-RFIAmWVicD/l3RzxgHW0R/G1ya/6nyMspE2cAeDcTbjHi0I5qgdhBWd6ieXOaqwEwiCd0Mot1g2VZrLGoBLsjQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.10.1': - resolution: {integrity: sha512-Y1u9OqCHgvVp2tYQAJ7hcU9qO5brDMIrA5R31rwWQIAKDkJKtv3IlTHF0hrbWk1wPR0ZdngkQSJZple7G+Grvw==} + '@swc/core-linux-arm-gnueabihf@1.10.7': + resolution: {integrity: sha512-QP8vz7yELWfop5mM5foN6KkLylVO7ZUgWSF2cA0owwIaziactB2hCPZY5QU690coJouk9KmdFsPWDnaCFUP8tg==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.10.1': - resolution: {integrity: sha512-tNQHO/UKdtnqjc7o04iRXng1wTUXPgVd8Y6LI4qIbHVoVPwksZydISjMcilKNLKIwOoUQAkxyJ16SlOAeADzhQ==} + '@swc/core-linux-arm64-gnu@1.10.7': + resolution: {integrity: sha512-NgUDBGQcOeLNR+EOpmUvSDIP/F7i/OVOKxst4wOvT5FTxhnkWrW+StJGKj+DcUVSK5eWOYboSXr1y+Hlywwokw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.10.1': - resolution: {integrity: sha512-x0L2Pd9weQ6n8dI1z1Isq00VHFvpBClwQJvrt3NHzmR+1wCT/gcYl1tp9P5xHh3ldM8Cn4UjWCw+7PaUgg8FcQ==} + '@swc/core-linux-arm64-musl@1.10.7': + resolution: {integrity: sha512-gp5Un3EbeSThBIh6oac5ZArV/CsSmTKj5jNuuUAuEsML3VF9vqPO+25VuxCvsRf/z3py+xOWRaN2HY/rjMeZog==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.10.1': - resolution: {integrity: sha512-yyYEwQcObV3AUsC79rSzN9z6kiWxKAVJ6Ntwq2N9YoZqSPYph+4/Am5fM1xEQYf/kb99csj0FgOelomJSobxQA==} + '@swc/core-linux-x64-gnu@1.10.7': + resolution: {integrity: sha512-k/OxLLMl/edYqbZyUNg6/bqEHTXJT15l9WGqsl/2QaIGwWGvles8YjruQYQ9d4h/thSXLT9gd8bExU2D0N+bUA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.10.1': - resolution: {integrity: sha512-tcaS43Ydd7Fk7sW5ROpaf2Kq1zR+sI5K0RM+0qYLYYurvsJruj3GhBCaiN3gkzd8m/8wkqNqtVklWaQYSDsyqA==} + '@swc/core-linux-x64-musl@1.10.7': + resolution: {integrity: sha512-XeDoURdWt/ybYmXLCEE8aSiTOzEn0o3Dx5l9hgt0IZEmTts7HgHHVeRgzGXbR4yDo0MfRuX5nE1dYpTmCz0uyA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.10.1': - resolution: {integrity: sha512-D3Qo1voA7AkbOzQ2UGuKNHfYGKL6eejN8VWOoQYtGHHQi1p5KK/Q7V1ku55oxXBsj79Ny5FRMqiRJpVGad7bjQ==} + '@swc/core-win32-arm64-msvc@1.10.7': + resolution: {integrity: sha512-nYAbi/uLS+CU0wFtBx8TquJw2uIMKBnl04LBmiVoFrsIhqSl+0MklaA9FVMGA35NcxSJfcm92Prl2W2LfSnTqQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.10.1': - resolution: {integrity: sha512-WalYdFoU3454Og+sDKHM1MrjvxUGwA2oralknXkXL8S0I/8RkWZOB++p3pLaGbTvOO++T+6znFbQdR8KRaa7DA==} + '@swc/core-win32-ia32-msvc@1.10.7': + resolution: {integrity: sha512-+aGAbsDsIxeLxw0IzyQLtvtAcI1ctlXVvVcXZMNXIXtTURM876yNrufRo4ngoXB3jnb1MLjIIjgXfFs/eZTUSw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.10.1': - resolution: {integrity: sha512-JWobfQDbTnoqaIwPKQ3DVSywihVXlQMbDuwik/dDWlj33A8oEHcjPOGs4OqcA3RHv24i+lfCQpM3Mn4FAMfacA==} + '@swc/core-win32-x64-msvc@1.10.7': + resolution: {integrity: sha512-TBf4clpDBjF/UUnkKrT0/th76/zwvudk5wwobiTFqDywMApHip5O0VpBgZ+4raY2TM8k5+ujoy7bfHb22zu17Q==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.10.1': - resolution: {integrity: sha512-rQ4dS6GAdmtzKiCRt3LFVxl37FaY1cgL9kSUTnhQ2xc3fmHOd7jdJK/V4pSZMG1ruGTd0bsi34O2R0Olg9Zo/w==} + '@swc/core@1.10.7': + resolution: {integrity: sha512-py91kjI1jV5D5W/Q+PurBdGsdU5TFbrzamP7zSCqLdMcHkKi3rQEM5jkQcZr0MXXSJTaayLxS3MWYTBIkzPDrg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -7520,8 +7524,8 @@ packages: '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - '@types/lodash@4.17.13': - resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} + '@types/lodash@4.17.14': + resolution: {integrity: sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==} '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} @@ -7547,14 +7551,14 @@ packages: '@types/node-fetch@2.6.12': resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - '@types/node@18.19.67': - resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} + '@types/node@18.19.70': + resolution: {integrity: sha512-RE+K0+KZoEpDUbGGctnGdkrLFwi1eYKTlIHNl2Um98mUkGsm1u2Ff6Ltd0e8DktTtC98uy7rSj+hO8t/QuLoVQ==} - '@types/node@20.17.11': - resolution: {integrity: sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==} + '@types/node@20.17.12': + resolution: {integrity: sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw==} - '@types/node@22.10.3': - resolution: {integrity: sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==} + '@types/node@22.10.5': + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -7633,11 +7637,8 @@ packages: '@types/wordpress__block-editor@11.5.16': resolution: {integrity: sha512-E/HU2zRiw09QvS1To0e1Noi61+klIIfQAwGK7zp+EWcuBoHHNsayXLjBmVGW6C/P2aPeHmqm2duVomPHMEFQcg==} - '@types/wordpress__blocks@12.5.16': - resolution: {integrity: sha512-WA6lsGY/DBR918wxWClG0rhg1o0qByYjfRzsXkQkKbbKb5RoCZV8ZTV5NyUHxaJUSI+PGjAX1DThQJESLWJkKQ==} - - '@types/wordpress__shortcode@2.3.6': - resolution: {integrity: sha512-H8BVov7QWyLLoxCaI9QyZVC4zTi1mFkZ+eEKiXBCFlaJ0XV8UVfQk+cAetqD5mWOeWv2d4b8uzzyn0TTQ/ep2g==} + '@types/wordpress__blocks@12.5.17': + resolution: {integrity: sha512-4IyMaHai+g4x3ItG0pVhpct9bpksUDjSgkHSbk7BYGdzYMIJrEPBJcxkIC2og2OTEdJqpSTb6vYiEFdLM/ADcQ==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -7673,8 +7674,8 @@ packages: resolution: {integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.18.0': - resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==} + '@typescript-eslint/scope-manager@8.19.1': + resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@8.17.0': @@ -7691,8 +7692,8 @@ packages: resolution: {integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.18.0': - resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==} + '@typescript-eslint/types@8.19.1': + resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.17.0': @@ -7704,8 +7705,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.18.0': - resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==} + '@typescript-eslint/typescript-estree@8.19.1': + resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' @@ -7720,8 +7721,8 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.18.0': - resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==} + '@typescript-eslint/utils@8.19.1': + resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7731,8 +7732,8 @@ packages: resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.18.0': - resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==} + '@typescript-eslint/visitor-keys@8.19.1': + resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@use-gesture/core@10.3.1': @@ -8378,8 +8379,8 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} aggregate-error@3.1.0: @@ -8521,8 +8522,8 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} array-flatten@1.1.1: @@ -8552,20 +8553,20 @@ packages: resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} ast-types-flow@0.0.8: @@ -8709,8 +8710,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.5.0: - resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} bare-fs@2.3.5: resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} @@ -8721,8 +8722,8 @@ packages: bare-path@2.1.3: resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} - bare-stream@2.4.2: - resolution: {integrity: sha512-XZ4ln/KV4KT+PXdIWTKjsLY+quqCaEtqqtgGJVPw9AoM73By03ij64YjepK0aQvHSWDb6AfAZwqKaFu68qkrdA==} + bare-stream@2.6.1: + resolution: {integrity: sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -8818,6 +8819,10 @@ packages: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + callsite@1.0.0: resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} @@ -8846,8 +8851,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001690: - resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + caniuse-lite@1.0.30001692: + resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -8910,8 +8915,8 @@ packages: resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} engines: {node: '>= 6'} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} chokidar@4.0.3: @@ -9072,10 +9077,6 @@ packages: commander@3.0.2: resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -9163,8 +9164,8 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.39.0: - resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} + core-js-compat@3.40.0: + resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} core-js@3.38.1: resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} @@ -9394,16 +9395,16 @@ packages: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} date-fns@1.30.1: @@ -9629,8 +9630,8 @@ packages: domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -9647,8 +9648,8 @@ packages: resolution: {integrity: sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==} engines: {node: '>=12'} - dunder-proto@1.0.0: - resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} earcut@2.2.4: @@ -9665,8 +9666,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.76: - resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} + electron-to-chromium@1.5.80: + resolution: {integrity: sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw==} elegant-spinner@1.0.1: resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} @@ -9713,8 +9714,8 @@ packages: endent@2.1.0: resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + enhanced-resolve@5.18.0: + resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -9753,8 +9754,8 @@ packages: error@10.4.0: resolution: {integrity: sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw==} - es-abstract@1.23.5: - resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -9768,19 +9769,19 @@ packages: es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - es-iterator-helpers@1.2.0: - resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} es-shim-unscopables@1.0.2: @@ -10155,8 +10156,8 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-parse@1.0.3: @@ -10168,15 +10169,15 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.3: - resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fast-uri@3.0.5: + resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.18.0: + resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -10242,8 +10243,8 @@ packages: resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==} engines: {node: '>=0.10.0'} - find-process@1.4.7: - resolution: {integrity: sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==} + find-process@1.4.10: + resolution: {integrity: sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==} hasBin: true find-root@1.1.0: @@ -10386,8 +10387,8 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} functions-have-names@1.2.3: @@ -10413,8 +10414,8 @@ packages: get-document@1.0.0: resolution: {integrity: sha512-8E7H2Xxibav+/rQTTtm6gFlSQwDoAQg667yheA+vWQr/amxEuswChzGo4MIbOJJoR0SMpDyhbUqWp3FpIfwD9A==} - get-intrinsic@1.2.5: - resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} get-nonce@1.0.1: @@ -10429,6 +10430,10 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -10437,8 +10442,8 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} get-tsconfig@4.8.1: @@ -10468,9 +10473,8 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} - engines: {node: '>=16 || 14 >=14.18'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true glob@11.0.0: @@ -10555,8 +10559,9 @@ packages: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -10770,8 +10775,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} internmap@2.0.3: @@ -10789,9 +10794,6 @@ packages: intl-messageformat@10.7.11: resolution: {integrity: sha512-IB2N1tmI24k2EFH3PWjU7ivJsnWyLwOWOva0jnXFa29WzB6fb0JZ5EMQGu+XN5lDtjHYFo0/UooP67zBwUg7rQ==} - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -10800,12 +10802,12 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} is-arrayish@0.2.1: @@ -10814,8 +10816,8 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + is-async-function@2.1.0: + resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} engines: {node: '>= 0.4'} is-bigint@1.1.0: @@ -10826,8 +10828,8 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.2.0: - resolution: {integrity: sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==} + is-boolean-object@1.2.1: + resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} engines: {node: '>= 0.4'} is-buffer@2.0.5: @@ -10841,16 +10843,16 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} is-docker@2.2.1: @@ -10865,8 +10867,8 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.0: - resolution: {integrity: sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} is-fullwidth-code-point@1.0.0: @@ -10885,8 +10887,8 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -10900,12 +10902,8 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.0: - resolution: {integrity: sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} is-number@7.0.0: @@ -10963,16 +10961,16 @@ packages: is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} - is-regex@1.2.0: - resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} is-stream@1.1.0: @@ -10987,16 +10985,16 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.1.0: - resolution: {integrity: sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-symbol@1.1.0: - resolution: {integrity: sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} is-typedarray@1.0.0: @@ -11006,11 +11004,12 @@ packages: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.1.0: + resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} + engines: {node: '>= 0.4'} - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} is-windows@0.2.0: @@ -11079,8 +11078,8 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} jackspeak@3.4.3: @@ -11274,8 +11273,8 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.4.1: - resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true joi@17.13.3: @@ -11326,6 +11325,11 @@ packages: engines: {node: '>=6'} hasBin: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -11583,6 +11587,10 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -11618,8 +11626,8 @@ packages: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} - magic-string@0.30.14: - resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -11658,11 +11666,15 @@ packages: math-expression-evaluator@1.4.0: resolution: {integrity: sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + md5-es@1.8.2: resolution: {integrity: sha512-LKq5jmKMhJYhsBFUh2w+J3C4bMiC5uQie/UYJ429UATmMnFr6iANO2uQq5HXAZSIupGp0WO2mH3sNfxR4XO40Q==} - mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} @@ -12038,8 +12050,8 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} object.entries@1.1.8: @@ -12054,8 +12066,8 @@ packages: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} objectorarray@1.0.5: @@ -12110,6 +12122,10 @@ packages: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-debounce@4.0.0: resolution: {integrity: sha512-4Ispi9I9qYGO4lueiLDhe4q4iK5ERK8reLsuzH6BPaXn53EGaua8H66PXIFGrW897hwjXp+pVLrm/DLxN0RF0A==} engines: {node: '>=12'} @@ -12492,8 +12508,8 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-modules-local-by-default@4.1.0: - resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==} + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -12647,8 +12663,8 @@ packages: preact@10.22.1: resolution: {integrity: sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==} - preact@10.25.1: - resolution: {integrity: sha512-frxeZV2vhQSohQwJ7FvlqC40ze89+8friponWUFeVEkaCfhC6Eu4V0iND5C9CXz8JLndV07QRDeXzH1+Anz5Og==} + preact@10.25.4: + resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -12884,22 +12900,22 @@ packages: react-native: optional: true - react-remove-scroll-bar@2.3.6: - resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} 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 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - react-remove-scroll@2.6.0: - resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==} + react-remove-scroll@2.6.2: + resolution: {integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==} 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 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -12936,12 +12952,12 @@ packages: '@babel/runtime': ^7 react: ^16 || ^17 || ^18 - react-style-singleton@2.2.1: - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} 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 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -12974,9 +12990,9 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} - engines: {node: '>= 14.16.0'} + readdirp@4.1.1: + resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} + engines: {node: '>= 14.18.0'} recast@0.23.9: resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} @@ -13020,8 +13036,8 @@ packages: redux@5.0.1: resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} - reflect.getprototypeof@1.0.8: - resolution: {integrity: sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} refx@3.1.1: @@ -13043,8 +13059,8 @@ packages: regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} regexpu-core@6.2.0: @@ -13140,8 +13156,9 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true resolve@2.0.0-next.5: @@ -13234,8 +13251,8 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} safe-buffer@5.2.1: @@ -13244,8 +13261,12 @@ packages: safe-identifier@0.4.2: resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} safe-stable-stringify@2.5.0: @@ -13434,9 +13455,9 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} seed-random@2.2.0: resolution: {integrity: sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==} @@ -13482,6 +13503,10 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -13508,8 +13533,20 @@ packages: resolution: {integrity: sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==} hasBin: true - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} signal-exit@3.0.7: @@ -13666,8 +13703,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} storybook-addon-mock@5.0.0: @@ -13690,8 +13727,8 @@ packages: prettier: optional: true - streamx@2.21.0: - resolution: {integrity: sha512-Qz6MsDZXJ6ur9u+b+4xCG18TluU7PGlRfXVAAjNiGsFrBUt/ioyLkxbFaKJygoPs+/kW4VyBj0bSj89Qu0IGyg==} + streamx@2.21.1: + resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==} string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} @@ -13728,19 +13765,20 @@ packages: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} string.prototype.repeat@1.0.0: resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} @@ -13974,14 +14012,14 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar-fs@3.0.6: - resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} + tar-fs@3.0.7: + resolution: {integrity: sha512-2sAfoF/zw/2n8goUGnGRZTWTD4INtnScPZvyYBI6BDlJ3wNR5o1dw03EfBvuhG6GBLvC4J+C7j7W+64aZ0ogQA==} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -14021,8 +14059,8 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-decoder@1.2.2: - resolution: {integrity: sha512-/MDslo7ZyWTA2vnk1j7XoDVfXsGk3tp+zFEJHJGm0UjIlQifonVFwlVbQDFh8KJzTBnT8ie115TYqir6bclddA==} + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -14112,6 +14150,12 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -14198,24 +14242,24 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.31.0: - resolution: {integrity: sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==} + type-fest@4.32.0: + resolution: {integrity: sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==} engines: {node: '>=16'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.3: - resolution: {integrity: sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==} + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} typed-array-length@1.0.7: @@ -14260,8 +14304,9 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} @@ -14329,12 +14374,12 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin@1.16.0: - resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -14371,12 +14416,12 @@ packages: urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} - use-callback-ref@1.3.2: - resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} 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 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -14392,12 +14437,12 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - use-sidecar@1.1.2: - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -14587,15 +14632,15 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - when-exit@2.1.3: - resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} - which-boxed-primitive@1.1.0: - resolution: {integrity: sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} - which-builtin-type@1.2.0: - resolution: {integrity: sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==} + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} engines: {node: '>= 0.4'} which-collection@1.0.2: @@ -14605,8 +14650,8 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.16: - resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} engines: {node: '>= 0.4'} which@1.3.1: @@ -14794,8 +14839,8 @@ packages: resolution: {integrity: sha512-FemWD5/UqNm8ffj8oZIbjWXIF2KE0mZssggYpdaQkWDDgXBQ/35PNIxEuz6/YLn9o0kOxDBNJe8x8k9ljD7k/g==} engines: {node: '>=18.16.0'} - yjs@13.6.20: - resolution: {integrity: sha512-Z2YZI+SYqK7XdWlloI3lhMiKnCdFCVC4PchpdO+mCYwtiTwncjUbnRK9R1JmkNfdmHyDXuWN3ibJAt0wsqTbLQ==} + yjs@13.6.22: + resolution: {integrity: sha512-+mJxdbmitioqqsql1Zro4dqT3t9HgmW4dxlPtkcsKFJhXSAMyk3lwawhQFxZjj2upJXzhrTUDsaDkZgJWnv3NA==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} yocto-queue@0.1.0: @@ -14839,7 +14884,7 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@ariakit/core@0.4.14': {} @@ -14847,7 +14892,7 @@ snapshots: '@ariakit/react-core@0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/core': 0.4.14 - '@floating-ui/dom': 1.6.12 + '@floating-ui/dom': 1.6.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.4.0(react@18.3.1) @@ -14976,14 +15021,14 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 + '@babel/generator': 7.26.5 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/parser': 7.26.5 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -15000,17 +15045,17 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.26.3': + '@babel/generator@7.26.5': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.5 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 + jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@babel/helper-compilation-targets@7.25.9': dependencies: @@ -15026,9 +15071,9 @@ snapshots: '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.5 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -15044,24 +15089,24 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 debug: 4.4.0 lodash.debounce: 4.0.8 - resolve: 1.22.8 + resolve: 1.22.10 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 transitivePeerDependencies: - supports-color @@ -15070,38 +15115,38 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 - '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-plugin-utils@7.26.5': {} '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 transitivePeerDependencies: - supports-color @@ -15114,42 +15159,42 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 transitivePeerDependencies: - supports-color '@babel/helpers@7.26.0': dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 - '@babel/parser@7.26.3': + '@babel/parser@7.26.5': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: @@ -15158,8 +15203,8 @@ snapshots: '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color @@ -15170,110 +15215,110 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color @@ -15281,26 +15326,26 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -15308,7 +15353,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -15317,9 +15362,9 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.4 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) + '@babel/traverse': 7.26.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -15327,50 +15372,50 @@ snapshots: '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/template': 7.25.9 '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -15379,36 +15424,36 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -15416,7 +15461,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -15424,9 +15469,9 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color @@ -15434,7 +15479,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -15442,47 +15487,47 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.26.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) transitivePeerDependencies: - supports-color '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -15490,13 +15535,13 @@ snapshots: '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -15505,24 +15550,24 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)': dependencies: @@ -15536,9 +15581,9 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 transitivePeerDependencies: - supports-color @@ -15546,30 +15591,30 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 regenerator-transform: 0.15.2 '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) @@ -15580,12 +15625,12 @@ snapshots: '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -15593,24 +15638,24 @@ snapshots: '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-typescript@7.26.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: @@ -15619,32 +15664,32 @@ snapshots: '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/preset-env@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/compat-data': 7.26.3 '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) @@ -15658,7 +15703,7 @@ snapshots: '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.0) '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) @@ -15683,7 +15728,7 @@ snapshots: '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.5(@babel/core@7.26.0) '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) @@ -15709,7 +15754,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.39.0 + core-js-compat: 3.40.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -15717,14 +15762,14 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.3 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.26.5 esutils: 2.0.3 '@babel/preset-react@7.26.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) @@ -15736,11 +15781,11 @@ snapshots: '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.26.5(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -15755,22 +15800,22 @@ snapshots: '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 - '@babel/traverse@7.26.4': + '@babel/traverse@7.26.5': dependencies: '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.5 '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.3': + '@babel/types@7.26.5': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 @@ -16087,6 +16132,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/core@0.9.1': dependencies: '@types/json-schema': 7.0.15 @@ -16109,28 +16158,29 @@ snapshots: '@eslint/object-schema@2.1.5': {} - '@eslint/plugin-kit@0.2.4': + '@eslint/plugin-kit@0.2.5': dependencies: + '@eslint/core': 0.10.0 levn: 0.4.1 '@fastify/busboy@2.1.1': {} - '@floating-ui/core@1.6.8': + '@floating-ui/core@1.6.9': dependencies: - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.12': + '@floating-ui/dom@1.6.13': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.12 + '@floating-ui/dom': 1.6.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.9': {} '@formatjs/ecma402-abstract@2.3.2': dependencies: @@ -16199,7 +16249,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -16212,14 +16262,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.17.11) + jest-config: 29.7.0(@types/node@20.17.12) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -16248,7 +16298,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -16266,7 +16316,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.17.11 + '@types/node': 20.17.12 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -16297,7 +16347,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.17.11 + '@types/node': 20.17.12 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -16367,11 +16417,11 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 @@ -16383,7 +16433,7 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/sourcemap-codec@1.5.0': {} @@ -16442,7 +16492,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.18.0 '@nolyfill/is-core-module@1.0.39': {} @@ -16456,29 +16506,29 @@ snapshots: '@octokit/graphql': 7.1.0 '@octokit/request': 8.4.0 '@octokit/request-error': 5.1.0 - '@octokit/types': 13.6.2 + '@octokit/types': 13.7.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 '@octokit/endpoint@9.0.5': dependencies: - '@octokit/types': 13.6.2 + '@octokit/types': 13.7.0 universal-user-agent: 6.0.1 '@octokit/graphql@7.1.0': dependencies: '@octokit/request': 8.4.0 - '@octokit/types': 13.6.2 + '@octokit/types': 13.7.0 universal-user-agent: 6.0.1 '@octokit/openapi-types@20.0.0': {} - '@octokit/openapi-types@22.2.0': {} + '@octokit/openapi-types@23.0.1': {} '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': dependencies: '@octokit/core': 5.2.0 - '@octokit/types': 13.6.2 + '@octokit/types': 13.7.0 '@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.2.0)': dependencies: @@ -16497,11 +16547,11 @@ snapshots: '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)': dependencies: '@octokit/core': 5.2.0 - '@octokit/types': 13.6.2 + '@octokit/types': 13.7.0 '@octokit/request-error@5.1.0': dependencies: - '@octokit/types': 13.6.2 + '@octokit/types': 13.7.0 deprecation: 2.3.1 once: 1.4.0 @@ -16509,7 +16559,7 @@ snapshots: dependencies: '@octokit/endpoint': 9.0.5 '@octokit/request-error': 5.1.0 - '@octokit/types': 13.6.2 + '@octokit/types': 13.7.0 universal-user-agent: 6.0.1 '@octokit/rest@20.1.1': @@ -16523,9 +16573,9 @@ snapshots: dependencies: '@octokit/openapi-types': 20.0.0 - '@octokit/types@13.6.2': + '@octokit/types@13.7.0': dependencies: - '@octokit/openapi-types': 22.2.0 + '@octokit/openapi-types': 23.0.1 '@paulirish/trace_engine@0.0.39': dependencies: @@ -16549,10 +16599,10 @@ snapshots: '@preact/signals-core': 1.8.0 preact: 10.22.1 - '@preact/signals@1.3.1(preact@10.25.1)': + '@preact/signals@1.3.1(preact@10.25.4)': dependencies: '@preact/signals-core': 1.8.0 - preact: 10.25.1 + preact: 10.25.4 '@puppeteer/browsers@2.3.0': dependencies: @@ -16561,47 +16611,47 @@ snapshots: progress: 2.0.3 proxy-agent: 6.5.0 semver: 7.6.3 - tar-fs: 3.0.6 + tar-fs: 3.0.7 unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@puppeteer/browsers@2.6.0': + '@puppeteer/browsers@2.6.1': dependencies: debug: 4.4.0 extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 semver: 7.6.3 - tar-fs: 3.0.6 + tar-fs: 3.0.7 unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@puppeteer/browsers@2.6.1': + '@puppeteer/browsers@2.7.0': dependencies: debug: 4.4.0 extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 semver: 7.6.3 - tar-fs: 3.0.6 + tar-fs: 3.0.7 unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@radix-ui/primitive@1.1.0': {} + '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-compose-refs@1.1.0(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.1(react@18.3.1)': dependencies: react: 18.3.1 @@ -16615,73 +16665,73 @@ snapshots: dependencies: react: 18.3.1 - '@radix-ui/react-dialog@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.0(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll: 2.6.2(@types/react@18.3.18)(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-dialog@1.1.2(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.4(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-portal': 1.1.2(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-portal': 1.1.3(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.0(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll: 2.6.2(@types/react@18.3.18)(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-dialog@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(react@18.3.1) '@radix-ui/react-context': 1.1.1(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(react@18.3.1) - '@radix-ui/react-portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(react@18.3.1) + '@radix-ui/react-portal': 1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.0(react@18.3.1) + react-remove-scroll: 2.6.2(react@18.3.1) - '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 @@ -16690,11 +16740,11 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-dismissable-layer@1.1.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.3(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 @@ -16702,11 +16752,11 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-dismissable-layer@1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.1.0(react@18.3.1) react: 18.3.1 @@ -16722,10 +16772,10 @@ snapshots: dependencies: react: 18.3.1 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16733,20 +16783,20 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-focus-scope@1.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-focus-scope@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16763,9 +16813,9 @@ snapshots: '@radix-ui/react-use-layout-effect': 1.1.0(react@18.3.1) react: 18.3.1 - '@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16773,25 +16823,25 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-portal@1.1.2(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.3(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16799,55 +16849,55 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-presence@1.1.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-presence@1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-primitive@2.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-primitive@2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-slot@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-slot@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-slot@1.1.0(react@18.3.1)': + '@radix-ui/react-slot@1.1.1(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(react@18.3.1) react: 18.3.1 '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': @@ -16957,7 +17007,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 - '@rollup/pluginutils': 5.1.3(rollup@3.29.5) + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) optionalDependencies: rollup: 3.29.5 transitivePeerDependencies: @@ -16965,34 +17015,34 @@ snapshots: '@rollup/plugin-commonjs@26.0.1(rollup@3.29.5)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@3.29.5) + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) commondir: 1.0.1 estree-walker: 2.0.2 - glob: 10.4.1 + glob: 10.4.5 is-reference: 1.2.1 - magic-string: 0.30.14 + magic-string: 0.30.17 optionalDependencies: rollup: 3.29.5 '@rollup/plugin-json@6.1.0(rollup@3.29.5)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@3.29.5) + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) optionalDependencies: rollup: 3.29.5 '@rollup/plugin-node-resolve@15.3.0(rollup@3.29.5)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@3.29.5) + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.8 + resolve: 1.22.10 optionalDependencies: rollup: 3.29.5 '@rollup/plugin-replace@5.0.2(rollup@3.29.5)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@3.29.5) + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) magic-string: 0.27.0 optionalDependencies: rollup: 3.29.5 @@ -17007,8 +17057,8 @@ snapshots: '@rollup/plugin-typescript@12.1.0(rollup@3.29.5)(tslib@2.5.0)(typescript@5.0.4)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@3.29.5) - resolve: 1.22.8 + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) + resolve: 1.22.10 typescript: 5.0.4 optionalDependencies: rollup: 3.29.5 @@ -17019,7 +17069,7 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.3(rollup@3.29.5)': + '@rollup/pluginutils@5.1.4(rollup@3.29.5)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 @@ -17063,11 +17113,11 @@ snapshots: '@sentry/types': 8.33.0 '@sentry/utils': 8.33.0 - '@sentry-internal/tracing@7.120.2': + '@sentry-internal/tracing@7.120.3': dependencies: - '@sentry/core': 7.120.2 - '@sentry/types': 7.120.2 - '@sentry/utils': 7.120.2 + '@sentry/core': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 '@sentry/browser@8.33.0': dependencies: @@ -17079,38 +17129,38 @@ snapshots: '@sentry/types': 8.33.0 '@sentry/utils': 8.33.0 - '@sentry/core@7.120.2': + '@sentry/core@7.120.3': dependencies: - '@sentry/types': 7.120.2 - '@sentry/utils': 7.120.2 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 '@sentry/core@8.33.0': dependencies: '@sentry/types': 8.33.0 '@sentry/utils': 8.33.0 - '@sentry/integrations@7.120.2': + '@sentry/integrations@7.120.3': dependencies: - '@sentry/core': 7.120.2 - '@sentry/types': 7.120.2 - '@sentry/utils': 7.120.2 + '@sentry/core': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 localforage: 1.10.0 - '@sentry/node@7.120.2': + '@sentry/node@7.120.3': dependencies: - '@sentry-internal/tracing': 7.120.2 - '@sentry/core': 7.120.2 - '@sentry/integrations': 7.120.2 - '@sentry/types': 7.120.2 - '@sentry/utils': 7.120.2 + '@sentry-internal/tracing': 7.120.3 + '@sentry/core': 7.120.3 + '@sentry/integrations': 7.120.3 + '@sentry/types': 7.120.3 + '@sentry/utils': 7.120.3 - '@sentry/types@7.120.2': {} + '@sentry/types@7.120.3': {} '@sentry/types@8.33.0': {} - '@sentry/utils@7.120.2': + '@sentry/utils@7.120.3': dependencies: - '@sentry/types': 7.120.2 + '@sentry/types': 7.120.3 '@sentry/utils@8.33.0': dependencies: @@ -17165,7 +17215,7 @@ snapshots: '@slack/logger@4.0.0': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@slack/types@2.14.0': {} @@ -17173,7 +17223,7 @@ snapshots: dependencies: '@slack/logger': 4.0.0 '@slack/types': 2.14.0 - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/retry': 0.12.0 axios: 1.7.4 eventemitter3: 5.0.1 @@ -17190,7 +17240,7 @@ snapshots: dependencies: '@slack/logger': 4.0.0 '@slack/types': 2.14.0 - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/retry': 0.12.0 axios: 1.7.4 eventemitter3: 5.0.1 @@ -17294,7 +17344,7 @@ snapshots: memoizerific: 1.11.3 storybook: 8.4.7 - '@storybook/addon-webpack5-compiler-babel@3.0.3(webpack@5.94.0)': + '@storybook/addon-webpack5-compiler-babel@3.0.5(webpack@5.94.0)': dependencies: '@babel/core': 7.26.0 babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.94.0) @@ -17304,7 +17354,7 @@ snapshots: '@storybook/blocks@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)': dependencies: - '@storybook/csf': 0.1.12 + '@storybook/csf': 0.1.13 '@storybook/icons': 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) storybook: 8.4.7 ts-dedent: 2.2.0 @@ -17315,17 +17365,17 @@ snapshots: '@storybook/builder-webpack5@8.4.7(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7) - '@types/node': 22.10.3 + '@types/node': 22.10.5 '@types/semver': 7.5.8 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.1 constants-browserify: 1.0.0 css-loader: 6.11.0(webpack@5.94.0) - es-module-lexer: 1.5.4 + es-module-lexer: 1.6.0 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.0.4)(webpack@5.94.0) html-webpack-plugin: 5.6.3(webpack@5.94.0) - magic-string: 0.30.14 + magic-string: 0.30.17 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 @@ -17367,13 +17417,13 @@ snapshots: '@storybook/core-webpack@8.4.7(storybook@8.4.7)': dependencies: - '@types/node': 22.10.3 + '@types/node': 22.10.5 storybook: 8.4.7 ts-dedent: 2.2.0 '@storybook/core@8.4.7': dependencies: - '@storybook/csf': 0.1.12 + '@storybook/csf': 0.1.13 better-opn: 3.0.2 browser-assert: 1.2.1 esbuild: 0.24.2 @@ -17392,13 +17442,13 @@ snapshots: '@storybook/csf-plugin@8.4.7(storybook@8.4.7)': dependencies: storybook: 8.4.7 - unplugin: 1.16.0 + unplugin: 1.16.1 '@storybook/csf-tools@8.4.7(storybook@8.4.7)': dependencies: storybook: 8.4.7 - '@storybook/csf@0.1.12': + '@storybook/csf@0.1.13': dependencies: type-fest: 2.19.0 @@ -17418,14 +17468,14 @@ snapshots: '@storybook/core-webpack': 8.4.7(storybook@8.4.7) '@storybook/react': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.0.4)(webpack@5.94.0) - '@types/node': 22.10.3 + '@types/node': 22.10.5 '@types/semver': 7.5.8 find-up: 5.0.0 - magic-string: 0.30.14 + magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.0 react-dom: 18.3.1(react@18.3.1) - resolve: 1.22.8 + resolve: 1.22.10 semver: 7.6.3 storybook: 8.4.7 tsconfig-paths: 4.2.0 @@ -17469,7 +17519,7 @@ snapshots: '@storybook/builder-webpack5': 8.4.7(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1) '@storybook/preset-react-webpack': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1) '@storybook/react': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4) - '@types/node': 22.10.3 + '@types/node': 22.10.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) storybook: 8.4.7 @@ -17514,7 +17564,7 @@ snapshots: '@storybook/source-loader@8.4.7(storybook@8.4.7)': dependencies: - '@storybook/csf': 0.1.12 + '@storybook/csf': 0.1.13 es-toolkit: 1.31.0 estraverse: 5.3.0 prettier: 3.4.2 @@ -17523,16 +17573,16 @@ snapshots: '@storybook/test-runner@0.19.1(storybook@8.4.7)': dependencies: '@babel/core': 7.26.0 - '@babel/generator': 7.26.3 + '@babel/generator': 7.26.5 '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@jest/types': 29.6.3 '@storybook/core-common': 8.4.7(storybook@8.4.7) - '@storybook/csf': 0.1.12 + '@storybook/csf': 0.1.13 '@storybook/csf-tools': 8.4.7(storybook@8.4.7) '@storybook/preview-api': 8.4.7(storybook@8.4.7) - '@swc/core': 1.10.1 - '@swc/jest': 0.2.37(@swc/core@1.10.1) + '@swc/core': 1.10.7 + '@swc/jest': 0.2.37(@swc/core@1.10.7) expect-playwright: 0.8.0 jest: 29.7.0 jest-circus: 29.7.0 @@ -17614,7 +17664,7 @@ snapshots: '@svgr/hast-util-to-babel-ast@7.0.0': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 entities: 4.5.0 '@svgr/plugin-jsx@7.0.0': @@ -17649,58 +17699,58 @@ snapshots: - supports-color - typescript - '@swc/core-darwin-arm64@1.10.1': + '@swc/core-darwin-arm64@1.10.7': optional: true - '@swc/core-darwin-x64@1.10.1': + '@swc/core-darwin-x64@1.10.7': optional: true - '@swc/core-linux-arm-gnueabihf@1.10.1': + '@swc/core-linux-arm-gnueabihf@1.10.7': optional: true - '@swc/core-linux-arm64-gnu@1.10.1': + '@swc/core-linux-arm64-gnu@1.10.7': optional: true - '@swc/core-linux-arm64-musl@1.10.1': + '@swc/core-linux-arm64-musl@1.10.7': optional: true - '@swc/core-linux-x64-gnu@1.10.1': + '@swc/core-linux-x64-gnu@1.10.7': optional: true - '@swc/core-linux-x64-musl@1.10.1': + '@swc/core-linux-x64-musl@1.10.7': optional: true - '@swc/core-win32-arm64-msvc@1.10.1': + '@swc/core-win32-arm64-msvc@1.10.7': optional: true - '@swc/core-win32-ia32-msvc@1.10.1': + '@swc/core-win32-ia32-msvc@1.10.7': optional: true - '@swc/core-win32-x64-msvc@1.10.1': + '@swc/core-win32-x64-msvc@1.10.7': optional: true - '@swc/core@1.10.1': + '@swc/core@1.10.7': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.17 optionalDependencies: - '@swc/core-darwin-arm64': 1.10.1 - '@swc/core-darwin-x64': 1.10.1 - '@swc/core-linux-arm-gnueabihf': 1.10.1 - '@swc/core-linux-arm64-gnu': 1.10.1 - '@swc/core-linux-arm64-musl': 1.10.1 - '@swc/core-linux-x64-gnu': 1.10.1 - '@swc/core-linux-x64-musl': 1.10.1 - '@swc/core-win32-arm64-msvc': 1.10.1 - '@swc/core-win32-ia32-msvc': 1.10.1 - '@swc/core-win32-x64-msvc': 1.10.1 + '@swc/core-darwin-arm64': 1.10.7 + '@swc/core-darwin-x64': 1.10.7 + '@swc/core-linux-arm-gnueabihf': 1.10.7 + '@swc/core-linux-arm64-gnu': 1.10.7 + '@swc/core-linux-arm64-musl': 1.10.7 + '@swc/core-linux-x64-gnu': 1.10.7 + '@swc/core-linux-x64-musl': 1.10.7 + '@swc/core-win32-arm64-msvc': 1.10.7 + '@swc/core-win32-ia32-msvc': 1.10.7 + '@swc/core-win32-x64-msvc': 1.10.7 '@swc/counter@0.1.3': {} - '@swc/jest@0.2.37(@swc/core@1.10.1)': + '@swc/jest@0.2.37(@swc/core@1.10.7)': dependencies: '@jest/create-cache-key-function': 29.7.0 - '@swc/core': 1.10.1 + '@swc/core': 1.10.7 '@swc/counter': 0.1.3 jsonc-parser: 3.3.1 @@ -17830,28 +17880,28 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@types/clean-css@4.2.11': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 source-map: 0.6.1 '@types/css-tree@2.3.10': {} @@ -17901,11 +17951,11 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/gradient-parser@0.1.3': {} @@ -17941,7 +17991,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -17953,9 +18003,9 @@ snapshots: '@types/lodash-es@4.17.12': dependencies: - '@types/lodash': 4.17.13 + '@types/lodash': 4.17.14 - '@types/lodash@4.17.13': {} + '@types/lodash@4.17.14': {} '@types/markdown-it@14.1.2': dependencies: @@ -17978,18 +18028,18 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 form-data: 4.0.1 - '@types/node@18.19.67': + '@types/node@18.19.70': dependencies: undici-types: 5.26.5 - '@types/node@20.17.11': + '@types/node@20.17.12': dependencies: undici-types: 6.19.8 - '@types/node@22.10.3': + '@types/node@22.10.5': dependencies: undici-types: 6.20.0 @@ -18038,7 +18088,7 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/seed-random@2.2.4': {} @@ -18046,7 +18096,7 @@ snapshots: '@types/simple-peer@9.11.8': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/sizzle@2.3.9': {} @@ -18064,12 +18114,12 @@ snapshots: '@types/wait-on@5.3.4': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 '@types/wordpress__block-editor@11.5.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@types/react': 18.3.18 - '@types/wordpress__blocks': 12.5.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/wordpress__blocks': 12.5.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': 10.14.0(react@18.3.1) '@wordpress/element': 6.14.0 @@ -18081,21 +18131,19 @@ snapshots: - react-dom - supports-color - '@types/wordpress__blocks@12.5.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@types/wordpress__blocks@12.5.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@types/react': 18.3.18 - '@types/wordpress__shortcode': 2.3.6 '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': 10.14.0(react@18.3.1) '@wordpress/element': 6.14.0 + '@wordpress/shortcode': 4.13.0 transitivePeerDependencies: - '@emotion/is-prop-valid' - react - react-dom - supports-color - '@types/wordpress__shortcode@2.3.6': {} - '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': @@ -18104,7 +18152,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 optional: true '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.0.4))(eslint@9.16.0)(typescript@5.0.4)': @@ -18143,10 +18191,10 @@ snapshots: '@typescript-eslint/types': 8.17.0 '@typescript-eslint/visitor-keys': 8.17.0 - '@typescript-eslint/scope-manager@8.18.0': + '@typescript-eslint/scope-manager@8.19.1': dependencies: - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/visitor-keys': 8.18.0 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 '@typescript-eslint/type-utils@8.17.0(eslint@9.16.0)(typescript@5.0.4)': dependencies: @@ -18162,14 +18210,14 @@ snapshots: '@typescript-eslint/types@8.17.0': {} - '@typescript-eslint/types@8.18.0': {} + '@typescript-eslint/types@8.19.1': {} '@typescript-eslint/typescript-estree@8.17.0(typescript@5.0.4)': dependencies: '@typescript-eslint/types': 8.17.0 '@typescript-eslint/visitor-keys': 8.17.0 debug: 4.4.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 @@ -18179,16 +18227,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.18.0(typescript@5.0.4)': + '@typescript-eslint/typescript-estree@8.19.1(typescript@5.0.4)': dependencies: - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/visitor-keys': 8.18.0 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.0.4) + ts-api-utils: 2.0.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -18205,12 +18253,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.18.0(eslint@9.16.0)(typescript@5.0.4)': + '@typescript-eslint/utils@8.19.1(eslint@9.16.0)(typescript@5.0.4)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) - '@typescript-eslint/scope-manager': 8.18.0 - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.0.4) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.0.4) eslint: 9.16.0 typescript: 5.0.4 transitivePeerDependencies: @@ -18221,9 +18269,9 @@ snapshots: '@typescript-eslint/types': 8.17.0 eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.18.0': + '@typescript-eslint/visitor-keys@8.19.1': dependencies: - '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/types': 8.19.1 eslint-visitor-keys: 4.2.0 '@use-gesture/core@10.3.1': {} @@ -18340,7 +18388,7 @@ snapshots: '@visx/responsive@3.12.0(react@18.3.1)': dependencies: - '@types/lodash': 4.17.13 + '@types/lodash': 4.17.14 '@types/react': 18.3.18 lodash: 4.17.21 prop-types: 15.8.1 @@ -18354,7 +18402,7 @@ snapshots: dependencies: '@types/d3-path': 1.0.11 '@types/d3-shape': 1.3.12 - '@types/lodash': 4.17.13 + '@types/lodash': 4.17.14 '@types/react': 18.3.18 '@visx/curve': 3.12.0 '@visx/group': 3.12.0(react@18.3.1) @@ -18368,7 +18416,7 @@ snapshots: '@visx/text@3.12.0(react@18.3.1)': dependencies: - '@types/lodash': 4.17.13 + '@types/lodash': 4.17.14 '@types/react': 18.3.18 classnames: 2.5.1 lodash: 4.17.21 @@ -18420,7 +18468,7 @@ snapshots: '@visx/xychart@3.12.0(@react-spring/web@9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@types/lodash': 4.17.13 + '@types/lodash': 4.17.14 '@types/react': 18.3.18 '@visx/annotation': 3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@visx/axis': 3.12.0(react@18.3.1) @@ -19882,8 +19930,8 @@ snapshots: '@wordpress/interactivity@6.13.0': dependencies: - '@preact/signals': 1.3.1(preact@10.25.1) - preact: 10.25.1 + '@preact/signals': 1.3.1(preact@10.25.4) + preact: 10.25.4 '@wordpress/interface@8.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -20314,10 +20362,10 @@ snapshots: import-locals: 2.0.0 lib0: 0.2.99 simple-peer: 9.11.1 - y-indexeddb: 9.0.12(yjs@13.6.20) - y-protocols: 1.0.6(yjs@13.6.20) - y-webrtc: 10.2.6(yjs@13.6.20) - yjs: 13.6.20 + y-indexeddb: 9.0.12(yjs@13.6.22) + y-protocols: 1.0.6(yjs@13.6.22) + y-webrtc: 10.2.6(yjs@13.6.22) + yjs: 13.6.22 transitivePeerDependencies: - bufferutil - supports-color @@ -20445,7 +20493,7 @@ snapshots: agent-base@7.1.3: {} - agentkeepalive@4.5.0: + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 @@ -20477,7 +20525,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.3 + fast-uri: 3.0.5 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -20562,10 +20610,10 @@ snapshots: aria-query@5.3.2: {} - array-buffer-byte-length@1.0.1: + array-buffer-byte-length@1.0.2: dependencies: - call-bind: 1.0.8 - is-array-buffer: 3.0.4 + call-bound: 1.0.3 + is-array-buffer: 3.0.5 array-flatten@1.1.1: {} @@ -20573,10 +20621,10 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.5 - is-string: 1.1.0 + get-intrinsic: 1.2.7 + is-string: 1.1.1 array-union@1.0.2: dependencies: @@ -20590,7 +20638,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 @@ -20599,43 +20647,42 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.2: + array.prototype.flat@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 - array.prototype.flatmap@1.3.2: + array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - arraybuffer.prototype.slice@1.0.3: + arraybuffer.prototype.slice@1.0.4: dependencies: - array-buffer-byte-length: 1.0.1 + array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.5 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 ast-types-flow@0.0.8: {} @@ -20654,12 +20701,12 @@ snapshots: atomically@2.0.3: dependencies: stubborn-fs: 1.2.5 - when-exit: 2.1.3 + when-exit: 2.1.4 autoprefixer@10.4.20(postcss@8.4.47): dependencies: browserslist: 4.24.3 - caniuse-lite: 1.0.30001690 + caniuse-lite: 1.0.30001692 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -20737,14 +20784,14 @@ snapshots: dependencies: '@babel/core': 7.26.0 find-cache-dir: 3.3.2 - schema-utils: 4.2.0 + schema-utils: 4.3.0 webpack: 5.94.0(webpack-cli@5.1.4) babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.94.0): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 - schema-utils: 4.2.0 + schema-utils: 4.3.0 webpack: 5.94.0(webpack-cli@4.9.1) babel-plugin-inline-json-import@0.3.2: @@ -20753,7 +20800,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -20764,7 +20811,7 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 @@ -20772,7 +20819,7 @@ snapshots: dependencies: '@babel/runtime': 7.26.0 cosmiconfig: 7.1.0 - resolve: 1.22.8 + resolve: 1.22.10 babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): dependencies: @@ -20787,7 +20834,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.39.0 + core-js-compat: 3.40.0 transitivePeerDependencies: - supports-color @@ -20844,14 +20891,14 @@ snapshots: balanced-match@1.0.2: {} - bare-events@2.5.0: + bare-events@2.5.4: optional: true bare-fs@2.3.5: dependencies: - bare-events: 2.5.0 + bare-events: 2.5.4 bare-path: 2.1.3 - bare-stream: 2.4.2 + bare-stream: 2.6.1 optional: true bare-os@2.4.4: @@ -20862,9 +20909,9 @@ snapshots: bare-os: 2.4.4 optional: true - bare-stream@2.4.2: + bare-stream@2.6.1: dependencies: - streamx: 2.21.0 + streamx: 2.21.1 optional: true base64-js@1.5.1: {} @@ -20921,10 +20968,10 @@ snapshots: browserslist@4.24.3: dependencies: - caniuse-lite: 1.0.30001690 - electron-to-chromium: 1.5.76 + caniuse-lite: 1.0.30001692 + electron-to-chromium: 1.5.80 node-releases: 2.0.19 - update-browserslist-db: 1.1.1(browserslist@4.24.3) + update-browserslist-db: 1.1.2(browserslist@4.24.3) bs-logger@0.2.6: dependencies: @@ -20972,9 +21019,14 @@ snapshots: dependencies: call-bind-apply-helpers: 1.0.1 es-define-property: 1.0.1 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.7 set-function-length: 1.2.2 + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + callsite@1.0.0: {} callsites@3.1.0: {} @@ -20995,11 +21047,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.24.3 - caniuse-lite: 1.0.30001690 + caniuse-lite: 1.0.30001692 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001690: {} + caniuse-lite@1.0.30001692: {} capital-case@1.0.4: dependencies: @@ -21075,7 +21127,7 @@ snapshots: css-what: 6.1.0 domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 cheerio@1.0.0-rc.10: dependencies: @@ -21092,12 +21144,12 @@ snapshots: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 htmlparser2: 8.0.2 parse5: 7.2.1 parse5-htmlparser2-tree-adapter: 7.1.0 - chokidar@3.5.3: + chokidar@3.6.0: dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -21111,11 +21163,11 @@ snapshots: chokidar@4.0.3: dependencies: - readdirp: 4.0.2 + readdirp: 4.1.1 chrome-launcher@1.1.2: dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 2.0.1 @@ -21205,9 +21257,9 @@ snapshots: cmdk@1.0.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.4.0(react@18.3.1) @@ -21217,9 +21269,9 @@ snapshots: cmdk@1.0.4(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.1.2(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.1.4(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.4.0(react@18.3.1) @@ -21229,9 +21281,9 @@ snapshots: cmdk@1.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.4.0(react@18.3.1) @@ -21305,8 +21357,6 @@ snapshots: commander@3.0.2: {} - commander@5.1.0: {} - commander@7.2.0: {} commander@8.3.0: {} @@ -21387,15 +21437,15 @@ snapshots: copy-webpack-plugin@11.0.0(webpack@5.94.0): dependencies: - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob-parent: 6.0.2 globby: 13.2.2 normalize-path: 3.0.0 - schema-utils: 4.2.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 webpack: 5.94.0(webpack-cli@4.9.1) - core-js-compat@3.39.0: + core-js-compat@3.40.0: dependencies: browserslist: 4.24.3 @@ -21444,13 +21494,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.17.11): + create-jest@29.7.0(@types/node@20.17.12): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.11) + jest-config: 29.7.0(@types/node@20.17.12) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -21480,7 +21530,7 @@ snapshots: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) - postcss-modules-local-by-default: 4.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.47) postcss-modules-scope: 3.2.1(postcss@8.4.47) postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 @@ -21493,7 +21543,7 @@ snapshots: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) - postcss-modules-local-by-default: 4.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.47) postcss-modules-scope: 3.2.1(postcss@8.4.47) postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 @@ -21506,7 +21556,7 @@ snapshots: cssnano: 6.1.2(postcss@8.4.47) jest-worker: 29.7.0 postcss: 8.4.47 - schema-utils: 4.2.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 webpack: 5.94.0(webpack-cli@4.9.1) @@ -21523,7 +21573,7 @@ snapshots: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 nth-check: 2.1.1 css-tree@2.2.1: @@ -21673,23 +21723,23 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - data-view-buffer@1.0.1: + data-view-buffer@1.0.2: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-length@1.0.1: + data-view-byte-length@1.0.2: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-offset@1.0.0: + data-view-byte-offset@1.0.1: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 date-fns@1.30.1: {} @@ -21731,24 +21781,24 @@ snapshots: deep-equal@2.2.3: dependencies: - array-buffer-byte-length: 1.0.1 + array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 es-get-iterator: 1.1.3 - get-intrinsic: 1.2.5 - is-arguments: 1.1.1 - is-array-buffer: 3.0.4 - is-date-object: 1.0.5 - is-regex: 1.2.0 - is-shared-array-buffer: 1.0.3 + get-intrinsic: 1.2.7 + is-arguments: 1.2.0 + is-array-buffer: 3.0.5 + is-date-object: 1.1.0 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 isarray: 2.0.5 object-is: 1.1.6 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - side-channel: 1.0.6 - which-boxed-primitive: 1.1.0 + object.assign: 4.1.7 + regexp.prototype.flags: 1.5.4 + side-channel: 1.1.0 + which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.16 + which-typed-array: 1.1.18 deep-is@0.1.4: {} @@ -21909,7 +21959,7 @@ snapshots: domelementtype: 2.3.0 domhandler: 4.3.1 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -21926,11 +21976,11 @@ snapshots: dot-prop@9.0.0: dependencies: - type-fest: 4.31.0 + type-fest: 4.32.0 dotenv@16.0.2: {} - dunder-proto@1.0.0: + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.1 es-errors: 1.3.0 @@ -21946,7 +21996,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.76: {} + electron-to-chromium@1.5.80: {} elegant-spinner@1.0.1: {} @@ -21982,7 +22032,7 @@ snapshots: fast-json-parse: 1.0.3 objectorarray: 1.0.5 - enhanced-resolve@5.17.1: + enhanced-resolve@5.18.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -22012,54 +22062,59 @@ snapshots: error@10.4.0: {} - es-abstract@1.23.5: + es-abstract@1.23.9: dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 call-bind: 1.0.8 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.5 - get-symbol-description: 1.0.2 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 globalthis: 1.0.4 gopd: 1.2.0 has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.2.0 - is-shared-array-buffer: 1.0.3 - is-string: 1.1.0 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.0 + math-intrinsics: 1.1.0 object-inspect: 1.13.3 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.3 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.16 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 es-define-property@1.0.1: {} @@ -22068,42 +22123,44 @@ snapshots: es-get-iterator@1.1.3: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.7 has-symbols: 1.1.0 - is-arguments: 1.1.1 + is-arguments: 1.2.0 is-map: 2.0.3 is-set: 2.0.3 - is-string: 1.1.0 + is-string: 1.1.1 isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 + stop-iteration-iterator: 1.1.0 - es-iterator-helpers@1.2.0: + es-iterator-helpers@1.2.1: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.7 globalthis: 1.0.4 gopd: 1.2.0 has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 - internal-slot: 1.0.7 - iterator.prototype: 1.1.3 - safe-array-concat: 1.1.2 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 - es-module-lexer@1.5.4: {} + es-module-lexer@1.6.0: {} es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.3: + es-set-tostringtag@2.1.0: dependencies: - get-intrinsic: 1.2.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -22114,8 +22171,8 @@ snapshots: es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.1.0 + is-date-object: 1.1.0 + is-symbol: 1.1.1 es-toolkit@1.31.0: {} @@ -22221,8 +22278,8 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.15.1 - resolve: 1.22.8 + is-core-module: 2.16.1 + resolve: 1.22.10 transitivePeerDependencies: - supports-color @@ -22230,9 +22287,9 @@ snapshots: dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.0 eslint: 9.16.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 get-tsconfig: 4.8.1 is-bun-module: 1.3.0 is-glob: 4.0.3 @@ -22264,22 +22321,22 @@ snapshots: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 eslint: 9.16.0 eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0) hasown: 2.0.2 - is-core-module: 2.15.1 + is-core-module: 2.16.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 object.groupby: 1.0.3 - object.values: 1.2.0 + object.values: 1.2.1 semver: 6.3.1 - string.prototype.trimend: 1.0.8 + string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -22294,7 +22351,7 @@ snapshots: eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4): dependencies: - '@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.0.4) + '@typescript-eslint/utils': 8.19.1(eslint@9.16.0)(typescript@5.0.4) eslint: 9.16.0 optionalDependencies: jest: 29.7.0 @@ -22323,7 +22380,7 @@ snapshots: dependencies: aria-query: 5.3.2 array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 + array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 axe-core: 4.10.2 axobject-query: 4.1.0 @@ -22335,7 +22392,7 @@ snapshots: language-tags: 1.0.9 minimatch: 3.1.2 object.fromentries: 2.0.8 - safe-regex-test: 1.0.3 + safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 eslint-plugin-lodash@8.0.0(eslint@9.16.0): @@ -22346,7 +22403,7 @@ snapshots: eslint-plugin-n@17.14.0(eslint@9.16.0): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.0 eslint: 9.16.0 eslint-plugin-es-x: 7.8.0(eslint@9.16.0) get-tsconfig: 4.8.1 @@ -22377,10 +22434,10 @@ snapshots: dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 + array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.2.0 + es-iterator-helpers: 1.2.1 eslint: 9.16.0 estraverse: 5.3.0 hasown: 2.0.2 @@ -22388,11 +22445,11 @@ snapshots: minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 eslint-plugin-svelte@2.46.1(eslint@9.16.0)(svelte@4.2.19): @@ -22416,8 +22473,8 @@ snapshots: eslint-plugin-testing-library@7.1.1(eslint@9.16.0)(typescript@5.0.4): dependencies: - '@typescript-eslint/scope-manager': 8.18.0 - '@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.0.4) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/utils': 8.19.1(eslint@9.16.0)(typescript@5.0.4) eslint: 9.16.0 transitivePeerDependencies: - supports-color @@ -22452,7 +22509,7 @@ snapshots: '@eslint/core': 0.9.1 '@eslint/eslintrc': 3.2.0 '@eslint/js': 9.16.0 - '@eslint/plugin-kit': 0.2.4 + '@eslint/plugin-kit': 0.2.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.1 @@ -22535,7 +22592,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -22642,7 +22699,7 @@ snapshots: fast-fifo@1.3.2: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -22656,11 +22713,11 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.0.3: {} + fast-uri@3.0.5: {} fastest-levenshtein@1.0.16: {} - fastq@1.17.1: + fastq@1.18.0: dependencies: reusify: 1.0.4 @@ -22726,7 +22783,7 @@ snapshots: find-chrome-bin@2.0.2: dependencies: - '@puppeteer/browsers': 2.6.0 + '@puppeteer/browsers': 2.7.0 transitivePeerDependencies: - supports-color @@ -22739,13 +22796,11 @@ snapshots: dependencies: find-file-up: 0.1.3 - find-process@1.4.7: + find-process@1.4.10: dependencies: chalk: 4.1.2 - commander: 5.1.0 - debug: 4.4.0 - transitivePeerDependencies: - - supports-color + commander: 12.1.0 + loglevel: 1.9.2 find-root@1.1.0: {} @@ -22813,7 +22868,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 - chokidar: 3.5.3 + chokidar: 3.6.0 cosmiconfig: 7.1.0 deepmerge: 4.3.1 fs-extra: 10.1.0 @@ -22830,7 +22885,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 - chokidar: 3.5.3 + chokidar: 3.6.0 cosmiconfig: 8.3.6(typescript@5.0.4) deepmerge: 4.3.1 fs-extra: 10.1.0 @@ -22847,7 +22902,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 - chokidar: 3.5.3 + chokidar: 3.6.0 cosmiconfig: 8.3.6(typescript@5.7.2) deepmerge: 4.3.1 fs-extra: 10.1.0 @@ -22908,12 +22963,14 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.6: + function.prototype.name@1.1.8: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.5 functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -22931,16 +22988,18 @@ snapshots: get-document@1.0.0: {} - get-intrinsic@1.2.5: + get-intrinsic@1.2.7: dependencies: call-bind-apply-helpers: 1.0.1 - dunder-proto: 1.0.0 es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.0.0 function-bind: 1.1.2 + get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.1.0 get-nonce@1.0.1: {} @@ -22948,17 +23007,22 @@ snapshots: get-port@5.1.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.0.0 + get-stream@5.2.0: dependencies: pump: 3.0.2 get-stream@6.0.1: {} - get-symbol-description@1.0.2: + get-symbol-description@1.1.0: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.7 get-tsconfig@4.8.1: dependencies: @@ -22991,12 +23055,13 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.4.1: + glob@10.4.5: dependencies: foreground-child: 3.3.0 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@11.0.0: @@ -23051,7 +23116,7 @@ snapshots: '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob: 7.2.3 ignore: 5.3.2 merge2: 1.4.1 @@ -23060,7 +23125,7 @@ snapshots: globby@13.2.2: dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -23096,7 +23161,7 @@ snapshots: dependencies: ansi-regex: 2.1.1 - has-bigints@1.0.2: {} + has-bigints@1.1.0: {} has-flag@3.0.0: {} @@ -23108,7 +23173,7 @@ snapshots: has-proto@1.2.0: dependencies: - dunder-proto: 1.0.0 + dunder-proto: 1.0.1 has-symbols@1.1.0: {} @@ -23196,7 +23261,7 @@ snapshots: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 entities: 4.5.0 http-errors@2.0.0: @@ -23311,11 +23376,11 @@ snapshots: ini@1.3.8: {} - internal-slot@1.0.7: + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 internmap@2.0.3: {} @@ -23330,10 +23395,6 @@ snapshots: '@formatjs/icu-messageformat-parser': 2.9.8 tslib: 2.5.0 - invariant@2.2.4: - dependencies: - loose-envify: 1.4.0 - ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -23341,35 +23402,39 @@ snapshots: ipaddr.js@1.9.1: {} - is-arguments@1.1.1: + is-arguments@1.2.0: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-array-buffer@3.0.4: + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.2.5 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 is-arrayish@0.2.1: {} is-arrayish@0.3.2: {} - is-async-function@2.0.0: + is-async-function@2.1.0: dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-bigint@1.1.0: dependencies: - has-bigints: 1.0.2 + has-bigints: 1.1.0 is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.2.0: + is-boolean-object@1.2.1: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-buffer@2.0.5: {} @@ -23380,16 +23445,19 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.15.1: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: + is-data-view@1.0.2: dependencies: - is-typed-array: 1.1.13 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 - is-date-object@1.0.5: + is-date-object@1.1.0: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-docker@2.2.1: {} @@ -23398,9 +23466,9 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.1.0: + is-finalizationregistry@1.1.1: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 is-fullwidth-code-point@1.0.0: dependencies: @@ -23412,9 +23480,12 @@ snapshots: is-generator-fn@2.1.0: {} - is-generator-function@1.0.10: + is-generator-function@1.1.0: dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: @@ -23424,11 +23495,9 @@ snapshots: is-module@1.0.0: {} - is-negative-zero@2.0.3: {} - - is-number-object@1.1.0: + is-number-object@1.1.1: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -23473,18 +23542,18 @@ snapshots: dependencies: '@types/estree': 1.0.6 - is-regex@1.2.0: + is-regex@1.2.1: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 is-set@2.0.3: {} - is-shared-array-buffer@1.0.3: + is-shared-array-buffer@1.0.4: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 is-stream@1.1.0: {} @@ -23492,33 +23561,33 @@ snapshots: is-stream@3.0.0: {} - is-string@1.1.0: + is-string@1.1.1: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-symbol@1.1.0: + is-symbol@1.1.1: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 has-symbols: 1.1.0 - safe-regex-test: 1.0.3 + safe-regex-test: 1.1.0 - is-typed-array@1.1.13: + is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.16 + which-typed-array: 1.1.18 is-typedarray@1.0.0: {} is-weakmap@2.0.2: {} - is-weakref@1.0.2: + is-weakref@1.1.0: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 - is-weakset@2.0.3: + is-weakset@2.0.4: dependencies: - call-bind: 1.0.8 - get-intrinsic: 1.2.5 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 is-windows@0.2.0: {} @@ -23554,7 +23623,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/parser': 7.26.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -23564,7 +23633,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/parser': 7.26.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -23596,7 +23665,7 @@ snapshots: istanbul-merge@2.0.0: dependencies: - array.prototype.flatmap: 1.3.2 + array.prototype.flatmap: 1.3.3 for-each: 0.3.3 glob: 7.2.3 istanbul-lib-coverage: 3.2.2 @@ -23608,12 +23677,13 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.3: + iterator.prototype@1.1.5: dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.5 + define-data-property: 1.1.4 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 has-symbols: 1.1.0 - reflect.getprototypeof: 1.0.8 set-function-name: 2.0.2 jackspeak@3.4.3: @@ -23645,7 +23715,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -23684,16 +23754,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.17.11): + jest-cli@29.7.0(@types/node@20.17.12): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.17.11) + create-jest: 29.7.0(@types/node@20.17.12) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.11) + jest-config: 29.7.0(@types/node@20.17.12) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.6.2 @@ -23731,7 +23801,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.17.11): + jest-config@29.7.0(@types/node@20.17.12): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -23756,7 +23826,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -23786,7 +23856,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.17.11 + '@types/node': 20.17.12 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -23800,7 +23870,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -23817,7 +23887,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.17.11 + '@types/node': 20.17.12 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -23863,7 +23933,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 jest-util: 29.7.0 jest-playwright-preset@4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0): @@ -23892,7 +23962,7 @@ snapshots: chalk: 4.1.2 cwd: 0.10.0 exit: 0.1.2 - find-process: 1.4.7 + find-process: 1.4.10 prompts: 2.4.2 signal-exit: 3.0.7 spawnd: 5.0.0 @@ -23919,7 +23989,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.8 + resolve: 1.22.10 resolve.exports: 2.0.3 slash: 3.0.0 @@ -23930,7 +24000,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -23958,7 +24028,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -23983,10 +24053,10 @@ snapshots: jest-snapshot@29.7.0: dependencies: '@babel/core': 7.26.0 - '@babel/generator': 7.26.3 + '@babel/generator': 7.26.5 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -24008,7 +24078,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -24038,7 +24108,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.11 + '@types/node': 20.17.12 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -24047,13 +24117,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -24070,12 +24140,12 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@20.17.11): + jest@29.7.0(@types/node@20.17.12): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.17.11) + jest-cli: 29.7.0(@types/node@20.17.12) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -24084,7 +24154,7 @@ snapshots: jiti@1.21.7: {} - jiti@2.4.1: {} + jiti@2.4.2: {} joi@17.13.3: dependencies: @@ -24152,6 +24222,8 @@ snapshots: jsesc@3.0.2: {} + jsesc@3.1.0: {} + json-buffer@3.0.1: {} json-parse-better-errors@1.0.2: {} @@ -24183,9 +24255,9 @@ snapshots: jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 kdbush@3.0.0: {} @@ -24242,7 +24314,7 @@ snapshots: lighthouse@12.3.0: dependencies: '@paulirish/trace_engine': 0.0.39 - '@sentry/node': 7.120.2 + '@sentry/node': 7.120.3 axe-core: 4.10.2 chrome-launcher: 1.1.2 configstore: 5.0.1 @@ -24335,7 +24407,7 @@ snapshots: livereload@0.9.3: dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 livereload-js: 3.4.1 opts: 2.0.2 ws: 7.5.10 @@ -24450,6 +24522,8 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 + loglevel@1.9.2: {} + longest-streak@3.1.0: {} lookup-closest-locale@6.2.0: {} @@ -24478,7 +24552,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.14: + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -24541,9 +24615,11 @@ snapshots: math-expression-evaluator@1.4.0: {} + math-intrinsics@1.1.0: {} + md5-es@1.8.2: {} - mdast-util-find-and-replace@3.0.1: + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 @@ -24572,7 +24648,7 @@ snapshots: '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.1 + mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 mdast-util-gfm-footnote@2.0.0: @@ -24891,7 +24967,7 @@ snapshots: mini-css-extract-plugin@2.9.1(webpack@5.94.0): dependencies: - schema-utils: 4.2.0 + schema-utils: 4.3.0 tapable: 2.2.1 webpack: 5.94.0(webpack-cli@5.1.4) @@ -25079,10 +25155,12 @@ snapshots: object-keys@1.1.1: {} - object.assign@4.1.5: + object.assign@4.1.7: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 + es-object-atoms: 1.0.0 has-symbols: 1.1.0 object-keys: 1.1.1 @@ -25096,18 +25174,19 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-object-atoms: 1.0.0 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 - object.values@1.2.0: + object.values@1.2.1: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 es-object-atoms: 1.0.0 @@ -25145,10 +25224,10 @@ snapshots: openai@4.56.1: dependencies: - '@types/node': 18.19.67 + '@types/node': 18.19.70 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 - agentkeepalive: 4.5.0 + agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 node-fetch: 2.6.7 @@ -25170,6 +25249,12 @@ snapshots: os-homedir@1.0.2: {} + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-debounce@4.0.0: {} p-finally@1.0.0: {} @@ -25266,7 +25351,7 @@ snapshots: parse-imports@2.2.1: dependencies: - es-module-lexer: 1.5.4 + es-module-lexer: 1.6.0 slashes: 3.0.12 parse-json@5.2.0: @@ -25524,7 +25609,7 @@ snapshots: dependencies: postcss: 8.4.47 - postcss-modules-local-by-default@4.1.0(postcss@8.4.47): + postcss-modules-local-by-default@4.2.0(postcss@8.4.47): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -25548,7 +25633,7 @@ snapshots: lodash.camelcase: 4.3.0 postcss: 8.4.47 postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) - postcss-modules-local-by-default: 4.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.47) postcss-modules-scope: 3.2.1(postcss@8.4.47) postcss-modules-values: 4.0.0(postcss@8.4.47) string-hash: 1.1.3 @@ -25560,7 +25645,7 @@ snapshots: lodash.camelcase: 4.3.0 postcss: 8.4.47 postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) - postcss-modules-local-by-default: 4.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.47) postcss-modules-scope: 3.2.1(postcss@8.4.47) postcss-modules-values: 4.0.0(postcss@8.4.47) string-hash: 1.1.3 @@ -25677,7 +25762,7 @@ snapshots: preact@10.22.1: {} - preact@10.25.1: {} + preact@10.25.4: {} prelude-ls@1.2.1: {} @@ -25812,15 +25897,15 @@ snapshots: qs@6.12.1: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 qs@6.13.0: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 qs@6.13.1: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 qss@3.0.0: {} @@ -25870,14 +25955,14 @@ snapshots: react-docgen@7.1.0: dependencies: '@babel/core': 7.26.0 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 '@types/doctrine': 0.0.9 '@types/resolve': 1.20.6 doctrine: 3.0.0 - resolve: 1.22.8 + resolve: 1.22.10 strip-indent: 4.0.0 transitivePeerDependencies: - supports-color @@ -25934,39 +26019,39 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-remove-scroll-bar@2.3.6(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.18)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.5.0 optionalDependencies: '@types/react': 18.3.18 - react-remove-scroll-bar@2.3.6(react@18.3.1): + react-remove-scroll-bar@2.3.8(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(react@18.3.1) + react-style-singleton: 2.2.3(react@18.3.1) tslib: 2.5.0 - react-remove-scroll@2.6.0(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll@2.6.2(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.18)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.5.0 - use-callback-ref: 1.3.2(@types/react@18.3.18)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.18)(react@18.3.1) + use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - react-remove-scroll@2.6.0(react@18.3.1): + react-remove-scroll@2.6.2(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(react@18.3.1) - react-style-singleton: 2.2.1(react@18.3.1) + react-remove-scroll-bar: 2.3.8(react@18.3.1) + react-style-singleton: 2.2.3(react@18.3.1) tslib: 2.5.0 - use-callback-ref: 1.3.2(react@18.3.1) - use-sidecar: 1.1.2(react@18.3.1) + use-callback-ref: 1.3.3(react@18.3.1) + use-sidecar: 1.1.3(react@18.3.1) react-router-dom@6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -25998,19 +26083,17 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 - react-style-singleton@2.2.1(@types/react@18.3.18)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): dependencies: get-nonce: 1.0.1 - invariant: 2.2.4 react: 18.3.1 tslib: 2.5.0 optionalDependencies: '@types/react': 18.3.18 - react-style-singleton@2.2.1(react@18.3.1): + react-style-singleton@2.2.3(react@18.3.1): dependencies: get-nonce: 1.0.1 - invariant: 2.2.4 react: 18.3.1 tslib: 2.5.0 @@ -26047,7 +26130,7 @@ snapshots: dependencies: picomatch: 2.3.1 - readdirp@4.0.2: {} + readdirp@4.1.1: {} recast@0.23.9: dependencies: @@ -26059,11 +26142,11 @@ snapshots: rechoir@0.7.1: dependencies: - resolve: 1.22.8 + resolve: 1.22.10 rechoir@0.8.0: dependencies: - resolve: 1.22.8 + resolve: 1.22.10 redent@3.0.0: dependencies: @@ -26103,16 +26186,16 @@ snapshots: redux@5.0.1: {} - reflect.getprototypeof@1.0.8: + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - dunder-proto: 1.0.0 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.5 - gopd: 1.2.0 - which-builtin-type: 1.2.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 refx@3.1.1: {} @@ -26130,11 +26213,13 @@ snapshots: dependencies: '@babel/runtime': 7.26.0 - regexp.prototype.flags@1.5.3: + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 set-function-name: 2.0.2 regexpu-core@6.2.0: @@ -26235,15 +26320,15 @@ snapshots: resolve.exports@2.0.3: {} - resolve@1.22.8: + resolve@1.22.10: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -26289,7 +26374,7 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.4.47) postcss-modules: 4.3.1(postcss@8.4.47) promise.series: 0.2.0 - resolve: 1.22.8 + resolve: 1.22.10 rollup-pluginutils: 2.8.2 safe-identifier: 0.4.2 style-inject: 0.3.0 @@ -26342,10 +26427,11 @@ snapshots: dependencies: tslib: 2.5.0 - safe-array-concat@1.1.2: + safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.2.5 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 has-symbols: 1.1.0 isarray: 2.0.5 @@ -26353,11 +26439,16 @@ snapshots: safe-identifier@0.4.2: {} - safe-regex-test@1.0.3: + safe-push-apply@1.0.0: dependencies: - call-bind: 1.0.8 es-errors: 1.3.0 - is-regex: 1.2.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 safe-stable-stringify@2.5.0: {} @@ -26473,7 +26564,7 @@ snapshots: sass@1.64.1: dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 immutable: 4.3.7 source-map-js: 1.2.0 @@ -26493,7 +26584,7 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.2.0: + schema-utils@4.3.0: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 @@ -26554,7 +26645,7 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.7 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -26565,6 +26656,12 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + setprototypeof@1.2.0: {} shallow-clone@3.0.1: @@ -26585,13 +26682,34 @@ snapshots: dependencies: yargs: 14.2.3 - side-channel@1.0.6: + side-channel-list@1.0.0: dependencies: - call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.5 object-inspect: 1.13.3 + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -26620,7 +26738,7 @@ snapshots: dependencies: bytes-iec: 3.1.1 chokidar: 4.0.3 - jiti: 2.4.1 + jiti: 2.4.2 lilconfig: 3.1.3 nanospinner: 1.2.2 picocolors: 1.1.1 @@ -26724,7 +26842,7 @@ snapshots: speedline-core@1.4.3: dependencies: - '@types/node': 20.17.11 + '@types/node': 20.17.12 image-ssim: 0.2.0 jpeg-js: 0.4.4 @@ -26748,9 +26866,10 @@ snapshots: statuses@2.0.1: {} - stop-iteration-iterator@1.0.0: + stop-iteration-iterator@1.1.0: dependencies: - internal-slot: 1.0.7 + es-errors: 1.3.0 + internal-slot: 1.1.0 storybook-addon-mock@5.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -26784,13 +26903,13 @@ snapshots: - supports-color - utf-8-validate - streamx@2.21.0: + streamx@2.21.1: dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 - text-decoder: 1.2.2 + text-decoder: 1.2.3 optionalDependencies: - bare-events: 2.5.0 + bare-events: 2.5.4 string-hash@1.1.3: {} @@ -26837,38 +26956,43 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 - string.prototype.matchall@4.0.11: + string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.7 gopd: 1.2.0 has-symbols: 1.1.0 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.3 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 - string.prototype.trim@1.2.9: + string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-object-atoms: 1.0.0 + has-property-descriptors: 1.0.2 - string.prototype.trimend@1.0.8: + string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 es-object-atoms: 1.0.0 @@ -27007,7 +27131,7 @@ snapshots: estree-walker: 3.0.3 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.14 + magic-string: 0.30.17 periscopic: 3.1.0 svg-parser@2.0.4: {} @@ -27087,7 +27211,7 @@ snapshots: tapable@2.2.1: {} - tar-fs@3.0.6: + tar-fs@3.0.7: dependencies: pump: 3.0.2 tar-stream: 3.1.7 @@ -27099,13 +27223,13 @@ snapshots: dependencies: b4a: 1.6.7 fast-fifo: 1.3.2 - streamx: 2.21.0 + streamx: 2.21.1 - terser-webpack-plugin@5.3.10(webpack@5.94.0): + terser-webpack-plugin@5.3.11(webpack@5.94.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 - schema-utils: 3.3.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.94.0(webpack-cli@4.9.1) @@ -27132,7 +27256,7 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-decoder@1.2.2: + text-decoder@1.2.3: dependencies: b4a: 1.6.7 @@ -27207,6 +27331,10 @@ snapshots: dependencies: typescript: 5.0.4 + ts-api-utils@2.0.0(typescript@5.0.4): + dependencies: + typescript: 5.0.4 + ts-dedent@2.2.0: {} ts-jest-resolver@2.0.1: @@ -27230,7 +27358,7 @@ snapshots: tsconfig-paths-webpack-plugin@4.2.0: dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.0 tapable: 2.2.1 tsconfig-paths: 4.2.0 @@ -27283,45 +27411,45 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.31.0: {} + type-fest@4.32.0: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typed-array-buffer@1.0.2: + typed-array-buffer@1.0.3: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 es-errors: 1.3.0 - is-typed-array: 1.1.13 + is-typed-array: 1.1.15 - typed-array-byte-length@1.0.1: + typed-array-byte-length@1.0.3: dependencies: call-bind: 1.0.8 for-each: 0.3.3 gopd: 1.2.0 has-proto: 1.2.0 - is-typed-array: 1.1.13 + is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.3: + typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 for-each: 0.3.3 gopd: 1.2.0 has-proto: 1.2.0 - is-typed-array: 1.1.13 - reflect.getprototypeof: 1.0.8 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 typed-array-length@1.0.7: dependencies: call-bind: 1.0.8 for-each: 0.3.3 gopd: 1.2.0 - is-typed-array: 1.1.13 + is-typed-array: 1.1.15 possible-typed-array-names: 1.0.0 - reflect.getprototypeof: 1.0.8 + reflect.getprototypeof: 1.0.10 typed-query-selector@2.12.0: {} @@ -27356,12 +27484,12 @@ snapshots: uc.micro@2.1.0: {} - unbox-primitive@1.0.2: + unbox-primitive@1.1.0: dependencies: - call-bind: 1.0.8 - has-bigints: 1.0.2 + call-bound: 1.0.3 + has-bigints: 1.1.0 has-symbols: 1.1.0 - which-boxed-primitive: 1.1.0 + which-boxed-primitive: 1.1.1 unbzip2-stream@1.4.3: dependencies: @@ -27430,12 +27558,12 @@ snapshots: unpipe@1.0.0: {} - unplugin@1.16.0: + unplugin@1.16.1: dependencies: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.1(browserslist@4.24.3): + update-browserslist-db@1.1.2(browserslist@4.24.3): dependencies: browserslist: 4.24.3 escalade: 3.2.0 @@ -27476,14 +27604,14 @@ snapshots: urlpattern-polyfill@10.0.0: {} - use-callback-ref@1.3.2(@types/react@18.3.18)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.5.0 optionalDependencies: '@types/react': 18.3.18 - use-callback-ref@1.3.2(react@18.3.1): + use-callback-ref@1.3.3(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.5.0 @@ -27500,7 +27628,7 @@ snapshots: dependencies: react: 18.3.1 - use-sidecar@1.1.2(@types/react@18.3.18)(react@18.3.1): + use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 @@ -27508,7 +27636,7 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 - use-sidecar@1.1.2(react@18.3.1): + use-sidecar@1.1.3(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 @@ -27523,10 +27651,10 @@ snapshots: util@0.12.5: dependencies: inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.16 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.18 utila@0.4.0: {} @@ -27648,7 +27776,7 @@ snapshots: memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.2.0 + schema-utils: 4.3.0 webpack: 5.94.0(webpack-cli@4.9.1) webpack-dev-middleware@6.1.3(webpack@5.94.0): @@ -27657,7 +27785,7 @@ snapshots: memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.2.0 + schema-utils: 4.3.0 optionalDependencies: webpack: 5.94.0(webpack-cli@4.9.1) @@ -27692,8 +27820,8 @@ snapshots: acorn-import-attributes: 1.9.5(acorn@8.14.0) browserslist: 4.24.3 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 + enhanced-resolve: 5.18.0 + es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -27704,7 +27832,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.94.0) + terser-webpack-plugin: 5.3.11(webpack@5.94.0) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: @@ -27724,8 +27852,8 @@ snapshots: acorn-import-attributes: 1.9.5(acorn@8.14.0) browserslist: 4.24.3 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 + enhanced-resolve: 5.18.0 + es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -27736,7 +27864,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.94.0) + terser-webpack-plugin: 5.3.11(webpack@5.94.0) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: @@ -27764,45 +27892,46 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - when-exit@2.1.3: {} + when-exit@2.1.4: {} - which-boxed-primitive@1.1.0: + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 - is-boolean-object: 1.2.0 - is-number-object: 1.1.0 - is-string: 1.1.0 - is-symbol: 1.1.0 + is-boolean-object: 1.2.1 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 - which-builtin-type@1.2.0: + which-builtin-type@1.2.1: dependencies: - call-bind: 1.0.8 - function.prototype.name: 1.1.6 + call-bound: 1.0.3 + function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.1.0 - is-generator-function: 1.0.10 - is-regex: 1.2.0 - is-weakref: 1.0.2 + is-async-function: 2.1.0 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.0 isarray: 2.0.5 - which-boxed-primitive: 1.1.0 + which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.16 + which-typed-array: 1.1.18 which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 - is-weakset: 2.0.3 + is-weakset: 2.0.4 which-module@2.0.1: {} - which-typed-array@1.1.16: + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 + call-bound: 1.0.3 for-each: 0.3.3 gopd: 1.2.0 has-tostringtag: 1.0.2 @@ -27917,22 +28046,22 @@ snapshots: xmlchars@2.2.0: {} - y-indexeddb@9.0.12(yjs@13.6.20): + y-indexeddb@9.0.12(yjs@13.6.22): dependencies: lib0: 0.2.99 - yjs: 13.6.20 + yjs: 13.6.22 - y-protocols@1.0.6(yjs@13.6.20): + y-protocols@1.0.6(yjs@13.6.22): dependencies: lib0: 0.2.99 - yjs: 13.6.20 + yjs: 13.6.22 - y-webrtc@10.2.6(yjs@13.6.20): + y-webrtc@10.2.6(yjs@13.6.22): dependencies: lib0: 0.2.99 simple-peer: 9.11.1 - y-protocols: 1.0.6(yjs@13.6.20) - yjs: 13.6.20 + y-protocols: 1.0.6(yjs@13.6.22) + yjs: 13.6.22 optionalDependencies: ws: 8.18.0 transitivePeerDependencies: @@ -28017,7 +28146,7 @@ snapshots: yerror@8.0.0: {} - yjs@13.6.20: + yjs@13.6.22: dependencies: lib0: 0.2.99 diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance b/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/composer.lock b/projects/plugins/automattic-for-agencies-client/composer.lock index 32b841da29ffb..3803293918ae3 100644 --- a/projects/plugins/automattic-for-agencies-client/composer.lock +++ b/projects/plugins/automattic-for-agencies-client/composer.lock @@ -981,16 +981,16 @@ "packages-dev": [ { "name": "antecedent/patchwork", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/antecedent/patchwork.git", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65" + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b07d4fb37c3c723c8755122160c089e077d5de65", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245", + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245", "shasum": "" }, "require": { @@ -1023,9 +1023,9 @@ ], "support": { "issues": "https://github.com/antecedent/patchwork/issues", - "source": "https://github.com/antecedent/patchwork/tree/2.2.0" + "source": "https://github.com/antecedent/patchwork/tree/2.2.1" }, - "time": "2024-09-27T16:59:55+00:00" + "time": "2024-12-11T10:19:54+00:00" }, { "name": "automattic/jetpack-changelogger", @@ -1485,16 +1485,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -1537,9 +1537,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -3283,16 +3283,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -3356,7 +3356,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -3372,7 +3372,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3393,12 +3393,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3705,8 +3705,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3844,12 +3844,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4042,16 +4042,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -4101,7 +4101,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/backup/changelog/renovate-lock-file-maintenance b/projects/plugins/backup/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/backup/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/backup/composer.lock b/projects/plugins/backup/composer.lock index 83ba821aacc8f..17bbd5a32a9dd 100644 --- a/projects/plugins/backup/composer.lock +++ b/projects/plugins/backup/composer.lock @@ -2105,16 +2105,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2157,9 +2157,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -3719,16 +3719,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -3792,7 +3792,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -3808,7 +3808,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3829,12 +3829,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4141,8 +4141,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4280,12 +4280,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4478,16 +4478,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -4537,7 +4537,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/boost/changelog/renovate-lock-file-maintenance b/projects/plugins/boost/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/boost/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/boost/composer.lock b/projects/plugins/boost/composer.lock index 89b3bf090b46b..bff677569e769 100644 --- a/projects/plugins/boost/composer.lock +++ b/projects/plugins/boost/composer.lock @@ -2204,16 +2204,16 @@ "packages-dev": [ { "name": "antecedent/patchwork", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/antecedent/patchwork.git", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65" + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b07d4fb37c3c723c8755122160c089e077d5de65", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245", + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245", "shasum": "" }, "require": { @@ -2246,9 +2246,9 @@ ], "support": { "issues": "https://github.com/antecedent/patchwork/issues", - "source": "https://github.com/antecedent/patchwork/tree/2.2.0" + "source": "https://github.com/antecedent/patchwork/tree/2.2.1" }, - "time": "2024-09-27T16:59:55+00:00" + "time": "2024-12-11T10:19:54+00:00" }, { "name": "automattic/jetpack-changelogger", @@ -2708,16 +2708,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2760,9 +2760,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -4506,16 +4506,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -4579,7 +4579,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -4595,7 +4595,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4616,12 +4616,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4928,8 +4928,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5067,12 +5067,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5265,16 +5265,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -5324,7 +5324,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/classic-theme-helper-plugin/changelog/renovate-lock-file-maintenance#11 b/projects/plugins/classic-theme-helper-plugin/changelog/renovate-lock-file-maintenance#11 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/classic-theme-helper-plugin/changelog/renovate-lock-file-maintenance#11 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/classic-theme-helper-plugin/composer.lock b/projects/plugins/classic-theme-helper-plugin/composer.lock index 72ba0b820a3c3..3fc0b35706242 100644 --- a/projects/plugins/classic-theme-helper-plugin/composer.lock +++ b/projects/plugins/classic-theme-helper-plugin/composer.lock @@ -577,16 +577,16 @@ "packages-dev": [ { "name": "antecedent/patchwork", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/antecedent/patchwork.git", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65" + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b07d4fb37c3c723c8755122160c089e077d5de65", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245", + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245", "shasum": "" }, "require": { @@ -619,9 +619,9 @@ ], "support": { "issues": "https://github.com/antecedent/patchwork/issues", - "source": "https://github.com/antecedent/patchwork/tree/2.2.0" + "source": "https://github.com/antecedent/patchwork/tree/2.2.1" }, - "time": "2024-09-27T16:59:55+00:00" + "time": "2024-12-11T10:19:54+00:00" }, { "name": "automattic/jetpack-changelogger", @@ -1081,16 +1081,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -1133,9 +1133,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -2879,16 +2879,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -2952,7 +2952,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -2968,7 +2968,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2989,12 +2989,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3301,8 +3301,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3440,12 +3440,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3638,16 +3638,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -3697,7 +3697,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance b/projects/plugins/crm/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/crm/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/crm/composer.lock b/projects/plugins/crm/composer.lock index ff27adf7a0f9d..688602919861a 100644 --- a/projects/plugins/crm/composer.lock +++ b/projects/plugins/crm/composer.lock @@ -1846,16 +1846,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -1898,9 +1898,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -2773,16 +2773,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.6", + "version": "v0.12.7", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "3b5ea0efaa791cd1c65ecc493aec3e2aa55ff57c" + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3b5ea0efaa791cd1c65ecc493aec3e2aa55ff57c", - "reference": "3b5ea0efaa791cd1c65ecc493aec3e2aa55ff57c", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", "shasum": "" }, "require": { @@ -2846,9 +2846,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.6" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" }, - "time": "2024-12-07T20:08:52+00:00" + "time": "2024-12-10T01:58:33+00:00" }, { "name": "ralouphie/getallheaders", @@ -3927,16 +3927,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -4000,7 +4000,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -4016,7 +4016,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/css-selector", @@ -4102,12 +4102,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4317,12 +4317,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4375,16 +4375,16 @@ }, { "name": "symfony/finder", - "version": "v7.2.0", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", - "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { @@ -4419,7 +4419,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.2.0" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -4435,7 +4435,7 @@ "type": "tidelift" } ], - "time": "2024-10-23T06:56:12+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4701,8 +4701,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4840,12 +4840,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5193,16 +5193,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -5252,7 +5252,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/debug-helper/changelog/renovate-lock-file-maintenance#2 b/projects/plugins/debug-helper/changelog/renovate-lock-file-maintenance#2 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/debug-helper/changelog/renovate-lock-file-maintenance#2 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/debug-helper/composer.lock b/projects/plugins/debug-helper/composer.lock index 68b81a052fb18..aa7fe10875f9c 100644 --- a/projects/plugins/debug-helper/composer.lock +++ b/projects/plugins/debug-helper/composer.lock @@ -139,16 +139,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -212,7 +212,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -228,7 +228,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -249,12 +249,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -561,8 +561,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -700,12 +700,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { diff --git a/projects/plugins/inspect/changelog/renovate-lock-file-maintenance#21 b/projects/plugins/inspect/changelog/renovate-lock-file-maintenance#21 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/inspect/changelog/renovate-lock-file-maintenance#21 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/inspect/composer.lock b/projects/plugins/inspect/composer.lock index f0d93cc881cdb..44b9098270a47 100644 --- a/projects/plugins/inspect/composer.lock +++ b/projects/plugins/inspect/composer.lock @@ -923,16 +923,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -975,9 +975,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -2537,16 +2537,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -2610,7 +2610,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -2626,7 +2626,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2647,12 +2647,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2959,8 +2959,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3098,12 +3098,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3296,16 +3296,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -3355,7 +3355,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/jetpack/changelog/renovate-lock-file-maintenance b/projects/plugins/jetpack/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..1eaea6a769e84 --- /dev/null +++ b/projects/plugins/jetpack/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Updated package dependencies. diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index 9d9c35b72b5c9..d84902c054f68 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -3320,16 +3320,16 @@ "packages-dev": [ { "name": "antecedent/patchwork", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/antecedent/patchwork.git", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65" + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b07d4fb37c3c723c8755122160c089e077d5de65", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245", + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245", "shasum": "" }, "require": { @@ -3362,9 +3362,9 @@ ], "support": { "issues": "https://github.com/antecedent/patchwork/issues", - "source": "https://github.com/antecedent/patchwork/tree/2.2.0" + "source": "https://github.com/antecedent/patchwork/tree/2.2.1" }, - "time": "2024-09-27T16:59:55+00:00" + "time": "2024-12-11T10:19:54+00:00" }, { "name": "automattic/jetpack-changelogger", @@ -3686,16 +3686,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -3738,9 +3738,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -5300,16 +5300,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -5373,7 +5373,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -5389,7 +5389,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -5410,12 +5410,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5722,8 +5722,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5861,12 +5861,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -6059,16 +6059,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -6118,7 +6118,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance b/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index 9f07e732a7923..9840b6d409dca 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -2022,16 +2022,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2074,9 +2074,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -3636,16 +3636,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -3709,7 +3709,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -3725,7 +3725,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3746,12 +3746,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4058,8 +4058,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4197,12 +4197,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { diff --git a/projects/plugins/protect/changelog/renovate-lock-file-maintenance#4 b/projects/plugins/protect/changelog/renovate-lock-file-maintenance#4 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/protect/changelog/renovate-lock-file-maintenance#4 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/protect/composer.lock b/projects/plugins/protect/composer.lock index 69f202ac5d795..0524ad3fe45be 100644 --- a/projects/plugins/protect/composer.lock +++ b/projects/plugins/protect/composer.lock @@ -2260,16 +2260,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2312,9 +2312,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -4058,16 +4058,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -4131,7 +4131,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -4147,7 +4147,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4168,12 +4168,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4480,8 +4480,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4619,12 +4619,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4817,16 +4817,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -4876,7 +4876,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/search/changelog/renovate-lock-file-maintenance b/projects/plugins/search/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/search/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/search/composer.lock b/projects/plugins/search/composer.lock index 57353d0219537..f32044e497c6b 100644 --- a/projects/plugins/search/composer.lock +++ b/projects/plugins/search/composer.lock @@ -2110,16 +2110,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2162,9 +2162,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -3724,16 +3724,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -3797,7 +3797,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -3813,7 +3813,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3834,12 +3834,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4146,8 +4146,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4285,12 +4285,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4483,16 +4483,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -4542,7 +4542,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/social/changelog/renovate-lock-file-maintenance#4 b/projects/plugins/social/changelog/renovate-lock-file-maintenance#4 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/social/changelog/renovate-lock-file-maintenance#4 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index c6bfa685897fd..fc6251abb2b38 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -1895,16 +1895,16 @@ "packages-dev": [ { "name": "antecedent/patchwork", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/antecedent/patchwork.git", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65" + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b07d4fb37c3c723c8755122160c089e077d5de65", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245", + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245", "shasum": "" }, "require": { @@ -1937,9 +1937,9 @@ ], "support": { "issues": "https://github.com/antecedent/patchwork/issues", - "source": "https://github.com/antecedent/patchwork/tree/2.2.0" + "source": "https://github.com/antecedent/patchwork/tree/2.2.1" }, - "time": "2024-09-27T16:59:55+00:00" + "time": "2024-12-11T10:19:54+00:00" }, { "name": "automattic/jetpack-changelogger", @@ -2399,16 +2399,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2451,9 +2451,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -4197,16 +4197,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -4270,7 +4270,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -4286,7 +4286,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4307,12 +4307,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4619,8 +4619,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4758,12 +4758,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4956,16 +4956,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -5015,7 +5015,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/starter-plugin/changelog/renovate-lock-file-maintenance#2 b/projects/plugins/starter-plugin/changelog/renovate-lock-file-maintenance#2 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/renovate-lock-file-maintenance#2 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/starter-plugin/composer.lock b/projects/plugins/starter-plugin/composer.lock index 433ef4b7fbeb8..dbc3bce90162d 100644 --- a/projects/plugins/starter-plugin/composer.lock +++ b/projects/plugins/starter-plugin/composer.lock @@ -1748,16 +1748,16 @@ "packages-dev": [ { "name": "antecedent/patchwork", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/antecedent/patchwork.git", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65" + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b07d4fb37c3c723c8755122160c089e077d5de65", - "reference": "b07d4fb37c3c723c8755122160c089e077d5de65", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245", + "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245", "shasum": "" }, "require": { @@ -1790,9 +1790,9 @@ ], "support": { "issues": "https://github.com/antecedent/patchwork/issues", - "source": "https://github.com/antecedent/patchwork/tree/2.2.0" + "source": "https://github.com/antecedent/patchwork/tree/2.2.1" }, - "time": "2024-09-27T16:59:55+00:00" + "time": "2024-12-11T10:19:54+00:00" }, { "name": "automattic/jetpack-changelogger", @@ -2252,16 +2252,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2304,9 +2304,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -4050,16 +4050,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -4123,7 +4123,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -4139,7 +4139,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4160,12 +4160,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4472,8 +4472,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4611,12 +4611,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4809,16 +4809,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -4868,7 +4868,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/super-cache/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/super-cache/composer.lock b/projects/plugins/super-cache/composer.lock index 18e5e15b2bc6a..99712d9d267fb 100644 --- a/projects/plugins/super-cache/composer.lock +++ b/projects/plugins/super-cache/composer.lock @@ -270,16 +270,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -322,9 +322,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -1884,16 +1884,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -1957,7 +1957,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -1973,7 +1973,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1994,12 +1994,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2306,8 +2306,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -2445,12 +2445,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2643,16 +2643,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -2702,7 +2702,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/vaultpress/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/vaultpress/composer.lock b/projects/plugins/vaultpress/composer.lock index 59abed20833a8..a6deda9f7f71a 100644 --- a/projects/plugins/vaultpress/composer.lock +++ b/projects/plugins/vaultpress/composer.lock @@ -338,16 +338,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -390,9 +390,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -1952,16 +1952,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -2025,7 +2025,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -2041,7 +2041,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2062,12 +2062,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2374,8 +2374,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -2513,12 +2513,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2711,16 +2711,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -2770,7 +2770,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/videopress/changelog/renovate-lock-file-maintenance b/projects/plugins/videopress/changelog/renovate-lock-file-maintenance new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/videopress/changelog/renovate-lock-file-maintenance @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/videopress/composer.lock b/projects/plugins/videopress/composer.lock index e63e4b6799751..b3a4670190208 100644 --- a/projects/plugins/videopress/composer.lock +++ b/projects/plugins/videopress/composer.lock @@ -2083,16 +2083,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2135,9 +2135,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -3881,16 +3881,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -3954,7 +3954,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -3970,7 +3970,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3991,12 +3991,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4303,8 +4303,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4442,12 +4442,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4640,16 +4640,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -4699,7 +4699,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/wpcomsh/changelog/renovate-lock-file-maintenance#2 b/projects/plugins/wpcomsh/changelog/renovate-lock-file-maintenance#2 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/renovate-lock-file-maintenance#2 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index db45ee57759db..c7dc8188a6af8 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -2415,16 +2415,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2467,9 +2467,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -4213,16 +4213,16 @@ }, { "name": "symfony/console", - "version": "v7.2.0", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -4286,7 +4286,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -4302,7 +4302,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4323,12 +4323,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4635,8 +4635,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4774,12 +4774,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4972,16 +4972,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be" + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", - "reference": "e9c8413de4c8ae03d2923a44f17d0d7dad1b96be", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", + "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", "shasum": "" }, "require": { @@ -5031,7 +5031,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-06T22:03:10+00:00" + "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], From aa2dd2dad1174af0d2e6595f0ee06b527e023930 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:29:28 -0700 Subject: [PATCH 036/420] Backport jetpack 14.3-a.1 Changes (#41003) * Changelog and readme.txt edits. * Remove changelog that belonged to old release --- .../publicize-components/CHANGELOG.md | 5 + .../update-social-connections-post-field | 4 - .../publicize-components/package.json | 2 +- .../classic-theme-helper/CHANGELOG.md | 5 + ...ova-restaurant-cpt-in-classic-theme-helper | 4 - .../classic-theme-helper/composer.json | 2 +- .../classic-theme-helper/package.json | 2 +- .../classic-theme-helper/src/class-main.php | 2 +- projects/packages/forms/CHANGELOG.md | 8 + .../changelog/fix-33301-form-checkbox-field | 5 - .../fix-form-go-back-color-success-message | 4 - ...forms-update-default-url-field-label-value | 4 - ...-fix-form-submission-with-no-name-but-mail | 4 - .../changelog/update-contact-form-rtl-styles | 4 - projects/packages/forms/package.json | 2 +- .../forms/src/class-jetpack-forms.php | 2 +- .../changelog/force-a-release | 4 + projects/packages/post-list/CHANGELOG.md | 5 + .../changelog/fix-edit-page-on-mobile | 4 - .../post-list/src/class-post-list.php | 2 +- projects/packages/publicize/CHANGELOG.md | 22 +- .../add-filtering-for-publicize-endpoints | 4 - .../update-social-connections-post-field | 4 - projects/packages/publicize/package.json | 2 +- .../woocommerce-analytics/CHANGELOG.md | 3 +- .../disable-woo_analytics_session_cookie | 4 - .../changelog/prerelease#14 | 5 + .../classic-theme-helper-plugin/composer.lock | 4 +- projects/plugins/jetpack/CHANGELOG.md | 21 ++ ...ova-restaurant-cpt-in-classic-theme-helper | 4 - .../disable-woo_analytics_session_cookie | 4 - .../fix-40969-notifications_pane_language_bug | 4 - .../changelog/fix-author-widget-all-checkbox | 4 - .../jetpack/changelog/fix-edit-page-on-mobile | 4 - .../fix-newsletter-welcome-message-html_wpses | 4 - .../fix-show-quicklinks-after-quickedit | 4 - .../changelog/fix-stats-setting-role-toggles | 4 - .../fix-testimonials-module-by-zero-error | 4 - .../fix-tiled-gallery-image-controls | 4 - .../update-boost-messaging-admin-page | 5 - .../update-jetpack-ai-enable-feedback | 4 - .../update-jetpack-pre_14.3_to_test_reset | 5 - .../update-jetpack-react-router-dom_v5_to_v6 | 4 - .../update-newsletter-category-settings | 4 - .../changelog/update-social-logo-usage | 4 - .../update-stats-lazy-loading-adminbar-image | 4 - .../update-stats_remove_legacy_widget_loader | 4 - projects/plugins/jetpack/composer.json | 2 +- projects/plugins/jetpack/composer.lock | 4 +- projects/plugins/jetpack/jetpack.php | 4 +- .../modules/custom-post-types/nova.php | 198 +++++++++--------- projects/plugins/jetpack/package.json | 2 +- projects/plugins/jetpack/readme.txt | 31 +-- .../changelog/prerelease | 2 +- .../plugins/mu-wpcom-plugin/composer.lock | 4 +- .../plugins/wpcomsh/changelog/prerelease#7 | 5 + projects/plugins/wpcomsh/composer.lock | 4 +- 57 files changed, 202 insertions(+), 271 deletions(-) delete mode 100644 projects/js-packages/publicize-components/changelog/update-social-connections-post-field delete mode 100644 projects/packages/classic-theme-helper/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper delete mode 100644 projects/packages/forms/changelog/fix-33301-form-checkbox-field delete mode 100644 projects/packages/forms/changelog/fix-form-go-back-color-success-message delete mode 100644 projects/packages/forms/changelog/forms-update-default-url-field-label-value delete mode 100644 projects/packages/forms/changelog/try-fix-form-submission-with-no-name-but-mail delete mode 100644 projects/packages/forms/changelog/update-contact-form-rtl-styles create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/force-a-release delete mode 100644 projects/packages/post-list/changelog/fix-edit-page-on-mobile delete mode 100644 projects/packages/publicize/changelog/add-filtering-for-publicize-endpoints delete mode 100644 projects/packages/publicize/changelog/update-social-connections-post-field delete mode 100644 projects/packages/woocommerce-analytics/changelog/disable-woo_analytics_session_cookie create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/prerelease#14 delete mode 100644 projects/plugins/jetpack/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper delete mode 100644 projects/plugins/jetpack/changelog/disable-woo_analytics_session_cookie delete mode 100644 projects/plugins/jetpack/changelog/fix-40969-notifications_pane_language_bug delete mode 100644 projects/plugins/jetpack/changelog/fix-author-widget-all-checkbox delete mode 100644 projects/plugins/jetpack/changelog/fix-edit-page-on-mobile delete mode 100644 projects/plugins/jetpack/changelog/fix-newsletter-welcome-message-html_wpses delete mode 100644 projects/plugins/jetpack/changelog/fix-show-quicklinks-after-quickedit delete mode 100644 projects/plugins/jetpack/changelog/fix-stats-setting-role-toggles delete mode 100644 projects/plugins/jetpack/changelog/fix-testimonials-module-by-zero-error delete mode 100644 projects/plugins/jetpack/changelog/fix-tiled-gallery-image-controls delete mode 100644 projects/plugins/jetpack/changelog/update-boost-messaging-admin-page delete mode 100644 projects/plugins/jetpack/changelog/update-jetpack-ai-enable-feedback delete mode 100644 projects/plugins/jetpack/changelog/update-jetpack-pre_14.3_to_test_reset delete mode 100644 projects/plugins/jetpack/changelog/update-jetpack-react-router-dom_v5_to_v6 delete mode 100644 projects/plugins/jetpack/changelog/update-newsletter-category-settings delete mode 100644 projects/plugins/jetpack/changelog/update-social-logo-usage delete mode 100644 projects/plugins/jetpack/changelog/update-stats-lazy-loading-adminbar-image delete mode 100644 projects/plugins/jetpack/changelog/update-stats_remove_legacy_widget_loader rename projects/plugins/{jetpack => mu-wpcom-plugin}/changelog/prerelease (79%) create mode 100644 projects/plugins/wpcomsh/changelog/prerelease#7 diff --git a/projects/js-packages/publicize-components/CHANGELOG.md b/projects/js-packages/publicize-components/CHANGELOG.md index f0ee4b3b52150..ba6d508d4fa93 100644 --- a/projects/js-packages/publicize-components/CHANGELOG.md +++ b/projects/js-packages/publicize-components/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.75.3] - 2025-01-13 +### Fixed +- Social: Handle publicize connections meta error gracefully. [#40916] + ## [0.75.2] - 2025-01-06 ### Changed - Updated package dependencies. [#40792] [#40797] [#40798] @@ -1046,6 +1050,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated package dependencies. [#24470] +[0.75.3]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.2...v0.75.3 [0.75.2]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.1...v0.75.2 [0.75.1]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.0...v0.75.1 [0.75.0]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.74.2...v0.75.0 diff --git a/projects/js-packages/publicize-components/changelog/update-social-connections-post-field b/projects/js-packages/publicize-components/changelog/update-social-connections-post-field deleted file mode 100644 index b6dd3c2bec469..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-social-connections-post-field +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Social: Handle publicize connections meta error gracefully diff --git a/projects/js-packages/publicize-components/package.json b/projects/js-packages/publicize-components/package.json index dd4b6bbb9c68b..687257b6c33e6 100644 --- a/projects/js-packages/publicize-components/package.json +++ b/projects/js-packages/publicize-components/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-publicize-components", - "version": "0.75.2", + "version": "0.75.3", "description": "A library of JS components required by the Publicize editor plugin", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/publicize-components/#readme", "bugs": { diff --git a/projects/packages/classic-theme-helper/CHANGELOG.md b/projects/packages/classic-theme-helper/CHANGELOG.md index 17b41e9fd78d9..d45baa63d5b66 100644 --- a/projects/packages/classic-theme-helper/CHANGELOG.md +++ b/projects/packages/classic-theme-helper/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.9.0] - 2025-01-13 +### Added +- Nova Restaurant: ensuring the custom post type is now being required via the package. [#40782] + ## [0.8.3] - 2025-01-10 ### Fixed - Testimonials: Fix a shortcode-related bug which occurs if the column attribute is added and set to 0. [#40896] @@ -189,6 +193,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Add wordpress folder on gitignore. [#37177] +[0.9.0]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.3...v0.9.0 [0.8.3]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.2...v0.8.3 [0.8.2]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.1...v0.8.2 [0.8.1]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.0...v0.8.1 diff --git a/projects/packages/classic-theme-helper/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper b/projects/packages/classic-theme-helper/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper deleted file mode 100644 index 2c07e0f164500..0000000000000 --- a/projects/packages/classic-theme-helper/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Nova Restaurant: ensuring the custom post type is now being required via the package. diff --git a/projects/packages/classic-theme-helper/composer.json b/projects/packages/classic-theme-helper/composer.json index c63a006f9f61b..3d0e69494887b 100644 --- a/projects/packages/classic-theme-helper/composer.json +++ b/projects/packages/classic-theme-helper/composer.json @@ -55,7 +55,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.8.x-dev" + "dev-trunk": "0.9.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-classic-theme-helper/compare/v${old}...v${new}" diff --git a/projects/packages/classic-theme-helper/package.json b/projects/packages/classic-theme-helper/package.json index ac6c4d52c2d2b..4c7e30116e270 100644 --- a/projects/packages/classic-theme-helper/package.json +++ b/projects/packages/classic-theme-helper/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-classic-theme-helper", - "version": "0.8.3", + "version": "0.9.0", "description": "Features used with classic themes", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/classic-theme-helper/#readme", "bugs": { diff --git a/projects/packages/classic-theme-helper/src/class-main.php b/projects/packages/classic-theme-helper/src/class-main.php index 376578fb7be19..bc1e255ee46e5 100644 --- a/projects/packages/classic-theme-helper/src/class-main.php +++ b/projects/packages/classic-theme-helper/src/class-main.php @@ -14,7 +14,7 @@ */ class Main { - const PACKAGE_VERSION = '0.8.3'; + const PACKAGE_VERSION = '0.9.0'; /** * Modules to include. diff --git a/projects/packages/forms/CHANGELOG.md b/projects/packages/forms/CHANGELOG.md index 9a48177e6e7a7..7006def9bb4d9 100644 --- a/projects/packages/forms/CHANGELOG.md +++ b/projects/packages/forms/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.34.6] - 2025-01-13 +### Fixed +- Add webpack plugin to rename RTL files to match core WP expectations. [#40881] +- Show email only in form submission view if name is empty. [#40898] +- Forms: Fix success message color inside a dark Cover block. [#40917] +- Forms: Update default URL field label to match front-end. [#40921] + ## [0.34.5] - 2025-01-06 ### Changed - Updated package dependencies. [#40705] [#40784] [#40792] [#40800] [#40831] @@ -747,6 +754,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added a new jetpack/forms package [#28409] - Added a public load_contact_form method for initializing the contact form module. [#28416] +[0.34.6]: https://github.com/automattic/jetpack-forms/compare/v0.34.5...v0.34.6 [0.34.5]: https://github.com/automattic/jetpack-forms/compare/v0.34.4...v0.34.5 [0.34.4]: https://github.com/automattic/jetpack-forms/compare/v0.34.3...v0.34.4 [0.34.3]: https://github.com/automattic/jetpack-forms/compare/v0.34.2...v0.34.3 diff --git a/projects/packages/forms/changelog/fix-33301-form-checkbox-field b/projects/packages/forms/changelog/fix-33301-form-checkbox-field deleted file mode 100644 index 4e4d6c8cd4a9d..0000000000000 --- a/projects/packages/forms/changelog/fix-33301-form-checkbox-field +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Minor fix - - diff --git a/projects/packages/forms/changelog/fix-form-go-back-color-success-message b/projects/packages/forms/changelog/fix-form-go-back-color-success-message deleted file mode 100644 index cbcbf6b8b5f1d..0000000000000 --- a/projects/packages/forms/changelog/fix-form-go-back-color-success-message +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Fix success message color inside a dark Cover block diff --git a/projects/packages/forms/changelog/forms-update-default-url-field-label-value b/projects/packages/forms/changelog/forms-update-default-url-field-label-value deleted file mode 100644 index bc41045c4ecee..0000000000000 --- a/projects/packages/forms/changelog/forms-update-default-url-field-label-value +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Update default URL field label to match front-end diff --git a/projects/packages/forms/changelog/try-fix-form-submission-with-no-name-but-mail b/projects/packages/forms/changelog/try-fix-form-submission-with-no-name-but-mail deleted file mode 100644 index 8ae57117118f8..0000000000000 --- a/projects/packages/forms/changelog/try-fix-form-submission-with-no-name-but-mail +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix form submission view if name field kept empty, email entry shows in name field diff --git a/projects/packages/forms/changelog/update-contact-form-rtl-styles b/projects/packages/forms/changelog/update-contact-form-rtl-styles deleted file mode 100644 index 4d6ef9d07549b..0000000000000 --- a/projects/packages/forms/changelog/update-contact-form-rtl-styles +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Add webpack plugin to rename RTL files to match core WP expectations. diff --git a/projects/packages/forms/package.json b/projects/packages/forms/package.json index 1232dbfa63258..4369cae08cc88 100644 --- a/projects/packages/forms/package.json +++ b/projects/packages/forms/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-forms", - "version": "0.34.5", + "version": "0.34.6", "description": "Jetpack Forms", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/forms/#readme", "bugs": { diff --git a/projects/packages/forms/src/class-jetpack-forms.php b/projects/packages/forms/src/class-jetpack-forms.php index 3b277f7cf5761..01e89128487e8 100644 --- a/projects/packages/forms/src/class-jetpack-forms.php +++ b/projects/packages/forms/src/class-jetpack-forms.php @@ -15,7 +15,7 @@ */ class Jetpack_Forms { - const PACKAGE_VERSION = '0.34.5'; + const PACKAGE_VERSION = '0.34.6'; /** * Load the contact form module. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/force-a-release b/projects/packages/jetpack-mu-wpcom/changelog/force-a-release new file mode 100644 index 0000000000000..d4ad6c7cc3379 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/force-a-release @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Update dependencies. diff --git a/projects/packages/post-list/CHANGELOG.md b/projects/packages/post-list/CHANGELOG.md index ca107904e5521..f1ab1c7685919 100644 --- a/projects/packages/post-list/CHANGELOG.md +++ b/projects/packages/post-list/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.7.3] - 2025-01-13 +### Fixed +- Pages and Posts: Fix the layout on mobile when details are open. [#40872] + ## [0.7.2] - 2024-12-16 ### Changed - Internal updates. @@ -130,6 +134,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated the default columns displayed on the post and page list screens - Refactored thumbnail preview to function server side. All javascript removed. +[0.7.3]: https://github.com/automattic/jetpack-post-list/compare/v0.7.2...v0.7.3 [0.7.2]: https://github.com/automattic/jetpack-post-list/compare/v0.7.1...v0.7.2 [0.7.1]: https://github.com/automattic/jetpack-post-list/compare/v0.7.0...v0.7.1 [0.7.0]: https://github.com/automattic/jetpack-post-list/compare/v0.6.5...v0.7.0 diff --git a/projects/packages/post-list/changelog/fix-edit-page-on-mobile b/projects/packages/post-list/changelog/fix-edit-page-on-mobile deleted file mode 100644 index 2df92e6d1bb24..0000000000000 --- a/projects/packages/post-list/changelog/fix-edit-page-on-mobile +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Page & Post: Fix the layout on mobile when details are open diff --git a/projects/packages/post-list/src/class-post-list.php b/projects/packages/post-list/src/class-post-list.php index d8eea02d1f6da..15d4193595a25 100644 --- a/projects/packages/post-list/src/class-post-list.php +++ b/projects/packages/post-list/src/class-post-list.php @@ -15,7 +15,7 @@ */ class Post_List { - const PACKAGE_VERSION = '0.7.2'; + const PACKAGE_VERSION = '0.7.3'; const FEATURE = 'enhanced_post_list'; /** diff --git a/projects/packages/publicize/CHANGELOG.md b/projects/packages/publicize/CHANGELOG.md index 9022c932ada47..2ccb8910c271b 100644 --- a/projects/packages/publicize/CHANGELOG.md +++ b/projects/packages/publicize/CHANGELOG.md @@ -5,14 +5,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.57.2] - 2025-01-13 +### Added +- Publicize: Allow filtering of connections in publicize rest endpoint. [#40914] + +### Changed +- Update connections post field rest endpoint to use the updated schema. [#40916] + ## [0.57.1] - 2024-12-30 ### Fixed - Social: Ensure that broken connection notices work fine on WoA sites. [#40732] ## [0.57.0] - 2024-12-23 ### Changed -- Moved wpcom/v2/publicize/connections endpoint to publicize package. [#40607] -- Script data: Don't call service endpoint on wpcom. [#40596] +- Move wpcom/v2/publicize/connections endpoint to publicize package. [#40607] +- Script data: Don't call service endpoint on WP.com. [#40596] ## [0.56.5] - 2024-12-16 ### Changed @@ -28,23 +35,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.56.2] - 2024-11-26 ### Fixed -- Fixed undefined index error on Atomic sites. [#40337] +- Fix undefined index error on Atomic sites. [#40337] ## [0.56.1] - 2024-11-25 ### Added -- Added initial post share status to the initial state. [#40301] +- Add initial post share status to the initial state. [#40301] ### Changed - Updated package dependencies. [#40286] [#40288] ### Fixed -- Fixed initial state error in the editor for Simple sites. [#40319] +- Fix initial state error in the editor for Simple sites. [#40319] - Fix page-detection util methods to stop unnecessary API calls to WordPress.com. [#40311] -- Fixed call to undefined method on WordPress.com. [#40328] +- Fix call to undefined method on WordPress.com. [#40328] ## [0.56.0] - 2024-11-18 ### Added -- Added a new toggle for UTM tracking [#39998] +- Add a new toggle for UTM tracking. [#39998] ### Removed - General: Update minimum PHP version to 7.2. [#40147] @@ -796,6 +803,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated package dependencies. - Update package.json metadata. +[0.57.2]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.1...v0.57.2 [0.57.1]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.0...v0.57.1 [0.57.0]: https://github.com/Automattic/jetpack-publicize/compare/v0.56.5...v0.57.0 [0.56.5]: https://github.com/Automattic/jetpack-publicize/compare/v0.56.4...v0.56.5 diff --git a/projects/packages/publicize/changelog/add-filtering-for-publicize-endpoints b/projects/packages/publicize/changelog/add-filtering-for-publicize-endpoints deleted file mode 100644 index 90fd57e7a5a4b..0000000000000 --- a/projects/packages/publicize/changelog/add-filtering-for-publicize-endpoints +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Publicize: Allow filtering of connections in publicize rest endpoint diff --git a/projects/packages/publicize/changelog/update-social-connections-post-field b/projects/packages/publicize/changelog/update-social-connections-post-field deleted file mode 100644 index 64a24032607cd..0000000000000 --- a/projects/packages/publicize/changelog/update-social-connections-post-field +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated connections post field rest endpoint to use the updated schema diff --git a/projects/packages/publicize/package.json b/projects/packages/publicize/package.json index 88fa5c4a11e07..5e99f301d1008 100644 --- a/projects/packages/publicize/package.json +++ b/projects/packages/publicize/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-publicize", - "version": "0.57.1", + "version": "0.57.2", "description": "Publicize makes it easy to share your site’s posts on several social media networks automatically when you publish a new post.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/publicize/#readme", "bugs": { diff --git a/projects/packages/woocommerce-analytics/CHANGELOG.md b/projects/packages/woocommerce-analytics/CHANGELOG.md index 4848a5a0b99f6..d434ee4a08099 100644 --- a/projects/packages/woocommerce-analytics/CHANGELOG.md +++ b/projects/packages/woocommerce-analytics/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.4.1] - 2025-01-09 ### Fixed -- Temporarily disable setcookie to avoid caching issues. +- Temporarily disable setcookie to avoid caching issues. [#40937] ## [0.4.0] - 2025-01-06 ### Added @@ -87,6 +87,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix namespace issue with WooCommerce class reference. [#35857] - General: bail early when WooCommerce is not active. [#36278] +[0.4.2]: https://github.com/Automattic/woocommerce-analytics/compare/v0.4.1...v0.4.2 [0.4.1]: https://github.com/Automattic/woocommerce-analytics/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/Automattic/woocommerce-analytics/compare/v0.3.1...v0.4.0 [0.3.1]: https://github.com/Automattic/woocommerce-analytics/compare/v0.3.0...v0.3.1 diff --git a/projects/packages/woocommerce-analytics/changelog/disable-woo_analytics_session_cookie b/projects/packages/woocommerce-analytics/changelog/disable-woo_analytics_session_cookie deleted file mode 100644 index 2bc202ff7f8f1..0000000000000 --- a/projects/packages/woocommerce-analytics/changelog/disable-woo_analytics_session_cookie +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Temporarily disable setcookie to avoid caching issues. diff --git a/projects/plugins/classic-theme-helper-plugin/changelog/prerelease#14 b/projects/plugins/classic-theme-helper-plugin/changelog/prerelease#14 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/classic-theme-helper-plugin/changelog/prerelease#14 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/classic-theme-helper-plugin/composer.lock b/projects/plugins/classic-theme-helper-plugin/composer.lock index 3fc0b35706242..28fa01c5376aa 100644 --- a/projects/plugins/classic-theme-helper-plugin/composer.lock +++ b/projects/plugins/classic-theme-helper-plugin/composer.lock @@ -202,7 +202,7 @@ "dist": { "type": "path", "url": "../../packages/classic-theme-helper", - "reference": "198fd841c5341850e247c46168d77b1bc6a13a34" + "reference": "97a68997e5f3dc805df942c53586bab3f2137427" }, "require": { "automattic/jetpack-assets": "@dev", @@ -220,7 +220,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.8.x-dev" + "dev-trunk": "0.9.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-classic-theme-helper/compare/v${old}...v${new}" diff --git a/projects/plugins/jetpack/CHANGELOG.md b/projects/plugins/jetpack/CHANGELOG.md index b03bc9fa4105e..dc7834e614222 100644 --- a/projects/plugins/jetpack/CHANGELOG.md +++ b/projects/plugins/jetpack/CHANGELOG.md @@ -2,6 +2,27 @@ ### This is a list detailing changes for all Jetpack releases. +## 14.3-a.1 - 2025-01-13 +### Improved compatibility +- Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. [#40782] + +### Bug fixes +- Authors widget: Fix saving of unchecked "Display all authors" checkbox in the legacy widget editor. [#40878] +- Stats: Fix saving of custom roles settings. [#40853] +- Pages and Posts: Fix the layout on mobile when details are open. [#40872] +- Testimonials: Fix shortcode-related bug. [#40896] +- Tiled Gallery block: Ensure icons are visible when selecting image in editor. [#40779] + +### Other changes +- Jetpack AI: Enable ratings feedback thumbs for all. [#40772] +- Newsletter: Update category settings to clarify that one or more categories must be selected to allow people to subscribe. [#40727] +- Notifications: Support three-letter language code translations. [#40973] +- Post list: Ensure copy quick link is added after quick edit. [#40889] +- Stats: Load the adminbar stats graph lazily. [#40865] +- Stats: Remove legacy Stats widget loader. [#40839] +- Updated dependencies. [#40773] +- Update social-logos import from default to named. [#40816] + ## 14.2.1 - 2025-01-09 ### Bug fixes - WC Analytics: Temporarily disable setcookie to avoid caching issues. [#40937] diff --git a/projects/plugins/jetpack/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper b/projects/plugins/jetpack/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper deleted file mode 100644 index e588751ac9732..0000000000000 --- a/projects/plugins/jetpack/changelog/add-require-nova-restaurant-cpt-in-classic-theme-helper +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: compat - -Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. diff --git a/projects/plugins/jetpack/changelog/disable-woo_analytics_session_cookie b/projects/plugins/jetpack/changelog/disable-woo_analytics_session_cookie deleted file mode 100644 index 81fe027e3740b..0000000000000 --- a/projects/plugins/jetpack/changelog/disable-woo_analytics_session_cookie +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -WC Analytics: Temporarily disable setcookie to avoid caching issues. diff --git a/projects/plugins/jetpack/changelog/fix-40969-notifications_pane_language_bug b/projects/plugins/jetpack/changelog/fix-40969-notifications_pane_language_bug deleted file mode 100644 index 4e47b5a5aa1d9..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-40969-notifications_pane_language_bug +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Notifications: Support three-letter language code translations. diff --git a/projects/plugins/jetpack/changelog/fix-author-widget-all-checkbox b/projects/plugins/jetpack/changelog/fix-author-widget-all-checkbox deleted file mode 100644 index 31ef942ee49e0..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-author-widget-all-checkbox +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Authors widget: Fix saving of unchecked "Display all authors" checkbox in the legacy widget editor. diff --git a/projects/plugins/jetpack/changelog/fix-edit-page-on-mobile b/projects/plugins/jetpack/changelog/fix-edit-page-on-mobile deleted file mode 100644 index 5d5cfcd8ecf89..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-edit-page-on-mobile +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Page & Post: Fix the layout on mobile when details are open diff --git a/projects/plugins/jetpack/changelog/fix-newsletter-welcome-message-html_wpses b/projects/plugins/jetpack/changelog/fix-newsletter-welcome-message-html_wpses deleted file mode 100644 index ba2a3a0c37a01..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-newsletter-welcome-message-html_wpses +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Adding extra html to be allowed in the welcome message diff --git a/projects/plugins/jetpack/changelog/fix-show-quicklinks-after-quickedit b/projects/plugins/jetpack/changelog/fix-show-quicklinks-after-quickedit deleted file mode 100644 index ae09f26d7dccd..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-show-quicklinks-after-quickedit +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Post list: Ensure copy quick link is added after quick edit diff --git a/projects/plugins/jetpack/changelog/fix-stats-setting-role-toggles b/projects/plugins/jetpack/changelog/fix-stats-setting-role-toggles deleted file mode 100644 index eee7a6f4e22e0..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-stats-setting-role-toggles +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Fix custom roles settings are not sticking for Jetpack Stats diff --git a/projects/plugins/jetpack/changelog/fix-testimonials-module-by-zero-error b/projects/plugins/jetpack/changelog/fix-testimonials-module-by-zero-error deleted file mode 100644 index 02e4047333bba..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-testimonials-module-by-zero-error +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Testimonials: fix a shortcode related bug which ccurs if the column attribute is added and set to 0 diff --git a/projects/plugins/jetpack/changelog/fix-tiled-gallery-image-controls b/projects/plugins/jetpack/changelog/fix-tiled-gallery-image-controls deleted file mode 100644 index 2715285d608b0..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-tiled-gallery-image-controls +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Tiled Gallery block: ensure movement and close icons are visible when selecting image in editor, by changing focusable element. diff --git a/projects/plugins/jetpack/changelog/update-boost-messaging-admin-page b/projects/plugins/jetpack/changelog/update-boost-messaging-admin-page deleted file mode 100644 index fe3aba230fa5e..0000000000000 --- a/projects/plugins/jetpack/changelog/update-boost-messaging-admin-page +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: enhancement -Comment: Dashboard: update wording for Boost plugin prompt. - - diff --git a/projects/plugins/jetpack/changelog/update-jetpack-ai-enable-feedback b/projects/plugins/jetpack/changelog/update-jetpack-ai-enable-feedback deleted file mode 100644 index 75be9179cedb6..0000000000000 --- a/projects/plugins/jetpack/changelog/update-jetpack-ai-enable-feedback +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Jetpack AI: Enable ratings feedback thumbs for all diff --git a/projects/plugins/jetpack/changelog/update-jetpack-pre_14.3_to_test_reset b/projects/plugins/jetpack/changelog/update-jetpack-pre_14.3_to_test_reset deleted file mode 100644 index 3c38200678747..0000000000000 --- a/projects/plugins/jetpack/changelog/update-jetpack-pre_14.3_to_test_reset +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Clear testing instructions. - - diff --git a/projects/plugins/jetpack/changelog/update-jetpack-react-router-dom_v5_to_v6 b/projects/plugins/jetpack/changelog/update-jetpack-react-router-dom_v5_to_v6 deleted file mode 100644 index aa5f62eedbb49..0000000000000 --- a/projects/plugins/jetpack/changelog/update-jetpack-react-router-dom_v5_to_v6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Updated dependencies. diff --git a/projects/plugins/jetpack/changelog/update-newsletter-category-settings b/projects/plugins/jetpack/changelog/update-newsletter-category-settings deleted file mode 100644 index d57cd003e9801..0000000000000 --- a/projects/plugins/jetpack/changelog/update-newsletter-category-settings +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Update newsletter category settings to clarify that you need to choose one or more categories to allow people to subscribe to. diff --git a/projects/plugins/jetpack/changelog/update-social-logo-usage b/projects/plugins/jetpack/changelog/update-social-logo-usage deleted file mode 100644 index 097b542ee724f..0000000000000 --- a/projects/plugins/jetpack/changelog/update-social-logo-usage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Updated social-logos import from default to named diff --git a/projects/plugins/jetpack/changelog/update-stats-lazy-loading-adminbar-image b/projects/plugins/jetpack/changelog/update-stats-lazy-loading-adminbar-image deleted file mode 100644 index cc3aacb2a56ba..0000000000000 --- a/projects/plugins/jetpack/changelog/update-stats-lazy-loading-adminbar-image +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Load the adminbar stats graph lazily" diff --git a/projects/plugins/jetpack/changelog/update-stats_remove_legacy_widget_loader b/projects/plugins/jetpack/changelog/update-stats_remove_legacy_widget_loader deleted file mode 100644 index 23a50a2206b08..0000000000000 --- a/projects/plugins/jetpack/changelog/update-stats_remove_legacy_widget_loader +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Remove legacy Stats widget loader diff --git a/projects/plugins/jetpack/composer.json b/projects/plugins/jetpack/composer.json index a15a3b5c01015..0d56f82d14f60 100644 --- a/projects/plugins/jetpack/composer.json +++ b/projects/plugins/jetpack/composer.json @@ -106,7 +106,7 @@ "platform": { "ext-intl": "0.0.0" }, - "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_2_1", + "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3_a_1", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index d84902c054f68..27ef082475a4b 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -704,7 +704,7 @@ "dist": { "type": "path", "url": "../../packages/classic-theme-helper", - "reference": "198fd841c5341850e247c46168d77b1bc6a13a34" + "reference": "97a68997e5f3dc805df942c53586bab3f2137427" }, "require": { "automattic/jetpack-assets": "@dev", @@ -722,7 +722,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.8.x-dev" + "dev-trunk": "0.9.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-classic-theme-helper/compare/v${old}...v${new}" diff --git a/projects/plugins/jetpack/jetpack.php b/projects/plugins/jetpack/jetpack.php index db680f6040026..b7b4b4d9580d5 100644 --- a/projects/plugins/jetpack/jetpack.php +++ b/projects/plugins/jetpack/jetpack.php @@ -4,7 +4,7 @@ * Plugin URI: https://jetpack.com * Description: Security, performance, and marketing tools made by WordPress experts. Jetpack keeps your site protected so you can focus on more important things. * Author: Automattic - * Version: 14.2.1 + * Version: 14.3-a.1 * Author URI: https://jetpack.com * License: GPL2+ * Text Domain: jetpack @@ -34,7 +34,7 @@ define( 'JETPACK__MINIMUM_WP_VERSION', '6.6' ); define( 'JETPACK__MINIMUM_PHP_VERSION', '7.2' ); -define( 'JETPACK__VERSION', '14.2.1' ); +define( 'JETPACK__VERSION', '14.3-a.1' ); /** * Constant used to fetch the connection owner token diff --git a/projects/plugins/jetpack/modules/custom-post-types/nova.php b/projects/plugins/jetpack/modules/custom-post-types/nova.php index 3d6ef5e8e64f9..9373ef4d0c63a 100644 --- a/projects/plugins/jetpack/modules/custom-post-types/nova.php +++ b/projects/plugins/jetpack/modules/custom-post-types/nova.php @@ -45,7 +45,7 @@ class Nova_Restaurant { /** * Version number used when enqueuing all resources (css and js). * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @var string */ @@ -54,7 +54,7 @@ class Nova_Restaurant { /** * Default markup for the menu items. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @var array */ @@ -72,7 +72,7 @@ class Nova_Restaurant { /** * Array of markup for the menu items. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @var array */ @@ -81,7 +81,7 @@ class Nova_Restaurant { /** * Last term ID of a loop of menu items. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @var bool|int */ @@ -90,7 +90,7 @@ class Nova_Restaurant { /** * Current term ID of a loop of menu items. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @var bool|int */ @@ -99,14 +99,14 @@ class Nova_Restaurant { /** * Initialize class. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param array $menu_item_loop_markup Array of markup for the menu items. * * @return Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant */ public static function init( $menu_item_loop_markup = array() ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant::init( $menu_item_loop_markup ); } @@ -155,12 +155,12 @@ public static function __callStatic( $name, $arguments ) { /** * Should this Custom Post Type be made available? * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return bool */ public function site_supports_nova() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->site_supports_nova(); } @@ -169,109 +169,109 @@ public function site_supports_nova() { /** * Register Taxonomies and Post Type * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. */ public function register_taxonomies() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->register_taxonomies(); } /** * Register our Post Type. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. */ public function register_post_types() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->register_post_types(); } /** * Update messages for the Menu Item admin. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param array $messages Existing post update messages. * * @return array $messages Updated post update messages. */ public function updated_messages( $messages ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->updated_messages( $messages ); } /** * Nova styles and scripts. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param string $hook Page hook. * * @return void */ public function enqueue_nova_styles( $hook ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->enqueue_nova_styles( $hook ); } /** * Change ‘Enter Title Here’ text for the Menu Item. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param string $title Default title placeholder text. * * @return string */ public function change_default_title( $title ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->change_default_title( $title ); } /** * Add to Dashboard At A Glance * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function add_to_dashboard() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->add_to_dashboard(); } /** * If the WP query for our menu items. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param WP_Query $query WP Query. * * @return bool */ public function is_menu_item_query( $query ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->is_menu_item_query( $query ); } /** * Custom sort the menu item queries by menu order. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param WP_Query $query WP Query. * * @return void */ public function sort_menu_item_queries_by_menu_order( $query ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->sort_menu_item_queries_by_menu_order( $query ); } /** * Custom sort the menu item queries by menu taxonomies. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param WP_Post[] $posts Array of post objects. * @param WP_Query $query The WP_Query instance. @@ -279,43 +279,43 @@ public function sort_menu_item_queries_by_menu_order( $query ) { * @return WP_Post[] */ public function sort_menu_item_queries_by_menu_taxonomy( $posts, $query ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->sort_menu_item_queries_by_menu_taxonomy( $posts, $query ); } /** * Add new "Add many items" submenu, custom colunmns, and custom bulk actions. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function add_admin_menus() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->add_admin_menus(); } /** * Custom Nova Icon CSS * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function set_custom_font_icon() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->set_custom_font_icon(); } /** * Load Nova menu management tools on the CPT admin screen. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function current_screen_load() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->current_screen_load(); } @@ -324,59 +324,59 @@ public function current_screen_load() { /** * Display a notice in wp-admin after items have been changed. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function admin_notices() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->admin_notices(); } /** * Do not allow sorting by title. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param array $columns An array of sortable columns. * * @return array $columns. */ public function no_title_sorting( $columns ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->no_title_sorting( $columns ); } /** * Set up custom columns for our Nova menu. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function setup_menu_item_columns() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->setup_menu_item_columns(); } /** * Add custom columns to the Nova menu item list. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param array $columns An array of columns. * * @return array $columns. */ public function menu_item_columns( $columns ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->menu_item_columns( $columns ); } /** * Display custom data in each new custom column we created. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param string $column The name of the column to display. * @param int $post_id The current post ID. @@ -384,31 +384,31 @@ public function menu_item_columns( $columns ) { * @return void */ public function menu_item_column_callback( $column, $post_id ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->menu_item_column_callback( $column, $post_id ); } /** * Get menu item by post ID. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param int $post_id Post ID. * * @return bool|WP_Term */ public function get_menu_by_post_id( $post_id = null ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->get_menu_by_post_id( $post_id ); } /** * Fires on a menu edit page. We might have drag-n-drop reordered * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. */ public function maybe_reorder_menu_items() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->maybe_reorder_menu_items(); } @@ -416,38 +416,38 @@ public function maybe_reorder_menu_items() { * Handle changes to menu items. * (process actions, update data, enqueue necessary scripts). * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function edit_menu_items_page_load() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->edit_menu_items_page_load(); } /** * Process actions to move menu items around. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function handle_menu_item_actions() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->handle_menu_item_actions(); } /** * Add menu title rows to the list table * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param WP_Post $post The Post object. * * @return void */ public function show_menu_titles_in_menu_item_list( $post ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->show_menu_titles_in_menu_item_list( $post ); } @@ -457,48 +457,48 @@ public function show_menu_titles_in_menu_item_list( $post ) { * Handle form submissions that aim to add many menu items at once. * (process posted data and enqueue necessary script). * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function add_many_new_items_page_load() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->add_many_new_items_page_load(); } /** * Enqueue script to create many items at once. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function enqueue_many_items_scripts() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->enqueue_many_items_scripts(); } /** * Process form request to create many items at once. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function process_form_request() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->process_form_request(); } /** * Admin page contents for adding many menu items at once. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function add_many_new_items_page() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->add_many_new_items_page(); } @@ -508,38 +508,38 @@ public function add_many_new_items_page() { * Create admin meta box to save price for a menu item, * and add script to add extra checkboxes to the UI. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function register_menu_item_meta_boxes() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->register_menu_item_meta_boxes(); } /** * Meta box to edit the price of a menu item. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param WP_Post $post The post object. * * @return void */ public function menu_item_price_meta_box( $post ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->menu_item_price_meta_box( $post ); } /** * Save the price of a menu item. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param int $post_id Post ID. */ public function add_post_meta( $post_id ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->add_post_meta( $post_id ); } @@ -548,63 +548,63 @@ public function add_post_meta( $post_id ) { /** * Get ordered array of menu items. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param array $args Optional argumments. * * @return array */ public function get_menus( $args = array() ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->get_menus( $args ); } /** * Get first menu taxonomy "leaf". * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param int $post_id Post ID. * * @return bool|WP_Term|WP_Error|null */ public function get_menu_item_menu_leaf( $post_id ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->get_menu_item_menu_leaf( $post_id ); } /** * Get a list of the labels linked to a menu item. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param int $post_id Post ID. * * @return void */ public function list_labels( $post_id = 0 ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->list_labels( $post_id ); } /** * Get a list of the labels linked to a menu item, with links to manage them. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param int $post_id Post ID. * * @return void */ public function list_admin_labels( $post_id = 0 ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->list_admin_labels( $post_id ); } /** * Update post meta with the price defined in meta box. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param int $post_id Post ID. * @param string $price Price. @@ -612,35 +612,35 @@ public function list_admin_labels( $post_id = 0 ) { * @return int|bool */ public function set_price( $post_id = 0, $price = '' ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->set_price( $post_id, $price ); } /** * Get the price of a menu item. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param int $post_id Post ID. * * @return bool|string */ public function get_price( $post_id = 0 ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->get_price( $post_id ); } /** * Echo the price of a menu item. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param int $post_id Post ID. * * @return void */ public function display_price( $post_id = 0 ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->display_price( $post_id ); } @@ -650,14 +650,14 @@ public function display_price( $post_id = 0 ) { * Get markup for a menu item. * Note: Does not support nested loops. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param null|string $field The field to get the value for. * * @return array */ public function get_menu_item_loop_markup( $field = null ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->get_menu_item_loop_markup( $field ); } @@ -666,14 +666,14 @@ public function get_menu_item_loop_markup( $field = null ) { // phpcs:ignore Var * Attached to the 'template_include' *filter*, * which fires only during a real blog view (not in admin, feeds, etc.) * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param string $template Template File. * * @return string Template File. VERY Important. */ public function setup_menu_item_loop_markup__in_filter( $template ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->setup_menu_item_loop_markup__in_filter( $template ); } @@ -681,14 +681,14 @@ public function setup_menu_item_loop_markup__in_filter( $template ) { * If the Query is a Menu Item Query, start outputing the Menu Item Loop Marku * Attached to the 'loop_start' action. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param WP_Query $query Post query. * * @return void */ public function start_menu_item_loop( $query ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->start_menu_item_loop( $query ); } @@ -696,14 +696,14 @@ public function start_menu_item_loop( $query ) { * Outputs the Menu Item Loop Marku * Attached to the 'the_post' action. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param WP_Post $post Post object. * * @return void */ public function menu_item_loop_each_post( $post ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->menu_item_loop_each_post( $post ); } @@ -711,68 +711,68 @@ public function menu_item_loop_each_post( $post ) { * If the Query is a Menu Item Query, stop outputing the Menu Item Loop Marku * Attached to the 'loop_end' action. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param WP_Query $query Post query. * * @return void */ public function stop_menu_item_loop( $query ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->stop_menu_item_loop( $query ); } /** * Outputs the Menu Group Header * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @return void */ public function menu_item_loop_header() { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->menu_item_loop_header(); } /** * Outputs a Menu Item Markup element opening tag * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param string $field - Menu Item Markup settings field. * * @return void */ public function menu_item_loop_open_element( $field ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->menu_item_loop_open_element( $field ); } /** * Outputs a Menu Item Markup element closing tag * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param string $field - Menu Item Markup settings field. * * @return void */ public function menu_item_loop_close_element( $field ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); $this->new_instance->menu_item_loop_close_element( $field ); } /** * Returns a Menu Item Markup element's class attribute. * - * @deprecated $$next-version$$ Moved to Classic Theme Helper package. + * @deprecated 14.3 Moved to Classic Theme Helper package. * * @param string $class Class name. * * @return string HTML class attribute with leading whitespace. */ public function menu_item_loop_class( $class ) { - _deprecated_function( __FUNCTION__, 'jetpack-$$next-version$$' ); + _deprecated_function( __FUNCTION__, 'jetpack-14.3' ); return $this->new_instance->menu_item_loop_class( $class ); } } diff --git a/projects/plugins/jetpack/package.json b/projects/plugins/jetpack/package.json index 80ab7460baf93..5885e3bd71c20 100644 --- a/projects/plugins/jetpack/package.json +++ b/projects/plugins/jetpack/package.json @@ -1,6 +1,6 @@ { "name": "Jetpack", - "version": "14.2.1", + "version": "14.3.0-a.1", "private": true, "description": "[Jetpack](https://jetpack.com/) is a WordPress plugin that supercharges your self-hosted WordPress site with the awesome cloud power of [WordPress.com](https://wordpress.com).", "homepage": "https://jetpack.com", diff --git a/projects/plugins/jetpack/readme.txt b/projects/plugins/jetpack/readme.txt index 02a16ca255a97..9c7b5b4aa5cde 100644 --- a/projects/plugins/jetpack/readme.txt +++ b/projects/plugins/jetpack/readme.txt @@ -326,33 +326,16 @@ Jetpack Backup can do a full website migration to a new host, migrate theme file == Changelog == -## 14.2.1 - 2025-01-09 -### Bug fixes -- WC Analytics: Temporarily disable setcookie to avoid caching issues. - -### 14.2 - 2025-01-07 -#### Enhancements -- Social: Improve Jetpack Likes behavior for better theme integration if the post has likes. -- Stats: Allow programatically fetching stats for specific sites when using Jetpack's tools. -- Stats: Enable sparkline chart in the WP Admin bar. -- Stats: Sunset Legacy Stats experience. - +### 14.3-a.1 - 2025-01-13 #### Improved compatibility -- Google Photos Picker: Update UX opening picker right after pressing "change selection" CTA. -- Jetpack Testimonials: Ensure feature loads via the Classic Theme Helper package instead of the module. -- SEO: Ensure support for adding an SEO title and description for custom post types. -- WordPress 6.7 Compatibility: Fix notices caused by translation calls happening too early in the load order. +- Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. #### Bug fixes -- Facebook Embeds: Add a white background to embeds to avoid transparent background interfering with readability. -- Form Block: Fix validation of URL input types to allow query strings. -- Google Fonts: Clean up the Google Fonts data if either the Google Fonts module is disabled or Jetpack is disabled. -- Import: Set WP_IMPORTING constant correctly when doing an import. -- SEO: Ensure that SEO fields are not visible when another SEO plugin is active. -- Shortcode embeds: Ensure Instagram reels are properly displayed in AMP views. -- Shortcodes: Prevent conflict with third-party SoundCloud shortcodes. -- Slideshow block: Fix block display when added within a Stack block. -- WooCommerce Analytics: Fix fatal error when WooCommerce cart object is not available. +- Authors widget: Fix saving of unchecked "Display all authors" checkbox in the legacy widget editor. +- Stats: Fix saving of custom roles settings. +- Pages and Posts: Fix the layout on mobile when details are open. +- Testimonials: Fix shortcode-related bug. +- Tiled Gallery block: Ensure icons are visible when selecting image in editor. -------- diff --git a/projects/plugins/jetpack/changelog/prerelease b/projects/plugins/mu-wpcom-plugin/changelog/prerelease similarity index 79% rename from projects/plugins/jetpack/changelog/prerelease rename to projects/plugins/mu-wpcom-plugin/changelog/prerelease index a1c1831fa1ef7..9aa70e3ec1f75 100644 --- a/projects/plugins/jetpack/changelog/prerelease +++ b/projects/plugins/mu-wpcom-plugin/changelog/prerelease @@ -1,5 +1,5 @@ Significance: patch -Type: other +Type: changed Comment: Updated composer.lock. diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index 9840b6d409dca..ce2f846f14987 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -407,7 +407,7 @@ "dist": { "type": "path", "url": "../../packages/classic-theme-helper", - "reference": "198fd841c5341850e247c46168d77b1bc6a13a34" + "reference": "97a68997e5f3dc805df942c53586bab3f2137427" }, "require": { "automattic/jetpack-assets": "@dev", @@ -425,7 +425,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.8.x-dev" + "dev-trunk": "0.9.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-classic-theme-helper/compare/v${old}...v${new}" diff --git a/projects/plugins/wpcomsh/changelog/prerelease#7 b/projects/plugins/wpcomsh/changelog/prerelease#7 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/prerelease#7 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index c7dc8188a6af8..c896c93626bbd 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -472,7 +472,7 @@ "dist": { "type": "path", "url": "../../packages/classic-theme-helper", - "reference": "198fd841c5341850e247c46168d77b1bc6a13a34" + "reference": "97a68997e5f3dc805df942c53586bab3f2137427" }, "require": { "automattic/jetpack-assets": "@dev", @@ -490,7 +490,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.8.x-dev" + "dev-trunk": "0.9.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-classic-theme-helper/compare/v${old}...v${new}" From 233551deb0b55e6145b1555cc3c9cfba55e2b723 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Mon, 13 Jan 2025 16:45:03 -0500 Subject: [PATCH 037/420] ci: Upload coverage data to jetpackcodecoverage site (#41008) After running the tests, prepare the coverage reports and upload them to jetpackcodecoverage.atomicsites.blog. --- .../files/coverage-munger/upload-coverage.sh | 97 +++++++++++++++++++ .github/workflows/tests.yml | 31 +++++- tools/cli/commands/dependencies.js | 1 + 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100755 .github/files/coverage-munger/upload-coverage.sh diff --git a/.github/files/coverage-munger/upload-coverage.sh b/.github/files/coverage-munger/upload-coverage.sh new file mode 100755 index 0000000000000..4dace87c5b189 --- /dev/null +++ b/.github/files/coverage-munger/upload-coverage.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +## Environment used by this script: +# +# Required: +# - GITHUB_SHA: Commit SHA. +# - PR_ID: PR number or "trunk". +# - SECRET: Shared secret. + +set -eo pipefail + +if [[ ! -f coverage/summary.tsv ]]; then + echo 'No coverage was generated.' + exit 0 +fi + +mkdir coverage-data +cp coverage/summary.tsv coverage-data/summary.tsv +gzip -9 coverage-data/summary.tsv + +if [[ -f coverage/js-combined.json ]]; then + echo '::group::Pnpm install' + pnpm install + echo '::endgroup::' + + echo '::group::Generating JS coverage report' + .github/files/coverage-munger/node_modules/.bin/nyc report --no-exclude-after-remap --report-dir=coverage-data/js --temp-dir=coverage/ --reporter=html-spa + echo '::endgroup::' +fi + +if [[ -f coverage/php-combined.cov ]]; then + echo '::group::Composer install' + composer --working-dir=.github/files/coverage-munger/ update + echo '::endgroup::' + + echo '::group::Generating PHP coverage report' + .github/files/coverage-munger/vendor/bin/phpcov merge --html coverage-data/php coverage/ + echo '::endgroup::' +fi + +echo '::group::Creating zip file' +zip -Xr9 coverage-data.zip coverage-data/ +echo '::endgroup::' + +echo '::group::Uploading zip file' +# Because we don't know how big the zip is going to wind up being and have to upload via HTTP, +# we created a simple chunked-upload protocol. This sends one command. +# +# $1 - Query parameters. +# $2 - Chunk filename, if any. +# $SECRET - Shared secret. +# +# Output: +# JSON - JSON response. Also printed. +function do_req { + local args=( + --header "Shared-Secret: $SECRET" + --url "https://jetpackcodecoverage.atomicsites.blog/upload-coverage-data.php?$1" + ) + if [[ -n "$2" ]]; then + args+=( --form "chunk=@$2" ) + fi + + echo "=> $1" + if JSON=$( curl "${args[@]}" ) && jq -e '.ok == true' <<<"$JSON" &>/dev/null; then + jq . <<<"$JSON" + return 0 + fi + echo "::error::Upload failed: ${JSON/$'\n'/%0A}" + return 1 +} + +SZ=$( stat -c %s coverage-data.zip ) +SHA=$( sha256sum coverage-data.zip ) +ID=$( jq --arg V "$PR_ID" -nr '$V | @uri' ) +COMMIT=$( jq --arg V "$GITHUB_SHA" -nr '$V | @uri' ) +do_req "op=begin&id=$ID&commit=$COMMIT&len=$SZ&sha=${SHA%% *}" +TOKEN=$( jq -r '.token | @uri' <<<"$JSON" ) +CSZ=$( jq -r .chunkSize <<<"$JSON" ) + +# Abort upload on exit +function onexit { + if [[ -n "$TOKEN" ]]; then + do_req "op=abort&token=$TOKEN" || true + TOKEN= + fi +} +trap onexit exit + +for (( O=0; O < SZ; O+=CSZ )); do + dd if=coverage-data.zip of=chunk bs=32K skip=${O}B count=${CSZ}B + do_req "op=chunk&token=$TOKEN" chunk +done + +do_req "op=finish&token=$TOKEN" +TOKEN= +echo '::endgroup::' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a18c812be4b0d..f6ef4c9cdc95e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -52,6 +52,10 @@ jobs: matrix: include: ${{ fromJson( needs.create-matrix.outputs.matrix ) }} + # Note matrix-job outputs are kind of weird. Last-to-run job that sets a non-empty value wins. + outputs: + did-coverage: ${{ ( steps.process-coverage.conclusion == 'success' && steps.upload-artifacts.conclusion == 'success' ) && 'true' || '' }} + steps: - uses: actions/checkout@v4 with: @@ -249,6 +253,7 @@ jobs: exit $EXIT - name: Process coverage results + id: process-coverage env: CHANGED: ${{ steps.changed.outputs.projects }} if: matrix.script == 'test-coverage' && always() @@ -266,6 +271,7 @@ jobs: echo "any=false" >> "$GITHUB_OUTPUT" fi - name: Upload artifacts + id: upload-artifacts if: always() && steps.check-artifacts.outputs.any == 'true' uses: actions/upload-artifact@v4 with: @@ -274,11 +280,34 @@ jobs: include-hidden-files: true retention-days: 7 + publish-coverage-data: + name: Publish coverage data + runs-on: ubuntu-latest + timeout-minutes: 10 # 2025-01-10 Wild guess + needs: run-tests + if: always() && needs.run-tests.outputs.did-coverage == 'true' && ( github.event_name == 'pull_request' || github.ref == 'refs/heads/trunk' ) + steps: + - uses: actions/checkout@v4 + + - name: Setup tools + uses: ./.github/actions/tool-setup + + - name: Download coverage artifact + uses: actions/download-artifact@v4 + with: + name: 'Code coverage' + path: coverage + + - name: Upload coverage results + env: + PR_ID: ${{ github.event_name != 'pull_request' && 'trunk' || github.event.pull_request.number }} + SECRET: ${{ secrets.CODECOV_SECRET }} + run: .github/files/coverage-munger/upload-coverage.sh + storybook-test: name: Storybook tests runs-on: ubuntu-latest timeout-minutes: 20 # 2024-02-23 Wild guess - continue-on-error: true # Until it passes steps: - uses: actions/checkout@v4 diff --git a/tools/cli/commands/dependencies.js b/tools/cli/commands/dependencies.js index 774b9063b64fa..14160b82b94be 100644 --- a/tools/cli/commands/dependencies.js +++ b/tools/cli/commands/dependencies.js @@ -24,6 +24,7 @@ infrastructureFileSets.test = new Set( [ '.github/files/coverage-munger/package.json', '.github/files/coverage-munger/extract-php-summary-data.php', '.github/files/coverage-munger/process-coverage.sh', + '.github/files/coverage-munger/upload-coverage.sh', '.github/files/setup-wordpress-env.sh', '.github/workflows/tests.yml', ] ); From 2b7feac095e116ead5c6a6e760d16c132b1eb26d Mon Sep 17 00:00:00 2001 From: sdnunca Date: Mon, 13 Jan 2025 23:54:31 +0200 Subject: [PATCH 038/420] Update jetpack-mu-wpcom translation files (#41005) Co-authored-by: sdnunca --- .../changelog/update-translations | 5 + ...m-ar-14e8287aa601c8c430c4d159f4ed7a88.json | 18 ++ .../languages/jetpack-mu-wpcom-ar.mo | Bin 47099 -> 50484 bytes .../languages/jetpack-mu-wpcom-ar.po | 173 ++++++++++++------ ...m-de-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-de_DE.mo | Bin 39675 -> 42768 bytes .../languages/jetpack-mu-wpcom-de_DE.po | 171 +++++++++++------ ...m-es-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-es_ES.mo | Bin 39636 -> 42773 bytes .../languages/jetpack-mu-wpcom-es_ES.po | 171 +++++++++++------ ...m-fr-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-fr_FR.mo | Bin 40927 -> 50791 bytes .../languages/jetpack-mu-wpcom-fr_FR.po | 171 +++++++++++------ ...m-he-14e8287aa601c8c430c4d159f4ed7a88.json | 18 ++ .../languages/jetpack-mu-wpcom-he_IL.mo | Bin 45003 -> 48246 bytes .../languages/jetpack-mu-wpcom-he_IL.po | 171 +++++++++++------ ...m-id-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-id_ID.mo | Bin 37408 -> 40299 bytes .../languages/jetpack-mu-wpcom-id_ID.po | 171 +++++++++++------ ...m-it-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-it_IT.mo | Bin 39343 -> 42510 bytes .../languages/jetpack-mu-wpcom-it_IT.po | 171 +++++++++++------ ...m-ja-14e8287aa601c8c430c4d159f4ed7a88.json | 18 ++ .../languages/jetpack-mu-wpcom-ja.mo | Bin 42971 -> 46196 bytes .../languages/jetpack-mu-wpcom-ja.po | 171 +++++++++++------ ...m-ko-14e8287aa601c8c430c4d159f4ed7a88.json | 18 ++ .../languages/jetpack-mu-wpcom-ko_KR.mo | Bin 39465 -> 42514 bytes .../languages/jetpack-mu-wpcom-ko_KR.po | 171 +++++++++++------ ...m-nl-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-nl_NL.mo | Bin 38248 -> 41251 bytes .../languages/jetpack-mu-wpcom-nl_NL.po | 171 +++++++++++------ ...t-br-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-pt_BR.mo | Bin 38798 -> 41738 bytes .../languages/jetpack-mu-wpcom-pt_BR.po | 171 +++++++++++------ ...m-ru-14e8287aa601c8c430c4d159f4ed7a88.json | 18 ++ .../languages/jetpack-mu-wpcom-ru_RU.mo | Bin 51298 -> 55091 bytes .../languages/jetpack-mu-wpcom-ru_RU.po | 171 +++++++++++------ ...m-sv-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-sv_SE.mo | Bin 38163 -> 43797 bytes .../languages/jetpack-mu-wpcom-sv_SE.po | 171 +++++++++++------ ...m-tr-14e8287aa601c8c430c4d159f4ed7a88.json | 18 ++ .../languages/jetpack-mu-wpcom-tr_TR.mo | Bin 39576 -> 42495 bytes .../languages/jetpack-mu-wpcom-tr_TR.po | 171 +++++++++++------ ...h-cn-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ ...h-tw-14e8287aa601c8c430c4d159f4ed7a88.json | 16 ++ .../languages/jetpack-mu-wpcom-zh_CN.mo | Bin 36004 -> 38650 bytes .../languages/jetpack-mu-wpcom-zh_CN.po | 171 +++++++++++------ .../languages/jetpack-mu-wpcom-zh_TW.mo | Bin 36254 -> 39041 bytes .../languages/jetpack-mu-wpcom-zh_TW.po | 171 +++++++++++------ 49 files changed, 2114 insertions(+), 897 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-translations create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-es-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-he-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-id-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ko-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-nl-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt-br-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ru-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh-cn-14e8287aa601c8c430c4d159f4ed7a88.json create mode 100644 projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh-tw-14e8287aa601c8c430c4d159f4ed7a88.json diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-translations b/projects/packages/jetpack-mu-wpcom/changelog/update-translations new file mode 100644 index 0000000000000..fca0cc4eae75e --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-translations @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated language files + + diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..248e42a594337 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,18 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;", + "language": "ar", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "\u0644\u0642\u062f \u0642\u0645\u0646\u0627 \u0628\u062a\u0646\u0641\u064a\u0630 \u0639\u0631\u0636 %s \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0644\u0640 WordPress \u062d\u062a\u0649 \u0646\u062a\u0645\u0643\u0646 \u0645\u0646 \u062a\u0642\u062f\u064a\u0645 \u062a\u062d\u0633\u064a\u0646\u0627\u062a \u0634\u0627\u0645\u0644\u0629 \u0644\u0643 \u0648\u0644\u0645\u0644\u0627\u064a\u064a\u0646 \u0645\u0633\u062a\u062e\u062f\u0645\u064a WordPress \u062d\u0648\u0644 \u0627\u0644\u0639\u0627\u0644\u0645." + ], + "The %s view just got better": [ + "\u062a\u0645 \u062a\u062d\u0633\u064a\u0646 \u0639\u0631\u0636 %s \u0627\u0644\u0622\u0646" + ], + "Got it": [ "\u0641\u0647\u0645\u062a!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar.mo index a407628e455d7a97e4b070e87e63d59a21acd6e3..eed2c5b7d65100deb865b5f2bc5a42c05eb56f6e 100644 GIT binary patch delta 11672 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 B6>R_j delta 8576 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 L5GV0SsOSFxN%rvh diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar.po index 5c3c99e82efd3..79d5bd631888f 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ar.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-20 22:54:07+0000\n" +"PO-Revision-Date: 2025-01-10 17:02:49+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: ar\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "انا أفهم!" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "تم تغيير التصنيف الافتراضي بنجاح." + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "تعيين كافتراضي" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "تعيين \"%s\" على أنه التصنيف الافتراضي" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "إظهار تساقط الثلوج على موقعي حتى الرابع من يناير." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "ثلج" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "إظهار تساقط الثلوج على موقعي" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "لا تتردد في متابعة تحرير صفحتك الرئيسية msgid "You’ve added your first video!" msgstr "لقد أضفتَ أول فيديو لك!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "عرض منتجك" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "مواصلة التحرير" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "قم بمعاينة منتجك على موقعك قبل إطلاقه ومشاركته مع الآخرين." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "لقد أضفت منتجك الأول!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "تهانينا! المكوِّنات المميزة متاحة الآن لاستخدامها." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "بدء التخصيص" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "حاول تخصيص أنماط قالبك لجعل موقعك يبدو مناسبًا تمامًا." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "لن تنطبق التغييرات التي أجريتها في المحرر على موقعك حتى تقوم بتفعيل القالب." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "تقوم بمعاينة %s" @@ -349,28 +412,28 @@ msgstr "موسعة" msgid "Menu" msgstr "القائمة" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "الترقية مطلوبة" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "ترقية" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "معاينة الأنماط المتميزة" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "إزالة الأنماط المتميزة" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "قم بالترقية الآن" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "يتضمن موقعك أنماطًا متميزة لا تكون مرئية إلا أمام الزائرين بعد الترقية إلى خطة ⁦%2$s⁩ أو خطة أعلى." @@ -540,72 +603,68 @@ msgstr "صفحتي الرئيسية" msgid "Hosting" msgstr "الاستضافة" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "تم تغيير نمط واجهة المشرف" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "انقر هنا للوصول إلى مواقعك ونطاقاتك والقارئ وإعدادات الحساب والمزيد." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "كل مواقعك" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "يمكنك الوصول إلى لوحة إدارة الموقع الجديدة وكل أدوات المطور، مثل: تكوين الاستضافة وعمليات نشر GitHub والمقاييس وسجلات PHP وسجلات الخادم." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "نظرة عامة على الاستضافة" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "تحتوي قائمة الاستضافة على صفحة \"صفحتي الرئيسية\" وكل العناصر من قائمة الترقيات، بما في ذلك الخطط والنطاقات ورسائل البريد الإلكتروني وعمليات الشراء والمزيد." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "أصبحت الترقيات الآن استضافة" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "فهمت!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "التالي" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "السابق" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "خطوة {{currentStep}} من {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "تجاهل" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "استخدم لوحة التحكم الأصلية لووردبريس.كوم لإدارة موقعك." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "النمط الافتراضي" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "استخدم مشرف ووردبريس لإدارة موقعك." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "النمط التقليدي" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "نمط واجهة المشرف" @@ -906,61 +965,61 @@ msgstr "إضافة عنوان المقالة" msgid "Start writing or type '/' to insert a block" msgstr "البدء بالكتابة أو اكتب \"/\" لإدراج مكوِّن" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " لكل " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " مرة واحدة" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "لكل %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "مجدول" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "مسودة" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "يتم تعطيل تبرعات Jetpack لصالح تبرعات Newspack." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr "،" #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " و " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "شائع" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " و " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "بواسطة" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "هناك خطأ ما. يرجى إعادة تحميل الصفحة و/أو المحاولة مرة أخرى." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "تحميل المزيد من المقالات" @@ -1411,21 +1470,21 @@ msgstr "معرِّف الحساب الآلي المطلوب للحصول على msgid "Help" msgstr "مساعدة" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "تبديل" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(تم التعديل منذ %s مضت)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "تحديد قالب..." -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "اختر قالبًا آخر لعرض CSS المخصص الخاص به." @@ -1541,4 +1600,4 @@ msgstr "جهة اتصال قديمة" #: src/features/100-year-plan/enhanced-ownership.php:73 #: src/features/100-year-plan/locked-mode.php:95 msgid "Enhanced Ownership" -msgstr "الملكية المحسَّنة" +msgstr "الملكية المحسَّنة" \ No newline at end of file diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..b5146f4ac5356 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=n != 1;", + "language": "de", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "Wir haben die Hauptansicht der WordPress-Seite \u201e%s\u201c \u00fcbernommen, um dir und Millionen von WordPress-Benutzern weltweit Verbesserungen zu bieten." + ], + "The %s view just got better": [ "Die Ansicht f\u00fcr %s wurde gerade verbessert" ], + "Got it": [ "Verstanden!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de_DE.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de_DE.mo index 0187ce16fce4606bf3fdd94b2b6fc9dc5b2fa8ea..8f0a72c5b836293070ca962044c8db9c589088f1 100644 GIT binary patch delta 11435 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 diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de_DE.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de_DE.po index f85a02c39fde1..97c0cdf0f57de 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de_DE.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-de_DE.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-22 12:54:03+0000\n" +"PO-Revision-Date: 2025-01-12 11:50:06+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: de\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "Alles klar!" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "Standardkategorie erfolgreich geändert." + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "Als Standard festlegen" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "„%s“ als Standardkategorie festlegen" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "Als Beitragsseite festlegen" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "Als Homepage festlegen" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "Bis zum 4. Januar fallenden Schnee auf meiner Website anzeigen. " + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Schnee" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Fallenden Schnee auf meiner Website anzeigen" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Du kannst deine Startseite weiter bearbeiten oder fortfahren und deine W msgid "You’ve added your first video!" msgstr "Du hast dein erstes Video hinzugefügt!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Dein Produkt anzeigen" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Bearbeitung fortsetzen" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Zeige dein Produkt auf deiner Website in der Vorschau an, bevor du es veröffentlichst und mit anderen teilst." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "Du hast dein erstes Produkt hinzugefügt!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Glückwunsch! Premium-Blöcke können ab sofort verwendet werden." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Mit der Anpassung beginnen" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Passe den Stil deiner Themes an, damit deine Website ideal zu dir passt." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Im Editor vorgenommene Änderungen werden erst auf deine Website angewendet, nachdem du das Theme aktiviert hast." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Du siehst die Vorschau von %s" @@ -349,28 +412,28 @@ msgstr "eingeblendet" msgid "Menu" msgstr "Menü" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Upgrade erforderlich" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Upgraden" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Vorschau von Premium-Stilen anzeigen" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Premium-Stile entfernen" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Jetzt Upgrade durchführen" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Deine Website enthält Premium-Stile, die Besuchern erst nach einem Upgrade auf den %2$s-Tarif oder höher angezeigt werden." @@ -540,72 +603,68 @@ msgstr "Meine Startseite" msgid "Hosting" msgstr "Hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "Der Stil der Admin-Benutzeroberfläche wurde geändert." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Klicke hier, um auf deine Websites, Domains, den Reader, Kontoeinstellungen und mehr zuzugreifen." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Alle deine Websites" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Greife auf den neuen Website-Verwaltungsbereich und sämtliche Entwicklertools wie Hosting-Konfiguration, GitHub-Bereitstellungen, Kennzahlen, PHP-Protokolle und Serverprotokolle zu." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Übersicht über das Hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "Das Hosting-Menü enthält die Seite „Meine Startseite“ und sämtliche Elemente aus dem Upgrades-Menü wie Tarife, Domains, E-Mails, Käufe und mehr." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "„Upgrades“ ist jetzt „Hosting“" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Verstanden!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Weiter" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Vorherige" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Schritt {{currentStep}} von {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Verwerfen" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Verwende das native Dashboard von WordPress.com, um deine Website zu verwalten." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Standardstil" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Verwende WP Admin, um deine Website zu verwalten." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Klassischer Stil" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Stil der Admin-Benutzeroberfläche" @@ -906,61 +965,61 @@ msgstr "Beitragstitel hinzufügen" msgid "Start writing or type '/' to insert a block" msgstr "Beginne zu schreiben oder tippe „/“ um einen Block einzufügen" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " pro " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " einmalig" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "pro %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Geplant" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Entwurf" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Jetpack-Spenden sind zugunsten von Newspack-Spenden deaktiviert." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr ", " #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " und " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Common" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " und " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "von" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Es ist ein Fehler aufgetreten. Bitte aktualisiere die Seite und/oder versuche es erneut." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Mehr Beiträge laden" @@ -1411,21 +1470,21 @@ msgstr "Die Bot-ID, für die der Chat abgerufen werden soll." msgid "Help" msgstr "Hilfe" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Wechseln" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(vor %s geändert)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Theme wählen …" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Wähle ein anderes Theme, um dessen individuelles CSS anzuzeigen." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-es-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-es-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..b932d5b087298 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-es-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=n != 1;", + "language": "es", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "Hemos adoptado la interfaz principal de %s de WordPress para ofrecerte mejoras a ti y a millones de usuarios de WordPress de todo el mundo." + ], + "The %s view just got better": [ "La interfaz de %s ahora es mucho mejor" ], + "Got it": [ "Entendido" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-es_ES.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-es_ES.mo index 1c8ac22f071c8d4ae0b63e72d723a2bdad4a0aaa..d735e610f0022e309a2a20fc982e3f0faff4423d 100644 GIT binary patch delta 11489 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." +msgstr "Mostrar nieve cayendo en mi sitio hasta el 4 de enero." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Nieve" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Mostrar nieve cayendo en mi sitio" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "No dudes en seguir editando tu página de inicio, o continuar y lanzar t msgid "You’ve added your first video!" msgstr "¡Has añadido tu primer vídeo!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Ver tu producto" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Continuar editando" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Previsualiza el producto en tu sitio antes de lanzarlo y compartirlo con otros." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "¡Has añadido tu primer producto!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "¡Enhorabuena! Ahora están disponibles para usar los bloques premium." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Empezar a personalizar" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Prueba a personalizar los estilos de tu tema para que el sitio tenga un buen aspecto." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Los cambios que hagas en el editor no se aplicarán a tu sitio hasta que actives el tema." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Estás previsualizando %s" @@ -349,28 +412,28 @@ msgstr "expandido" msgid "Menu" msgstr "Menú" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Es necesaria una mejora" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Mejorar" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Previsualizar estilos premium" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Eliminar estilos premium" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Mejora tu plan ahora" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Tu sitio incluye estilos premium que solo se mostrarán a los visitantes tras mejorar al plan %2$s o a uno superior." @@ -540,72 +603,68 @@ msgstr "Mi página de inicio" msgid "Hosting" msgstr "Alojamiento" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "Se ha cambiado el estilo de la interfaz de administración." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Haz clic aquí para acceder a tus sitios, tus dominios, el Lector, los ajustes de la cuenta y más." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Todos tus sitios" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Accede al nuevo panel de gestión del sitio y a todas las herramientas de desarrollador, como la configuración del alojamiento, despliegues de GitHub, métricas, registros de PHP y registros del servidor." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Vista general de Alojamiento" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "El menú Alojamiento contiene la página Mi página de inicio y todos los elementos del menú Mejoras, incluidos los planes, dominios, correos electrónicos, compras y más." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "Mejoras es el nuevo Alojamiento" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Entendido" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Siguiente" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Anterior" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Paso {{currentStep}} de {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Descartar" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Utiliza el escritorio nativo de WordPress.com para gestionar tu sitio." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Estilo predeterminado" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Utiliza WP-Admin para gestionar tu sitio." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Estilo clásico" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Estilo de la interfaz de administración" @@ -906,61 +965,61 @@ msgstr "Añade un título a la entrada" msgid "Start writing or type '/' to insert a block" msgstr "Empieza a escribir o escribe `/` para insertar un bloque" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " al " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " una sola vez" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "al %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Programada" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Borrador" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Las donaciones de Jetpack están desactivadas a favor de las donaciones de Newspack." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr ", " #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " y " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Común" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " y " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "por" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Algo ha ido mal. Por favor, recarga la página y/o inténtalo de nuevo." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Cargar más entradas" @@ -1411,21 +1470,21 @@ msgstr "ID del bot para buscar el chat." msgid "Help" msgstr "Ayuda" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Cambiar" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(modificado hace %s)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Elige un tema..." -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Elige otro tema para ver su CSS personalizado." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..5e6079cdbf5f0 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=n > 1;", + "language": "fr", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "Nous avons adopt\u00e9 la visualisation principale WordPress de %s pour am\u00e9liorer votre exp\u00e9rience et celle de millions d'utilisateurs de WordPress dans le monde." + ], + "The %s view just got better": [ "La visualisation de %s s'est am\u00e9lior\u00e9e" ], + "Got it": [ "Parfait\u00a0!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr_FR.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr_FR.mo index 169fa9d3d77369f4081670e59fcdb43777ef9d1d..52858c983f1b01eef4b357e7ef3aaf7cd83607e4 100644 GIT binary patch delta 18497 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 delta 8899 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 LT$};tc$lW2p?e81f}jVL#;FuIWX3E zRPmlh1$YhpO6?sQ`ecTbIsc#-jVdZX*1^pfjeD?a093%&(2F(8oj~GoC;iT-1zf~@ z{1toPxVaor+`%8pc=$Z>uM|ejb5`CSwbH&=A0NYpn2!p?kArb7Ho$LCE4+(su{vKZ zWuyZpVJ4~=%TTql2&dsrtcF1g$iGqVVRcrxljrK4G zHBq+fSky|Vq28N^3TPWXg72YHe%0;YL@gw6sq>wPMkcm8VLhGy3>sQNHfo|=RMAaA z71sh(1~#Au-h(=(m1yG$)QXEMoKvw8`_MmzZSVmq!|_iz0kp@)^oL;8&;J=TRHd^~ zRXz`+afKeheK-PN#gQ1W%votJYVXUj>brq0=&wVq_zl#!pJ5(;jaop*<<5IO(XU7b z(n!Xs7>foQ;W2E2pJN98jEgW~g|pW$VGjKh7=xitI$yk0RK~KgDwF7?zW}wx+b{|b zJxTsmt>@ee-=b3f0JX>AE1epMMFp6HdcFd+*9N`#Ix5gF-21m&|3C#0w#rF)94b>i zQST33#r{XqDByyMZ3PZR8=GO^YA01OSet+ zs)2~7oGpyOn)K)UX{Z`2+zTsF4{ktBumf9RC2FGcs7(Bds*&bTJH^)v)t`b|$THl5 zhjBa(SmSKber!Si6ZE404vknEb=NwPrei$)iMRw;V}Go%&Z+KfR3P(Ed%hXd@fd1v zZ=)AI>zyKuK|P;=TJbpCjXn(0`LDjgd9W7N;zlc+fbB2@H(?Fji7B`bgYg1(#=oMr zq{&9-gOiF{VIIce3fD>uqyH7ER=&qbo&P^+Xn@E~&WEHeYVSv40+!)6+=Tv;#5>d79t-#YZ)eE_2-@Q-yT&f{ZN@2j!Nky)O)3Fe=#85e=67y>E zJ~OuMSEfgbF%hZD&BfHVrb$|feK&1EfLY(Z$PVqez+-RiG{a-p?ULy+v%1cxlbKgg zU}gI9%F0W8Q%&1$>+N&hp7PXfZuKki`O5N(rh7;D=9k%XGsb!vOerXz>hqSCPo9!j z=9^wzlJ6_^+TDA;<}o3?d)mW#hkNXzKK!w)?+cy~-_-m(@2LE#Wi!l(%!K;IMU1x4 zXJr)^<(Khl(R6b>b9s1anQwNfcUp0YcR_J^iMKSr%xACbm*_Ef`fo6|2K2G#3|#6l z^#)%IEcKO{w5$xfBx{n#{5d4e^c*_V1Y|cb>DgK4#q5sNM&y?j_{{oY)6Bnz^)~%- zR@uMi)bMyp%}*n~GS^2wZU6JJi~y56x`TaYOhb>kF?PJk8rQ~NHZIs>|80Dn$26HZ zZ_}hV%#n6s_Sci14=^L9=Gk9OJr-o@&Kzf!&b$|vo|KxJl$PdA>D;A#dY6=T_R?9$ zJ@$mcyg+kfb{i8jXP3D=C&gY=aw5=V&&@J>=VqGRd52B&`B&}W1z{eOy6}kUxoE%1 zSlq`PSp2qqX~~5Eb9L!>d-xOQJa)?R`yRX7lmGIV+*KRu^(rqbE-dm{r{J3|P@$Z{a-CLGlR^l_izx0gRw11-cWB(!h z!hz{*mA&wl2#@)s@;UpvSN8;%!>_lu7rar;V>Z}xP2`cz_QWImJ@&Svg&q@mY@eC% h_C+)3cq_a7_^3d0``x+rs#ANanW8g;%;#se{4WipNTdJ& diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr_FR.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr_FR.po index 83c4cdc8d437b..057f49fbee412 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr_FR.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-fr_FR.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-22 09:54:03+0000\n" +"PO-Revision-Date: 2025-01-13 11:49:11+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: fr\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "Parfait !" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "Catégorie par défaut modifiée avec succès." + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "Définir comme valeur par défaut" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "Définir « %s » comme catégorie par défaut" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "Afficher des chutes de neige sur mon site jusqu’au 4 janvier." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Neige" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Afficher de la neige qui tombe sur mon site" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Poursuivez l’édition de la page d’accueil ou continuez et lancez vo msgid "You’ve added your first video!" msgstr "Vous avez ajouté votre première vidéo !" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Voir votre produit" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Continuer les modifications" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Prévisualisez votre produit sur votre site avant la mise en ligne." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "Votre premier produit a été ajouté !" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Félicitations ! Les blocs Premium sont désormais disponibles, ils peuvent être utilisés." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Commencer la personnalisation" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Essayez de personnaliser les styles de votre thème pour parfaire l’apparence de votre site." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Les modifications apportées dans l’éditeur ne seront appliquées à votre site que lorsque vous activerez le thème." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Vous prévisualisez %s" @@ -349,28 +412,28 @@ msgstr "développé" msgid "Menu" msgstr "Menu" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Mise à niveau requise" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Mettre à niveau" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Prévisualiser les styles premium" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Supprimer les styles premium" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Choisir une option payante" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Votre site inclut des styles premium que les visiteurs ne peuvent voir qu’à partir du moment où vous passez au plan %2$s ou à un plan supérieur." @@ -540,72 +603,68 @@ msgstr "Mon accueil" msgid "Hosting" msgstr "Hébergement" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "Le style de l’interface d’administration a été modifié." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Cliquez ici pour accéder à vos sites, vos domaines, le Lecteur, les réglages du compte et plus encore." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Tous vos sites" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Accédez au nouveau panneau de gestion du site et à tous les outils de développement tels que la configuration de l’hébergement, les déploiements GitHub, les indicateurs, les journaux PHP et de serveur." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Aperçu de l’hébergement" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "Le menu Hébergement contient Ma page d’accueil et tous les éléments du menu Options payantes, notamment les Plans, Domaines, E-mails, Achats, etc." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "Options payantes devient Hébergement" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Parfait !" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Suivant" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Précédent" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Étape {{currentStep}} sur {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Ignorer" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Utilisez le tableau de bord natif de WordPress.com pour gérer votre site." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Style par défaut" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Utilisez WP Admin pour gérer votre site." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Style classique" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Style de l’interface administrateur" @@ -906,61 +965,61 @@ msgstr "Ajouter un titre à l’article" msgid "Start writing or type '/' to insert a block" msgstr "Commencez par saisir du texte ou entrez « / » pour insérer un bloc" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " par " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " une fois" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "par %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Planifié" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Brouillon" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Les dons Jetpack sont désactivés au profit des dons Newspack." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr "," #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " et " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Généralités" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " et " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "par" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Un problème est survenu. Veuillez actualiser la page et/ou essayer à nouveau." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Charger d’autres articles" @@ -1411,21 +1470,21 @@ msgstr "L’ID de bot pour obtenir le chat." msgid "Help" msgstr "Aide" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Basculer" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(modifié il y a %s)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Sélectionner un thème…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Sélectionnez un autre thème pour voir son CSS personnalisé." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-he-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-he-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..36a611589033e --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-he-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,18 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=n != 1;", + "language": "he_IL", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "\u05d0\u05de\u05e6\u05e0\u05d5 \u05d0\u05ea \u05d4\u05d4\u05e6\u05d2\u05d4 \u05d4\u05e8\u05d2\u05d9\u05dc\u05d4 \u05e9\u05dc WordPress \u05e2\u05d1\u05d5\u05e8 %s \u05db\u05d3\u05d9 \u05dc\u05d4\u05d1\u05d9\u05d0 \u05e9\u05d9\u05e4\u05d5\u05e8\u05d9\u05dd \u05dc\u05da \u05d5\u05dc\u05de\u05d9\u05dc\u05d9\u05d5\u05e0\u05d9 \u05de\u05e9\u05ea\u05de\u05e9\u05d9 WordPress \u05d1\u05e8\u05d7\u05d1\u05d9 \u05d4\u05e2\u05d5\u05dc\u05dd." + ], + "The %s view just got better": [ + "\u05e9\u05d9\u05e4\u05d5\u05e8 \u05d1\u05d4\u05e6\u05d2\u05d4 \u05e9\u05dc %s" + ], + "Got it": [ "\u05d4\u05d1\u05e0\u05ea\u05d9!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-he_IL.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-he_IL.mo index b2ee13ed775b49e27c8221ec1e98d7f2fe26bb1b..b818a873c1df6d95da47331a068ab3ea52bc9115 100644 GIT binary patch delta 11583 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." +msgstr "להציג שלג יורד באתר שלי עד 4 בינואר." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "שלג" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "להציג שלג יורד באתר שלי" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "אפשר להמשיך לערוך את עמוד הבית או להמשי msgid "You’ve added your first video!" msgstr "הוספתם את הסרטון הראשון שלכם!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "להציג את המוצר שלך" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "להמשיך עריכה" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "באפשרותך להציג תצוגה מקדימה של המוצר באתר שלך לפני ההשקה והשיתוף עם אחרים." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "הוספת את המוצר הראשון שלך!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "ברכותינו! בלוקים ברמת פרימיום זמינים כעת לשימוש." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "להתחיל בהתאמה" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "לנסות התאמה אישית של סגנונות תבנית כדי ליצור אתר שנראה בדיוק כפי שהתכוונת." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "שינויים שיבוצעו בעורך לא יחולו על האתר שלך עד שהתבנית תופעל." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "זוהי תצוגה מקדימה של %s" @@ -349,28 +412,28 @@ msgstr "הורחב" msgid "Menu" msgstr "תפריט" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "נדרש שדרוג" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "לשדרג" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "להציג בתצוגה מקדימה סגנונות פרימיום" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "הסר סגנונות פרימיום" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "לשדרג עכשיו" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "האתר כולל סגנונות פרימיום שיהיו זמינים לצפיית המבקרים רק לאחר שדרוג לתוכנית ⁦%2$s⁩ או לתוכניות מתקדמות יותר." @@ -540,72 +603,68 @@ msgstr "הבית שלי" msgid "Hosting" msgstr "שירותי אחסון" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "הסגנון של ממשק מנהל המערכת השתנה." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "יש ללחוץ כאן כדי לגשת לאתרים, לדומיינים, ל-Reader, להגדרות החשבון שלך ועוד." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "כל האתרים שלך" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "גישה ללוח ניהול האתר החדש ולכל הכלים למפתחים, כגון הגדרת תצורה לאחסון, פריסות GitHub, מדדים, קובצי יומין של PHP וקובצי יומן של שרתים." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "סקירה של שירותי האחסון" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "התפריט של שירותי האחסון כולל את העמוד 'הבית שלי' ואת כל הפריטים מהתפריט 'שדרוגים', כולל 'תוכניות', 'דומיינים', 'אימיילים', 'רכישות' ועוד." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "השדרוגים מאוחסנים עכשיו" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "הבנתי!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "הבא" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "הקודם" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "שלב {{currentStep}} מתוך {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "לבטל" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "להשתמש בלוח הבקרה המקומי של WordPress.com לניהול האתר שלך." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "סגנון ברירת מחדל" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "להשתמש ב-WP-Admin לניהול האתר שלך." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "סגנון קלאסי" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "הסגנון של ממשק מנהל המערכת" @@ -906,61 +965,61 @@ msgstr "להוסיף כותרת לפוסט" msgid "Start writing or type '/' to insert a block" msgstr "להתחיל לכתוב או ללחוץ על המקש \"/\" כדי להוסיף בלוק" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " לכל " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " פעם אחת" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "לכל %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "מתוזמן לפרסום" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "טיוטה" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "התרומות של Jetpack מושבתות לטובת התרומות של Newspack." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr "," #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " ובנוסף " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "נפוץ" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " ובנוסף " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "מאת" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "משהו השתבש. יש לרענן את העמוד ו/או לנסות שוב." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "לטעון פוסטים נוספים" @@ -1411,21 +1470,21 @@ msgstr "מזהה הבוט שעבורו יתקבל הצ'אט." msgid "Help" msgstr "עזרה" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "החלפה" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(בוצע שינוי לפני %s)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "לבחור תבנית..." -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "יש לבחור תבנית אחרת להצגת ה-CSS המותאם אישית שלה." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-id-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-id-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..c4c57b430ae0a --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-id-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=n > 1;", + "language": "id", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "Kami telah mengadopsi tampilan utama %s WordPress untuk menghadirkan pengalaman yang lebih baik untuk Anda dan jutaan pengguna WordPress di seluruh dunia." + ], + "The %s view just got better": [ "Tampilan %s kini lebih baik" ], + "Got it": [ "Berhasil!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-id_ID.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-id_ID.mo index 479d2be6dae933d4cc3637584461349dbb48b95b..d07416cab3efe888cc888b27606c3eec09019bd6 100644 GIT binary patch delta 11253 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 delta 8552 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 ith." +msgstr "Tampilkan hujan salju di situs saya hingga 4 Januari." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Salju" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Tampilkan hujan salju di situs saya" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Anda dapat tetap mengedit beranda, atau lanjutkan dan luncurkan situs An msgid "You’ve added your first video!" msgstr "Anda telah menambahkan video pertama!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Lihat produk Anda" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Lanjutkan menyunting" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Pratinjau produk Anda di situs sebelum diluncurkan dan dibagikan dengan orang lain." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "Anda telah menambahkan produk pertama." -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Selamat! Sekarang blok Premium tersedia untuk digunakan." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Mulai menyesuaikan" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Atur gaya tema sesuai keinginan agar situs Anda terlihat menarik." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Perubahan di editor tidak akan diterapkan ke situs sampai Anda mengaktifkan tema." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Anda sedang mempratinjau %s" @@ -349,28 +412,28 @@ msgstr "terbentang" msgid "Menu" msgstr "Menu" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Upgrade dibutuhkan" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Upgrade" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Pratinjau gaya premium" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Hapus gaya premium" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Upgrade sekarang" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Situs Anda dilengkapi gaya premium yang hanya akan ditampilkan ke pengunjung setelah upgrade ke paket %2$s atau yang lebih tinggi." @@ -540,72 +603,68 @@ msgstr "Beranda Saya" msgid "Hosting" msgstr "Hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "Gaya antarmuka admin diubah." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Klik di sini untuk mengakses situs, domain, Pembaca, pengaturan akun Anda, dan masih banyak lagi." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Semua situs Anda" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Akses panel pengelolaan situs yang baru dan semua alat pengembang, seperti konfigurasi hosting, deployment GitHub, metrik, log PHP, dan log server." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Ikhtisar hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "Menu Hosting berisi halaman Beranda Saya dan semua item dari menu Upgrade, seperti Paket, Domain, Email, Pembelian, dan masih banyak lagi." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "Upgrade kini menjadi Hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Berhasil!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Berikut" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Sebelumnya" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Langkah {{currentStep}} dari {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Tutup" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Gunakan dasbor asli WordPress.com untuk mengelola situs Anda." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Gaya asal" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Gunakan WP-Admin untuk mengelola situs Anda." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Gaya klasik" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Gaya Antarmuka Admin" @@ -906,61 +965,61 @@ msgstr "Tambah judul pos" msgid "Start writing or type '/' to insert a block" msgstr "Mulai tulis atau ketik '/' untuk menyisipkan blok" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " per " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " satu kali" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "per %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Terjadwal" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Konsep" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Donasi Jetpack dinonaktifkan untuk mendukung donasi Newspack." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr "," #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " dan " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Umum" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " dan " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "oleh" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Terjadi kendala. Silakan muat ulang halaman dan/atau coba kembali." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Muat pos lainnya" @@ -1411,21 +1470,21 @@ msgstr "ID bot untuk mengakses obrolan." msgid "Help" msgstr "Bantuan" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Beralih" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(dimodifikasi %s yang lalu)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Pilih tema…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Pilih tema lain untuk melihat CSS khususnya." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..823c294a7938d --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=n != 1;", + "language": "it", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "Abbiamo adottato l'interfaccia WordPress principale di %s per offrire miglioramenti a te e a milioni di utenti WordPress in tutto il mondo." + ], + "The %s view just got better": [ "L'interfaccia di %s \u00e8 migliorata" ], + "Got it": [ "OK!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it_IT.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it_IT.mo index 35f939482962386bbc62533a57b394c3f1c1747d..1c84c6818546ab1b08292c767403977af3fd6058 100644 GIT binary patch delta 11532 zcma*t33L=yzQ^(EkPx;62(pE(2xI{vKp-p$$PyM=0)Zf)fKo|Ul7dcm?5-w8#CBMe zH*R1nu8a$!j@yX+5I2N3%825qPh7@PTyR4jbyl7_F7NwG6*%KL@0>U1;OE||TlfC& z|1Ke%`AsVAsu$7{@8qOkXYjwFX@=1kLtRxfj3@Jc@&=0gsAu4kL7ppoYp@T`8&IEa z!uGfwJK$|d*T#LAjt^oROnD}Zz5atIP!0BD0X~DL;paFOjlqVI596=~S7H(mU^y=4 zWhdN<*|-C{>!Ol1h8OvCN-LM%o z9K8Wi0HM|+W z#4`M4kvG6WJdgTY*b&Qzcmd7AcGMT323&^e*o0cLI3_gnZ4}z$9XJl}M+NjDW? zZ!L>_M`I4p&%mj;5c^>g+u&|&i+fNLc@j17bJzi2LF^%E-B>KrhA|+=$xM+fji$i0bEYti!`tjU}VKHNOyQ2V7pPPkW4txXMP;NI)qa*=KL-_f3=8pk?2P+SfxYDW z7Ivfl2`ZES#6FB~v@i8O$j5BzrKk_5qh?%%+Kgx696T45nP1~zdMZbM=eno zu1yUz4%P1rR0bBKCVCDgx>K+y`~sU%GyVn@KsPP}ZOQ?tc9XDm51=}%|Cic`g@~@ldX&z{RcTofU1BtM| z#Jf?cJA_(--{WL_8x=s`iQa_rP6@;`$~~-~SSITDIaw+<_Wz zUPJ) z_M>jlmr((Hgc|UlsEM_o?e*6S$z;M9L_r-DVLL4M>(hOgVg}Dwqf+05I!_9Wg-`q(E`k3d}BO?(|Irx6-X2da5J{Y`;miSJc3H)*QkNg z*|D-CDzF?>26|#17NO4hTr@H0*Ege<>Q~r}@r^wcbPArs4tN|jqrc&0*m)kmcH#A? z4!^_!n8}XRK!s@H98}z&BBfp-# zz)M*_)Qm^qIvk55@L`;S$FL&~s`3ULftt`-)Dr#z2jOL?%-&Z;{#Dq+gCV#dwN{^^ zj^PPZs=6%nW?qPTJ_R%J9Mpg{sPDqq1=pc2wkv$^#DUbG#5lf#<+yke`B#Kn7kM+g z8MS-wKn1iH72x}rgP)^1{sEP#9@SoE@_omlmToqN(MAROD(d^UQ5pOS)z66pg^?7p z7ke)zqXwLbSy+Yo@Lbf)&PN@q4VZ>EpgOu4wMSBT7Ixr26pdBLDjIu`? zdoU5AU{dJ5l#_sCF&`sXjMt%s&)_v!!1d+gW7vqrXLB_1795S4=Xgt2jwba*s7)F} zZSw7?0QO)zo&T38C{=$z4LEDLH>0)Kjrvu18s33DaIgRTMc-rChvz3y?Q&Ll_edcs zlOwS^mZ92Jp-xE%2kQJMDJZf%sNMW35}A>{(p!Qo)SC72&GQ|CU3oqdvvC?Ka|?Z& zQM-NzDv+Hx1RwByL+^F|1Lt}TGqGEMLGizNKJYy6*Xh5ZHtGNP^|V#qF=~t28$(fh zWfFGAxkxw0a@57N65C*nZ=LUIOsGMa!bFUr*5)D9=6N2qIR{wY?*~=*5cOAZ0&cAF z2HuCgs2@fXKg1%;sP&ex7}f7IzrF(1uBn#%EAnkTkhfw#d;pc&!&rz%aS&z%y@7_H zWQKph@H9kV0Y6FCjJ)H{&{SNZ)1D>$oDH;Nc|gRm5jt(4zI4z2T^PE zII4qJQJd*w)b2ikN?FDlZx_!-J&z#=#@K+9@Lg1({X$+p6HytNk7{3s%5)qFFkx(= zpbxfr4~&OUseBBl-~m+10*&4esT@>?Gq3h_lmBI+zg=+8`YDULUGx{90nZCy?%x^M`OK~*n#(Nxu7l+WFq! zDf2K&eKD%tv)C11#Kd3@h8MM;z>4@r}2o=bgsLi$zwTnZjtNCiwOn2fs+>fiU zJmv*<3u?gKI20en0{pI^V3g~f`|-X@FrVix>cg8*YkCj|;#;V|zsKR27xx0L z!W`;N*a0`9W_lHN#M{us`>_lDK2H9#DZIl2rTz=l+JB4sAZ;x_dNCUnP$OyvNmKxj z`}KEmH1)R4-hgGOe&=C2E=Nst73%wX+>ci!C}>9WFYqF6LZx&a_QdN^YyKO*z7Mro zUqc1@CMxjvQOEa7)D7CM#T&2ym4V@?C7z5X&cI%nsH1S23OE<9MGgEOYJjg%DK#$i z?t^YvNp%qR#`94#y&QA#Cf_}%eqTmS@FP?PGubF=KODE|{7LnW#X|@@>HG)YqZfZ9}!Y0cYdg*iPsFFBJ6Qx7ZJ} zF7{G$I;uV$bqZ>*Gp@mf>FYy8xhTW*oL9P9{s0`Gg0t{jyZopE!7f0cHsMC}43$H#2$5M}=Zo<1T zQAFWo3X1d_ROJ0PcsJh|R3K+y0nS0SJ0G=~wqrWpg38S8sHNPEO7)AV8}uk@2|qz? z=D%a>>DoyC)i8Ub*HJ&z=F7uASmxK4-~j4j)VaRO_eShN{Z7<*egX&L3#b`>iN)A! zlXr2=!VvYIFU&wTI@Qj$Jk8VkqH1xC|%q;5N*_qke-AP^tR?+hWJdyz`uc3T!ayn3bV2 zumCmCDpaZ+{3SM{GMl!=+cUYil6qo11x30YHM1vCGkO-a1n*!w{MNV4e|T%x2@81M z3l-R8JQHVP5U)lB_;=Lz9f(2`>4s`=A{j^+g%tYpV4DBJ!T|LKT#T!+J?=+sn&(g# z&ugeX@fB)joiF#6q!5*na;(5AT!Yu5+8I}Pznu2Ml{)|DQP7&~Lq+^L=HZ`k2zI{G z3vdD|rOQz5>ip*y`SqKzbuVBR?+>8@c^$PhpJPY-&abz-iVQQp(VK!&S&D_Y0<&-v z7U4BG0iVFr@gJzb243wg(Olnp)P1lK72xftO}ZB~^TVjU^#N+apJF1LLfTgE!>*`Z zIRZ0r4yNNGRH~Pv*0>o<@c?RRPN3FU7kX!C@7o)7s)nHU(nRcv%TV91-bVhFqT6_& zne9P!^ghnR&;0thYrIV}1r^vVY=a9>6R5_aScA&Im8i_!huT}O`p^I7*SjXY_9K(z zzY7hP^FS9z2+6K-724SETCanRs8ezWDno}*1AKs5vQF1|DISCRZXRj^52FJ55p^&0 z+wP4s4aZOqCMYO?8&Mg!7rWu>sFZz%nsM9fy>;FT%5_KabjkgKy=xEUZ9f_^+tH6Bs>i^JcUR%cx&~b(li3X5`-P z{q_1k(WO4}4*ua8ci{vau+z)X*=SO~7&Vbwu{ZAa>xWU9If@tK$C%K}>^r?pw*hrG zZ};7S`ruB~rh5Rj*-|(F_xtbPMP=}~?_aSW_3u#ab9Z@x6rlFb6jZ;JyU4#%x`YSX zwP&LuxBP}NOs9ScDzMGi2CqPUw-wbs>AMTn@m|yodH|Jy7k!VT`b)dZ>o4=J)SLk` z+oU$L85&bJ!vW|LKKCvPseC)0B6`be}THMOu$T6!qn7)~x5 zvNo$eYPs={drP)l*@jA4Hcbci)X znoXA*?;z%GX=(uJ}Bpx+mj%%l`9q~}0eK$Du#$)zh!j+rzw-El*9DmH0lTHEvEPSg%2e?NJ8 zs`HeZKvBV<@g*fA%kyKcg;C|E6*Jui+hhPM9&%3x){+cO9XE`3{&S<+cGa{Y(r9ak zoUAuRVs6aaGryYpa_$U2Z`E4vnKoO6!Ohu?R(-O5+U!J~6$)t`V_{xL!e(Pj>-rn5 z&Hs;=W<2aVA#;uuj$6?dbIin8yy*9v3@agEgQ~U9gn$Y zJ-f2Tc3nG~O3k=6J(G>s)MN)!3+9xhrB{)U7?{c7k@X zvDB{7IXbCX6iK$Ld^l~{ywqcrk7kl~t*jLcDu(n?C8NzsMN#b z`q?^{75)?552uBb}4#gWw2YbK?2s*HqKKZXtm?bPAM_tJ_NxUSO}8E7oFW4x)hLd?)u;>6-s z$hq)BOX0Cq_{6CXF`Kx_M8wYjIu2;@)*_r;cu}NGs8~XUlPgn6A#5F|W|!1V`(v+SX-fcg4)7 z?_u7=$~JYa)POCA(mT)RMr6}Oxd!wi_3;&tq;=pH^7lY;>(#$aOs%PLEY1hlIX43* zGW2hK|8y@mahKORO%^9e+nJw>t$(eki}EA*)W}|vEW$K(?787}Kk0+G+nT?h`r{D0 zakr!H09Gs#4n~qyTmPhMy?on~ndSd_k~Zkr+dWAwg0EMHEp9QjHiwYiM6FmJ*45kQS|} zhu-$0cT=v?LAj-zqcnoHv`!t4+oP@aD5s^p-=DRg=k{s)S!?aJ*ZQyjT5BiTva^2s z96#T+`T-j({`%QtSuOBDsA`s#75V>GQp~0vh&NsT>G~5kr~Lue!-ihV3dSg`g$d|~ zJuv`#qd)dD`m7AMVF;?jP>jNn*bo03V`O8rH_Lg0MBJe=MeBKh(r4 zFao!r#(xi+;7P2HSFsoKTR&1z#2uMM5%xk&JQy`_E^fv-*aJgJgC-b^6EP1J$cI=H zPoX9{kJ_5s7>0qQRe?0duINQyFA8HQ1mZ^2o^3%zxEuT85p0PM(I1;dTUHH>Kn2_m z1275oepeiV>G%|uVQu^l75IJB0_(IV|8*#|Y;Q6Uhgx9|jKsO9=Nm8^ce>B-qPCzz zj0vDODuY8%6XjwMPQj))18d?-sK6^Q2`gjBe+LR@Xwcq1K(^Nki8TXsLbZ2ArErMr zQ*L_^a_+2BR3>+#GIbrbfIpDkwIbt;{ZN^nijA?zM?sM;!&7Y!D8{98@N@Vp}|n8t*D9pt~5w{8m7cnIH}| zV0Tn1Gf^vi0=4o{Sc=n8E4_mXIHWwXpvD`8+NylF{aLI}eF6G3!CDF- z_$Sm#wxd@1XVielQ3GB^eTr|Q25y;b2JV1i)RR&D24EJBz+l{l3iLlv0W+K38hhpU72sGmUHnrdW9 z>v|XRuZSD-J=7U!i@N{G*Z@bP7pJ2#vj(;D3QWUosIB@2wf8qs;iJk}VjHhfpi}47GyGr~q%H0=SP#;X@3^a7K&6MC^#;F$&ip-!jX= zc)W`3uyzl#phVPUY7q?$w3 z9u;UBYGFgsi&IexdKqdsJ%}? zt*|F51A|?2P?^j{ZQ&HuLQ7EZ=|^vf?*DQMOL0AFg2o(i{o)XhLof@QVj) zp#ndPn)oJah2OhAz_!%=IH_7lG!Dd$$Xcwq=+jF6i-ICL<@#6DgjJ{sestSw^)V?A zL#2EIYQo8=>s5rxpbs_ftEf!wM=k6_wVHqaXT``k-4)Vy_jP3Dn$oM|1 zHcyqZSWLo9RLU1(dtB|-9aM&nV-2jrh4>|Q!qI~)s}HV3W#klU!Yb6(H6Lsac@(yx z-T{M|-x@|ChK5|!o-9M1`U+G=-a@VTxZD0E22sCnYSB`vMi%FR1r^M`fyB zws}7s6R0Pk+9#nen8Gv)b#ON7#l@&YW20`vE>r+VP-ox*j>4EH_+uLSkiV@e{>3A! z%}|rUS-6M#%jm`AVV2bmM`1fG8%F*+QaC`vB>WcFgxL48Obpk93B>KSY5fvD%fs2?hIu_+Egl4liQ0v^Fq{0{eHQSRg4gnU-SI5Y7W z4ClcV^r8>j<2KY*oW`bj)qQ>+6>#`d#wgTxBpH>_9E`?%)JoT&#@~-x@M(@o%^kGjYm9vw(fL zmilR|!Ti?fJoCZ?RK)X8r};J1fFGd(xqwRL*I0~Ulg!yzj0$80MqnlKZLtoa0``B} zY*hs6`_LNIKNfvDrKuEjxCY>G9E$vHZRcOLF<`QZJPaSdh&m&ws6(5D{cs%WaK7%g zpGJ~uUB+IRl5YZ>gBoXjKKWOwcF~|cIf@GCoZIoTTfdLGK30MG#s^^%)lAg;3o#09 z)cZ$J6MT$~@FHsb@7((Ds6ZP|A^*cD^qyiSScm@9H@fv#Q7PMw%Fvsr6gzJF1=PS_ zU<%&BNNh9J1k?|kQ-8*F1?u?@)RrFiQ3#}P&h?`E;7im>{()M_U5rNmY38)Y;R@>A zQ6Hoau?AkmIQ$AVQO!d0n^k+9O+6RY?=RREeN_|`z`s$a{}0rQE%@Hn#8lKF8i1`a z4|N@vqE@yE7ovlC*lD_%pd4fM9Ha2K>uvXW*t3tXEBkK>RtmPG;|SD?^HF=Z3tQn4 zRK#ClJbH>upq)@#FcfRy)2NIUVQuuG7hgu*rngat_811~{-33wj#bE2wZ1_Gk~YIc zUVxf-jaz>QJ5#@mnka<3SQjHO0OL_9PC~7`JAQz9sD*fEnn2UBIrCfD6m*IUu@08H z^>wJjxEn+8Eo_O0Q4>_70=SCW!XMC!_fTKD#xFBsYI>(UAKM?)$a~!fxqBrtTE4I zaKb$DuT&J!&8Cr=7#Ks2r4r&Wey6vY? z*Z3BuV5skTb3X^5PW^LkeFt`-UWGAOd%pQ;n1Tv$0xIC87>uu=0@&$3--kMkRj8F; zL2b!xRR0j7*`{R31+s!@SI zz>e6OkA%J-!;u?ol^~h-S=T8jCAU#2ueZo_Y>Ua%Gf*pCgo=DUYT_-ZOzcJ-!n3Hr zenRbe{TIwxXpYUOC%g5bsM|8_aXb4zgMzNtD%7>wi1lzQYT|tuh9^-2SEH`!*SH$* zpfdIRi)Qc3aXj_CsKE4Rdq>e{WA#mzb6MPP9e%P&7qx#>&GW5Rm_?ISYAF6+&RpwA8qZaPV zrJw=lVl=*nO45jE|kb}c<0_uhRNJr~1D$w^a1aF~I{V&v(#I7~pjUL#B`gqi#E_L0G zHK~7udjC_b$NbhM3R>}PY=Iu~rdtt#?XVke#0i*&_plbGtTS8J2erZsjK|5SaVk)m z+KbBE=cs`0;^Q+{&iKr4b)cZga!`k69ERddRL8}bgqu+r`6~uvHR?n44eHeYgt}HW z`5CMLB2lM46|->^j>MgqhY!%F2V>cgvA7#`NIW)CqZgIRbJ!PuMy(*_Pv(EqjlwC^ z%kdSwj|;J4gZblo9nv*Q>YB!*-b+OFPj(%M3TO=0!AaN@i(OZt#@iW8K?Cl2#W~V?pubZ)s*As! z9TRQOk9o&ViG9QQHnyps9S}d;Ss6dy&xuaB<#8gDrg@x=o%ed2VJT65p{=Zp*#!k9 zg)^plM;1I^;%w|X+v9|Hf7@f9?a{|+(6fQZNl0zru@e%TJ9)iUcxn~o7f$kyF3c~P zW;afYtzSHYmlqUR*~K#oONwVRjy)r7ne!;Ex5u8@x7_ZM-rrfC{-mFMqkmr~dO)7X zJ}@xJZjy1v_RmbWPh{rVF@w_Wd4pCvVS}%DoUp8|0nVXeo&4+{bDp!SM;v!Hk31CQ zR6mvF2~CbqOpH%T@+Nlgk&@ga!AYFZCD2(oc~pRXeQJiCIPD*HRN-mo--Shf_S|R7 zoQ6dee$K_>M;_6>@iv$y=OGjZ#CLH3hx9R5E{2BXvf diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it_IT.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it_IT.po index e1b596be421f4..d74019d5fa084 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it_IT.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-it_IT.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-22 19:54:03+0000\n" +"PO-Revision-Date: 2025-01-12 11:50:13+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: it\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "Ottimo!" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "Categoria predefinita modificata correttamente." + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "Imposta come predefinito" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "Imposta \"%s\" come predefinito: configura la categoria come predefinita" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "Imposta come pagina degli articoli" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "Imposta come homepage" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "Mostra la neve sul mio sito fino al 4 gennaio." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Neve" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Mostra la neve che cade sul mio sito web" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Sentiti libero di continuare a modificare la tua homepage o continuare e msgid "You’ve added your first video!" msgstr "Hai aggiunto il tuo primo video!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Visualizza il tuo prodotto" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Continua a modificare" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Visualizza in anteprima il tuo prodotto sul sito prima di lanciarlo e condividerlo con altri." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "Hai aggiunto il tuo primo prodotto." -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Congratulazioni! I blocchi Premium sono ora disponibili all'uso." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Inizia la personalizzazione" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Cerca di personalizzare gli stili del tema per dare al tuo sito l'aspetto giusto." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Le modifiche che apporti nell'editor non saranno applicate al tuo sito finché non attivi il tema." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Stai visualizzando l'anteprima di %s" @@ -349,28 +412,28 @@ msgstr "espanso" msgid "Menu" msgstr "Menu" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Aggiornamento richiesto" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Aggiorna" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Anteprima stili premium" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Rimuovi stili premium" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Aggiorna ora" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Il tuo sito include stili premium che sono visibili ai visitatori solo dopo l'aggiornamento al piano %2$s o superiore." @@ -540,72 +603,68 @@ msgstr "La mia home" msgid "Hosting" msgstr "Hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "Lo stile dell'interfaccia di amministrazione è modificato." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Fai clic qui per accedere ai tuoi siti, domini, Reader, impostazioni account e altro ancora." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Tutti i tuoi siti" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Accedi al nuovo pannello di gestione del sito e a tutti gli strumenti per sviluppatori come configurazione di hosting, distribuzioni GitHub, metriche, log PHP e log del server." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Panoramica Hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "Il menu Hosting contiene la pagina La mia home e tutte le voci del menu Aggiornamenti, inclusi Piani, Domini, E-mail, Acquisti e altro ancora." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "Aggiornamenti è ora Hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "OK!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Successivo" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Precedente" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Passaggio {{currentStep}} di {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Ignora" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Usa la bacheca nativa di WordPress.com per gestire il tuo sito." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Stile predefinito" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Usa WP-Admin per gestire il tuo sito." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Stile classico" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Stile dell'interfaccia admin" @@ -906,61 +965,61 @@ msgstr "Aggiungi un titolo dell'articolo" msgid "Start writing or type '/' to insert a block" msgstr "Inizia a scrivere o digita \"/\" per inserire un blocco" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " a " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " una volta" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "a %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Programmato" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Bozza" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Le donazioni di Jetpack sono disabilitate a favore delle donazioni di Newspack." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr "," #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " e " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Comune" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " e " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "di" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Si è verificato un problema. Aggiorna la pagina e/o riprova in seguito." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Carica altri articoli" @@ -1411,21 +1470,21 @@ msgstr "L'id del bot per raggiungere la chat." msgid "Help" msgstr "Aiuto" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Scambia" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(modificato %s fa)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Seleziona un tema…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Seleziona un altro tema per visualizzare il suo CSS personalizzato." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..9233d48832a53 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,18 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=1; plural=0;", + "language": "ja_JP", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "\u3042\u306a\u305f\u3092\u542b\u3081\u3001\u5168\u4e16\u754c\u306e\u591a\u304f\u306e\u30ef\u30fc\u30c9\u30d7\u30ec\u30b9\u30e6\u30fc\u30b6\u30fc\u306b\u3001\u3088\u308a\u826f\u3044\u3082\u306e\u3092\u5c4a\u3051\u308b\u305f\u3081\u306b\u3001\u30ef\u30fc\u30c9\u30d7\u30ec\u30b9\u672c\u6765\u306e%s\u30d3\u30e5\u30fc\u3092\u53d6\u308a\u5165\u308c\u307e\u3057\u305f\u3002" + ], + "The %s view just got better": [ + "%s\u30d3\u30e5\u30fc\u304c\u6539\u5584\u3055\u308c\u307e\u3057\u305f" + ], + "Got it": [ "\u5206\u304b\u308a\u307e\u3057\u305f\u3002" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja.mo index 38de732d8bcf0902ad93dc7616eb003117add936..210805f491cfc2b4341ad50a0987b1bfccefef6a 100644 GIT binary patch delta 11527 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 DP9NiB diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja.po index f65dece31257c..8ad258664f598 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ja.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-21 09:54:03+0000\n" +"PO-Revision-Date: 2025-01-12 11:50:08+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: ja_JP\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "分かりました。" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "デフォルトカテゴリーの変更が完了しました。" + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "デフォルトとして設定" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr " デフォルトのカテゴリーを「%s」に設定" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "投稿ページとして設定" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "ホームページとして設定" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "1月4日までサイトに雪を降らせる。" + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "雪" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "サイトに雪を降らせる" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "ホームページの編集を続行するのも、そのままサイト msgid "You’ve added your first video!" msgstr "最初の動画が追加されました !" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "製品を表示" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "編集を続行する" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "製品を発売し、他の人と共有する前に、自分のサイトで製品をプレビューします。" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "最初の製品を追加しました。" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "おめでとうございます ! プレミアムブロックが使用できるようになりました。" -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "カスタマイズをスタート" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "テーマのスタイルをカスタマイズして、サイトの外観を適切にしましょう。" -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "エディターで行った変更はテーマを有効化するまでサイトに適用されません。" -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "%s をプレビュー中です" @@ -349,28 +412,28 @@ msgstr "展開表示" msgid "Menu" msgstr "メニュー" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "アップグレードが必要です" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "アップグレード" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "プレミアムスタイルをプレビュー" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "プレミアムスタイルを削除" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "今すぐアップグレード" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "サイトにプレミアムスタイルが含まれています。これは、%2$s プラン以上のプランにアップグレードした場合にのみ訪問者に表示されるスタイルです。" @@ -540,72 +603,68 @@ msgstr "ホーム" msgid "Hosting" msgstr "ホスティング" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "管理インターフェースのスタイルを変更しました。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "こちらをクリックすると、サイト、ドメイン、Reader、アカウント設定などにアクセスできます。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "すべてのサイト" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "新しいサイト管理パネルと、ホスティング設定、GitHub デプロイメント、メトリクス、PHP ログ、サーバーログなどすべての開発者ツールにアクセスできます。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "ホスティングの概要" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "「ホスティング」メニューには、「ホーム」ページのほか、プラン、ドメイン、メール、購入などアップグレードメニューのすべての項目が含まれています。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "アップグレードは現在「ホスティング」です" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "分かりました。" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "次へ" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "前" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "{{currentStep}}/{{totalSteps}}ステップ" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "閉じる" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "WordPress.com のネイティブダッシュボードを使用してサイトを管理します。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "デフォルトスタイル" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "WP-Admin を使用してサイトを管理します。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "クラシックスタイル" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "管理インターフェースのスタイル" @@ -906,61 +965,61 @@ msgstr "投稿タイトルを追加" msgid "Start writing or type '/' to insert a block" msgstr "文章を入力、または「/」を入力してブロックを挿入" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " / " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " 1回" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "/ %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "予約済み" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "下書き" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Jetpack の寄付を無効化し、Newspack の寄付を優先しています。" #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr ", " #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr "と" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "共通" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr "と" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "招待者 :" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "エラーが発生しました。ページを再読み込みして、もう一度お試しください。" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "さらに投稿を読み込む" @@ -1411,21 +1470,21 @@ msgstr "取得するチャットのボット ID。" msgid "Help" msgstr "ヘルプ" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "切り替え" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(%s前に編集)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "テーマを選択…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "カスタム CSS を表示する別のテーマを選択してください。" diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ko-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ko-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..112701f364592 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ko-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,18 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=1; plural=0;", + "language": "ko_KR", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "\uc800\ud76c\ub294 \uc5ec\ub7ec\ubd84\uacfc \uc804 \uc138\uacc4 \uc218\ubc31\ub9cc WordPress \uc0ac\uc6a9\uc790\uc5d0\uac8c \ub354 \ub098\uc740 \uacbd\u001d\ud5d8\uc744 \uc81c\uacf5\ud558\uae30 \uc704\ud574 WordPress\uc758 \uae30\ubcf8 %s \ubcf4\uae30\ub97c \ub3c4\uc785\ud588\uc2b5\ub2c8\ub2e4." + ], + "The %s view just got better": [ + "%s \ubcf4\uae30\uac00 \ub354 \uc88b\uc544\uc84c\uc2b5\ub2c8\ub2e4" + ], + "Got it": [ "\ud655\uc778 \uc644\ub8cc" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ko_KR.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ko_KR.mo index a5049160745a750493dd99a8caa54af666176ba6..7976f764c8fe3f7cc9991263a761ab50782059f4 100644 GIT binary patch delta 11468 zcmZ|U33!y%y~pu)Lc$*QeSKNNP9TARETRw)M0OAns$@upFg3}<%!EbINl3uRqQE4w zB?y878YD0QgJNB)#jRe&y46-~v6`7EUahsY*L%Oed5>s&pZ1aGbIy6sd(Qv-&pB@b zJzg8P>(#j6AKJxNSp08roMrXEthTCIR(0Q>+(YpM^#r`GpW`g!0_;xv64a{!Y=)b$ zIqpD)w)SH@9>7L;*fD4wH4TrVI-JA-Sc@I-0~~{wF$o9ux2zR78$(!w6L2aITVfHm z!tK}*E3q4%HqT!(&)>)9R?xCOr_hED-=HE-V0PIWyI@yrjj707))Z`y*{Bt-$0oQP z)xQF#;A5x&zQSJEWS}$d0PIYCB(`IIYX*g@aTzM|y{MHOLrr`JHSn)-KmGy7;~j&X z3C`eh>aSo696HzuXe>6Rehq5E85oZls4eqgP%AH{&O?(cUpe}GM}ei-?0LE*nm!w=Y%dgI|v zgf?m=gE19HqB53=bhQGgvv3HxAl4bw!0(#&k1%$&j0wq3|4!J4enWy3lJHC)7m4Q7KJB1#~TH0lCJzQJFl1x=oLx`oD@AFZd1x?aha# z;S=P*TA!f~UF(s~^%;bT)YDPV=c6*W76Vv{n&|JSz*?s`3+Rk(s82u}XW>T7MfwG; z%cjG3s1-LO&x&j~>fVk*Wn>O2&^&C1e$=Vnj0)rcYNAJQB|eD@vF|8n&sU?y-Goa0 zR_v(ze}Y0g8lFe(_3upmLsTj+V|#2q+Q~>SRR6K2J`)vqCJw~Au{EAV1@^S@71TKI zpfVZ3?#yrfoq}HInC3*9gnDr_YQ@*0uFEu>iE~hy*^B+L7B%pDsK6RfTcppXCK`yX zFb$P~si=j{#9&7X^C=W#HfqJ6qXKBe$3Ta&HLBlmjGY10fb&rUWuW#v+dTK7z9)C0 z0=gU3Zy&bAL#Ty4HkSPBOBAL-6Z{r6!6hUH>uc0RL#}cr7>C;9$*6t{a295uCOm-( z{BhK{&toV2BPzq+VrOhT&S~#8j{NJzG#ZxSHP`|7<7}+KN%#Y1;MIIpw9*5pl{}0t z45Lze1{J`Qs6bybzKdb(i5fN#LAcq?j4*P7=cRK^ZtP!l{tK@&fRx`yvz z8h(j7R7w0gqf87%Woo=}3TjJcqRzx(R7SFlKGgenpl(YMmf&{Od~MUozxHxaI?>{E z)FBF?_Ua^R;yTnyUP1-%F)9)c*&yvc6OKMHL4l=hwt)@Ary93Uqy%WY`7AgQQD)oL;iZ`JqI*8hev#6E6h{NzhT!PJs zPR}!g6!gH4DR>aI;x|o)kFg*1uTTSbobIG}DC#^DMg)y9jGlj zj0*e|YDeE!9<`G1PahI1Wz;dts3Py?<;y>|~PkSf%d^D$Ha&!Z-M z54E7bpvLG~T3v*D{Xd!Z=tlLompTfrYn(-nk z6Ca>f7(r#?JJeRi&vXLoghO@z`%}=0=HUR$#Adh!xd2uo8^%Cm(T|}ko3sfo- z<~!}ZunG06P!nE@dT$oC!JAPZv|k!GVjt@Jun^DV1WaAv1emvg{A*?FXwc~`LIqTT ziu7r0hZj%-{~lZ6H`o>%Ep+UN+PZ<5hv}$5Pov&{0yWQT82hB-Nb1p`dC+r_Ghu&B zH!ej@l!;o|J=hu_FrGw)v7SbKn4ZN( z_@eP;d;O@ZOvj+zYR6d2Gslat|0#^RMMbB@`&kp0sByYA2q>0QT;k(Iw|do8fX~K!AaN; zx8v1#3KhVYsBx_3p6|>GIs-pw8fs97?^*mKzKzPn8ILpJ54eSTo0ZN0 z`%!ybjSBEAYQh(=G5!gMU_I)2$85)bIE8vjkit9)0rTM3#cK zSEe38rTCwyfxELD1=JTc;TYpoR6q-`FJ>ag$l8p`+~?R>_rJk3d}I7B_J9en8yy?v zIurFmZAB8!#_?!l8S1beNA-Wj_$ey0E_-LMJv$KlLx4Kp2~XIm1*zma|WJ>T46dS;z}HZ0ovBChg+ym!nJq-^?XW!GvPv1Ah)10v>ElCIA)%|P(c1Q!Rs_= z;!ja2j`uqgbVcp$XjH!$I2bc;JkXW)U@ih3G0$Em1(b5SeGKusJ#1+pHs#rL4b4`F9K zh3X%?Kw%k$4^ab+VtA=Ldnj0*6mvCeqG_&(|^L`?lV zTu8my2Isw7VzU2v6h`qNh@CKO>Mx@r{sA>n!kx~ivlFVl1Qp;GQ{RIfsXu@{@eJzu zTd0hFjB_x83vm2h{JyCBzg-19gNpb=?1lBHiJO^2+6|R~KG+@mp^evI3T9w3?!w{t ztZDxe$5QW8xeK+RGSgmx`tlt%^+$`@e+_hwhR*m5YUS^u4$a?CD{Z;a8E6oye;VraPDD*O z5BuP)sI4qQWug{`;h&ICi`AyYY#nN=wv><>U893EXu?NPzhXUuI^Cb5CioULaeS#W zaSPO0>5biR3@Y&X*cVXIK;+?1zmSS7n ziQ1~esK9HDPh%tMFQc~Zb>#S1A7ekv*zD|mDK4RY5|c34^loROWK>GiP-o(L)1Gb2 zLrqwSL$JuSKZ;q@PosWM=v?N!pMhGyUB*qQGqDW^+lqIVt(tpSb_cC>Kvj0 zsIxEwo8v90309%@Zk?%@qxwB$>Q9*Gub?vdDQe<>nCDHmIRSS?Eg%JTm92Rc)Ug2j zViC^7!)W6ds6A}G-3efnaSkd2UQ~d^sOz}P)K6kd>d&Au_ZsR@{~5KAZ!q@nf35Fz zQauoLh>|fCQ*jY`P>1CS^ZX;!z<)-am9J0}w7$<-$N*Geqfvp)!ZCOYs$V(w$4Boo z_x}wVX3_8tHpBiq%%L=<87E>Jo~PqjT!ce#8&1K;P5mD@l6ulkCy>Rcl;>d^+>XlV zft}>Pj>2;^_;LL%CpBN9B5WRV9DxI=FG5YY0X5)Jycu7_8EBU~&%LPr<*0GaqcZR@ zw#P0NPDY0XDX3wAaV0jPeg_hhwGow(4);5UtrzN6jKT#t9%C!Q1nLJ+TX)2?zk}-k z8Qz3nqUM{v+X*bVjDq&C2z4k9ppECSHNKCXupYajYmZa!j!I!FDie!w3>G5Ev#RkX zyk@U+i*};|c@R6}aU?TA>siy`Q}f^})PT+QIbXa%s29d#A}&CsGy{*|Ce&dZvfuex zF%~t^LbP!yPR8}7{VCMKUclJ@|96psQdn>NKK6h?E1iF8>5C(Ho`gQU5f|gHF&leS zIUlT2%%FY|wFPMhoPTOrg+r;geSp6a7?nL#kG@iiN3QhevR0iHMMo{B6df2&D&C#+Kt@7Aeo|W#xoPZr( z+Ivi+@TR_#8ztCt+_|36(@Dvp&yvnIb?4n?=ex5#q5T7nHE{<#*}j5x;mHHL$HnIq z=H`W#3|^g>UEmHB=C}i1U!K2D_~pTO#`VfHJ?+d@?!0VImhCUh%=GyED+_aS)+L80 z4ZG}W?qB6wW4p86-n{U@WS=WB%NwxQ`3ehczc=6smyf7%wV1XxP~f&_xeKyA;q;V& zake$x7qGp7KGyUCk0;>G%eEJJ)&{6~v+TuQ&zkVMQ3bBVmEJstuoq?)_;PZ>pN&50 zYHY;@2~~`llHg{NK=|!39bE~|JD0|Gak;F}+~GaKUB+#8jdZWI^9plUcnWOaN_&m3 zAj@xi^K8%BOiw|6z?$vJ^1AJtyjg)&v2tN<=-BuniAk6V`<8h!P3 z@!mj=C+xrambk{Z7kUdkS)tdinHp|=?F!eR0sXE@O&vKQ$sa4EOt9U4JMgo!@#AKO zawd=M#xrwftc9L{x~}r&dSWN!z~nc&O*2_qsLj33!@*!G`}$mWb|`zw^}&_yoE+_% zKaa=0JUe$?Y`3jg_y6$FF3byfbL^S!yh3-uI(zg)e_{Tlz^aKOWU}*WZfsK+Fvqhp z@NZ28+7YKMR5K+b?lx~IF@0LITtcxH5=UrW`nDEiRpIzncyq$81-{juTu)wr8jDjW^4aY~AEppFm>SOJ;@7&8}-g+I7d>Sy_r9 zJ|%UOJzG&M3|K$j|4d(QzB_N7oyXmezgf31-L&XyaHU)RDqo(*+>ZFPw6x*oPui6p zt33q)Z>BrP8EHzPpEDZg_lNUtoa<_nHhg5t@RSsLszjP;IoT*5*&-;nL7`%dcu2*>xmxs50c**CkZ3{H@T^jNgWPxQpW&N6(#)Ja9f# znOV{%dbXmWVoyWG@yOP)$kro$!o9M5al`BDY9iq}J9@6RVbiwy@WIH#)%7(+b|hR> zfBLD&jy=)cWzj8XoL7>=+g8@QI`DFIYb9N3qeqMEXvLOj)wXcqs;H~=#%e-p*ivUV z+*=ntx--1|mxJOOH*7f<*;W+ZoO32_NWVEsY%B*2kh8-B@k2BCG!KI;M_< zV&f82c$)7OSDQ$6Z9_$+9o=%Ip}0D7=t#Kr?b&e&vn&P-75cAhaj=XDqZOsm{UzaZ z{=KdycEjHC$no0n4TW1>;ft%^a*d1bE00z@6{)U^?%rWXLPw(a*VfmR+0iqV3}Q#N z9-|>zw#SN`tc#SFQ?VQFJ7GnS>$l z|ExK3^a!coKRbG`lF+PZNpZBY)DE@vb`EV?zi&PXKUm5`vbra-gWUZrA<-(Hlpbs- zsbbsfPt`;=?y)21%6^)k17ow1(E~f_5G}1EQ^}#88-4XELe(4ZYf(}aIdDdsQCAZhSF)@*ndg{Tk+QN-sN|WRI#e~~ z1j<~|Qr66IJ6dc1&fy4!&$KS+HwsUFLr0Qm)p??x9U0^ z+IHpAhTquSDWOgDz>dg6KfkY+w*GHib1t5FKXhty`_Q-dmIMzLHB?ncwlLD}>c|7t zk+Y@s;q#m@ouxWXv!aUBoQfRX_Oq|7He=s$<{21v)}Jwo_6JxEYX%&rBF17ROhP|)z!2<= zWw5I;=w#Z4-lz`!F%}17O43c$Ek{mSPMI1UCc&3 z&$rJPV7L=>oM$O0;_cRbSeyDAsAPPIjqy{gfxn|x8Xn^~<*^Z}e>2R$uBeGuU<2HV z8vpMYi63Bf`~o{Mzw;vnMcjf}6k#XS#Jx}h=im;Uh3zqnG-!feI0na}0y&8l@GNSg z%c!lniQ!n5v?`DYY=Z#|cA_wxLRs95+OwUg2=`+;9>e`f(-$38)pe$7r05dR~Nmaj$*;6KV^Z$D05; zqcYeVHBkDpOyh7VsCcyH0e1u`4Rmxfp@@K?;g=8CJrzsDQShB0ppO5|z3Ks9RB$ zPU;_n8n6Xw3sP;p9qR0)p-%sBR3>L3yXX{RWegsmP(Yy=H9>r$2`CK}c_wP*Q!#*x za4GIW1s-T&`o*CF>4T518!7|&sKC~t&eTTK;d~hhAn2T+pb5_5Wc&;VVR}n5U=b?C zJ5T|hKn?T}YA;J|{SGQ)PLkQOx~L4aK=seG^&Hf~W?@s^|1A{4Xm}5ml8e^QQG0&_ zL-8T%I#oa9>K?1nmIJ+T*NqcX7z8{<*bcwe9b`Uzv1-w8=E6C|JpY==r^ z7HWn4P%9sTg*X+p(mSYt%RgogT@6&fWK_VJsPTrNwrZknpN7?`FTkKCSVy4>ZbGf( zMbt`PK@E5cHQ+VWr??a~aQ##>aB~c&o{H+%9sA%QtcZJ1fxdL2cE)QF~vC8s`U$#J^AhMYc6t8H4Sp zH$xsd6N40VNOodvdSx_?S$9*uHf+C%P+N+hQh&Nbwp(cJ6wX!!*hv!|?iZ7#5`WY(l|FiWwsP`VA zGWG}Ry(%5dRzzcj?td}`4UmO;VUVp4N3C!I>XW(%^&Qx5+mEBp#K)-jVmg{b6^9Bm z4YjcT7{FZA0#~5|-}p%Oe+Pv+H0;B=_%3RI>!{mt6E)C}NW@MBKJ>LP8nySWP%G?! z%0Mq`HY$@js4bj~T4(|4J^kpdqWiy`!ZWxLH9-VNT)#LZVsGq&QMeTqc`<6j6R5z? zqb4pzt?;h(0XC-Y=cH;OO|b{IK-S{S#-LX676nCg)_MUo;Z@WGKic+6T};ZuQ7Ipd zns5T@dgY@s7(|V`9hJ#9Q42eX{Fre*#o-u|&i<>zsB}&+=A*vNyHNw2My2dJ>Nb3b z8t5MCy($@|Up-W+Q&5MjGb-f+Q2~xYEhrBa;BwTsdoqG%;MZx;hvqnH;>)N3ZlF?q z5A{MwS2IBvYAYJqdV;kx)~9_Sk~C)qYU0DFEhw>GL4B~U2Pr7>QdA0mMok>j&D`ti z_-I8KOZ!07ism6naF(LpKZBa!lJ!#zq5dT*bKhbk{1tVpBDhJmQmK7so3 z6=DM{!j)KzL$M<#Nc~-m#)GJV&tm|8z*r2=G^uWbS=6(UN6rq6!*7uBgHC0hDrLA<` zfI>VCIjB8ZhC1~dP#Jk0wc=B@{c|i&{T^zfKTz*g>}^sVf%;xFwWeW1>cen0&c_b; z16E>wC!vp7QESv8?1Ty^8@2a~Py?<Pe{faTu&fVG4y%oQZmI3F^?esN1j)6~Hmn8MuN&FuosuOv51ZuXC0E@W_ejZ!-84 z9-zJk1DHC%aoXY#Y=X}XApb2W6w@#czr~H%eW3ZJ^cv<<@0-oR#J?lIdpNO!%+};! zfcjIYL%0!jXpf+_@G4foyEq;1qvo4T)LKx{VDevs!XX-z`u9~v6eF>}im=LuU$A+2rD-1UQRkcQ<<_QKU)S}P>!*HZ^8ZwTv2=yUZjAif{ z>q_ey`+Pmd@q80%K_^hx?;>Vl#0Y+i!ZElDOYkw>|GXTNqFtyxc^#GN)2KcD3d7O= zxJi8t)C6&;)V8-~q4s_#s{d?kh$~Rz9zgX!iOS>!tfu>ajY2;fzDIo++Kn`SmK%i{ zXa{QGgQ$T@kl>wf?ek8f%)tFn{YRqCPCkBxg{TaS8*KuA4Ode?jumzPGsl<#2BIb! zgUxWUZGYAJ4rb8)0S>?lW6gUbthuPeIUD)5IIB_PeS+G$d#FSB8!8jJa=|KCm4b}I zJdDF>xDnOyFI37y$D0*KTa!@F(@`tzkM(dXDg#H5-E+<%p8%)v1oM6YY73T6ApaU* zJq>afD#F)o$G2?#wDq6Zm*|nF0Et>O-s}Z2KszOZ!Ay528}O0u|T}4B$;{h?ORr{>`nKs7#K>a##?g zpj0eGeY=<22kUJ6CRD^PU>!VcpP$2J)GyigA-QJ28K{-bL9Kin>RRr{9qNyoZ`u^| zp$g8SpoUj42H(W`cooax&!|)X8!E-s@=QQUs7$1zPV-2dhc~byj^%qDhfkm~;bIgX zK|Q~Wj2m=5r=SUcL8Y=9UkMEyi`v6VFvdwmGL!<3~Sf`X^yf4ecpZ#om~MIjHs{7>55q4g3je4}V2vCj2RrnO3NP zdf_@8hza-=j>F0`X~TTngzupiHh32KSA^qdnF;4uS6a7PU$q{?LG&-N_2>fgUJ^b= zdpc_GXWRN(RA47D96v;M)wyQdyU!;7>d{FEH0I4cUHY8uDJy`HDg<8cI>8{CCtumi*Xz3%USzrvsE2&IQ3j?f+tbqm!dLs2kWDcm&@t?N2`Fb zsEHC$d*0TzPr!-PpTI1wY- zeF_b*>JpQpMAXW=TZdvM^<3mUI)_nP(X`O~j@Jsc=ZjEV_X27m9%`I-Q2|}F_3u&r z9v1T1QHSuQrb9!wux^c@LK#g$jPD2mWK!Z?$Jb@Zu9%|y}u{FMk>URwr;}580 z*IaJ?E;I_YNmEemGp+NjOHkvjT+U{+p|F((oq|i4fe&rH^9u8)xI9!K+ff;N3y*F+*6XY@7dHu&fx*bag3c@o8)PA=j?;Z z&zqH0M|~?Bp;Fb>+S9h@U`yJc#2L5;hhjMS&&6Eqj~8()Mzcy~cnKar4-=T*8R-%& zu0rkg1yskfo6K)}ZSffO)3^^87nwiR#cVcT_xDlnr*1K4V*$3Hz6ZncB1YoBZT$i2 z)>Yg}{@ETUl!6Z3b_~N)sKax``Y%)pOKtrZR0{t-B^+(r z^H71!+D4)@&@%gA4Qiqy)S-L{_2L243!e21Y6TzL`gPO_zqk6gn*i&gZbifG-fN9| zl<^)mXSKzH^Gt=i)Xm`-(9&g{pE7PHd&kJ;{;d2AYQQm+~D}0qE zP0Sk?7?wA&V2WEVty%RM(|LKpB&Y9;>3Ib+W-^XDI&GPEC#|#39h?5V8=KM1o1HP# z?_TYe?nQPV>vQ+@NOAA=C~?2e%y3`I8taztnc)uZx!Swi^SaNw+k01tS2Uod-@TAM z*DW4&%9}s@Ev+`p~PbYs_i<0h{i;HIuy=U!Mh q!cBSZJuhs1(C?kzP_wM}pUr>z-JiA9+9T=M_?xSth." +msgstr "1월 4일까지 내 사이트에 눈 내림을 표시합니다." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "눈" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "내 사이트에 눈 내림 표시" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "언제든지 홈페이지를 계속 편집하거나 계속해서 사이 msgid "You’ve added your first video!" msgstr "첫 번째 비디오를 추가하셨습니다!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "상품 보기" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "편집 계속" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "상품을 출시하고 다른 사람과 공유하기 전에 사이트에서 미리보기" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "첫 번째 상품을 추가하셨습니다!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "축하합니다! 이제 프리미엄 블록을 이용하실 수 있습니다." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "사용자 정의 시작" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "테마 스타일을 사용자 정의하여 사이트를 멋지게 꾸며보세요." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "편집기에서 변경한 내용은 테마를 활성화할 때까지 사이트에 적용되지 않습니다." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "%s을(를) 미리보고 있습니다." @@ -349,28 +412,28 @@ msgstr "확장됨" msgid "Menu" msgstr "메뉴" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "업그레이드 필수" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "업그레이드" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "프리미엄 스타일 미리보기" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "프리미엄 스타일 제거" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "지금 업그레이드" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "%2$s 요금제 이상으로 업그레이드한 후에만 방문자에게 표시되는 프리미엄 스타일이 사이트에 포함되어 있습니다." @@ -540,72 +603,68 @@ msgstr "내 홈" msgid "Hosting" msgstr "호스팅" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "관리자 인터페이스 스타일이 변경되었습니다." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "여기를 클릭하여 사이트, 도메인, 리더, 계정 설정 등에 접근하세요." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "모든 사이트" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "새로운 사이트 관리 패널과 호스팅 구성, GitHub 배포, 지표, PHP 로그, 서버 로그와 같은 모든 개발자 도구에 접근하세요." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "호스팅 개요" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "호스팅 메뉴에는 내 홈 페이지와 요금제, 도메인, 이메일 주소, 구매 명세 등을 포함한 업그레이드 메뉴의 모든 항목이 포함되어 있습니다." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "이제 업그레이드를 호스팅" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "확인 완료" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "다음" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "이전" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "{{currentStep}}/{{totalSteps}}단계" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "해제" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "워드프레스닷컴의 기본 알림판을 사용하여 사이트를 관리합니다." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "기본 스타일" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "WP-Admin을 사용하여 사이트를 관리합니다." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "클래식 스타일" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "관리자 인터페이스 스타일" @@ -906,61 +965,61 @@ msgstr "글 제목 추가" msgid "Start writing or type '/' to insert a block" msgstr "쓰기 시작 또는 '/'를 입력하여 블록 선택" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " 기준 " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " 한 번" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "%s 기준" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "예약됨" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "임시글" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Newspack 기부의 편의를 위해 젯팩 기부가 비활성화되었습니다." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr "," #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " 및 " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "공통" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " 및 " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "게시자:" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "문제가 발생했습니다. 페이지를 새로 고친 후 다시 시도하세요." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "더 많은 글 로드" @@ -1411,21 +1470,21 @@ msgstr "채팅을 진행할 봇 ID입니다." msgid "Help" msgstr "도움말" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "전환" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(%s 전에 수정됨)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "테마 선택..." -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "다른 테마를 선택하여 해당 사용자 정의 CSS를 보세요." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-nl-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-nl-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..d2efcecb72482 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-nl-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=n != 1;", + "language": "nl", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "We hebben de belangrijkste %s weergave van WordPress overgenomen om verbeteringen voor jou en miljoenen WordPress gebruikers wereldwijd te brengen." + ], + "The %s view just got better": [ "De %s weergave is net beter geworden" ], + "Got it": [ "Begrepen!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-nl_NL.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-nl_NL.mo index fdb04a61a5eff6e3ba8e6b660590c5a508252117..e396350cccb2f3f4fbfadb6456e25b8a1270fbcd 100644 GIT binary patch delta 11411 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 Vj3h3zf4VK5dodD;J+|rSe*?6}-wFT# delta 8558 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 rA;=rO_M>30`NoMs<)%!U?E0qFau01<th." +msgstr "Laat tot en met 4 januari vallende sneeuw op mijn site zien." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Sneeuw" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Vallende sneeuw op mijn site laten zien" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Voel je vrij om je homepage te blijven bewerken, of ga verder en lanceer msgid "You’ve added your first video!" msgstr "Je hebt je eerste video toegevoegd!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Bekijk je product" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Doorgaan met bewerken" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Bekijk een voorbeeld van je product op je site voordat je het lanceert en deelt met anderen." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "Je hebt je eerste product toegevoegd!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Gefeliciteerd! Premium blokken zijn nu beschikbaar om te gebruiken." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Aanpassen starten" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Probeer je themastijlen aan te passen om je site te krijgen zoals jij wil." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Wijzigingen die je aanbrengt in de editor worden pas toegepast op je site als je het thema activeert." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Je bekijkt %s als voorbeeld" @@ -349,28 +412,28 @@ msgstr "uitgevouwen" msgid "Menu" msgstr "Menu" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Upgrade vereist" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Upgrade" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Bekijk premium stijlen" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Verwijder premium stijlen" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Upgrade nu" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Je site bevat premium stijlen die alleen zichtbaar zijn voor bezoekers nadat ze zijn geüpgraded naar het %2$s abonnement of hoger." @@ -540,72 +603,68 @@ msgstr "Mijn startpagina" msgid "Hosting" msgstr "Hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "De stijl van de beheerinterface is veranderd." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Klik hier om toegang te krijgen tot je sites, domeinen, lezer, accountinstellingen en meer." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Al je sites" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Krijg toegang tot het nieuwe paneel voor sitebeheer en alle ontwikkelaarstools zoals hostingconfiguratie, GitHub-implementaties, statistieken, PHP-logs en serverlogs." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Hostingoverzicht" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "Het hostmenu bevat de startpagina en alle items van het upgradesmenu, inclusief abonnementen, domeinen, e-mails, aankopen en meer." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "Upgrades is nu hosting" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Begrepen!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Volgende" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Vorige" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Stap {{currentStep}} van {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Negeren" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Gebruik het eigen dashboard van WordPress.com om je site te beheren." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Standaard stijl" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Gebruik WP-Admin om je site te beheren." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Klassieke stijl" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Stijl van beheerdersinterface" @@ -906,61 +965,61 @@ msgstr "Voeg een berichttitel toe" msgid "Start writing or type '/' to insert a block" msgstr "Begin met schrijven of typ '/' om een blok in te voegen" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " per " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " eens" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "per %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Gepland" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Concept" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Jetpack donaties is uitgeschakeld ten gunste van Newspack donaties." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr ", " #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " en " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Algemeen" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " en " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "door" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Er is iets fout gegaan. Vernieuw de pagina en/of probeer het opnieuw." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Meer berichten laden" @@ -1411,21 +1470,21 @@ msgstr "De bot-ID waarvoor de chat wordt opgehaald." msgid "Help" msgstr "Help" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Wisselen" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(%s geleden aangepast)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Selecteer een thema ..." -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Selecteer een ander thema om zijn aangepaste CSS weer te geven." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt-br-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt-br-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..5d486f1752b77 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt-br-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=(n > 1);", + "language": "pt_BR", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "N\u00f3s adotamos a vis\u00e3o principal de %s do WordPress para trazer melhorias para voc\u00ea e milh\u00f5es de usu\u00e1rios do WordPress em todo o mundo." + ], + "The %s view just got better": [ "A visualiza\u00e7\u00e3o do %s ficou ainda melhor" ], + "Got it": [ "Entendi!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt_BR.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt_BR.mo index 1e2ca6e886396c5da56eea44362459e33de3977c..601dc1a8d134113fd731bec293eb1934f0cbbaf8 100644 GIT binary patch delta 11318 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 delta 8566 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 diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt_BR.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt_BR.po index ee55ca9682a42..d3146bccf3129 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt_BR.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-pt_BR.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-21 19:54:04+0000\n" +"PO-Revision-Date: 2025-01-10 16:09:59+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: pt_BR\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "Entendi!" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "Categoria padrão alterada com sucesso." + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "Configurar como padrão" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "Definir “%s” como a categoria padrão" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "Mostrar neve caindo no meu site até 4 de janeiro." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Neve" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Mostrar neve caindo no meu site" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Fique à vontade para continuar editando a página inicial ou continue e msgid "You’ve added your first video!" msgstr "Você adicionou seu primeiro vídeo!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Visualizar o produto" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Continuar editando" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Visualize seu produto em seu site antes de publicá-lo e compartilhá-lo com outras pessoas." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "Você adicionou seu primeiro produto!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Parabéns! Os blocos premium agora estão disponíveis para uso." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Personalize agora mesmo" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Personalize seus estilos de temas para deixar seu site mais bonito." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "As mudanças que você fizer no editor não serão aplicadas no seu site até você ativar o tema." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Você está visualizando %s" @@ -349,28 +412,28 @@ msgstr "expandido" msgid "Menu" msgstr "Menu" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Upgrade obrigatório" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Fazer upgrade" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Visualizar estilos premium" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Remover estilos premium" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Faça upgrade agora mesmo" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Seu site inclui estilos premium, que só são visíveis aos visitantes após o upgrade para o plano %2$s ou superior." @@ -540,72 +603,68 @@ msgstr "Minha página inicial" msgid "Hosting" msgstr "Hospedagem" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "O estilo da interface de administração foi alterado." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Clique aqui para acessar seus sites, domínios, o leitor, as configurações da conta e muito mais." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Todos os seus sites" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Acesse o novo painel de gerenciamento de sites e todas as ferramentas de desenvolvedor, como configuração de hospedagem, implantações do GitHub, métricas, registros PHP e do servidor." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Visão geral da hospedagem" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "O menu Hospedagem contém a página Minha página inicial e todos os itens do menu Upgrades, incluindo planos, domínios, e-mails, compras e muito mais." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "Upgrades ficam agora em Hospedagem" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Entendi!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Seguinte" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Anterior" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Etapa {{currentStep}} de {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Ignorar" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Use o painel nativo do WordPress.com para gerenciar seu site." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Estilo padrão" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Use o WP-Admin para gerenciar seu site." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Estilo clássico" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Estilo da interface do administrador" @@ -906,61 +965,61 @@ msgstr "Adicionar título do post" msgid "Start writing or type '/' to insert a block" msgstr "Comece a escrever ou digite / para inserir um bloco" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " por " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " uma vez" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "por %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Agendado" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Rascunho" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "As doações do Jetpack foram desativadas. Use agora as doações do Newspack." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr ", " #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " e " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Comum" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " e " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "por" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Ocorreu um erro. Atualize a página e/ou tente novamente." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Carregar mais posts" @@ -1411,21 +1470,21 @@ msgstr "A ID do bot para acessar o chat." msgid "Help" msgstr "Ajuda" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Trocar" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(modificado %s atrás)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Selecione um tema…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Selecione outro tema para ver o CSS personalizado." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ru-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ru-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..ec8a85f2c0425 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ru-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,18 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);", + "language": "ru", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "\u041c\u044b \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u0438\u0434 WordPress \u00ab%s\u00bb, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432\u0430\u043c \u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 WordPress \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443." + ], + "The %s view just got better": [ + "\u0412\u0438\u0434 \u00ab%s\u00bb \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u0442\u0430\u043b \u043b\u0443\u0447\u0448\u0435" + ], + "Got it": [ "\u041f\u043e\u043d\u044f\u0442\u043d\u043e!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ru_RU.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-ru_RU.mo index 2b1884824837c14b80691b3dd00508c40d5afab5..ad298e55387ac7a64befb6183ba7b246c6b7bc9e 100644 GIT binary patch delta 11968 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 Oyev8vth." +msgstr "Показывать падающий снег в моём блоге до 4 января." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Снег" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Отображать падающий снег на сайте" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Оставайтесь в режиме редактирования ва msgid "You’ve added your first video!" msgstr "Вы добавили первое видео!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Просмотреть товар" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Продолжить редактирование" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Просмотрите товар на сайте, перед тем как выпустить его и показать другим." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "Вы добавили свой первый товар!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Поздравляем! Блоки Premium теперь доступны для использования." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Приступить к настройке" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Настраивайте стили своей темы, чтобы ваш сайт выглядел именно так, как вам нужно." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Изменения, вносимые в редакторе, не будут отображаться на сайте до тех пор, пока вы не активируете тему." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Вы просматриваете %s" @@ -349,28 +412,28 @@ msgstr "развернутый" msgid "Menu" msgstr "Меню" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Требуется обновление тарифа" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Платная услуга" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Просмотр премиум-стилей" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Удалить премиум-стили" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Обновить сейчас" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Ваш сайт включает премиум-стили, которые будут видны посетителям только после перехода на тарифный план уровня %2$s или выше." @@ -540,72 +603,68 @@ msgstr "Главная" msgid "Hosting" msgstr "Хостинг" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "Стиль интерфейса администратора изменился." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Нажмите, чтобы перейти к своим сайтам, доменам, «Чтиву», настройкам учётной записи и всему остальному." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Все ваши сайты" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Получите доступ к новой панели управления сайтом и всем инструментам разработки, таким как настройка хостинга, развертывание GitHub, метрики, журналы PHP и журналы сервера." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Обзор «Хостинга»" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "Меню «Хостинг» содержит страницу «Главная» и элементы меню «Платные услуги», в том числе «Тарифные планы», «Домены», «Рассылки», «Покупки» и др." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "«Платные услуги» превратились в «Хостинг»" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Понятно!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Вперед" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Назад" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Шаг {{currentStep}} из {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Закрыть" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Используйте собственную консоль WordPress.com для управления сайтом." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Стиль по умолчанию" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Используйте WP-Admin для управления вашим сайтом." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Классический стиль" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Стиль интерфейса администратора" @@ -906,61 +965,61 @@ msgstr "Добавить заголовок записи" msgid "Start writing or type '/' to insert a block" msgstr "Начните писать или введите \"/\" для вставки блока" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " за " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " однократно" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "за %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Запланировано" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Черновик" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Пожертвования Jetpack отключены в пользу пожертвований Newspack." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr ", " #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " и " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Общее" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " и " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "Автор" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Произошла ошибка. Обновите страницу и повторите попытку." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Загрузить другие записи" @@ -1411,21 +1470,21 @@ msgstr "Идентификатор бота, для которого требу msgid "Help" msgstr "Справка" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Переключить" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(обновлено %s назад)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Выбрать тему…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Выберите другую тему, чтобы просмотреть её пользовательскую CSS." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..c60efd723665f --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=n != 1;", + "language": "sv_SE", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "Vi har inf\u00f6rt WordPress huvudsakliga %s-vy f\u00f6r att ge f\u00f6rb\u00e4ttringar till dig och miljontals WordPress-anv\u00e4ndare \u00f6ver hela v\u00e4rlden." + ], + "The %s view just got better": [ "%s-vyn blev precis b\u00e4ttre" ], + "Got it": [ "F\u00f6rst\u00e5tt!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv_SE.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv_SE.mo index 7c2dc967988edfae29f61fad461a83fcc26498d9..cf9c1ee512130b2c5131505b86a0d0e35783d8da 100644 GIT binary patch delta 14225 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 BiE97= delta 8822 zcmYM(30zlI-pBF#M^IT@QQS~)Lu3;WTu^ZZQ6v#DmE2HJNfw1a?)gu1!Q4G!rkQ3r zm2G3!tSPNYZPan*$?LnqoY*#(~%# z^H9&r+~-TNx#hF0^%NBGZr7)W_v?`m0%unVex3=YHLsEOBN zCwvSw{u|f^-@%r66$dfDb&G-`PGA;AI0!ZIXw<+3xCg5+4V#e$O)wg#;|x?Ff5pal z1~t)psI9qy%`t$qDv&Vji;?IXL}3zz0Njb%v&T>oK8-{1b?k`0VFPU6!?GG;Cse@Q z(I1mh@At)Q9EMYHGX~?oQGx%AT40lC^529)$7m-5v8WZMVFXsAp4VayKIuOH4z&ew zJ)Hp3Q5noeO;mu5a5lEXa%_w>sKB>jGVbb0{^KZ|qd|Ln8`)kfB*qz_7plE4Duvmu zQ{474

  • +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 diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv_SE.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv_SE.po index aa57941f21037..0a73685727997 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv_SE.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-sv_SE.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-21 11:54:03+0000\n" +"PO-Revision-Date: 2025-01-12 11:50:17+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: sv_SE\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "Jag förstår!" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "Standardkategori ändrades." + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "Ange som standard" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "Ställ in ”%s” till standardkategorin" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "Inläggssida ändrad." + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "Startsida ändrad." + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "Ställ in som inläggssida" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "Ställ in ”%s” som sidan som visar dina senaste inlägg" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "Ställ in som startsida" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "Ställ in ”%s” som din webbplats startsida" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "Visa fallande snö på min webbplats till den 4 januari." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Snö" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Visa fallande snö på min webbplats" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Fortsätt gärna redigera din startsida eller fortsätt och lansera din msgid "You’ve added your first video!" msgstr "Du har lagt till ditt första videoklipp!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Visa din produkt" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Fortsätt redigera" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Förhandsgranska din produkt på din webbplats innan du lanserar och delar med andra." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "Du har lagt till din första produkt!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Grattis! Premiumblock är nu tillgängliga att använda." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Börja anpassa" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Prova att anpassa dina temastilar för att få din webbplats att se ut som du vill." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Ändringar du gör i redigeraren kommer inte att tillämpas på din webbplats förrän du aktiverar temat." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "Du förhandsgranskar %s" @@ -349,28 +412,28 @@ msgstr "expanderad" msgid "Menu" msgstr "Meny" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Uppgradering krävs" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Uppgradera" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Förhandsgranska premiumstilar" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Ta bort premiumstilar" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Uppgradera nu" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Din webbplats inkluderar premiumstilar som endast är synliga för besökare efter uppgradering till %2$s-paketet eller högre." @@ -540,72 +603,68 @@ msgstr "Mitt hem" msgid "Hosting" msgstr "Webbhotell" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "Administratörsgränssnittets stil ändrat." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Klicka här för att komma åt dina webbplatser, domäner, läsaren, kontoinställningar med mera." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Alla dina webbplatser" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Kom åt den nya panelen för webbplatshantering och alla utvecklarverktyg såsom webbhotellskonfiguration, GitHub-distributioner, mätvärden, PHP-loggar och serverloggar." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Översikt över webbhotell" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "Menyn Webbhotell innehåller sidan Min Startsida och alla objekt från menyn Uppgraderingar, inklusive Paket, Domäner, E-post, Köp med mera." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "Uppgraderingar finns nu under Webbhotell" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Förstått!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Nästa" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Föregående" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Steg {{currentStep}} av {{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Avfärda" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Använd WordPress.com inbyggda adminpanel för att hantera din webbplats." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Standardstil" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Använd WP-Admin för att hantera din webbplats." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Klassisk stil" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Administratörsgränssnittets stil" @@ -906,61 +965,61 @@ msgstr "Lägg till en inläggsrubrik" msgid "Start writing or type '/' to insert a block" msgstr "Börja skriva eller skriv ”/” för att infoga ett block" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " per " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " en gång" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "per %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Schemalagt" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Utkast" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Jetpack-donationer är inaktiverade till förmån för Newspack-donationer." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr ", " #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " och " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Vanlig" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " och " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "av" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Något gick fel. Ladda om sidan och/eller försök igen." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Ladda fler inlägg" @@ -1411,21 +1470,21 @@ msgstr "Bot-ID för att hämta chatten." msgid "Help" msgstr "Hjälp" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Byt" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(ändrad för %s sedan)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Välj ett tema …" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Välj ett annat tema för att visa dess anpassade CSS." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..37060e8315c02 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,18 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=2; plural=(n > 1);", + "language": "tr", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "Size ve d\u00fcnya \u00e7ap\u0131ndaki milyonlarca WordPress kullan\u0131c\u0131s\u0131na iyile\u015ftirmeler sunmak i\u00e7in WordPress'in ana %s g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc uyarlad\u0131k." + ], + "The %s view just got better": [ + "%s sayfas\u0131n\u0131n g\u00f6r\u00fcn\u00fcm\u00fc art\u0131k daha iyi" + ], + "Got it": [ "Anlad\u0131m!" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr_TR.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr_TR.mo index 066b5dda1019ac7229884a536050c0527b56e79e..823282d205c7c154b88df39c8892b52bc3bda2bf 100644 GIT binary patch delta 11320 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 delta 8549 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 diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr_TR.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr_TR.po index f23bfcb8bc4f3..036c9831f2cc0 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr_TR.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-tr_TR.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-21 13:54:03+0000\n" +"PO-Revision-Date: 2025-01-10 17:58:46+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: tr\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "Anladım!" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "Varsayılan kategori başarıyla değiştirildi." + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "Varsayılan olarak ayarla" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "\"%s\" kategorisini varsayılan kategori olarak ayarlayın" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "4 Ocak'a kadar kar yağışını blogumda göster." + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "Kar" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "Sitemde yağan kar göster" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "Ana sayfanızı düzenlemeye devam etmekten çekinmeyin veya devam edin msgid "You’ve added your first video!" msgstr "İlk videonuzu eklediniz!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "Ürününüzü görüntüleyin" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "Düzenlemeye devam et" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "Lansmandan ve başkalarıyla paylaşmadan önce ürününüzü sitenizde önizleyin." -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "İlk ürününüzü eklediniz!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "Tebrikler! Premium bloklar artık kullanılabilir." -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "Özelleştirmeye başlayın" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "Sitenizin tam istediğiniz gibi görünmesi için tema stillerinizi özelleştirmeyi deneyin." -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "Düzenleyicide yaptığınız değişiklikler, temayı etkinleştirene kadar sitenizde uygulanmaz." -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "%s temasında önizleme yapmaktasınız" @@ -349,28 +412,28 @@ msgstr "genişletilmiş" msgid "Menu" msgstr "Menü" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "Yükseltme gerekiyor" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "Yükselt" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "Premium stilleri önizle" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "Premium stilleri kaldır" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "Hemen yükseltin" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "Siteniz, yalnızca %2$s veya daha yüksek bir pakete yükselttikten sonra ziyaretçiler tarafından görülebilen premium stiller içeriyor." @@ -540,72 +603,68 @@ msgstr "Ana Sayfam" msgid "Hosting" msgstr "Depolama" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "Yönetici arayüzü stili değişti." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "Sitelerinize, alan adlarınıza, Okuyucuya, hesap ayarlarınıza ve daha fazlasına erişmek için buraya tıklayın." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "Tüm siteleriniz" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "Yeni site yönetimi paneline ve depolama yapılandırması, GitHub dağıtımları, analizler, PHP günlükleri ve sunucu günlükleri gibi tüm geliştirici araçlarına erişin." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "Depolama genel bakışı" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "Depolama menüsü; Ana Sayfam sayfası ve Paketler, Alan Adları, E-postalar, Satın Almalar ve daha fazlası dahil Yükseltmeler menüsündeki tüm öğeleri içerir." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "Yükseltmeler yeni hali artık Depolama" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "Anladım!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "Sonraki" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "Önceki" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "Adım {{currentStep}}/{{totalSteps}}" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "Kapat" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "Sitenizi WordPress.com'un yerel panosuyla yönetin." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "Varsayılan stil" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "Sitenizi yönetmek için WP-Admin'i kullanın." -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "Klasik stil" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "Yönetici Arayüzü Stili" @@ -906,61 +965,61 @@ msgstr "Bir yazı başlığı ekle" msgid "Start writing or type '/' to insert a block" msgstr "Bir blok eklemek için yazmaya başlayın ya da '/' yazın." -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " / " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " bir kez" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "%s başına" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "Zamanlandı" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "Taslak" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Jetpack bağışları, Newspack bağışları için devre dışı bırakıldı." #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr ", " #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " ve " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "Genel" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " ve " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "yazan:" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "Bir yanlışlık oldu. Lütfen sayfayı yenileyin ve/veya tekrar deneyin." -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "Daha fazla gönderi yükle" @@ -1411,21 +1470,21 @@ msgstr "Sohbet için alınacak robot kimliği." msgid "Help" msgstr "Yardım" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "Değiştir" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(%s önce değiştirildi)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "Bir tema seçin…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "Özel CSS düzenlemesini görüntülemek için başka bir tema seçin." diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh-cn-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh-cn-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..7cbef117eaddf --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh-cn-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=1; plural=0;", + "language": "zh_CN", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "\u6211\u4eec\u91c7\u7528\u4e86 WordPress \u7684\u4e3b\u8981 %s \u68c0\u89c6\u65b9\u5f0f\uff0c\u4ee5\u4fbf\u4e3a\u60a8\u548c\u5168\u7403\u6570\u767e\u4e07 WordPress \u7528\u6237\u5e26\u6765\u6539\u8fdb\u3002" + ], + "The %s view just got better": [ "%s \u68c0\u89c6\u65b9\u5f0f\u5df2\u6709\u6539\u5584" ], + "Got it": [ "\u77e5\u9053\u4e86\uff01" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh-tw-14e8287aa601c8c430c4d159f4ed7a88.json b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh-tw-14e8287aa601c8c430c4d159f4ed7a88.json new file mode 100644 index 0000000000000..b33153ee419e3 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh-tw-14e8287aa601c8c430c4d159f4ed7a88.json @@ -0,0 +1,16 @@ +{ + "locale_data": { + "messages": { + "": { + "plural_forms": "nplurals=1; plural=0;", + "language": "zh_TW", + "project_id_version": "WordPress.com - jetpack-mu-wpcom" + }, + "We've adopted WordPress's main %s view to bring improvements to you and millions of WordPress users worldwide.": [ + "\u6211\u5011\u5df2\u7d93\u63a1\u7d0d WordPress \u7684\u4e3b\u8981 %s \u6aa2\u8996\u65b9\u5f0f\uff0c\u8b93\u4f60\u548c\u5168\u4e16\u754c\u6578\u767e\u842c WordPress \u4f7f\u7528\u8005\u90fd\u80fd\u4eab\u6709\u6539\u5584\u7684\u6210\u679c\u3002" + ], + "The %s view just got better": [ "%s \u6aa2\u8996\u65b9\u5f0f\u5df2\u6709\u6539\u5584" ], + "Got it": [ "\u77e5\u9053\u4e86\uff01" ] + } + } +} diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_CN.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_CN.mo index c5ab0ca3e644324de1af77c1a0646be74635679c..39e622362bbbdcc7fd8c124566081fa2ce877a66 100644 GIT binary patch delta 11048 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 IT)*?b0VpIp5dZ)H delta 8537 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 Z8xZ0iU$MkJw(<*a{i@Z)-4W|H{0C1cn9TqH diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_CN.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_CN.po index 8cd6671c309b3..c9289441e456d 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_CN.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_CN.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-21 15:54:04+0000\n" +"PO-Revision-Date: 2025-01-12 18:31:34+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: zh_CN\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "知道了!" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "默认分类更改成功。" + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "设为默认" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "将“%s”设为默认分类" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "1 月 4 日之前在我的站点上显示飘落的雪花。" + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "雪" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "在我的站点上显示飘落的雪花" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "随时继续编辑您的主页,或者继续并发布您的站点。" msgid "You’ve added your first video!" msgstr "您已添加第一个视频!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "查看您的产品" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "继续编辑" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "先在站点预览您的产品,然后再推出并与其他人共享。" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "您已添加第一个产品!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "恭喜! 现在可以使用高级版区块啦。" -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "开始自定义" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "尝试自定义您的主题样式,让您的站点看起来恰到好处。" -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "在激活主题之前,您在编辑器中所做的更改不会应用到您的站点上。" -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "您正在预览 %s" @@ -349,28 +412,28 @@ msgstr "已展开" msgid "Menu" msgstr "菜单" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "需要升级" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "升级" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "预览高级样式" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "删除高级样式" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "立即升级" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "您的站点包含高级样式,这些样式仅对升级到 %2$s 套餐或更高级别套餐的访客可见。" @@ -540,72 +603,68 @@ msgstr "我的主页" msgid "Hosting" msgstr "托管服务" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "管理员界面样式已更改。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "点击此处即可访问您的站点、域名、阅读器、账户设置等。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "您的所有站点" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "访问新的站点管理面板和所有开发者工具,例如托管服务配置、Github 部署、指标、PHP 日志、服务器日志等。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "托管服务概述" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "“托管服务”菜单包含“我的主页”页面和“升级”菜单中的所有项,包括套餐、域名、电子邮件、购买等。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "升级现在属于托管服务" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "知道了!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "下一个" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "上一页" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "第 {{currentStep}} 步,共 {{totalSteps}} 步" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "忽略" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "使用 WordPress.com 的本地仪表盘来管理您的站点。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "默认样式" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "使用 WP-Admin 来管理您的站点。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "经典样式" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "管理员界面样式" @@ -906,61 +965,61 @@ msgstr "添加文章标题" msgid "Start writing or type '/' to insert a block" msgstr "开始写作或输入“/”来插入区块" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " 每 " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " 一次" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "每 %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "预发布" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "草稿" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "Jetpack 捐赠已禁用,由 Newspack 捐赠替代。" #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr "," #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr "和" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "常见" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr "和" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "作者" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "出错了。请刷新页面并/或重试。" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "加载更多文章" @@ -1411,21 +1470,21 @@ msgstr "要获取聊天信息的机器人 ID。" msgid "Help" msgstr "帮助" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "切换" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(修改于 %s 前)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "选择主题…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "选择另一个主题,查看其自定义 CSS。" diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_TW.mo b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_TW.mo index 3d506a6ec527d6c4b4f37382c0391f001783a645..f80e4e52409be6aa749d9d9819dc6cb4949fda4d 100644 GIT binary patch delta 11173 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 diff --git a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_TW.po b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_TW.po index 8f807bf2d0771..d2c78e4d6789a 100644 --- a/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_TW.po +++ b/projects/packages/jetpack-mu-wpcom/languages/jetpack-mu-wpcom-zh_TW.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2024-11-22 09:54:04+0000\n" +"PO-Revision-Date: 2025-01-11 02:03:17+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -9,6 +9,70 @@ msgstr "" "Language: zh_TW\n" "Project-Id-Version: WordPress.com - jetpack-mu-wpcom\n" +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:286 +msgid "Got it!" +msgstr "知道了!" + +#: src/features/post-categories/quick-actions.php:78 +msgid "Default category changed successfully." +msgstr "已成功變更預設分類。" + +#: src/features/post-categories/quick-actions.php:36 +msgid "Set as default" +msgstr "設為預設" + +#. translators: category name +#: src/features/post-categories/quick-actions.php:35 +msgid "Set “%s” as the default category" +msgstr "將「%s」設為預設分類" + +#: src/features/pages/quick-actions.php:169 +msgid "Posts page changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:143 +msgid "Homepage changed successfully." +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Set as posts page" +msgstr "" + +#: src/features/pages/quick-actions.php:57 +msgid "Unset as posts page" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Set “%s” as the page that displays your latest posts" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:56 +msgid "Unset “%s” as the page that displays your latest posts" +msgstr "" + +#: src/features/pages/quick-actions.php:48 +msgid "Set as homepage" +msgstr "" + +#. translators: page title +#: src/features/pages/quick-actions.php:47 +msgid "Set “%s” as your site's homepage" +msgstr "" + +#: src/features/holiday-snow/class-holiday-snow.php:226 +msgid "Show falling snow on my site until January 4th." +msgstr "在我的網誌顯示下雪效果,直到 1 月 4 日為止。" + +#: src/features/holiday-snow/class-holiday-snow.php:205 +msgid "Snow" +msgstr "雪" + +#: src/features/holiday-snow/class-holiday-snow.php:194 +msgid "Show falling snow on my site" +msgstr "在我的網站顯示下雪效果" + #: src/features/wpcom-blocks/timeline/block.json msgctxt "block keyword" msgid "timeline" @@ -65,40 +129,39 @@ msgstr "歡迎繼續編輯首頁,或繼續下一步並啟動網站。" msgid "You’ve added your first video!" msgstr "你新增了第一個影片!" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:121 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:122 msgid "View your product" msgstr "檢視商品" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:119 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:120 msgid "Continue editing" msgstr "繼續編輯" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:113 msgid "Preview your product on your site before launching and sharing with others." msgstr "先在網站預覽商品,再推出並與他人分享。" -#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:111 +#: src/features/wpcom-block-editor-nux/src/seller-celebration-modal/index.jsx:112 msgid "You've added your first product!" msgstr "你新增了第一個商品!" -#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:22 +#: src/features/wpcom-block-editor-nux/src/purchase-notice/index.jsx:23 msgid "Congrats! Premium blocks are now available to use." msgstr "恭喜! 進階版區塊已可使用。" -#: src/features/block-theme-previews/modal.jsx:58 +#: src/features/block-theme-previews/modal.jsx:59 msgid "Start customizing" msgstr "開始自訂" -#: src/features/block-theme-previews/modal.jsx:50 +#: src/features/block-theme-previews/modal.jsx:51 msgid "Try customizing your theme styles to get your site looking just right." msgstr "嘗試自訂佈景主題樣式,讓網站看起來更對味。" -#: src/features/block-theme-previews/modal.jsx:44 +#: src/features/block-theme-previews/modal.jsx:45 msgid "Changes you make in the editor won’t be applied to your site until you activate the theme." msgstr "在你啟用佈景主題後,網站才會套用你在編輯器所做的變更。" -#. translators: %s: theme name -#: src/features/block-theme-previews/modal.jsx:38 +#: src/features/block-theme-previews/modal.jsx:39 msgid "You’re previewing %s" msgstr "你正在預覽「%s」" @@ -349,28 +412,28 @@ msgstr "已展開" msgid "Menu" msgstr "選單" -#: src/features/wpcom-global-styles/index.php:548 +#: src/features/wpcom-global-styles/index.php:563 msgid "Upgrade required" msgstr "需要升級" -#: src/features/wpcom-global-styles/index.php:545 +#: src/features/wpcom-global-styles/index.php:560 msgid "Upgrade" msgstr "升級" -#: src/features/wpcom-global-styles/index.php:537 +#: src/features/wpcom-global-styles/index.php:552 msgid "Preview premium styles" msgstr "預覽進階版樣式" -#: src/features/wpcom-global-styles/index.php:532 +#: src/features/wpcom-global-styles/index.php:547 msgid "Remove premium styles" msgstr "移除進階版樣式" -#: src/features/wpcom-global-styles/index.php:522 +#: src/features/wpcom-global-styles/index.php:537 msgid "Upgrade now" msgstr "立即升級" #. translators: %1$s - documentation URL, %2$s - the name of the required plan -#: src/features/wpcom-global-styles/index.php:498 +#: src/features/wpcom-global-styles/index.php:513 msgid "Your site includes premium styles that are only visible to visitors after upgrading to the %2$s plan or higher." msgstr "你的網站包含進階版樣式,必須升級為 %2$s 方案或更高級的方案,才會向訪客顯示這些樣式。" @@ -540,72 +603,68 @@ msgstr "我的首頁" msgid "Hosting" msgstr "主機服務" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:268 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:380 msgid "Admin interface style changed." msgstr "管理介面樣式已變更。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:231 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:343 msgid "Click here to access your sites, domains, Reader, account settings, and more." msgstr "按一下此處,即可存取你的網站、網域、閱讀器、帳號設定等更多功能。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:230 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:342 msgid "All your sites" msgstr "你所有的網站" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:224 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:336 msgid "Access the new site management panel and all developer tools such as hosting configuration, GitHub deployments, metrics, PHP logs, and server logs." msgstr "存取全新網站管理面板與所有開發人員工具,如主機服務設定、GitHub 部署、指標、PHP 記錄與伺服器記錄。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:223 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:335 msgid "Hosting overview" msgstr "主機服務總覽" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:217 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:329 msgid "The Hosting menu contains the My Home page and all items from the Upgrades menu, including Plans, Domains, Emails, Purchases, and more." msgstr "此主機服務選單包含「我的首頁」頁面以及「升級」選單中的所有項目,包含方案、網域、電子郵件地址、購買項目與更多內容。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:216 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:328 msgid "Upgrades is now Hosting" msgstr "「升級」現已更名為「主機服務」" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:174 -msgid "Got it!" -msgstr "知道了!" - -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:173 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:285 msgid "Next" msgstr "下一個" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:172 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:284 msgid "Previous" msgstr "上一頁" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:171 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:283 msgid "Step {{currentStep}} of {{totalSteps}}" msgstr "步驟 {{currentStep}},共 {{totalSteps}} 步" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:167 -#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:67 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:279 +#: src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php:133 msgid "Dismiss" msgstr "關閉" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Use WordPress.com’s native dashboard to manage your site." msgstr "利用 WordPress.com 原生儀表板來管理你的網站。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:31 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:35 msgid "Default style" msgstr "預設樣式" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Use WP-Admin to manage your site." msgstr "使用 WP-管理員管理網站。" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:30 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:34 msgid "Classic style" msgstr "經典樣式" -#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:28 +#: src/features/wpcom-admin-interface/wpcom-admin-interface.php:32 msgid "Admin Interface Style" msgstr "管理員介面樣式" @@ -906,61 +965,61 @@ msgstr "新增文章標題" msgid "Start writing or type '/' to insert a block" msgstr "開始撰寫內容或輸入斜線 (/) 以插入區塊" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1607 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1459 msgid " per " msgstr " 每 " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1604 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1456 msgid " once" msgstr " 單次" #. Translators: %s is the %s is the frequency. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1578 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1430 msgid "per %s" msgstr "每 %s" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1438 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1290 msgid "Scheduled" msgstr "已排程" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1437 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1289 msgid "Draft" msgstr "草稿" -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1404 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:1256 msgid "Jetpack donations is disabled in favour of Newspack donations." msgstr "為使用 Newspack 捐款而停用 Jetpack 捐款。" #. translators: separates all but the last two sponsor names; needs a space at #. the end. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:993 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:955 msgid ", " msgstr "," #. translators: separates last two sponsor names; needs a space on either side. -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:990 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:952 msgid " and " msgstr " 及 " -#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:889 +#: src/features/newspack-blocks/synced-newspack-blocks/class-newspack-blocks.php:851 msgid "Common" msgstr "一般" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:490 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:495 msgctxt "post author" msgid " and " msgstr " 及 " -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:473 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:478 msgctxt "post author" msgid "by" msgstr "作者:" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:400 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:404 msgid "Something went wrong. Please refresh the page and/or try again." msgstr "執行時發生錯誤。請重新整理頁面後再試一次。" -#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:393 +#: src/features/newspack-blocks/synced-newspack-blocks/blocks/homepage-articles/view.php:397 msgid "Load more posts" msgstr "載入更多文章" @@ -1411,21 +1470,21 @@ msgstr "存取文字對談所需的機器人 ID。" msgid "Help" msgstr "說明" -#: src/features/custom-css/custom-css.php:1206 +#: src/features/custom-css/custom-css.php:1203 msgid "Switch" msgstr "切換" #. translators: how long ago the stylesheet was modified. -#: src/features/custom-css/custom-css.php:1187 -#: src/features/custom-css/custom-css.php:1199 +#: src/features/custom-css/custom-css.php:1184 +#: src/features/custom-css/custom-css.php:1196 msgid "(modified %s ago)" msgstr "(%s前修改過)" -#: src/features/custom-css/custom-css.php:1177 +#: src/features/custom-css/custom-css.php:1174 msgid "Select a theme…" msgstr "選取佈景主題…" -#: src/features/custom-css/custom-css.php:1175 +#: src/features/custom-css/custom-css.php:1172 msgid "Select another theme to view its custom CSS." msgstr "選取其他佈景主題以檢視其自訂 CSS。" From d34f9d450b4a62d121849a82b89bfbb63db4d6fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dami=C3=A1n=20Su=C3=A1rez?= Date: Mon, 13 Jan 2025 22:01:40 +0000 Subject: [PATCH 039/420] PieChart: iterate over component. Introduce `size`, `thickness` and `padding` property (#40993) * replace width and height with size This is a Pie chart. Size is more accurate * introduce padding prop * changelog * tweak legendOrientation story control * change thickness arg story order * update thickness value in storieps * computer outer, inner, and thickness props --- .../update-iterate-over-pie-chart-component | 4 ++ .../src/components/pie-chart/pie-chart.tsx | 33 +++++++++++++--- .../pie-chart/stories/index.stories.tsx | 39 ++++++++++++++++--- .../stories/index.stories.tsx | 2 +- 4 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-iterate-over-pie-chart-component diff --git a/projects/js-packages/charts/changelog/update-iterate-over-pie-chart-component b/projects/js-packages/charts/changelog/update-iterate-over-pie-chart-component new file mode 100644 index 0000000000000..7d9c19c45f44c --- /dev/null +++ b/projects/js-packages/charts/changelog/update-iterate-over-pie-chart-component @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +PieChart: iterate a bit over component API diff --git a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx index 6e30641f25a40..739a22d6b51f0 100644 --- a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx @@ -12,11 +12,28 @@ import type { BaseChartProps, DataPointPercentage } from '../../types'; // TODO: add animation -interface PieChartProps extends BaseChartProps< DataPointPercentage[] > { +type OmitBaseChartProps = Omit< BaseChartProps< DataPointPercentage[] >, 'width' | 'height' >; + +interface PieChartProps extends OmitBaseChartProps { /** * Inner radius in pixels. If > 0, creates a donut chart. Defaults to 0. */ innerRadius?: number; + + /** + * Size of the chart in pixels + */ + size?: number; + + /** + * Add padding to the chart + */ + padding?: number; + + /** + * Thickness of the pie chart. A value between 0 and 1 + */ + thickness?: number; } /** @@ -27,13 +44,13 @@ interface PieChartProps extends BaseChartProps< DataPointPercentage[] > { */ const PieChart = ( { data, - width = 500, //TODO: replace when making the components responsive - height = 500, //TODO: replace when making the components responsive + size = 500, //TODO: replace when making the components responsive + thickness = 1, withTooltips = false, - innerRadius = 0, className, showLegend, legendOrientation, + padding = 20, }: PieChartProps ) => { const providerTheme = useChartTheme(); const { onMouseMove, onMouseLeave, tooltipOpen, tooltipData, tooltipLeft, tooltipTop } = @@ -41,6 +58,9 @@ const PieChart = ( { withTooltips, } ); + const width = size; + const height = size; + // Calculate radius based on width/height const radius = Math.min( width, height ) / 2; const centerX = width / 2; @@ -52,6 +72,9 @@ const PieChart = ( { index, } ) ); + const outerRadius = radius - padding; + const innerRadius = outerRadius * ( 1 - thickness ); + const accessors = { value: ( d: DataPointPercentage ) => d.value, // Use the color property from the data object as a last resort. The theme provides colours by default. @@ -73,7 +96,7 @@ const PieChart = ( { data={ dataWithIndex } pieValue={ accessors.value } - outerRadius={ radius - 20 } // Leave space for labels/tooltips + outerRadius={ outerRadius } innerRadius={ innerRadius } > { pie => { diff --git a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx index 2276a61b39c35..cc411980761d7 100644 --- a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx @@ -27,6 +27,34 @@ export default { }, defaultValue: undefined, }, + size: { + control: { + type: 'range', + min: 100, + max: 800, + step: 1, + }, + }, + thickness: { + control: { + type: 'range', + min: 0, + max: 1, + step: 0.01, + }, + }, + padding: { + control: { + type: 'range', + min: 0, + max: 100, + step: 1, + }, + }, + legendOrientation: { + control: 'radio', + options: [ 'horizontal', 'vertical' ], + }, }, decorators: [ ( Story, { args } ) => ( @@ -41,12 +69,12 @@ export default { export const Default: StoryType = { args: { - width: 400, - height: 400, + size: 400, + thickness: 1, + padding: 20, withTooltips: false, data, theme: 'default', - innerRadius: 0, showLegend: false, legendOrientation: 'horizontal', }, @@ -71,12 +99,12 @@ export const WithVerticalLegend: StoryType = { export const Doughnut: StoryType = { args: { ...Default.args, - innerRadius: 80, + thickness: 0.5, }, parameters: { docs: { description: { - story: 'Doughnut chart variant with inner radius of 80px.', + story: 'Doughnut chart variant with the thickness set to 0.5 (50%).', }, }, }, @@ -100,7 +128,6 @@ export const WithTooltipsDoughnut: StoryType = { args: { ...Default.args, withTooltips: true, - innerRadius: 100, }, parameters: { docs: { diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx index 6878a91700544..1352a17259ace 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx @@ -60,10 +60,10 @@ const Template = args => ; export const Default = Template.bind( {} ); Default.args = { width: 500, + thickness: 0.4, data, label: 'OS', note: 'Windows +10%', - thickness: 0.4, clockwise: true, showLegend: false, legendOrientation: 'horizontal', From 2578d642e19a1f05a7a436c7d497bf7e859fe23f Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Mon, 13 Jan 2025 19:20:54 -0800 Subject: [PATCH 040/420] Social | Fix failure on post save with LinkedIn connection enabled (#41000) * Social | Fix failure on post save with LinkedIn connection enabled. * Phan doesn't forgive It says "TypeError PhanCoalescingNeverNull Using non-null (string)($connection_meta['external_id']) of type string as | the left hand side of a null coalescing (??) operation. The right hand side may be unnecessary." --- .../fix-social-schema-validation-on-saving-post | 4 ++++ .../src/rest-api/class-connections-controller.php | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 projects/packages/publicize/changelog/fix-social-schema-validation-on-saving-post diff --git a/projects/packages/publicize/changelog/fix-social-schema-validation-on-saving-post b/projects/packages/publicize/changelog/fix-social-schema-validation-on-saving-post new file mode 100644 index 0000000000000..76c4fd52a875d --- /dev/null +++ b/projects/packages/publicize/changelog/fix-social-schema-validation-on-saving-post @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Social | Fix failure on post save with LinkedIn connection enabled diff --git a/projects/packages/publicize/src/rest-api/class-connections-controller.php b/projects/packages/publicize/src/rest-api/class-connections-controller.php index 18536a033c49c..f38c8e320cdb2 100644 --- a/projects/packages/publicize/src/rest-api/class-connections-controller.php +++ b/projects/packages/publicize/src/rest-api/class-connections-controller.php @@ -210,13 +210,13 @@ protected static function get_all_connections( $args = array() ) { $connection_data = $connection_meta['connection_data']; $items[] = array( - 'connection_id' => $connection_id, - 'display_name' => $publicize->get_display_name( $service_name, $connection ), - 'external_handle' => $publicize->get_external_handle( $service_name, $connection ), + 'connection_id' => (string) $connection_id, + 'display_name' => (string) $publicize->get_display_name( $service_name, $connection ), + 'external_handle' => (string) $publicize->get_external_handle( $service_name, $connection ), 'external_id' => $connection_meta['external_id'] ?? '', - 'profile_link' => $publicize->get_profile_link( $service_name, $connection ), - 'profile_picture' => $publicize->get_profile_picture( $connection ), - 'service_label' => Publicize::get_service_label( $service_name ), + 'profile_link' => (string) $publicize->get_profile_link( $service_name, $connection ), + 'profile_picture' => (string) $publicize->get_profile_picture( $connection ), + 'service_label' => (string) Publicize::get_service_label( $service_name ), 'service_name' => $service_name, 'shared' => ! $connection_data['user_id'], 'status' => $test_results[ $connection_id ] ?? null, From 84f924bec90204549043a5f0ce6cef5f61d51a90 Mon Sep 17 00:00:00 2001 From: Anthony Grullon Date: Tue, 14 Jan 2025 10:44:37 +0700 Subject: [PATCH 041/420] Remove duplicate views: Fix background image for removed Calypso screen notice (#40983) * Fix background image for removed Calypso screen notice * changelog * Update styling --- ...pdate-welcome-notice-background-pattern-image | 4 ++++ .../removed-calypso-screen-bg-pattern.png | Bin 1762 -> 0 bytes .../removed-calypso-screen-notice.scss | 1 + .../removed-calypso-screen-notice.tsx | 6 +----- 4 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-welcome-notice-background-pattern-image delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-bg-pattern.png diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-welcome-notice-background-pattern-image b/projects/packages/jetpack-mu-wpcom/changelog/update-welcome-notice-background-pattern-image new file mode 100644 index 0000000000000..9642e18ea4c67 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-welcome-notice-background-pattern-image @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Update background pattern image diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-bg-pattern.png b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-bg-pattern.png deleted file mode 100644 index 25b2a92d6ce398e56ecc9af68cc4107f7f0604d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1762 zcmcgtU1%Id9N(O!wP~Y5R8)ixTcs7dAG3G2xf{A|(_A!%ZW_{qq!q=v*}1zVw>z8N zNp3HQhJv6k#Rp$30l^pF3KeWCQUa~m2O%InC}^pO+80|<1PN$y_CA(cqS1mL?CtFA zZ+`#(@Bg*0Pfb2OH2BD%BuPW%iPE&VFDKXCTgCsS1Nakh+a63DizI2saB>Yur&b=4 zq%FU=m03P(KZ^+SRP3-SRbwv@Xi3_CFb*)8qa0Le-SsW`#}8L!;5wE(lecv{7^4k$ zVkx9YmnJJ@X^s>f`QQPtKSqMUqa1_SYx)t2ExE&s#5&p5WYB@|IZGZ*41!sE3XHLk zf}#o)qU#12DXJI}2O6~;+y@NZ$Y~I2dO?9E(u>H@LGLFEgP~JH)1{|+=ERdFH#iTF zrnOovwUt#_Sl3{&Sk!bwGYmx_l&I}<94mgbyU$Rf5eeOZyUYg(Bd)RqZpp>_m+m zY5k}dDG@U*#(@S^JyF#GIwZvf3t_Wk+#womQjhvP5?GjGg9hU)YOuecPGA4YfQYVb zr#3e9#q&}V5g%U^GI{~o5FJ(80oA5y#1=wA#}|d0yAw458Vf1rEUYlr?B{B#?=mn< z)c|{KOk6(^@x(1hXbE#_$s%ugMTd%BsK60qWKll%qz;j;ccC_O+**4hXwJADD(c3; z9B&GC2&%Er!$Pv_;X2g za3hhfcCROn()r%1>4HujAWV|_wq%kdmO658+r8rmbZJ`+DoFn(-CbD3YP^L*I$9Ue z`UeH23HP<67rRQd+eLQX-O{&xxEKb>G95(XAsuDZ7xOC=gKGW6m5d|}yjd=dR^pZG zSI!Jx)bBs^>AQvX=UzUy`rYxFZRce8Rdn{ji-J^O@I%53NYw{3lyC&MrwitlIZC=YK!-*0p!e>?2z@w|3*bpRQiowdd{CS3dX^ zt*>2Q8~))X@a>n|e!JYdnSUnnb@7GF+Ud_%zqqSezh-}Z?4DOoJ`Rp-rsVw3ZRz8k dZ~RZfhj{jZf%vnlE6G==JU&@EefY%_e*mCaDuDn1 diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.scss index 472e1de2b6cff..2685b3f07e771 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.scss +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.scss @@ -8,6 +8,7 @@ display: flex; align-items: center; justify-content: center; + background-image: url('https://s0.wp.com/i/welcome-notices/removed-calypso-screen-bg-pattern.png'); } .removed-calypso-screen-notice__icon { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx index 96c0880729512..db9c317049966 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx @@ -14,7 +14,6 @@ import { verse, } from '@wordpress/icons'; import { addQueryArgs } from '@wordpress/url'; -import bgPattern from './removed-calypso-screen-bg-pattern.png'; import './removed-calypso-screen-notice.scss'; @@ -65,10 +64,7 @@ const Notice = () => { { image: ( <> -
    +
    Date: Tue, 14 Jan 2025 09:31:54 +0100 Subject: [PATCH 042/420] phan: Update wpcom stubs (#41016) Co-authored-by: Phabricator Bot --- .phan/stubs/wpcom-stubs.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/.phan/stubs/wpcom-stubs.php b/.phan/stubs/wpcom-stubs.php index f852009758261..ba798337719d6 100644 --- a/.phan/stubs/wpcom-stubs.php +++ b/.phan/stubs/wpcom-stubs.php @@ -4,7 +4,7 @@ * `bin/teamcity-builds/jetpack-stubs/stub-defs.php` and regenerate the stubs * by triggering the Jetpack Staging → Update WPCOM Stubs job in TeamCity. * - * Stubs automatically generated from WordPress.com commit 27c49bf2f318cd2fb105e5bd9719a910def72a53. + * Stubs automatically generated from WordPress.com commit b97a8d79ff4f32395c77389fb22c900517a9d1a1. */ namespace { @@ -109,6 +109,9 @@ function __construct() public function republicize_post($post_id, $message, $skip_connections, $check_feature = \false, $sync = \true, $_user_id = \null) { } + public function get_all_connections_for_blog_id($_blog_id = \false, $format = 'complete') + { + } } /** * @param int $blog_id @@ -461,6 +464,24 @@ public static function filter_blog($blog_id, $filters) { } } + class Social_Connections_Rest_Helper + { + /** + * @return Jetpack_Social_Connections + */ + public static function init() + { + } + public function delete_publicize_connection($publicize_connection_id, $blog_id = \false) + { + } + public function create_publicize_connection($input) + { + } + public function update_connection($publicize_connection_id, $input, $blog_id = \false) + { + } + } /** * @param string|int|WP_User $identity * @param string $event_name From 9b21c707aea74a4be566a54bcb8f0d5f81f8b34f Mon Sep 17 00:00:00 2001 From: Peter Petrov Date: Tue, 14 Jan 2025 11:29:53 +0200 Subject: [PATCH 043/420] Image CDN: Prevent URLs from being double encoded (#40886) --- .../packages/image-cdn/changelog/fix-double-encoding | 4 ++++ .../packages/image-cdn/src/class-image-cdn-core.php | 1 + .../image-cdn/tests/php/test_class.image_cdn_core.php | 10 ++++++++++ .../boost/changelog/fix-image-cdn-double-encoding | 4 ++++ .../jetpack/changelog/fix-image-cdn-double-encoding | 4 ++++ 5 files changed, 23 insertions(+) create mode 100644 projects/packages/image-cdn/changelog/fix-double-encoding create mode 100644 projects/plugins/boost/changelog/fix-image-cdn-double-encoding create mode 100644 projects/plugins/jetpack/changelog/fix-image-cdn-double-encoding diff --git a/projects/packages/image-cdn/changelog/fix-double-encoding b/projects/packages/image-cdn/changelog/fix-double-encoding new file mode 100644 index 0000000000000..cacc8cdc6aefb --- /dev/null +++ b/projects/packages/image-cdn/changelog/fix-double-encoding @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +General: Ensure that double encoding doesn't happen. diff --git a/projects/packages/image-cdn/src/class-image-cdn-core.php b/projects/packages/image-cdn/src/class-image-cdn-core.php index 693a4d1431c7b..49c472bb292b1 100644 --- a/projects/packages/image-cdn/src/class-image-cdn-core.php +++ b/projects/packages/image-cdn/src/class-image-cdn-core.php @@ -273,6 +273,7 @@ public static function is_cdn_url( $url ) { */ private static function escape_path( $path ) { $parts = explode( '/', $path ); + $parts = array_map( 'rawurldecode', $parts ); $parts = array_map( 'rawurlencode', $parts ); return implode( '/', $parts ); } diff --git a/projects/packages/image-cdn/tests/php/test_class.image_cdn_core.php b/projects/packages/image-cdn/tests/php/test_class.image_cdn_core.php index 0b05e96c3b837..57f205e01d0c4 100644 --- a/projects/packages/image-cdn/tests/php/test_class.image_cdn_core.php +++ b/projects/packages/image-cdn/tests/php/test_class.image_cdn_core.php @@ -295,6 +295,16 @@ public function test_photon_url_filter_url_encodes_path_parts() { $this->assertEquals( 'https://i0.wp.com/example.com/narrow%E2%80%AFno-break%E2%80%AFspace/name%20with%20spaces.jpg', $url ); } + /** + * @covers Automattic\Jetpack\Image_CDN\Image_CDN_Core::cdn_url + * @since $$next-version$$ + * @group jetpack_photon_filter_url_encoding + */ + public function test_photon_url_filter_encoded_url_should_not_be_encoded_again() { + $url = Image_CDN_Core::cdn_url( '//example.com/image%20with%20spaces.jpg', array(), 'https' ); + $this->assertEquals( 'https://i0.wp.com/example.com/image%20with%20spaces.jpg', $url ); + } + /** * @author aduth * @covers Automattic\Jetpack\Image_CDN\Image_CDN_Core::cdn_url_scheme diff --git a/projects/plugins/boost/changelog/fix-image-cdn-double-encoding b/projects/plugins/boost/changelog/fix-image-cdn-double-encoding new file mode 100644 index 0000000000000..da2382199f128 --- /dev/null +++ b/projects/plugins/boost/changelog/fix-image-cdn-double-encoding @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Image CDN: Ensure that double encoding doesn't happen. diff --git a/projects/plugins/jetpack/changelog/fix-image-cdn-double-encoding b/projects/plugins/jetpack/changelog/fix-image-cdn-double-encoding new file mode 100644 index 0000000000000..101848bfb4810 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-image-cdn-double-encoding @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Photon: Fix double encoding image urls. From e9d9bc9874e1f3353f10b1f041b80390a5fddb88 Mon Sep 17 00:00:00 2001 From: Peter Petrov Date: Tue, 14 Jan 2025 11:31:06 +0200 Subject: [PATCH 044/420] Boost: Update CSS minification library (#40956) --- projects/plugins/boost/.gitattributes | 1 - .../plugins/boost/app/lib/class-minify.php | 16 +++-- .../changelog/update-boost-minify-css-library | 4 ++ projects/plugins/boost/composer.json | 3 +- projects/plugins/boost/composer.lock | 59 +------------------ .../plugins/boost/serve-minified-content.php | 12 ++-- 6 files changed, 21 insertions(+), 74 deletions(-) create mode 100644 projects/plugins/boost/changelog/update-boost-minify-css-library diff --git a/projects/plugins/boost/.gitattributes b/projects/plugins/boost/.gitattributes index a1ec69d2c57d0..54a7bd6d71d6b 100644 --- a/projects/plugins/boost/.gitattributes +++ b/projects/plugins/boost/.gitattributes @@ -13,7 +13,6 @@ vendor/automattic/** production-include vendor/composer/** production-include vendor/jetpack-autoloader/** production-include vendor/tedivm/** production-include -vendor/tubalmartin/** production-include vendor/matthiasmullie/** production-include vendor/wikimedia/aho-corasick/** production-include diff --git a/projects/plugins/boost/app/lib/class-minify.php b/projects/plugins/boost/app/lib/class-minify.php index 8608e4af4341d..73cde2f7f1cd4 100644 --- a/projects/plugins/boost/app/lib/class-minify.php +++ b/projects/plugins/boost/app/lib/class-minify.php @@ -9,19 +9,14 @@ namespace Automattic\Jetpack_Boost\Lib; +use MatthiasMullie\Minify\CSS as CSSMinifier; use MatthiasMullie\Minify\JS as JSMinifier; -use tubalmartin\CssMin\Minifier as CSSMinifier; /** * Class Minify */ class Minify { - /** - * @var CSSMinifier - Holds the CssMin\Minifier instance, for reuse on subsequent calls. - */ - private static $css_minifier; - /** * Strips whitespace from JavaScript scripts. * @@ -44,10 +39,13 @@ public static function js( $js ) { * Minifies the supplied CSS code, returning its minified form. */ public static function css( $css ) { - if ( ! self::$css_minifier ) { - self::$css_minifier = new CSSMinifier(); + try { + $minifier = new CSSMinifier( $css ); + $minified_css = $minifier->minify(); + } catch ( \Exception $e ) { + return $css; } - return self::$css_minifier->run( $css ); + return $minified_css; } } diff --git a/projects/plugins/boost/changelog/update-boost-minify-css-library b/projects/plugins/boost/changelog/update-boost-minify-css-library new file mode 100644 index 0000000000000..0ebb483a0aa90 --- /dev/null +++ b/projects/plugins/boost/changelog/update-boost-minify-css-library @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Concatenate CSS: Fixed cases where minification might cause a file to load slower. diff --git a/projects/plugins/boost/composer.json b/projects/plugins/boost/composer.json index 6e61bc7dac944..ec30d7a91d786 100644 --- a/projects/plugins/boost/composer.json +++ b/projects/plugins/boost/composer.json @@ -30,8 +30,7 @@ "automattic/jetpack-status": "@dev", "automattic/jetpack-sync": "@dev", "automattic/jetpack-wp-js-data-sync": "@dev", - "matthiasmullie/minify": "^1.3", - "tubalmartin/cssmin": "^4.1" + "matthiasmullie/minify": "^1.3" }, "require-dev": { "automattic/jetpack-changelogger": "@dev", diff --git a/projects/plugins/boost/composer.lock b/projects/plugins/boost/composer.lock index bff677569e769..927aaeae52c9f 100644 --- a/projects/plugins/boost/composer.lock +++ b/projects/plugins/boost/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b52098ae2e5a4e594034ec41fb2636e6", + "content-hash": "0ad50993accd8a26f9fd344099d8a588", "packages": [ { "name": "automattic/jetpack-a8c-mc-stats", @@ -2142,63 +2142,6 @@ "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3" }, "time": "2019-02-05T23:41:09+00:00" - }, - { - "name": "tubalmartin/cssmin", - "version": "v4.1.1", - "source": { - "type": "git", - "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git", - "reference": "3cbf557f4079d83a06f9c3ff9b957c022d7805cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/3cbf557f4079d83a06f9c3ff9b957c022d7805cf", - "reference": "3cbf557f4079d83a06f9c3ff9b957c022d7805cf", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "php": ">=5.3.2" - }, - "require-dev": { - "cogpowered/finediff": "0.3.*", - "phpunit/phpunit": "4.8.*" - }, - "bin": [ - "cssmin" - ], - "type": "library", - "autoload": { - "psr-4": { - "tubalmartin\\CssMin\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Túbal Martín", - "homepage": "http://tubalmartin.me/" - } - ], - "description": "A PHP port of the YUI CSS compressor", - "homepage": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port", - "keywords": [ - "compress", - "compressor", - "css", - "cssmin", - "minify", - "yui" - ], - "support": { - "issues": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port/issues", - "source": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port" - }, - "time": "2018-01-15T15:26:51+00:00" } ], "packages-dev": [ diff --git a/projects/plugins/boost/serve-minified-content.php b/projects/plugins/boost/serve-minified-content.php index 59271179ad317..0fd83f7a655a9 100644 --- a/projects/plugins/boost/serve-minified-content.php +++ b/projects/plugins/boost/serve-minified-content.php @@ -3,10 +3,14 @@ if ( ! defined( 'JETPACK_BOOST_CONCAT_USE_WP' ) ) { define( 'JETPACK_BOOST_CONCAT_USE_WP', false ); - // Load CSSmin. - require_once __DIR__ . '/vendor/tubalmartin/cssmin/src/Colors.php'; - require_once __DIR__ . '/vendor/tubalmartin/cssmin/src/Utils.php'; - require_once __DIR__ . '/vendor/tubalmartin/cssmin/src/Minifier.php'; + // Load minification library. + require_once __DIR__ . '/vendor/matthiasmullie/minify/src/Exception.php'; + require_once __DIR__ . '/vendor/matthiasmullie/minify/src/Minify.php'; + require_once __DIR__ . '/vendor/matthiasmullie/minify/src/CSS.php'; + require_once __DIR__ . '/vendor/matthiasmullie/minify/src/JS.php'; + require_once __DIR__ . '/vendor/matthiasmullie/minify/src/Exceptions/BasicException.php'; + require_once __DIR__ . '/vendor/matthiasmullie/minify/src/Exceptions/FileImportException.php'; + require_once __DIR__ . '/vendor/matthiasmullie/minify/src/Exceptions/IOException.php'; } // Load minify library code. From d52d80b3bd46275f8fafc5594c900d77347b1e43 Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Tue, 14 Jan 2025 12:58:59 +0200 Subject: [PATCH 045/420] Forms: rename "URL" field to "Website" (#40994) * Forms: rename "URL" field to "Website" * Update icon to "globe" --- .../changelog/update-forms-url-field-rename | 4 +++ .../src/blocks/contact-form/child-blocks.js | 25 ++++++++----------- 2 files changed, 14 insertions(+), 15 deletions(-) create mode 100644 projects/packages/forms/changelog/update-forms-url-field-rename diff --git a/projects/packages/forms/changelog/update-forms-url-field-rename b/projects/packages/forms/changelog/update-forms-url-field-rename new file mode 100644 index 0000000000000..8e08ef96503e5 --- /dev/null +++ b/projects/packages/forms/changelog/update-forms-url-field-rename @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Forms: rename "URL" field to "Website" diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index 151ec195ce1b1..f84d3fd52e58f 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -1,7 +1,7 @@ import { createBlock } from '@wordpress/blocks'; -import { Path } from '@wordpress/components'; -import { Fragment } from '@wordpress/element'; +import { Path, Icon } from '@wordpress/components'; import { __, _x } from '@wordpress/i18n'; +import { globe } from '@wordpress/icons'; import { filter, isEmpty, map, startsWith, trim } from 'lodash'; import JetpackField from './components/jetpack-field'; import JetpackFieldCheckbox from './components/jetpack-field-checkbox'; @@ -409,7 +409,7 @@ export const childBlocks = [ name: 'field-url', settings: { ...FieldDefaults, - title: __( 'URL Field', 'jetpack-forms' ), + title: __( 'Website Field', 'jetpack-forms' ), keywords: [ __( 'url', 'jetpack-forms' ), __( 'internet page', 'jetpack-forms' ), @@ -417,18 +417,13 @@ export const childBlocks = [ __( 'website', 'jetpack-forms' ), ], description: __( 'Collect a website address from your site visitors.', 'jetpack-forms' ), - icon: renderMaterialIcon( - <> - - - - + icon: ( + ), edit: editField( 'url' ), attributes: { From 7145dadfae31bfefb09ba5bc1ddf46b7c83fd185 Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Tue, 14 Jan 2025 12:13:56 +0100 Subject: [PATCH 046/420] Issue Templates: update bug report template (#40501) * Issue Templates: update bug report template We're updating our priority matrix, and consequently need to update the information we collect in our issues, so our GitHub action can automatically assign priority. This also consolidates the steps to reproduce into one field instead of 3, to make things simpler for reporters. - Related PR: https://github.com/Automattic/wp-calypso/pull/97049/ - pfVjQF-su-p2 * Update wording See https://github.com/Automattic/wp-calypso/pull/97049#issuecomment-2552873786 Co-authored-by: Ikem <66711744+inaikem@users.noreply.github.com> --------- Co-authored-by: Ikem <66711744+inaikem@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/bug-report.yml | 92 ++++++++++++++------------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 5d091d1ad70c2..434712f59dd6b 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -50,72 +50,85 @@ body: attributes: label: Steps to reproduce placeholder: | + E.g., What happened, and what did you expect to happen? Add images, + GIFs, and videos if you have them on hand. + 1. Start at `site-domain.com/blog`. 2. Click on any blog post. 3. Click on the 'Like' button. 4. ... + + Add any information that may be relevant, such as: + - Browser/Platform + - Theme + - Logs/Errors validations: required: true - - type: textarea - id: expected - attributes: - label: A clear and concise description of what you expected to happen. - placeholder: | - eg. Post should be liked. - - type: textarea - id: actual + + - type: markdown attributes: - label: What actually happened - placeholder: | - eg. Clicking the button does nothing visibly. + value: | +
    + + ## Impact + Please help us understand more about the impact of this issue to help determine next steps. + If you are unsure about anything, please use your judgment to make an educated guess. - type: dropdown - id: users-affected + id: impact attributes: - label: Impact - description: Approximately how many users are impacted? + label: Site owner impact + description: Approximately what percentage of the total users of the platform are impacted? Unsure? Please provide your most educated guess! options: - - One - - Some (< 50%) - - Most (> 50%) - - All + - Fewer than 20% of the total website/platform users + - Between 20% and 60% of the total website/platform users + - More than 60% of the total website/platform users validations: required: true - type: dropdown - id: workarounds + id: severity attributes: - label: Available workarounds? + label: Severity + description: What is the severity of this issue? Please take a look at the descriptions below for further context.
    +
    - **Critical:** Prevents core functionality or has severe impact on the website/platform. +
    - **Major:** Significantly impairs important features or has notable impact on the website/platform. +
    - **Moderate:** Affects non-critical features or has limited impact on the website/platform. +
    - **Minor:** Causes inconvenience or has minimal impact on functionality. options: - - No and the platform is unusable - - No but the platform is still usable - - Yes, difficult to implement - - Yes, easy to implement - - There is no user impact + - Critical + - Major + - Moderate + - Minor validations: required: true + - type: dropdown + id: additional-impact + attributes: + label: What other impact(s) does this issue have? + description: You may select more than one + options: + - Platform revenue + - Agency or developer revenue + - Individual site owner revenue + - No revenue impact + multiple: true - type: markdown attributes: value: |
    + ## Optional Information + - type: textarea - id: workaround-detail + id: workaround attributes: - label: If the above answer is "Yes...", outline the workaround. + label: If a workaround is available, please outline it here. placeholder: | Provide details of the specific steps to take that resolve the issue, e.g.: - Open "Setting X". - Toggle "Option Y". - Click "Button Z". - - type: markdown - attributes: - value: | -
    - - ## Optional Information - - The following section is optional. - type: dropdown id: site-type attributes: @@ -126,12 +139,3 @@ body: - Atomic - Self-hosted multiple: true - - type: textarea - id: logs - attributes: - label: Logs or notes - placeholder: | - Add any information that may be relevant, such as: - - Browser/Platform - - Theme - - Logs/Errors From 692d991780d6c5d29cd436715d0248cd015281f9 Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Tue, 14 Jan 2025 13:59:20 +0200 Subject: [PATCH 047/420] Revert "Forms: rename "URL" field to "Website" (#40994)" (#41026) This reverts commit d52d80b3bd46275f8fafc5594c900d77347b1e43. --- .../changelog/update-forms-url-field-rename | 4 --- .../src/blocks/contact-form/child-blocks.js | 25 +++++++++++-------- 2 files changed, 15 insertions(+), 14 deletions(-) delete mode 100644 projects/packages/forms/changelog/update-forms-url-field-rename diff --git a/projects/packages/forms/changelog/update-forms-url-field-rename b/projects/packages/forms/changelog/update-forms-url-field-rename deleted file mode 100644 index 8e08ef96503e5..0000000000000 --- a/projects/packages/forms/changelog/update-forms-url-field-rename +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Forms: rename "URL" field to "Website" diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index f84d3fd52e58f..151ec195ce1b1 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -1,7 +1,7 @@ import { createBlock } from '@wordpress/blocks'; -import { Path, Icon } from '@wordpress/components'; +import { Path } from '@wordpress/components'; +import { Fragment } from '@wordpress/element'; import { __, _x } from '@wordpress/i18n'; -import { globe } from '@wordpress/icons'; import { filter, isEmpty, map, startsWith, trim } from 'lodash'; import JetpackField from './components/jetpack-field'; import JetpackFieldCheckbox from './components/jetpack-field-checkbox'; @@ -409,7 +409,7 @@ export const childBlocks = [ name: 'field-url', settings: { ...FieldDefaults, - title: __( 'Website Field', 'jetpack-forms' ), + title: __( 'URL Field', 'jetpack-forms' ), keywords: [ __( 'url', 'jetpack-forms' ), __( 'internet page', 'jetpack-forms' ), @@ -417,13 +417,18 @@ export const childBlocks = [ __( 'website', 'jetpack-forms' ), ], description: __( 'Collect a website address from your site visitors.', 'jetpack-forms' ), - icon: ( - + icon: renderMaterialIcon( + <> + + + + ), edit: editField( 'url' ), attributes: { From ecdb13d25c6da447aa7ca22d0f36d3ca0207b885 Mon Sep 17 00:00:00 2001 From: Miguel Torres <1233880+mmtr@users.noreply.github.com> Date: Tue, 14 Jan 2025 13:08:33 +0100 Subject: [PATCH 048/420] Revert "Stop showing limited global styles notice in editor distraction free mode" (#41028) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Revert "Stop showing limited global styles notice in editor distraction free …" This reverts commit 42a62f9821d4d5c89866e09813eafaad7648d243. --- ...07-fix-global-styles-notice-distraction-free | 4 ++++ .../src/features/wpcom-global-styles/notices.js | 17 ++--------------- 2 files changed, 6 insertions(+), 15 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/revert-40907-fix-global-styles-notice-distraction-free diff --git a/projects/packages/jetpack-mu-wpcom/changelog/revert-40907-fix-global-styles-notice-distraction-free b/projects/packages/jetpack-mu-wpcom/changelog/revert-40907-fix-global-styles-notice-distraction-free new file mode 100644 index 0000000000000..ac22518a55b54 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/revert-40907-fix-global-styles-notice-distraction-free @@ -0,0 +1,4 @@ +Significance: patch +Type: removed + +Global Styles: Revert changes that hide notice in distraction free mode diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/notices.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/notices.js index c0d9ca64467dc..16cd184be1ac0 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/notices.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/notices.js @@ -1,6 +1,5 @@ /* global wpcomGlobalStyles */ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { store as blockEditorStore } from '@wordpress/block-editor'; import { ExternalLink, Notice } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; import { @@ -239,31 +238,19 @@ function GlobalStylesEditNotice() { upgradePlan, ] ); - const isDistractionFree = useSelect( - select => select( blockEditorStore ).getSettings().isDistractionFree, - [] - ); - useEffect( () => { if ( ! isSiteEditor && ! isPostEditor ) { return; } - if ( globalStylesInUse && ! isDistractionFree ) { + if ( globalStylesInUse ) { showNotice(); } else { removeNotice( NOTICE_ID ); } return () => removeNotice( NOTICE_ID ); - }, [ - globalStylesInUse, - isDistractionFree, - isSiteEditor, - isPostEditor, - removeNotice, - showNotice, - ] ); + }, [ globalStylesInUse, isSiteEditor, isPostEditor, removeNotice, showNotice ] ); return null; } From 1f47685c052e7350209313fb88d82a684a89c0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20M=C3=A1rk=20Juh=C3=A1sz?= <36671565+gmjuhasz@users.noreply.github.com> Date: Tue, 14 Jan 2025 13:44:39 +0100 Subject: [PATCH 049/420] Social: Update sig description block editor (#40991) * Update SIG description to state availability * changelog --- .../sharing/features/social-image-generator-section.jsx | 2 +- .../changelog/update-social-sig-description-block-editor | 4 ++++ .../changelog/update-social-sig-description-block-editor | 4 ++++ .../src/js/components/social-image-generator-toggle/index.tsx | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/update-social-sig-description-block-editor create mode 100644 projects/plugins/social/changelog/update-social-sig-description-block-editor diff --git a/projects/plugins/jetpack/_inc/client/sharing/features/social-image-generator-section.jsx b/projects/plugins/jetpack/_inc/client/sharing/features/social-image-generator-section.jsx index a38602f92add5..fd17e358677b3 100644 --- a/projects/plugins/jetpack/_inc/client/sharing/features/social-image-generator-section.jsx +++ b/projects/plugins/jetpack/_inc/client/sharing/features/social-image-generator-section.jsx @@ -16,7 +16,7 @@ const SocialImageGeneratorSection = () => { { __( 'Enable Social Image Generator', 'jetpack' ) } { __( - 'With Social Image Generator enabled you can automatically generate social images for your posts. You can use the button below to choose a default template for new posts.', + 'With Social Image Generator enabled you can automatically generate social images for your posts. You can use the button below to choose a default template for new posts. This feature is only supported in the block editor.', 'jetpack' ) }
    diff --git a/projects/plugins/jetpack/changelog/update-social-sig-description-block-editor b/projects/plugins/jetpack/changelog/update-social-sig-description-block-editor new file mode 100644 index 0000000000000..621802e1c2a7a --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-social-sig-description-block-editor @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +SIG: Changed description for togle diff --git a/projects/plugins/social/changelog/update-social-sig-description-block-editor b/projects/plugins/social/changelog/update-social-sig-description-block-editor new file mode 100644 index 0000000000000..93460a7abac46 --- /dev/null +++ b/projects/plugins/social/changelog/update-social-sig-description-block-editor @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +SIG: Changed description for toggle diff --git a/projects/plugins/social/src/js/components/social-image-generator-toggle/index.tsx b/projects/plugins/social/src/js/components/social-image-generator-toggle/index.tsx index 9c87fdc72d722..112e27b3eba92 100644 --- a/projects/plugins/social/src/js/components/social-image-generator-toggle/index.tsx +++ b/projects/plugins/social/src/js/components/social-image-generator-toggle/index.tsx @@ -72,7 +72,7 @@ const SocialImageGeneratorToggle: React.FC< SocialImageGeneratorToggleProps > = > { __( - 'When enabled, Social Image Generator will automatically generate social images for your posts. You can use the button below to choose a default template for new posts.', + 'When enabled, Social Image Generator will automatically generate social images for your posts. You can use the button below to choose a default template for new posts. This feature is only supported in the block editor.', 'jetpack-social' ) } From 9dd63623ff364039c110c49250dc566f091051fd Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Tue, 14 Jan 2025 14:49:37 +0200 Subject: [PATCH 050/420] Forms: Fix redirect field styles (#41030) --- .../fix-contact-form-redirect-address-styles | 4 ++++ .../packages/forms/src/blocks/contact-form/edit.js | 11 +++-------- .../forms/src/blocks/contact-form/editor.scss | 6 +++++- 3 files changed, 12 insertions(+), 9 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-contact-form-redirect-address-styles diff --git a/projects/packages/forms/changelog/fix-contact-form-redirect-address-styles b/projects/packages/forms/changelog/fix-contact-form-redirect-address-styles new file mode 100644 index 0000000000000..b6cabde65f729 --- /dev/null +++ b/projects/packages/forms/changelog/fix-contact-form-redirect-address-styles @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Fix redirect field styles diff --git a/projects/packages/forms/src/blocks/contact-form/edit.js b/projects/packages/forms/src/blocks/contact-form/edit.js index 1dc222dacf1da..ef45e90b01fed 100644 --- a/projects/packages/forms/src/blocks/contact-form/edit.js +++ b/projects/packages/forms/src/blocks/contact-form/edit.js @@ -15,7 +15,6 @@ import { } from '@wordpress/block-editor'; import { createBlock, registerBlockVariation } from '@wordpress/blocks'; import { - BaseControl, Button, Modal, PanelBody, @@ -198,18 +197,14 @@ export const JetpackContactFormEdit = forwardRef( ) } { 'redirect' === customThankyou && ( - +
    setAttributes( { customThankyouRedirect: newURL } ) } /> - +
    ) } ); diff --git a/projects/packages/forms/src/blocks/contact-form/editor.scss b/projects/packages/forms/src/blocks/contact-form/editor.scss index 184990d1d9fda..825c8dfd91a5e 100644 --- a/projects/packages/forms/src/blocks/contact-form/editor.scss +++ b/projects/packages/forms/src/blocks/contact-form/editor.scss @@ -240,12 +240,16 @@ width: 100%; } +.jetpack-contact-form__thankyou-redirect-url { + min-width: auto; +} + .jetpack-contact-form__thankyou-redirect-url input[type='text'] { width: 100%; } .jetpack-contact-form__thankyou-redirect-url__suggestions { - width: 260px; + width: 230px; } .jetpack-contact-form__integration-panel { From 8e9163245d94058a6d4394ba124cfeaaeeacbb1b Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Tue, 14 Jan 2025 14:25:27 +0100 Subject: [PATCH 051/420] Make the global styles upgrade bar independent from the launch bar. (#40876) --- .../update-global-styles-upgrade-nudge | 4 + .../features/wpcom-global-styles/index.php | 297 +++++++++++------- .../wpcom-global-styles-view.js | 15 + .../wpcom-global-styles-view.scss | 130 ++++++++ 4 files changed, 333 insertions(+), 113 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-global-styles-upgrade-nudge diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-global-styles-upgrade-nudge b/projects/packages/jetpack-mu-wpcom/changelog/update-global-styles-upgrade-nudge new file mode 100644 index 0000000000000..2f5a4def492d8 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-global-styles-upgrade-nudge @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Render the Global Styles frontend bar separately from the .com launch bar. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php index cd1bc2fd6ece8..4915adfe8c4ae 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php @@ -210,16 +210,7 @@ function wpcom_global_styles_enqueue_block_editor_assets() { * @return void */ function wpcom_global_styles_enqueue_assets() { - if ( - ! wpcom_global_styles_current_user_can_edit_wp_global_styles() || - ! wpcom_should_limit_global_styles() || - ! wpcom_global_styles_in_use() - ) { - return; - } - - $asset_file = include Jetpack_Mu_Wpcom::BASE_DIR . 'build/wpcom-global-styles-editor/wpcom-global-styles-editor.asset.php'; - + $asset_file = include Jetpack_Mu_Wpcom::BASE_DIR . 'build/wpcom-global-styles-frontend/wpcom-global-styles-frontend.asset.php'; wp_enqueue_script( 'wpcom-global-styles-frontend', plugins_url( 'build/wpcom-global-styles-frontend/wpcom-global-styles-frontend.js', Jetpack_Mu_Wpcom::BASE_FILE ), @@ -227,6 +218,15 @@ function wpcom_global_styles_enqueue_assets() { $asset_file['version'] ?? filemtime( Jetpack_Mu_Wpcom::BASE_DIR . 'build/wpcom-global-styles-frontend/wpcom-global-styles-frontend.js' ), true ); + wp_add_inline_script( + 'wpcom-global-styles-frontend', + 'const launchBarUserData = ' . wp_json_encode( + array( + 'blogId' => get_current_blog_id(), + ) + ), + 'before' + ); Common\wpcom_enqueue_tracking_scripts( 'wpcom-global-styles-frontend' ); wp_enqueue_style( @@ -236,7 +236,6 @@ function wpcom_global_styles_enqueue_assets() { filemtime( Jetpack_Mu_Wpcom::BASE_DIR . 'build/wpcom-global-styles-frontend/wpcom-global-styles-frontend.css' ) ); } -add_action( 'wp_enqueue_scripts', 'wpcom_global_styles_enqueue_assets' ); /** * Removes the user styles from a site with limited global styles. @@ -441,18 +440,64 @@ function wpcom_premium_global_styles_is_site_exempt( $blog_id = 0 ) { } /** - * Adds the global style notice banner to the launch bar controls. - * - * @param array $bar_controls List of launch bar controls. + * Returns whether the global style banner should be shown or not. * - * return array The collection of launch bar controls to render. + * @return bool Whether the global styles upgrade banner should be rendered. */ -function wpcom_display_global_styles_launch_bar( $bar_controls ) { - // Do not show the banner if the user can use global styles. +function wpcom_should_show_global_styles_launch_bar() { + $current_user_id = get_current_user_id(); + + if ( ! $current_user_id ) { + return false; + } + + $current_blog_id = get_current_blog_id(); + + if ( ! ( + is_user_member_of_blog( $current_user_id, $current_blog_id ) && + current_user_can( 'manage_options' ) + ) ) { + return false; + } + + if ( has_blog_sticker( 'difm-lite-in-progress' ) ) { + return false; + } + + // The site is being previewed in Calypso or Gutenberg. + if ( + isset( $_GET['iframe'] ) && 'true' === $_GET['iframe'] && ( // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Not a form action + ( isset( $_GET['theme_preview'] ) && 'true' === $_GET['theme_preview'] ) || // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Not a form action + ( isset( $_GET['preview'] ) && 'true' === $_GET['preview'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Not a form action + ) || + isset( $_GET['widgetPreview'] ) || // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Not a form action (Gutenberg < 9.2) + isset( $_GET['widget-preview'] ) || // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Not a form action (Gutenberg >= 9.2) + ( isset( $_GET['hide_banners'] ) && $_GET['hide_banners'] === 'true' ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Not a form action + ) { + return false; + } + + // Do not show the lanuch banner when previewed in the customizer + if ( is_customize_preview() ) { + return false; + } + + // No banner for agency-managed sites. + if ( ! empty( get_option( 'is_fully_managed_agency_site' ) ) ) { + return false; + } + if ( ! wpcom_should_limit_global_styles() || ! wpcom_global_styles_in_use() ) { - return $bar_controls; + return false; } + return true; +} + +/** + * Renders the global style notice banner to the launch bar. + */ +function wpcom_display_global_styles_launch_bar() { if ( method_exists( '\WPCOM_Masterbar', 'get_calypso_site_slug' ) ) { $site_slug = WPCOM_Masterbar::get_calypso_site_slug( get_current_blog_id() ); } else { @@ -474,109 +519,135 @@ function wpcom_display_global_styles_launch_bar( $bar_controls ) { $preview_location = remove_query_arg( 'hide-global-styles' ); } - ob_start(); ?> -
    - - - - -
  • From 0cb4b0762c8dc553c1dc17e030eef76745f4593a Mon Sep 17 00:00:00 2001 From: Juanma Rodriguez Escriche Date: Thu, 16 Jan 2025 10:03:55 +0100 Subject: [PATCH 087/420] Full sync: Send context for initial full sync action (#40930) * Add a new parameter to the functions in the class to specify the context in which the full sync was initiated * changelog * Versioning is for the package * Fixed doc since empty is not used and added context * Updated type for context in the endpoint definition --- .../sync/changelog/update-handle-context-in-full-sync | 4 ++++ projects/packages/sync/src/class-actions.php | 7 ++++--- projects/packages/sync/src/class-rest-endpoints.php | 9 ++++++++- .../sync/src/modules/class-full-sync-immediately.php | 9 +++++---- projects/packages/sync/src/modules/class-full-sync.php | 3 ++- .../plugins/jetpack/_inc/class.jetpack-provision.php | 2 +- .../jetpack/changelog/update-handle-context-in-full-sync | 4 ++++ projects/plugins/jetpack/class.jetpack-cli.php | 2 +- .../jetpack/class.jetpack-json-api-sync-endpoint.php | 2 +- 9 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 projects/packages/sync/changelog/update-handle-context-in-full-sync create mode 100644 projects/plugins/jetpack/changelog/update-handle-context-in-full-sync diff --git a/projects/packages/sync/changelog/update-handle-context-in-full-sync b/projects/packages/sync/changelog/update-handle-context-in-full-sync new file mode 100644 index 0000000000000..20672c1a8fd87 --- /dev/null +++ b/projects/packages/sync/changelog/update-handle-context-in-full-sync @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Full Sync: Added context diff --git a/projects/packages/sync/src/class-actions.php b/projects/packages/sync/src/class-actions.php index fb09385827392..380e066afab5e 100644 --- a/projects/packages/sync/src/class-actions.php +++ b/projects/packages/sync/src/class-actions.php @@ -608,7 +608,7 @@ public static function do_initial_sync() { 'network_options' => true, ); - self::do_full_sync( $initial_sync_config ); + self::do_full_sync( $initial_sync_config, 'initial_sync' ); } /** @@ -633,9 +633,10 @@ public static function do_only_first_initial_sync() { * @static * * @param array $modules The sync modules should be included in this full sync. All will be included if null. + * @param mixed $context The context where the full sync was initiated from. * @return bool True if full sync was successfully started. */ - public static function do_full_sync( $modules = null ) { + public static function do_full_sync( $modules = null, $context = null ) { if ( ! self::sync_allowed() ) { return false; } @@ -649,7 +650,7 @@ public static function do_full_sync( $modules = null ) { self::initialize_listener(); - $full_sync_module->start( $modules ); + $full_sync_module->start( $modules, $context ); return true; } diff --git a/projects/packages/sync/src/class-rest-endpoints.php b/projects/packages/sync/src/class-rest-endpoints.php index 22261e9661769..3371f797193b7 100644 --- a/projects/packages/sync/src/class-rest-endpoints.php +++ b/projects/packages/sync/src/class-rest-endpoints.php @@ -58,6 +58,11 @@ public static function initialize_rest_api() { 'type' => 'array', 'required' => false, ), + 'context' => array( + 'description' => __( 'Context for the Full Sync', 'jetpack-sync' ), + 'type' => 'string', + 'required' => false, + ), ), ) ); @@ -363,9 +368,11 @@ public static function full_sync_start( $request ) { $modules = null; } + $context = $request->get_param( 'context' ); + return rest_ensure_response( array( - 'scheduled' => Actions::do_full_sync( $modules ), + 'scheduled' => Actions::do_full_sync( $modules, $context ), ) ); } diff --git a/projects/packages/sync/src/modules/class-full-sync-immediately.php b/projects/packages/sync/src/modules/class-full-sync-immediately.php index 38a8c46dc456d..71e2cd866b9f8 100644 --- a/projects/packages/sync/src/modules/class-full-sync-immediately.php +++ b/projects/packages/sync/src/modules/class-full-sync-immediately.php @@ -60,10 +60,11 @@ public function init_full_sync_listeners( $callable ) { // phpcs:ignore Variable * @access public * * @param array $full_sync_config Full sync configuration. + * @param mixed $context The context where the full sync was initiated from. * * @return bool Always returns true at success. */ - public function start( $full_sync_config = null ) { + public function start( $full_sync_config = null, $context = null ) { // There was a full sync in progress. if ( $this->is_started() && ! $this->is_finished() ) { /** @@ -114,15 +115,15 @@ public function start( $full_sync_config = null ) { * * @param array $full_sync_config Sync configuration for all sync modules. * @param array $range Range of the sync items, containing min and max IDs for some item types. - * @param array $empty The modules with no items to sync during a full sync. + * @param mixed $context The context where the full sync was initiated from. * * @since 1.6.3 * @since-jetpack 4.2.0 * @since-jetpack 7.3.0 Added $range arg. - * @since-jetpack 7.4.0 Added $empty arg. + * @since $$next-version$$ Added $context arg. */ do_action( 'jetpack_full_sync_start', $full_sync_config, $range ); - $this->send_action( 'jetpack_full_sync_start', array( $full_sync_config, $range ) ); + $this->send_action( 'jetpack_full_sync_start', array( $full_sync_config, $range, $context ) ); return true; } diff --git a/projects/packages/sync/src/modules/class-full-sync.php b/projects/packages/sync/src/modules/class-full-sync.php index c7b5501dd1eb2..64ef388be69c1 100644 --- a/projects/packages/sync/src/modules/class-full-sync.php +++ b/projects/packages/sync/src/modules/class-full-sync.php @@ -80,9 +80,10 @@ public function init_before_send() { * @access public * * @param array $module_configs Full sync configuration for all sync modules. + * @param mixed $context Context for the full sync. * @return bool Always returns true at success. */ - public function start( $module_configs = null ) { + public function start( $module_configs = null, $context = null ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable $was_already_running = $this->is_started() && ! $this->is_finished(); // Remove all evidence of previous full sync items and status. diff --git a/projects/plugins/jetpack/_inc/class.jetpack-provision.php b/projects/plugins/jetpack/_inc/class.jetpack-provision.php index 229e5df8740d1..fff5ce3cba33d 100644 --- a/projects/plugins/jetpack/_inc/class.jetpack-provision.php +++ b/projects/plugins/jetpack/_inc/class.jetpack-provision.php @@ -46,7 +46,7 @@ function () use ( $url_arg, $named_args ) { // If Jetpack is currently connected, and is not in Safe Mode already, kick off a sync of the current // functions/callables so that we can test if this site is in IDC. if ( Jetpack::is_connection_ready() && ! Identity_Crisis::validate_sync_error_idc_option() && Actions::sync_allowed() ) { - Actions::do_full_sync( array( 'functions' => true ) ); + Actions::do_full_sync( array( 'functions' => true ), 'provision' ); Actions::$sender->do_full_sync(); } diff --git a/projects/plugins/jetpack/changelog/update-handle-context-in-full-sync b/projects/plugins/jetpack/changelog/update-handle-context-in-full-sync new file mode 100644 index 0000000000000..bad97dd651993 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-handle-context-in-full-sync @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Full Sync: Added context diff --git a/projects/plugins/jetpack/class.jetpack-cli.php b/projects/plugins/jetpack/class.jetpack-cli.php index d0b9c5990cea1..2d1f1ee55f446 100644 --- a/projects/plugins/jetpack/class.jetpack-cli.php +++ b/projects/plugins/jetpack/class.jetpack-cli.php @@ -1036,7 +1036,7 @@ public function sync( $args, $assoc_args ) { } // Kick off a full sync. - if ( Actions::do_full_sync( $modules ) ) { + if ( Actions::do_full_sync( $modules, 'jetpack_cli' ) ) { if ( $modules ) { /* translators: %s is a comma separated list of Jetpack modules */ WP_CLI::log( sprintf( __( 'Initialized a new full sync with modules: %s', 'jetpack' ), implode( ', ', array_keys( $modules ) ) ) ); diff --git a/projects/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php b/projects/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php index bf2704a61809f..895f5a6b5dbf1 100644 --- a/projects/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php +++ b/projects/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php @@ -68,7 +68,7 @@ protected function result() { if ( empty( $modules ) ) { $modules = null; } - return array( 'scheduled' => Actions::do_full_sync( $modules ) ); + return array( 'scheduled' => Actions::do_full_sync( $modules, 'jetpack_json_api_sync_endpoint' ) ); } /** From 4aedff5415bd4bf09a1eae37c438062dc7b353af Mon Sep 17 00:00:00 2001 From: Miguel Torres <1233880+mmtr@users.noreply.github.com> Date: Thu, 16 Jan 2025 10:33:24 +0100 Subject: [PATCH 088/420] Remove duplicate views: Implement A/A test (WP Admin) (#41093) * Remove duplicate views: Implement A/A test * Bump blog ID cutoff --- .../changelog/update-remove-duplicate-views-aa-test | 4 ++++ .../wpcom-admin-interface/wpcom-admin-interface.php | 13 ++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-aa-test diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-aa-test b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-aa-test new file mode 100644 index 0000000000000..00ebdaf10edb5 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-aa-test @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Remove duplicate views: Implement A/A test diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index 87d0060408e7b..ce6a52ed49973 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -394,6 +394,7 @@ function wpcom_show_admin_interface_notice() { function wpcom_is_duplicate_views_experiment_enabled() { $experiment_platform = 'calypso'; $experiment_name = "{$experiment_platform}_post_onboarding_holdout_120924"; + $aa_test_name = "{$experiment_platform}_post_onboarding_aa_150125"; static $is_enabled = null; if ( $is_enabled !== null ) { @@ -401,6 +402,7 @@ function wpcom_is_duplicate_views_experiment_enabled() { } if ( ( new Host() )->is_wpcom_simple() ) { + \ExPlat\assign_current_user( $aa_test_name ); $is_enabled = 'treatment' === \ExPlat\assign_current_user( $experiment_name ); return $is_enabled; } @@ -418,6 +420,12 @@ function wpcom_is_duplicate_views_experiment_enabled() { return $is_enabled; } + $aa_test_request_path = add_query_arg( + array( 'experiment_name' => $aa_test_name ), + "/experiments/0.1.0/assignments/{$experiment_platform}" + ); + Client::wpcom_json_api_request_as_user( $aa_test_request_path, 'v2' ); + $request_path = add_query_arg( array( 'experiment_name' => $experiment_name ), "/experiments/0.1.0/assignments/{$experiment_platform}" @@ -466,9 +474,8 @@ function wpcom_show_removed_calypso_screen_notice() { } } - // Do not show notice on sites created the experiment started. - // 240673796 is the ID of a site created on 2025-01-13. - if ( $blog_id > 240673796 ) { + // Do not show notice on sites created after the experiment started (2025-01-16). + if ( $blog_id > 240790000 ) { // 240790000 is the ID of a site created on 2025-01-16. return; } From de376198c289640e72b16c9c77cfe1bcd300f243 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Thu, 16 Jan 2025 03:53:34 -0800 Subject: [PATCH 089/420] Social | Fix the status field for connections to allow null (#41114) --- .../changelog/fix-social-status-set-default-fo-unknown | 4 ++++ .../publicize/src/rest-api/class-connections-controller.php | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 projects/packages/publicize/changelog/fix-social-status-set-default-fo-unknown diff --git a/projects/packages/publicize/changelog/fix-social-status-set-default-fo-unknown b/projects/packages/publicize/changelog/fix-social-status-set-default-fo-unknown new file mode 100644 index 0000000000000..8b5caa7f639dd --- /dev/null +++ b/projects/packages/publicize/changelog/fix-social-status-set-default-fo-unknown @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Social | Fixed the status field for connections to allow null diff --git a/projects/packages/publicize/src/rest-api/class-connections-controller.php b/projects/packages/publicize/src/rest-api/class-connections-controller.php index f38c8e320cdb2..23725b12a33a1 100644 --- a/projects/packages/publicize/src/rest-api/class-connections-controller.php +++ b/projects/packages/publicize/src/rest-api/class-connections-controller.php @@ -131,7 +131,7 @@ public static function get_the_item_schema() { 'description' => __( 'Display name of the connected account.', 'jetpack-publicize-pkg' ), ), 'external_handle' => array( - 'type' => 'string', + 'type' => array( 'string', 'null' ), 'description' => __( 'The external handle or username of the connected account.', 'jetpack-publicize-pkg' ), ), 'external_id' => array( @@ -159,11 +159,12 @@ public static function get_the_item_schema() { 'description' => __( 'Whether the connection is shared with other users.', 'jetpack-publicize-pkg' ), ), 'status' => array( - 'type' => 'string', + 'type' => array( 'string', 'null' ), 'description' => __( 'The connection status.', 'jetpack-publicize-pkg' ), 'enum' => array( 'ok', 'broken', + null, ), ), 'user_id' => array( From 57958789157a1580e9fa494a933a31912268d2af Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Thu, 16 Jan 2025 13:04:13 +0100 Subject: [PATCH 090/420] Repo Gardening: update VideoPress team assignment (#41118) See pLwCt-eRe-p2 --- .../changelog/update-repo-gardening-videopress-assigments | 5 +++++ .../tasks/triage-issues/automattic-label-team-assignments.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 projects/github-actions/repo-gardening/changelog/update-repo-gardening-videopress-assigments diff --git a/projects/github-actions/repo-gardening/changelog/update-repo-gardening-videopress-assigments b/projects/github-actions/repo-gardening/changelog/update-repo-gardening-videopress-assigments new file mode 100644 index 0000000000000..67dbfd14a1b07 --- /dev/null +++ b/projects/github-actions/repo-gardening/changelog/update-repo-gardening-videopress-assigments @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Team assignments: update VideoPress team assignment. + + diff --git a/projects/github-actions/repo-gardening/src/tasks/triage-issues/automattic-label-team-assignments.js b/projects/github-actions/repo-gardening/src/tasks/triage-issues/automattic-label-team-assignments.js index aca03945e8e1c..5118601cb46ba 100644 --- a/projects/github-actions/repo-gardening/src/tasks/triage-issues/automattic-label-team-assignments.js +++ b/projects/github-actions/repo-gardening/src/tasks/triage-issues/automattic-label-team-assignments.js @@ -205,7 +205,7 @@ export const automatticAssignments = { board_id: 'https://github.com/orgs/Automattic/projects/908/views/1', }, VideoPress: { - team: 'Agora', + team: 'Nexus', labels: [ '[Package] VideoPress', '[Feature] VideoPress', '[Plugin] VideoPress' ], slack_id: 'C02TQF5VAJD', board_id: 'https://github.com/orgs/Automattic/projects/460', From d0b5f34150cd95aa0b8d81843e5725fe28eef28d Mon Sep 17 00:00:00 2001 From: Miguel Torres <1233880+mmtr@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:11:36 +0100 Subject: [PATCH 091/420] Remove duplicate views: Store experiment assignment in a different option (#41037) --- ...update-remove-duplicate-views-experiment-assignment-option | 4 ++++ .../features/wpcom-admin-interface/wpcom-admin-interface.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-experiment-assignment-option diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-experiment-assignment-option b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-experiment-assignment-option new file mode 100644 index 0000000000000..05ffe09f19e66 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-experiment-assignment-option @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index ce6a52ed49973..f319e1954752d 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -407,7 +407,7 @@ function wpcom_is_duplicate_views_experiment_enabled() { return $is_enabled; } - $option_name = 'duplicate_views_experiment_assignment'; + $option_name = 'remove_duplicate_views_experiment_assignment'; $variation = get_user_option( $option_name, get_current_user_id() ); if ( false !== $variation ) { From adbfe8643cf635e78349d17767ece470b79309f2 Mon Sep 17 00:00:00 2001 From: Miguel Torres <1233880+mmtr@users.noreply.github.com> Date: Thu, 16 Jan 2025 15:13:32 +0100 Subject: [PATCH 092/420] Remove duplicate views: Rename experiment (#41125) --- .../changelog/update-remove-duplicate-views-experiment-rename | 4 ++++ .../features/wpcom-admin-interface/wpcom-admin-interface.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-experiment-rename diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-experiment-rename b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-experiment-rename new file mode 100644 index 0000000000000..05ffe09f19e66 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-duplicate-views-experiment-rename @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index f319e1954752d..b1d54f05d3fed 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -393,7 +393,7 @@ function wpcom_show_admin_interface_notice() { */ function wpcom_is_duplicate_views_experiment_enabled() { $experiment_platform = 'calypso'; - $experiment_name = "{$experiment_platform}_post_onboarding_holdout_120924"; + $experiment_name = "{$experiment_platform}_post_onboarding_holdout_160125"; $aa_test_name = "{$experiment_platform}_post_onboarding_aa_150125"; static $is_enabled = null; From 147fd7ec4a9fc7e2288270e93e00c7e4725fb711 Mon Sep 17 00:00:00 2001 From: Bryan Elliott Date: Thu, 16 Jan 2025 09:14:37 -0500 Subject: [PATCH 093/420] Package protect-status: Fix Current_Plan::supports from busting cache on every call. (#41010) * Fix Protect-status Current_Plan::supports() from breaking the cache. --- .../changelog/fix-protect-current-plan-supports-allow-cached | 4 ++++ projects/packages/protect-status/src/class-plan.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 projects/packages/protect-status/changelog/fix-protect-current-plan-supports-allow-cached diff --git a/projects/packages/protect-status/changelog/fix-protect-current-plan-supports-allow-cached b/projects/packages/protect-status/changelog/fix-protect-current-plan-supports-allow-cached new file mode 100644 index 0000000000000..8784857cd4235 --- /dev/null +++ b/projects/packages/protect-status/changelog/fix-protect-current-plan-supports-allow-cached @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Protect-status package: Fix Current_Plan::supports() call from breaking cache on every call. diff --git a/projects/packages/protect-status/src/class-plan.php b/projects/packages/protect-status/src/class-plan.php index 67d5cf0e3d030..878101ea475d7 100644 --- a/projects/packages/protect-status/src/class-plan.php +++ b/projects/packages/protect-status/src/class-plan.php @@ -101,7 +101,7 @@ public static function has_required_plan( $force_refresh = false ) { $products = array_column( Current_Plan::get_products(), 'product_slug' ); // Check for a plan or product that enables scan. - $plan_supports_scan = Current_Plan::supports( 'scan', true ); + $plan_supports_scan = Current_Plan::supports( 'scan', $force_refresh ); $has_scan_product = count( array_intersect( array( 'jetpack_scan', 'jetpack_scan_monthly' ), $products ) ) > 0; $has_scan = $plan_supports_scan || $has_scan_product; } From d412ede8be17050be0d87030b4d6b166fe2f69fb Mon Sep 17 00:00:00 2001 From: Lena Morita Date: Fri, 17 Jan 2025 00:28:28 +0900 Subject: [PATCH 094/420] Storybook: Improve startup instructions (#41115) * Remove unnecessary Introduction page * Improve command docs * changelog * Improve How to guide --- .../storybook/changelog/howto-command-docs | 4 ++++ .../storybook/stories/docs/howto.mdx | 22 ++++++++++++------- .../storybook/stories/docs/introduction.mdx | 7 ------ 3 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 projects/js-packages/storybook/changelog/howto-command-docs delete mode 100644 projects/js-packages/storybook/storybook/stories/docs/introduction.mdx diff --git a/projects/js-packages/storybook/changelog/howto-command-docs b/projects/js-packages/storybook/changelog/howto-command-docs new file mode 100644 index 0000000000000..10a10412ad7c7 --- /dev/null +++ b/projects/js-packages/storybook/changelog/howto-command-docs @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Storybook: Improve launch instructions diff --git a/projects/js-packages/storybook/storybook/stories/docs/howto.mdx b/projects/js-packages/storybook/storybook/stories/docs/howto.mdx index e46a39e7c788b..08b3c7b2b76e0 100644 --- a/projects/js-packages/storybook/storybook/stories/docs/howto.mdx +++ b/projects/js-packages/storybook/storybook/stories/docs/howto.mdx @@ -5,13 +5,13 @@ import dedent from 'ts-dedent'; # How to use this tool -The Jetpack Components Library allows you to discover, test and live-edit Jetpack visual component. +The Jetpack Components Library allows you to discover, test, and live-edit Jetpack UI components. ## Publish component stories -Anywhere in a supported package, create one or more directories called `stories` (e.g. src/components/my-component/stories). +Anywhere in a supported package, create one or more directories called `stories` (e.g. `src/components/my-component/stories`). -In that directory, create an index.stories.js or index.stories.jsx file, like this: +In that directory, create an `index.stories.jsx` or `index.stories.tsx` file, like this: { - return ; - }; + export const _default = {}; `} /> -You can read more about writing stories in the [Storybook JS docs](https://storybook.js.org/docs/react/writing-stories/introduction) +You can read more about writing stories in the [Storybook JS docs](https://storybook.js.org/docs/react/writing-stories/introduction). ## Edit components live To run this locally, just run: -``` +```bash +# From projects/js-packages/storybook/ pnpm run storybook:dev + +# Or from Jetpack repo root +pnpm -F @automattic/jetpack-storybook storybook:dev ``` Any edits to SCSS, HTML, JSX or other files should be hot-loaded so you can see changes to styles or components. +## Contributing + +Ready to contribute? Check out the Jetpack [contributing guide](https://github.com/Automattic/jetpack/blob/trunk/docs/CONTRIBUTING.md). diff --git a/projects/js-packages/storybook/storybook/stories/docs/introduction.mdx b/projects/js-packages/storybook/storybook/stories/docs/introduction.mdx deleted file mode 100644 index 358398ec0c6f5..0000000000000 --- a/projects/js-packages/storybook/storybook/stories/docs/introduction.mdx +++ /dev/null @@ -1,7 +0,0 @@ -import { Meta } from '@storybook/blocks'; - - - -# Introduction - -Hello World From bedc278505c48151381b8aaf618774ccdac5fda4 Mon Sep 17 00:00:00 2001 From: Dylan Munson <65001528+CodeyGuyDylan@users.noreply.github.com> Date: Thu, 16 Jan 2025 08:57:49 -0700 Subject: [PATCH 095/420] Add reset options to my jetpack footer (#40943) * Add option to reset jetpack options on My Jetpack footer for devs * changelog * Use additional menu items in admin page footer * Use existing prop for jetpack footer --- .../add-option-for-custom-footer-items | 4 +++ .../components/admin-page/index.tsx | 7 +++- .../components/components/admin-page/types.ts | 7 ++++ .../components/my-jetpack-screen/index.jsx | 19 +++++++++-- .../_inc/data/utils/onKeyDownCallback.ts | 8 +++++ .../_inc/data/utils/reset-jetpack-options.ts | 32 +++++++++++++++++++ .../add-reset-options-to-my-jetpack-footer | 4 +++ projects/packages/my-jetpack/global.d.ts | 1 + .../my-jetpack/src/class-initializer.php | 1 + 9 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 projects/js-packages/components/changelog/add-option-for-custom-footer-items create mode 100644 projects/packages/my-jetpack/_inc/data/utils/onKeyDownCallback.ts create mode 100644 projects/packages/my-jetpack/_inc/data/utils/reset-jetpack-options.ts create mode 100644 projects/packages/my-jetpack/changelog/add-reset-options-to-my-jetpack-footer diff --git a/projects/js-packages/components/changelog/add-option-for-custom-footer-items b/projects/js-packages/components/changelog/add-option-for-custom-footer-items new file mode 100644 index 0000000000000..794a01f14c1aa --- /dev/null +++ b/projects/js-packages/components/changelog/add-option-for-custom-footer-items @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Add option for additional custom footer elements diff --git a/projects/js-packages/components/components/admin-page/index.tsx b/projects/js-packages/components/components/admin-page/index.tsx index f6bc0c5aaf036..a80b4c207adf0 100644 --- a/projects/js-packages/components/components/admin-page/index.tsx +++ b/projects/js-packages/components/components/admin-page/index.tsx @@ -28,6 +28,7 @@ const AdminPage: React.FC< AdminPageProps > = ( { sandboxedDomain = '', apiRoot = '', apiNonce = '', + optionalMenuItems, header, } ) => { useEffect( () => { @@ -85,7 +86,11 @@ const AdminPage: React.FC< AdminPageProps > = ( { { showFooter && ( - + ) } diff --git a/projects/js-packages/components/components/admin-page/types.ts b/projects/js-packages/components/components/admin-page/types.ts index 5877e74c79c69..59aafbda44226 100644 --- a/projects/js-packages/components/components/admin-page/types.ts +++ b/projects/js-packages/components/components/admin-page/types.ts @@ -1,3 +1,5 @@ +import type { JetpackFooterMenuItem } from '../jetpack-footer/types'; + export type AdminPageProps = { /** * The page content @@ -53,4 +55,9 @@ export type AdminPageProps = { * The nonce of the API. */ apiNonce?: string; + + /** + * Optional menu items to be displayed + */ + optionalMenuItems?: JetpackFooterMenuItem[]; }; diff --git a/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/index.jsx b/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/index.jsx index 5db31a8443e4f..2c7947a35a907 100644 --- a/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/index.jsx +++ b/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/index.jsx @@ -11,6 +11,7 @@ import { useBreakpointMatch, ActionButton, } from '@automattic/jetpack-components'; +import { __, _x } from '@wordpress/i18n'; import clsx from 'clsx'; import { useContext, useEffect, useLayoutEffect, useState } from 'react'; /* @@ -27,6 +28,8 @@ import { import useEvaluationRecommendations from '../../data/evaluation-recommendations/use-evaluation-recommendations'; import useSimpleQuery from '../../data/use-simple-query'; import { getMyJetpackWindowInitialState } from '../../data/utils/get-my-jetpack-window-state'; +import onKeyDownCallback from '../../data/utils/onKeyDownCallback'; +import resetJetpackOptions from '../../data/utils/reset-jetpack-options'; import useWelcomeBanner from '../../data/welcome-banner/use-welcome-banner'; import useAnalytics from '../../hooks/use-analytics'; import useMyJetpackConnection from '../../hooks/use-my-jetpack-connection'; @@ -42,7 +45,6 @@ import styles from './styles.module.scss'; const GlobalNotice = ( { message, title, options } ) => { const { recordEvent } = useAnalytics(); - useEffect( () => { const tracksArgs = options?.tracksArgs || {}; @@ -84,13 +86,13 @@ export default function MyJetpackScreen() { variation: 'control', } ); useNotificationWatcher(); - const { redBubbleAlerts } = getMyJetpackWindowInitialState(); const { isAtomic = false, jetpackManage = {}, adminUrl, sandboxedDomain, } = getMyJetpackWindowInitialState(); + const { redBubbleAlerts, isDevVersion, userIsAdmin } = getMyJetpackWindowInitialState(); const { isWelcomeBannerVisible } = useWelcomeBanner(); const { isSectionVisible } = useEvaluationRecommendations(); @@ -140,12 +142,25 @@ export default function MyJetpackScreen() { return null; } + const resetOptionsMenuItem = { + label: _x( + 'Reset Options (dev only)', + 'Button for option to reset Jetpack Options', + 'jetpack-my-jetpack' + ), + title: __( 'Reset Options', 'jetpack-my-jetpack' ), + role: 'button', + onClick: () => resetJetpackOptions(), + onKeyDown: e => onKeyDownCallback( e, () => resetJetpackOptions() ), + }; + return (
    diff --git a/projects/packages/my-jetpack/_inc/data/utils/onKeyDownCallback.ts b/projects/packages/my-jetpack/_inc/data/utils/onKeyDownCallback.ts new file mode 100644 index 0000000000000..4c1d1fb31c0a3 --- /dev/null +++ b/projects/packages/my-jetpack/_inc/data/utils/onKeyDownCallback.ts @@ -0,0 +1,8 @@ +// Used to wrap a callback function in a keydown event listener to act as a button element would +const onKeyDownCallback = ( event: KeyboardEvent, callback: () => void ) => { + if ( event.key === 'Enter' || event.key === ' ' ) { + callback(); + } +}; + +export default onKeyDownCallback; diff --git a/projects/packages/my-jetpack/_inc/data/utils/reset-jetpack-options.ts b/projects/packages/my-jetpack/_inc/data/utils/reset-jetpack-options.ts new file mode 100644 index 0000000000000..ca80b06818863 --- /dev/null +++ b/projects/packages/my-jetpack/_inc/data/utils/reset-jetpack-options.ts @@ -0,0 +1,32 @@ +import restApi from '@automattic/jetpack-api'; +import { __ } from '@wordpress/i18n'; +import { getMyJetpackWindowRestState } from './get-my-jetpack-window-state'; + +const resetJetpackOptions = async () => { + const { apiRoot, apiNonce } = getMyJetpackWindowRestState(); + restApi.setApiRoot( apiRoot ); + restApi.setApiNonce( apiNonce ); + + if ( + // eslint-disable-next-line no-alert + window.confirm( + __( 'This will reset all Jetpack options, are you sure?', 'jetpack-my-jetpack' ) + ) + ) { + try { + const res = await restApi.resetOptions( 'options' ); + + if ( res.code === 'success' ) { + // eslint-disable-next-line no-alert + window.alert( + __( 'Options reset! Have fun messing them up again :-)', 'jetpack-my-jetpack' ) + ); + } + } catch { + // eslint-disable-next-line no-alert + window.alert( __( 'Options failed to reset.', 'jetpack-my-jetpack' ) ); + } + } +}; + +export default resetJetpackOptions; diff --git a/projects/packages/my-jetpack/changelog/add-reset-options-to-my-jetpack-footer b/projects/packages/my-jetpack/changelog/add-reset-options-to-my-jetpack-footer new file mode 100644 index 0000000000000..0bc6b238c2e29 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/add-reset-options-to-my-jetpack-footer @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Add option for devs to reset jetpack options from My Jetpack footer diff --git a/projects/packages/my-jetpack/global.d.ts b/projects/packages/my-jetpack/global.d.ts index af5ff190d33a4..940aceb078f83 100644 --- a/projects/packages/my-jetpack/global.d.ts +++ b/projects/packages/my-jetpack/global.d.ts @@ -450,6 +450,7 @@ interface Window { topJetpackMenuItemUrl: string; isAtomic: boolean; sandboxedDomain: string; + isDevVersion: boolean; userIsAdmin: string; userIsNewToJetpack: string; }; diff --git a/projects/packages/my-jetpack/src/class-initializer.php b/projects/packages/my-jetpack/src/class-initializer.php index e7409cd718cfe..df5e77d9337a1 100644 --- a/projects/packages/my-jetpack/src/class-initializer.php +++ b/projects/packages/my-jetpack/src/class-initializer.php @@ -291,6 +291,7 @@ public static function enqueue_scripts() { 'isUserFromKnownHost' => self::is_user_from_known_host(), 'isCommercial' => self::is_commercial_site(), 'sandboxedDomain' => JETPACK__SANDBOX_DOMAIN, + 'isDevVersion' => Jetpack::is_development_version(), 'isAtomic' => ( new Status_Host() )->is_woa_site(), 'jetpackManage' => array( 'isEnabled' => Jetpack_Manage::could_use_jp_manage(), From 2e28fa07a46b7df724c60a0b5bea654fdd5f373c Mon Sep 17 00:00:00 2001 From: Jorge Costa Date: Thu, 16 Jan 2025 16:06:44 +0000 Subject: [PATCH 096/420] Fix: Customiser color settings affect block editor UI. (#41073) --- ...ustomizer-color-css-affects-block-edior-ui | 4 +++ .../plugins/wpcomsh/custom-colors/colors.php | 25 +++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 projects/plugins/wpcomsh/changelog/fix-customizer-color-css-affects-block-edior-ui diff --git a/projects/plugins/wpcomsh/changelog/fix-customizer-color-css-affects-block-edior-ui b/projects/plugins/wpcomsh/changelog/fix-customizer-color-css-affects-block-edior-ui new file mode 100644 index 0000000000000..8e652b85453fa --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/fix-customizer-color-css-affects-block-edior-ui @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixes an issue where setting color identity on the customizer breaks block editor UI elements. diff --git a/projects/plugins/wpcomsh/custom-colors/colors.php b/projects/plugins/wpcomsh/custom-colors/colors.php index 93fafa904ca1c..a02923492a41e 100644 --- a/projects/plugins/wpcomsh/custom-colors/colors.php +++ b/projects/plugins/wpcomsh/custom-colors/colors.php @@ -163,7 +163,7 @@ public static function init() { self::override_themecolors(); // NOTE: Using `get_called_class()` here is crucial for the Gutenberg styles to be processed. - add_action( 'enqueue_block_editor_assets', array( get_called_class(), 'print_block_editor_css' ) ); + add_filter( 'block_editor_settings_all', array( get_called_class(), 'add_block_editor_css' ), 10, 2 ); } } else { // Classic Background stats @@ -1483,17 +1483,28 @@ public static function print_theme_css() { } /** - * Print block editor CSS. + * Adds block editor CSS to the block editor settings. + * + * @param array $editor_settings Block editor settings. */ - public static function print_block_editor_css() { + public static function add_block_editor_css( $editor_settings ) { if ( ! self::should_enable_colors() ) { - return; + return $editor_settings; } + $css = self::get_theme_css(); - wp_register_style( 'custom-colors-editor-css', false, array(), '20210311' ); // Register an empty stylesheet to append custom CSS to. - wp_enqueue_style( 'custom-colors-editor-css' ); - wp_add_inline_style( 'custom-colors-editor-css', $css ); // Append inline style to our new stylesheet + if ( ! is_array( $editor_settings['styles'] ) ) { + $editor_settings['styles'] = array(); + } + + $editor_settings['styles'] [] = array( + 'css' => $css, + '__unstableType' => 'theme', + 'isGlobalStyles' => false, + ); + + return $editor_settings; } /** From f05147ecc94436fd1b2125b85ae9a28e2bce6063 Mon Sep 17 00:00:00 2001 From: Paulo Cruz Date: Thu, 16 Jan 2025 14:17:26 -0300 Subject: [PATCH 097/420] VideoPress Block: Fix block line-height. (#41102) * Set VideoPress block line-height to zero * changelog * Add missing css to the block view --- .../videopress/changelog/fix-videopress-block-line-height | 4 ++++ .../src/client/block-editor/blocks/video/block.json | 3 ++- .../src/client/block-editor/blocks/video/style.scss | 1 + .../videopress/src/client/block-editor/blocks/video/view.scss | 1 + .../videopress/src/client/block-editor/blocks/video/view.ts | 2 +- 5 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 projects/packages/videopress/changelog/fix-videopress-block-line-height create mode 100644 projects/packages/videopress/src/client/block-editor/blocks/video/view.scss diff --git a/projects/packages/videopress/changelog/fix-videopress-block-line-height b/projects/packages/videopress/changelog/fix-videopress-block-line-height new file mode 100644 index 0000000000000..f59352da73d79 --- /dev/null +++ b/projects/packages/videopress/changelog/fix-videopress-block-line-height @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix VideoPress block line-height. diff --git a/projects/packages/videopress/src/client/block-editor/blocks/video/block.json b/projects/packages/videopress/src/client/block-editor/blocks/video/block.json index fe4ce76f41ebb..7a195402ba30a 100644 --- a/projects/packages/videopress/src/client/block-editor/blocks/video/block.json +++ b/projects/packages/videopress/src/client/block-editor/blocks/video/block.json @@ -129,5 +129,6 @@ "editorScript": "file:./index.js", "editorStyle": "file:./index.css", "style": "file:./style.css", - "viewScript": "file:./view.js" + "viewScript": "file:./view.js", + "viewStyle": "file:./view.css" } diff --git a/projects/packages/videopress/src/client/block-editor/blocks/video/style.scss b/projects/packages/videopress/src/client/block-editor/blocks/video/style.scss index 587c6e7908410..817e00019483e 100644 --- a/projects/packages/videopress/src/client/block-editor/blocks/video/style.scss +++ b/projects/packages/videopress/src/client/block-editor/blocks/video/style.scss @@ -12,6 +12,7 @@ .jetpack-videopress-player__wrapper { position: relative; display: flex; + line-height: 0; } .jetpack-videopress-player__overlay { diff --git a/projects/packages/videopress/src/client/block-editor/blocks/video/view.scss b/projects/packages/videopress/src/client/block-editor/blocks/video/view.scss new file mode 100644 index 0000000000000..974f2dcaf300f --- /dev/null +++ b/projects/packages/videopress/src/client/block-editor/blocks/video/view.scss @@ -0,0 +1 @@ +@import './style.scss'; diff --git a/projects/packages/videopress/src/client/block-editor/blocks/video/view.ts b/projects/packages/videopress/src/client/block-editor/blocks/video/view.ts index d2cdfd09d9517..fdda730871099 100644 --- a/projects/packages/videopress/src/client/block-editor/blocks/video/view.ts +++ b/projects/packages/videopress/src/client/block-editor/blocks/video/view.ts @@ -6,7 +6,7 @@ import domReady from '@wordpress/dom-ready'; /** * Internal dependencies */ -import './style.scss'; +import './view.scss'; /** * Preview on Hover effect for VideoPress videos. From aa7a2d362a2d86f2c9d32ee83f80ac745a48e077 Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Thu, 16 Jan 2025 15:39:06 -0300 Subject: [PATCH 098/420] Jetpack AI: add SEO assistant PoC (#40802) * first draft, very much hardcoded and with no real actionables, version of the SEO assistant * changelog * interpolate better those br * add suspenseful typing effect for async processes * add more handlers and options for steps * use empty initial states * fix keywords confirmation message to handle only 1 keyword * introduce async functions for generation/regeneration. Use new step props for labels and triggering processes * fix initial task interpolated elements * do not render the assistant is the post type is not viewable * reorganize code, add module status management and CTA states * move SEO assistant CTA to Jetpack sidebar under SEO panel * refactor some behaviors and adjust styles towards designs * refactor code to split steps, improve chat flow, add first meta handler * clean up some commented code * temp, completed tracking is failing, need to set complete on done refactor steps schema turn into components, refactor steps add note on completion tracker * reinstate completion step hook, nothing works so far * better split of the input component * decouple message rendering to its own component, can be further split though * change skip message copy edit * restore wizard messages scrollbar * add new skip/close button, use wpicons and button components * fix side scrolling issue * turn messages into components * translate all strings, simplify message object * trying to get messages queued * turn props to ints, failing linte * testing solutions for step tracker * cleanup commented code, use isEditedPostEmpty as a way to disable the button --- .../changelog/add-jetpack-seo-assistant-poc | 4 + .../ai-assistant-plugin-sidebar/index.tsx | 20 +- .../components/seo-assistant/big-sky-icon.svg | 4 + .../components/seo-assistant/index.tsx | 45 +++- .../seo-assistant/seo-assistant-wizard.tsx | 167 +++++++++++++ .../components/seo-assistant/style.scss | 221 ++++++++++++++++++ .../components/seo-assistant/types.tsx | 71 ++++++ .../seo-assistant/typing-message.tsx | 11 + .../seo-assistant/use-completion-step.tsx | 49 ++++ .../seo-assistant/use-keywords-step.tsx | 87 +++++++ .../use-meta-description-step.tsx | 117 ++++++++++ .../seo-assistant/use-title-step.tsx | 175 ++++++++++++++ .../components/seo-assistant/wizard-input.tsx | 51 ++++ .../seo-assistant/wizard-messages.tsx | 87 +++++++ .../jetpack/extensions/plugins/seo/index.js | 15 ++ 15 files changed, 1109 insertions(+), 15 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/add-jetpack-seo-assistant-poc create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/big-sky-icon.svg create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/typing-message.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx diff --git a/projects/plugins/jetpack/changelog/add-jetpack-seo-assistant-poc b/projects/plugins/jetpack/changelog/add-jetpack-seo-assistant-poc new file mode 100644 index 0000000000000..9bda40718c680 --- /dev/null +++ b/projects/plugins/jetpack/changelog/add-jetpack-seo-assistant-poc @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Jetpack AI: add PoC for SEO assistant, hardcoded and no actionables yet diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx index 66878a350339b..221a2f509c3b9 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx @@ -17,14 +17,14 @@ import useAICheckout from '../../../../blocks/ai-assistant/hooks/use-ai-checkout import useAiFeature from '../../../../blocks/ai-assistant/hooks/use-ai-feature'; import useAiProductPage from '../../../../blocks/ai-assistant/hooks/use-ai-product-page'; import { getFeatureAvailability } from '../../../../blocks/ai-assistant/lib/utils/get-feature-availability'; -import { isBetaExtension } from '../../../../editor'; +// import { isBetaExtension } from '../../../../editor'; import JetpackPluginSidebar from '../../../../shared/jetpack-plugin-sidebar'; import { PLAN_TYPE_FREE, PLAN_TYPE_UNLIMITED, usePlanType } from '../../../../shared/use-plan-type'; import { FeaturedImage } from '../ai-image'; import { Breve, registerBreveHighlights, Highlight } from '../breve'; import { getBreveAvailability, canWriteBriefBeEnabled } from '../breve/utils/get-availability'; import Feedback from '../feedback'; -import SeoAssistant from '../seo-assistant'; +// import SeoAssistant from '../seo-assistant'; import TitleOptimization from '../title-optimization'; import UsagePanel from '../usage-panel'; import { @@ -60,7 +60,7 @@ const isAITitleOptimizationKeywordsFeatureAvailable = getFeatureAvailability( 'ai-title-optimization-keywords-support' ); -const isSeoAssistantEnabled = getFeatureAvailability( 'ai-seo-assistant' ); +// const isSeoAssistantEnabled = getFeatureAvailability( 'ai-seo-assistant' ); const JetpackAndSettingsContent = ( { placement, @@ -72,6 +72,14 @@ const JetpackAndSettingsContent = ( { const { checkoutUrl } = useAICheckout(); const { productPageUrl } = useAiProductPage(); const isBreveAvailable = getBreveAvailability(); + // const isViewable = useSelect( select => { + // const postTypeName = select( editorStore ).getCurrentPostType(); + // const postTypeObject = ( select( coreStore ) as unknown as CoreSelect ).getPostType( + // postTypeName + // ); + + // return postTypeObject?.viewable; + // }, [] ); const currentTitleOptimizationSectionLabel = __( 'Optimize Publishing', 'jetpack' ); const SEOTitleOptimizationSectionLabel = __( 'Optimize Title', 'jetpack' ); @@ -89,7 +97,7 @@ const JetpackAndSettingsContent = ( { ) } - { isSeoAssistantEnabled && ( + { /* { isSeoAssistantEnabled && isViewable && ( { __( 'SEO', 'jetpack' ) } - + - ) } + ) } */ } { canWriteBriefBeEnabled() && isBreveAvailable && ( diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/big-sky-icon.svg b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/big-sky-icon.svg new file mode 100644 index 0000000000000..9ae8660e1f429 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/big-sky-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/index.tsx index 436af29236eac..167dfa8d948c0 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/index.tsx @@ -1,21 +1,48 @@ +import { useModuleStatus } from '@automattic/jetpack-shared-extension-utils'; import { Button } from '@wordpress/components'; +import { useSelect } from '@wordpress/data'; +import { store as editorStore } from '@wordpress/editor'; +import { useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import debugFactory from 'debug'; +import { SeoPlaceholder } from '../../../../plugins/seo/components/placeholder'; +import './style.scss'; +import bigSkyIcon from './big-sky-icon.svg'; +import SeoAssistantWizard from './seo-assistant-wizard'; +import type { SeoAssistantProps } from './types'; const debug = debugFactory( 'jetpack-ai:seo-assistant' ); -export default function SeoAssistant( { busy, disabled } ) { +export default function SeoAssistant( { disabled, onStep }: SeoAssistantProps ) { + const [ isOpen, setIsOpen ] = useState( false ); + const postIsEmpty = useSelect( select => select( editorStore ).isEditedPostEmpty(), [] ); + const { isLoadingModules, isChangingStatus, isModuleActive, changeStatus } = + useModuleStatus( 'seo-tools' ); + + debug( 'rendering seo-assistant entry point' ); return (

    { __( 'Improve post engagement.', 'jetpack' ) }

    - + { ( isModuleActive || isLoadingModules ) && ( + + ) } + { ! isModuleActive && ! isLoadingModules && ( + + ) } + setIsOpen( false ) } />
    ); } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx new file mode 100644 index 0000000000000..4fd874e0f2c16 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx @@ -0,0 +1,167 @@ +import { Button, Icon, Tooltip } from '@wordpress/components'; +import { useState, useCallback, useEffect, useRef, useMemo } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import { next, closeSmall, chevronLeft } from '@wordpress/icons'; +import debugFactory from 'debug'; +import './style.scss'; +import { useCompletionStep } from './use-completion-step'; +import { useKeywordsStep } from './use-keywords-step'; +import { useMetaDescriptionStep } from './use-meta-description-step'; +import { useTitleStep } from './use-title-step'; +import WizardInput from './wizard-input'; +import WizardMessages from './wizard-messages'; +import type { SeoAssistantProps, Step, Message } from './types'; + +const debug = debugFactory( 'jetpack-ai:seo-assistant-wizard' ); + +export default function SeoAssistantWizard( { isOpen, close, onStep }: SeoAssistantProps ) { + const [ currentStep, setCurrentStep ] = useState( 0 ); + const [ messages, setMessages ] = useState< Message[] >( [] ); + const messagesEndRef = useRef< HTMLDivElement >( null ); + const [ isBusy, setIsBusy ] = useState( false ); + + const scrollToBottom = () => { + messagesEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); + }; + + useEffect( () => { + scrollToBottom(); + }, [ messages ] ); + + const addMessage = useCallback( async ( message: Message ) => { + const newMessage = { + ...message, + showIcon: message.showIcon === false ? false : ! message.isUser, + } as Message; + + setMessages( prev => [ ...prev, { ...newMessage, id: `message-${ prev.length }` } ] ); + }, [] ); + + /* Removes last message */ + const removeLastMessage = () => { + setMessages( prev => prev.slice( 0, -1 ) ); + }; + + const keywordsStep: Step = useKeywordsStep( { + addMessage, + onStep, + } ); + + const titleStep: Step = useTitleStep( { + addMessage, + removeLastMessage, + onStep, + contextData: keywordsStep.value, + setIsBusy, + } ); + + const metaStep: Step = useMetaDescriptionStep( { + addMessage, + removeLastMessage, + onStep, + setIsBusy, + } ); + + const completionStep: Step = useCompletionStep( { + steps: [ keywordsStep, titleStep, metaStep ], + addMessage, + } ); + + const steps: Step[] = useMemo( + () => [ keywordsStep, titleStep, metaStep, completionStep ], + [ keywordsStep, metaStep, titleStep, completionStep ] + ); + + const currentStepData = useMemo( () => steps[ currentStep ], [ steps, currentStep ] ); + + // initialize wizard, set completion monitors + useEffect( () => { + if ( ! isOpen ) { + return; + } + // add messageQueue.length check here for delayed messages + if ( messages.length === 0 ) { + debug( 'init' ); + // Initialize with first step messages + currentStepData.messages.forEach( addMessage ); + } + }, [ isOpen, currentStepData.messages, messages, addMessage ] ); + + const handleNext = useCallback( () => { + if ( currentStep < steps.length - 1 ) { + debug( 'moving to ' + ( currentStep + 1 ), steps[ currentStep + 1 ] ); + setCurrentStep( currentStep + 1 ); + // Add next step messages + // TODO: can we capture completion step here and craft the messages? + // Nothing else has worked so far to keep track of step completions + steps[ currentStep + 1 ].messages.forEach( addMessage ); + steps[ currentStep + 1 ].onStart?.(); + } + }, [ currentStep, steps, setCurrentStep, addMessage ] ); + + const handleSubmit = useCallback( async () => { + await currentStepData.onSubmit?.(); + handleNext(); + }, [ currentStepData, handleNext ] ); + + const handleBack = () => { + if ( currentStep > 0 ) { + setCurrentStep( currentStep - 1 ); + // Re-add previous step messages + steps[ currentStep - 1 ].messages.forEach( message => + addMessage( { + content: message.content, + showIcon: message.showIcon, + } ) + ); + } + }; + + const handleSkip = async () => { + await currentStepData?.onSkip?.(); + handleNext(); + }; + + // Reset states and close the wizard + const handleDone = useCallback( () => { + close(); + setCurrentStep( 0 ); + setMessages( [] ); + steps + .filter( step => step.type !== 'completion' ) + .forEach( step => step.setCompleted( false ) ); + }, [ close, steps ] ); + + return ( + isOpen && ( +
    +
    + +

    { currentStepData.title }

    +
    + + + + +
    +
    + +
    + + + +
    +
    + ) + ); +} diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss new file mode 100644 index 0000000000000..e541444b6a5e1 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -0,0 +1,221 @@ +.seo-assistant-wizard { + position: fixed; + bottom: 32px; + left: 50%; + transform: translateX(-50%); + width: 384px; + height: 434px; + background: white; + border-radius: 24px; + outline: 0.5px solid var( --jp-gray-5 ); + z-index: 1000; + display: flex; + flex-direction: column; + + &__header { + flex: 0 0 auto; + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px; + // border-bottom: 1px solid #e5e7eb; + background: white; + border-radius: 16px 16px 0 0; + + h2 { + margin: 0; + font-size: 16px; + font-weight: 600; + } + + button { + background: none; + border: none; + cursor: pointer; + padding: 8px; + color: #6b7280; + + &:hover { + color: #374151; + } + } + } + + &__content { + flex: 1 1 auto; + display: flex; + flex-direction: column; + height: 100%; + overflow: hidden; + } + + &__messages { + flex: 1 1 auto; + display: flex; + flex-direction: column; + gap: 8px; + padding: 16px 24px; + overflow-y: auto; + scroll-behavior: smooth; + align-items: flex-start; + mask-image: linear-gradient( 180deg, transparent, white 24px ); + } + + &__message { + border-radius: 16px; + white-space: pre-line; + animation: messageAppear 0.3s ease-out; + font-size: 13px; + line-height: 1.5; + display: flex; + align-items: center; + min-width: 48px; + + .seo-assistant-wizard__message-icon { + flex-shrink: 0; + align-self: center; + flex-basis: 26px; + + img { + vertical-align: middle; + } + } + + .seo-assistant-wizard__message-text { + padding: 4px 12px; + // flex: 1 0 200px; + } + + &.is-user { + background: #f3f4f6; + align-self: flex-end; + max-width: 85%; + + .seo-assistant-wizard__message-icon { + display: none; + } + } + } + + &__input-container { + flex: 0 0 auto; + padding: 16px; + background: white; + border-radius: 0 0 16px 16px; + border-top: 1px solid var( --jp-gray-5, #e5e7eb ); + } + + &__input { + display: flex; + gap: 8px; + border-radius: 12px; + outline: 1px solid var( --jp-gray-10, #c3c3c3 ); + align-items: center; + padding-right: 6px; + height: 44px; + + &:focus-within { + outline-width: 2px; + outline-color: var( --wp-components-color-accent, var( --wp-admin-theme-color, #007cba ) ); + } + + .components-base-control { + flex-grow: 1; + } + .components-text-control__input, + .components-text-control__input:focus { + padding: 8px; + border: 0; + border-radius: 12px; + box-shadow: none; + outline: 0; + } + } + + &__submit { + border-radius: 20px; + max-height: 34px; + } + + &__options { + display: flex; + flex-direction: column; + gap: 12px; + } + + &__option { + width: 100%; + padding: 12px; + background: #f3f4f6; + border: 2px solid transparent; + border-radius: 12px; + text-align: left; + font-size: 14px; + line-height: 1.4; + transition: all 0.2s ease; + animation: messageAppear 0.3s ease-out; + color: inherit; + + &.is-selected { + background: #fff; + border-color: var( --wp-components-color-accent, var( --wp-admin-theme-color, #007cba ) ); + } + + // target buttons only + &:not( div ) { + cursor: pointer; + } + + &:hover:not( div ):not( .is-selected ) { + background: #e5e7eb; + } + } + + &__actions { + display: flex; + justify-content: flex-end; + align-items: center; + gap: 16px; + + .components-button { + border-radius: 20px; + } + } + + &__completion { + display: flex; + justify-content: flex-end; + + .components-button { + border-radius: 20px; + } + } +} + +@keyframes messageAppear { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +// Keep this around for magic: +@keyframes typing-blink { + 30% { cy: 30; } + 50% { cy: 25; fill: lightgrey } + 70% { cy: 30; } +} +.typing-dot { + animation: 1s typing-blink linear infinite; + fill: grey; +} +.typing-dot:nth-child(2) { animation-delay: 150ms } +.typing-dot:nth-child(3) { animation-delay: 250ms } + +.typing-loader { + color: grey; +} diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx new file mode 100644 index 0000000000000..d14a0d2578d19 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx @@ -0,0 +1,71 @@ +type StepType = 'input' | 'options' | 'completion'; + +export interface Message { + id?: string; + content?: string | React.ReactNode; + isUser?: boolean; + showIcon?: boolean; + type?: string; + options?: Option[]; +} + +export interface Option { + id: string; + content: string; + selected?: boolean; +} + +interface BaseStep { + id: string; + title: string; + label?: string; + messages: StepMessage[]; + type: StepType; + onStart?: () => void; + onSubmit?: () => void; + onSkip?: () => void; + value: string; + setValue: + | React.Dispatch< React.SetStateAction< string > > + | React.Dispatch< React.SetStateAction< Array< string > > >; + setCompleted?: React.Dispatch< React.SetStateAction< boolean > >; + completed?: boolean; +} + +interface InputStep extends BaseStep { + type: 'input'; + placeholder: string; +} + +interface OptionsStep extends BaseStep { + type: 'options'; + options: Option[]; + onSelect: ( option: Option ) => void; + submitCtaLabel?: string; + onRetry?: () => void; + onRetryCtaLabel?: string; +} + +interface CompletionStep extends BaseStep { + type: 'completion'; +} + +interface StepMessage { + content: string | React.ReactNode; + showIcon?: boolean; +} + +export type Step = InputStep | OptionsStep | CompletionStep; + +export type CompletionStepHookProps = { + steps: Step[]; + addMessage?: ( message: Message | string ) => void; +}; + +export interface SeoAssistantProps { + isBusy?: boolean; + disabled?: boolean; + onStep?: ( data: { value: string | Option | null } ) => void; + isOpen?: boolean; + close?: () => void; +} diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/typing-message.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/typing-message.tsx new file mode 100644 index 0000000000000..540231b59be73 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/typing-message.tsx @@ -0,0 +1,11 @@ +import { SVG, Circle } from '@wordpress/components'; + +export default function TypingMessage() { + return ( + + + + + + ); +} diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx new file mode 100644 index 0000000000000..a46bc41eadd5f --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx @@ -0,0 +1,49 @@ +import { createInterpolateElement, useCallback } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import type { Step, CompletionStepHookProps } from './types'; + +export const useCompletionStep = ( { steps }: CompletionStepHookProps ): Step => { + const getSummaryCheck = useCallback( () => { + const summaryString = steps + .map( step => { + const stepLabel = step.label || step.title; + return step.completed ? `✅ ${ stepLabel }` : `❌ ${ stepLabel }`; + } ) + .join( '
    ' ); + return createInterpolateElement( summaryString, { br:
    } ); + }, [ steps ] ); + + return { + id: 'completion', + title: __( 'Your post is SEO-ready', 'jetpack' ), + // onStart: handleSummaryChecks, + messages: [ + { + content: __( "Here's your updated checklist:", 'jetpack' ), + showIcon: true, + }, + { + content: getSummaryCheck(), + showIcon: false, + }, + { + content: createInterpolateElement( + __( + 'SEO optimization complete! 🎉
    Your blog post is now search-engine friendly.', + 'jetpack' + ), + { br:
    } + ), + showIcon: true, + }, + { + content: __( 'Happy blogging! 😊', 'jetpack' ), + showIcon: false, + }, + ], + type: 'completion', + // onStart: handleStart, + value: null, + setValue: () => null, + }; +}; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx new file mode 100644 index 0000000000000..ac811cd2546af --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx @@ -0,0 +1,87 @@ +import { createInterpolateElement, useCallback, useState } from '@wordpress/element'; +import { __, sprintf } from '@wordpress/i18n'; +import type { Step } from './types'; + +export const useKeywordsStep = ( { addMessage, onStep } ): Step => { + const [ keywords, setKeywords ] = useState( '' ); + const [ completed, setCompleted ] = useState( false ); + + const handleSkip = useCallback( () => { + addMessage( { content: __( 'Skipped!', 'jetpack' ) } ); + if ( onStep ) { + onStep( { value: '' } ); + } + }, [ addMessage, onStep ] ); + + const handleKeywordsSubmit = useCallback( () => { + if ( ! keywords.trim() ) { + return handleSkip(); + } + addMessage( { content: keywords, isUser: true } ); + + const keywordlist = keywords + .split( ',' ) + .map( k => k.trim() ) + .reduce( ( acc, curr, i, arr ) => { + if ( arr.length === 1 ) { + return curr; + } + if ( i === arr.length - 1 ) { + return `${ acc }
    & ${ curr }`; + } + return i === 0 ? curr : `${ acc }, ${ curr }`; + }, '' ); + const message = createInterpolateElement( + /* Translators: wrapped string is list of keywords user has entered */ + sprintf( __( `Got it! You're targeting %s. ✨✅`, 'jetpack' ), keywordlist ), + { + b: , + } + ); + addMessage( { content: message } ); + setCompleted( true ); + if ( onStep ) { + onStep( { value: keywords } ); + } + }, [ onStep, addMessage, keywords, handleSkip ] ); + + return { + id: 'keywords', + title: __( 'Optimise for SEO', 'jetpack' ), + label: __( 'Keywords', 'jetpack' ), + messages: [ + { + content: createInterpolateElement( + __( "Hi there! 👋 Let's optimise your blog post for SEO.", 'jetpack' ), + { b: } + ), + showIcon: true, + }, + { + content: createInterpolateElement( + __( + "Here's what we can improve:
    1. Keywords
    2. Title
    3. Meta description", + 'jetpack' + ), + { br:
    } + ), + showIcon: false, + }, + { + content: __( + 'To start, please enter 1–3 focus keywords that describe your blog post.', + 'jetpack' + ), + showIcon: true, + }, + ], + type: 'input', + placeholder: __( 'Photography, plants', 'jetpack' ), + onSubmit: handleKeywordsSubmit, + onSkip: handleSkip, + completed, + setCompleted, + value: keywords, + setValue: setKeywords, + }; +}; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx new file mode 100644 index 0000000000000..5b4699fd95872 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx @@ -0,0 +1,117 @@ +import { useDispatch } from '@wordpress/data'; +import { useCallback, useState } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import TypingMessage from './typing-message'; +import type { Step, Option } from './types'; + +export const useMetaDescriptionStep = ( { + addMessage, + removeLastMessage, + onStep, + setIsBusy, +} ): Step => { + const [ selectedMetaDescription, setSelectedMetaDescription ] = useState< string >(); + const [ metaDescriptionOptions, setMetaDescriptionOptions ] = useState< Option[] >( [] ); + const { editPost } = useDispatch( 'core/editor' ); + const [ completed, setCompleted ] = useState( false ); + + const handleMetaDescriptionSelect = useCallback( ( option: Option ) => { + setSelectedMetaDescription( option.content ); + setMetaDescriptionOptions( prev => + prev.map( opt => ( { + ...opt, + selected: opt.id === option.id, + } ) ) + ); + }, [] ); + + const handleMetaDescriptionSubmit = useCallback( async () => { + addMessage( { content: } ); + await editPost( { meta: { advanced_seo_description: selectedMetaDescription } } ); + removeLastMessage(); + addMessage( { content: selectedMetaDescription, isUser: true } ); + addMessage( { content: __( 'Meta description updated! ✅', 'jetpack' ) } ); + setCompleted( true ); + if ( onStep ) { + onStep( { value: selectedMetaDescription } ); + } + }, [ selectedMetaDescription, onStep, addMessage, editPost, removeLastMessage ] ); + + const handleMetaDescriptionGenerate = useCallback( async () => { + setIsBusy( true ); + let newMetaDescriptions; + // we only generate if options are empty + if ( metaDescriptionOptions.length === 0 ) { + addMessage( { content: } ); + newMetaDescriptions = await new Promise( resolve => + setTimeout( + () => + resolve( [ + { + id: 'meta-1', + content: + 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', + }, + ] ), + 2000 + ) + ); + removeLastMessage(); + } + addMessage( { content: __( "Here's a suggestion:", 'jetpack' ) } ); + setMetaDescriptionOptions( newMetaDescriptions || metaDescriptionOptions ); + setIsBusy( false ); + }, [ metaDescriptionOptions, addMessage, removeLastMessage, setIsBusy ] ); + + const handleMetaDescriptionRegenerate = useCallback( async () => { + setMetaDescriptionOptions( [] ); + addMessage( { content: } ); + const newMetaDescription = await new Promise< Array< Option > >( resolve => + setTimeout( + () => + resolve( [ + { + id: 'meta-1', + content: + 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', + }, + ] ), + 2000 + ) + ); + removeLastMessage(); + addMessage( { content: __( "Here's a new suggestion:", 'jetpack' ) } ); + setMetaDescriptionOptions( newMetaDescription ); + }, [ addMessage, removeLastMessage ] ); + + const handleSkip = useCallback( () => { + addMessage( { content: __( 'Skipped!', 'jetpack' ) } ); + if ( onStep ) { + onStep(); + } + }, [ addMessage, onStep ] ); + + return { + id: 'meta', + title: __( 'Add meta description', 'jetpack' ), + messages: [ + { + content: __( "Now, let's optimize your meta description.", 'jetpack' ), + showIcon: true, + }, + ], + type: 'options', + options: metaDescriptionOptions, + onSelect: handleMetaDescriptionSelect, + onSubmit: handleMetaDescriptionSubmit, + submitCtaLabel: __( 'Insert', 'jetpack' ), + onRetry: handleMetaDescriptionRegenerate, + onRetryCtaLabel: __( 'Regenerate', 'jetpack' ), + onStart: handleMetaDescriptionGenerate, + onSkip: handleSkip, + value: selectedMetaDescription, + setValue: setSelectedMetaDescription, + completed, + setCompleted, + }; +}; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx new file mode 100644 index 0000000000000..0153dab8dfaab --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx @@ -0,0 +1,175 @@ +import { useDispatch } from '@wordpress/data'; +import { useCallback, useState, useEffect } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import TypingMessage from './typing-message'; +import type { Step, Option } from './types'; + +export const useTitleStep = ( { + addMessage, + removeLastMessage, + onStep, + contextData, + setIsBusy, +} ): Step => { + const [ selectedTitle, setSelectedTitle ] = useState< string >(); + const [ titleOptions, setTitleOptions ] = useState< Option[] >( [] ); + const { editPost } = useDispatch( 'core/editor' ); + const [ completed, setCompleted ] = useState( false ); + + const handleTitleSelect = useCallback( ( option: Option ) => { + setSelectedTitle( option.content ); + setTitleOptions( prev => + prev.map( opt => ( { + ...opt, + selected: opt.id === option.id, + } ) ) + ); + }, [] ); + + useEffect( () => setTitleOptions( [] ), [ contextData ] ); + + const handleTitleGenerate = useCallback( async () => { + setIsBusy( true ); + let newTitles; + // we only generate if options are empty + if ( titleOptions.length === 0 ) { + addMessage( { content: } ); + newTitles = await new Promise( resolve => + setTimeout( + () => + resolve( [ + { + id: '1', + content: 'A Photo Gallery for Gardening Enthusiasths: Flora Guide', + }, + { + id: '2', + content: + 'Flora Guide: Beautiful Photos of Flowers and Plants for Gardening Enthusiasts', + }, + ] ), + 2000 + ) + ); + removeLastMessage(); + } + if ( contextData ) { + addMessage( { + content: __( + 'Here are two suggestions based on your keywords. Select the one you prefer:', + 'jetpack' + ), + } ); + } else { + addMessage( { + content: __( 'Here are two suggestions. Select the one you prefer:', 'jetpack' ), + } ); + } + setTitleOptions( newTitles || titleOptions ); + setIsBusy( false ); + }, [ titleOptions, addMessage, removeLastMessage, contextData, setIsBusy ] ); + + const replaceOptionsWithFauxUseMessages = useCallback( () => { + const optionsMessage = { + id: 'title-options-' + Math.random(), + content: '', + type: 'past-options', + options: [], + showIcon: false, + }; + // removeLastMessage(); + titleOptions.forEach( titleOption => { + optionsMessage.options.push( { ...titleOption } ); + } ); + addMessage( optionsMessage ); + }, [ titleOptions, addMessage ] ); + + const handleTitleRegenerate = useCallback( async () => { + // let the controller know we're working + setIsBusy( true ); + + // This would typically be an async call to generate new titles + replaceOptionsWithFauxUseMessages(); + setTitleOptions( [] ); + addMessage( { content: } ); + const newTitles = await new Promise< Array< Option > >( resolve => + setTimeout( + () => + resolve( [ + { + id: '1', + content: 'A Photo Gallery for Gardening Enthusiasths: Flora Guide', + }, + { + id: '2', + content: + 'Flora Guide: Beautiful Photos of Flowers and Plants for Gardening Enthusiasts', + }, + ] ), + 2000 + ) + ); + removeLastMessage(); + addMessage( { + content: __( + 'Here are two new suggestions based on your keywords. Select the one you prefer:', + 'jetpack' + ), + } ); + setTitleOptions( newTitles ); + setIsBusy( false ); + }, [ addMessage, removeLastMessage, replaceOptionsWithFauxUseMessages, setIsBusy ] ); + + const handleTitleSubmit = useCallback( async () => { + replaceOptionsWithFauxUseMessages(); + addMessage( { content: } ); + await editPost( { title: selectedTitle, meta: { jetpack_seo_html_title: selectedTitle } } ); + removeLastMessage(); + addMessage( { content: __( 'Title updated! ✅', 'jetpack' ) } ); + setCompleted( true ); + if ( onStep ) { + onStep( { value: selectedTitle } ); + } + }, [ + selectedTitle, + onStep, + addMessage, + replaceOptionsWithFauxUseMessages, + editPost, + removeLastMessage, + ] ); + + const handleSkip = useCallback( () => { + if ( titleOptions.length ) { + replaceOptionsWithFauxUseMessages(); + } + addMessage( __( 'Skipped!', 'jetpack' ) ); + if ( onStep ) { + onStep(); + } + }, [ addMessage, onStep, titleOptions, replaceOptionsWithFauxUseMessages ] ); + + return { + id: 'title', + title: __( 'Optimise Title', 'jetpack' ), + messages: [ + { + content: __( "Let's optimise your title.", 'jetpack' ), + showIcon: true, + }, + ], + type: 'options', + options: titleOptions, + onSelect: handleTitleSelect, + onSubmit: handleTitleSubmit, + submitCtaLabel: __( 'Insert', 'jetpack' ), + onRetry: handleTitleRegenerate, + onRetryCtaLabel: __( 'Regenerate', 'jetpack' ), + onStart: handleTitleGenerate, + onSkip: handleSkip, + value: selectedTitle, + setValue: setSelectedTitle, + completed, + setCompleted, + }; +}; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx new file mode 100644 index 0000000000000..f9263e0188088 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx @@ -0,0 +1,51 @@ +import { Button, TextControl, Icon } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import { arrowRight } from '@wordpress/icons'; + +export default function WizardInput( { currentStepData, handleSubmit, handleDone } ) { + const selectedOption = + currentStepData.type === 'options' ? currentStepData.options.find( opt => opt.selected ) : null; + return ( +
    + { currentStepData.type === 'input' && ( +
    + + +
    + ) } + + { currentStepData.type === 'options' && ( +
    + + + +
    + ) } + + { currentStepData.type === 'completion' && ( +
    + +
    + ) } +
    + ); +} diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx new file mode 100644 index 0000000000000..fc6e0af1dc98c --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx @@ -0,0 +1,87 @@ +import { useEffect, useRef } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import clsx from 'clsx'; +import bigSkyIcon from './big-sky-icon.svg'; + +const Message = ( { message } ) => { + return ( +
    +
    + { message.showIcon && ( + { + ) } +
    + + { message.type === 'past-options' && ( +
    + { message.options.map( option => ( +
    + { option.content } +
    + ) ) } +
    + ) } + + { ( ! message.type || message.type === 'chat' ) && ( +
    { message.content }
    + ) } +
    + ); +}; + +const OptionMessages = ( { currentStepData } ) => { + if ( currentStepData.type !== 'options' || ! currentStepData.options.length ) { + return null; + } + + return ( +
    +
    +
    +
    + { currentStepData.options.map( option => ( + + ) ) } +
    +
    +
    + ); +}; + +export default function Messages( { currentStepData, messages } ) { + const messagesEndRef = useRef< HTMLDivElement >( null ); + const scrollToBottom = () => { + messagesEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); + }; + + useEffect( () => { + scrollToBottom(); + }, [ messages ] ); + + return ( +
    + { messages.map( message => ( + + ) ) } + +
    +
    + ); +} diff --git a/projects/plugins/jetpack/extensions/plugins/seo/index.js b/projects/plugins/jetpack/extensions/plugins/seo/index.js index 4ebdeb0185543..a3618e5a60fa0 100644 --- a/projects/plugins/jetpack/extensions/plugins/seo/index.js +++ b/projects/plugins/jetpack/extensions/plugins/seo/index.js @@ -3,6 +3,7 @@ import { useModuleStatus, isSimpleSite, isAtomicSite, + getJetpackExtensionAvailability, getRequiredPlan, } from '@automattic/jetpack-shared-extension-utils'; import { PanelBody, PanelRow } from '@wordpress/components'; @@ -12,7 +13,9 @@ import { PluginPrePublishPanel } from '@wordpress/edit-post'; import { store as editorStore } from '@wordpress/editor'; import { Fragment } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; +import { isBetaExtension } from '../../editor'; import JetpackPluginSidebar from '../../shared/jetpack-plugin-sidebar'; +import SeoAssistant from '../ai-assistant-plugin/components/seo-assistant'; import { SeoPlaceholder } from './components/placeholder'; import { SeoSkeletonLoader } from './components/skeleton-loader'; import UpsellNotice from './components/upsell'; @@ -24,6 +27,9 @@ import './editor.scss'; export const name = 'seo'; +const isSeoAssistantEnabled = + getJetpackExtensionAvailability( 'ai-seo-assistant' )?.available === true; + const Seo = () => { const { isLoadingModules, isChangingStatus, isModuleActive, changeStatus } = useModuleStatus( 'seo-tools' ); @@ -95,6 +101,15 @@ const Seo = () => { + { isSeoAssistantEnabled && isViewable && ( + + + + ) } From 256471e4b11dfe7f7e41ab3f3d9c9af250ab31dc Mon Sep 17 00:00:00 2001 From: Erick Danzer Date: Thu, 16 Jan 2025 12:19:31 -0700 Subject: [PATCH 099/420] Forms: Fix dropdown icon position (#41074) --- projects/packages/forms/changelog/fix-forms-select-field-icon | 4 ++++ projects/packages/forms/src/contact-form/css/grunion.css | 4 ++-- .../plugins/jetpack/changelog/fix-forms-select-field-icon | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-forms-select-field-icon create mode 100644 projects/plugins/jetpack/changelog/fix-forms-select-field-icon diff --git a/projects/packages/forms/changelog/fix-forms-select-field-icon b/projects/packages/forms/changelog/fix-forms-select-field-icon new file mode 100644 index 0000000000000..fbf421450276d --- /dev/null +++ b/projects/packages/forms/changelog/fix-forms-select-field-icon @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Fix dropdown icon styling. diff --git a/projects/packages/forms/src/contact-form/css/grunion.css b/projects/packages/forms/src/contact-form/css/grunion.css index ddd9335237fbc..db3af87444d3e 100644 --- a/projects/packages/forms/src/contact-form/css/grunion.css +++ b/projects/packages/forms/src/contact-form/css/grunion.css @@ -320,8 +320,8 @@ .contact-form .contact-form__select-wrapper::after { position: absolute; - inset-inline-end: calc(var(--jetpack--contact-form--input-padding-left) + 4px); - top: calc(var(--jetpack--contact-form--input-padding-top) + var(--jetpack--contact-form--line-height) / 2); + inset-inline-end: 20px; + top: 50%; content: ""; display: block; diff --git a/projects/plugins/jetpack/changelog/fix-forms-select-field-icon b/projects/plugins/jetpack/changelog/fix-forms-select-field-icon new file mode 100644 index 0000000000000..13abe7cc13bce --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-forms-select-field-icon @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Forms: Fix dropdown icon style From 11f43c8bc094580e44058e7fced167490f31e749 Mon Sep 17 00:00:00 2001 From: jboland88 <18016357+jboland88@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:42:33 -0500 Subject: [PATCH 100/420] Fix/my jetpack red bubble cache (#41131) * Add a transient cache for red bubble alerts and for looking up site features * changelog * some static analysis improvements --- .../changelog/fix-my-jetpack-red-bubble-cache | 4 ++++ .../my-jetpack/src/class-initializer.php | 17 +++++++++++++++-- .../my-jetpack/src/products/class-product.php | 15 +++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 projects/packages/my-jetpack/changelog/fix-my-jetpack-red-bubble-cache diff --git a/projects/packages/my-jetpack/changelog/fix-my-jetpack-red-bubble-cache b/projects/packages/my-jetpack/changelog/fix-my-jetpack-red-bubble-cache new file mode 100644 index 0000000000000..81c7701aa3379 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/fix-my-jetpack-red-bubble-cache @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +add caching for the red bubble alerts for My Jetpack diff --git a/projects/packages/my-jetpack/src/class-initializer.php b/projects/packages/my-jetpack/src/class-initializer.php index df5e77d9337a1..58e70f88b9db7 100644 --- a/projects/packages/my-jetpack/src/class-initializer.php +++ b/projects/packages/my-jetpack/src/class-initializer.php @@ -64,6 +64,7 @@ class Initializer { const MISSING_CONNECTION_NOTIFICATION_KEY = 'missing-connection'; const VIDEOPRESS_STATS_KEY = 'my-jetpack-videopress-stats'; const VIDEOPRESS_PERIOD_KEY = 'my-jetpack-videopress-period'; + const MY_JETPACK_RED_BUBBLE_TRANSIENT_KEY = 'my-jetpack-red-bubble-transient'; /** * Holds info/data about the site (from the /sites/%d endpoint) @@ -281,7 +282,8 @@ public static function enqueue_scripts() { 'purchases' => self::get_purchases(), 'modules' => self::get_active_modules(), ), - 'redBubbleAlerts' => self::get_red_bubble_alerts(), + // Only in the My Jetpack context, we get the alerts without the cache to make sure we have the most up-to-date info + 'redBubbleAlerts' => self::get_red_bubble_alerts( true ), 'recommendedModules' => array( 'modules' => self::get_recommended_modules(), 'isFirstRun' => \Jetpack_Options::get_option( 'recommendations_first_run', true ), @@ -844,17 +846,28 @@ function ( $alert ) { /** * Collect all possible alerts that we might use a red bubble notification for * + * @param bool $bypass_cache - whether to bypass the red bubble cache. * @return array */ - public static function get_red_bubble_alerts() { + public static function get_red_bubble_alerts( bool $bypass_cache = false ) { static $red_bubble_alerts = array(); // using a static cache since we call this function more than once in the class if ( ! empty( $red_bubble_alerts ) ) { return $red_bubble_alerts; } + + // check for stored alerts + $stored_alerts = get_transient( self::MY_JETPACK_RED_BUBBLE_TRANSIENT_KEY ); + // Cache bypass for red bubbles should only happen on the My Jetpack page + if ( $stored_alerts !== false && ! ( $bypass_cache ) ) { + return $stored_alerts; + } + // go find the alerts $red_bubble_alerts = apply_filters( 'my_jetpack_red_bubble_notification_slugs', $red_bubble_alerts ); + // cache the alerts for one hour + set_transient( self::MY_JETPACK_RED_BUBBLE_TRANSIENT_KEY, $red_bubble_alerts, 3600 ); return $red_bubble_alerts; } diff --git a/projects/packages/my-jetpack/src/products/class-product.php b/projects/packages/my-jetpack/src/products/class-product.php index 5e747988fb8cf..f48f51c729be2 100644 --- a/projects/packages/my-jetpack/src/products/class-product.php +++ b/projects/packages/my-jetpack/src/products/class-product.php @@ -72,6 +72,13 @@ abstract class Product { */ const EXPIRATION_CUTOFF_TIME = '+2 months'; + /** + * Transient key for storing site features + * + * @var string; + */ + const MY_JETPACK_SITE_FEATURES_TRANSIENT_KEY = 'my-jetpack-site-features'; + /** * Whether this module is a Jetpack feature * @@ -221,6 +228,12 @@ public static function get_site_features_from_wpcom() { return $features; } + // Check for a cached value before doing lookup + $stored_features = get_transient( self::MY_JETPACK_SITE_FEATURES_TRANSIENT_KEY ); + if ( $stored_features !== false ) { + return $stored_features; + } + $site_id = Jetpack_Options::get_option( 'id' ); $response = Client::wpcom_json_api_request_as_blog( sprintf( '/sites/%d/features', $site_id ), '1.1' ); @@ -236,6 +249,8 @@ public static function get_site_features_from_wpcom() { 'active' => $feature_return->active, 'available' => $feature_return->available, ); + // set a short transient to help with multiple lookups on the same page load. + set_transient( self::MY_JETPACK_SITE_FEATURES_TRANSIENT_KEY, $features, 15 ); return $features; } From 2fb664be2c984795a850b86fae2db50804e6a455 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Fri, 17 Jan 2025 10:43:26 +1300 Subject: [PATCH 101/420] Charts: Add options support for X and Y axis (#41109) * allow passing in axis options * changelog * passing through the class names * add options * move defaults to component to make them available when options is passed --- .../charts/changelog/add-x-y-axis-orientation | 4 ++++ .../src/components/line-chart/line-chart.tsx | 10 ++++++-- .../line-chart/stories/index.stories.tsx | 10 ++++++++ projects/js-packages/charts/src/types.ts | 24 +++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 projects/js-packages/charts/changelog/add-x-y-axis-orientation diff --git a/projects/js-packages/charts/changelog/add-x-y-axis-orientation b/projects/js-packages/charts/changelog/add-x-y-axis-orientation new file mode 100644 index 0000000000000..1cba564f78b87 --- /dev/null +++ b/projects/js-packages/charts/changelog/add-x-y-axis-orientation @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Added passing through options for X, Y axis diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index c105f26f39ac0..eb88bb5cf5a55 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -83,6 +83,7 @@ const LineChart: FC< LineChartProps > = ( { withTooltips = true, showLegend = false, legendOrientation = 'horizontal', + options = {}, } ) => { const providerTheme = useChartTheme(); @@ -124,8 +125,13 @@ const LineChart: FC< LineChartProps > = ( { yScale={ { type: 'linear', nice: true } } > - - + + { data.map( ( seriesData, index ) => ( = T[ keyof T ]; + +declare type OrientationType = ValueOf< typeof Orientation >; + export type DataPoint = { label: string; value: number; @@ -65,6 +70,15 @@ export type ChartTheme = { gridColorDark: string; }; +declare type AxisOptions = { + orientation?: OrientationType; + numTicks?: number; + axisClassName?: string; + axisLineClassName?: string; + labelClassName?: string; + tickClassName?: string; +}; + /** * Base properties shared across all chart components */ @@ -110,6 +124,16 @@ export type BaseChartProps< T = DataPoint | DataPointDate > = { * Grid visibility. x is default. */ gridVisibility?: 'x' | 'y' | 'xy' | 'none'; + + /** + * More options for the chart. + */ + options?: { + axis?: { + x?: AxisOptions; + y?: AxisOptions; + }; + }; }; /** From 2456143e777bc2ed949d925b27705455340fda19 Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Fri, 17 Jan 2025 00:22:34 +0200 Subject: [PATCH 102/420] Forms: opt TextControl and Select component to 40px default size in Gutenberg (#41127) * Forms: settings, opt-in for default 40px size in gutenberg * changelog * Update the select field as well to use the new size. So that it looks aligned. --------- Co-authored-by: Enej Bajgoric --- .../forms/changelog/update-forms-textcontrol-40px-default | 4 ++++ .../components/jetpack-email-connection-settings.js | 2 ++ .../blocks/contact-form/components/jetpack-field-consent.js | 1 + .../blocks/contact-form/components/jetpack-field-controls.js | 2 ++ .../contact-form/components/jetpack-field-datepicker.js | 1 + .../jetpack-salesforce-lead-form-settings.js | 1 + projects/packages/forms/src/blocks/contact-form/edit.js | 2 ++ 7 files changed, 13 insertions(+) create mode 100644 projects/packages/forms/changelog/update-forms-textcontrol-40px-default diff --git a/projects/packages/forms/changelog/update-forms-textcontrol-40px-default b/projects/packages/forms/changelog/update-forms-textcontrol-40px-default new file mode 100644 index 0000000000000..7a09504a1b859 --- /dev/null +++ b/projects/packages/forms/changelog/update-forms-textcontrol-40px-default @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Forms: settings, opt-in for default 40px size in gutenberg diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-email-connection-settings.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-email-connection-settings.js index 77579069223b4..b697dc4844814 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-email-connection-settings.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-email-connection-settings.js @@ -110,6 +110,7 @@ const JetpackEmailConnectionSettings = ( { 'jetpack-forms' ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> @@ -122,6 +123,7 @@ const JetpackEmailConnectionSettings = ( { placeholder={ __( 'Enter a subject', 'jetpack-forms' ) } onChange={ newSubject => setAttributes( { subject: newSubject } ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> ); diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-consent.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-consent.js index 3e5e11229bc7e..06cadae1c2c12 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-consent.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-consent.js @@ -79,6 +79,7 @@ const JetpackFieldConsent = ( { ] } onChange={ value => setAttributes( { consentType: value } ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js index 23e65e7e64f51..793ec274e196e 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js @@ -126,6 +126,7 @@ const JetpackFieldControls = ( { 'jetpack-forms' ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> ), , @@ -274,6 +275,7 @@ const JetpackFieldControls = ( { 'jetpack-forms' ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-datepicker.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-datepicker.js index 47188aa488e71..ce84377e71240 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-datepicker.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-datepicker.js @@ -98,6 +98,7 @@ const JetpackDatePicker = props => { 'jetpack-forms' ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> ), }, diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings.js index 343b9ec1fce2b..4871c158d4b19 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings.js @@ -138,6 +138,7 @@ export default ( { salesforceData, setAttributes, instanceId } ) => { onChange={ setOrganizationId } help={ __( 'Enter the Salesforce organization ID to send Leads to.', 'jetpack-forms' ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> { organizationIdError && ( diff --git a/projects/packages/forms/src/blocks/contact-form/edit.js b/projects/packages/forms/src/blocks/contact-form/edit.js index 355b02748cbfc..fff949c91a860 100644 --- a/projects/packages/forms/src/blocks/contact-form/edit.js +++ b/projects/packages/forms/src/blocks/contact-form/edit.js @@ -175,6 +175,7 @@ export const JetpackContactFormEdit = forwardRef( ] } onChange={ newMessage => setAttributes( { customThankyou: newMessage } ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> { 'redirect' !== customThankyou && ( @@ -184,6 +185,7 @@ export const JetpackContactFormEdit = forwardRef( placeholder={ __( 'Your message has been sent', 'jetpack-forms' ) } onChange={ newHeading => setAttributes( { customThankyouHeading: newHeading } ) } __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> ) } From 98e30ab94b1e8b8a01f9441dcf90bda35ce96bb7 Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Fri, 17 Jan 2025 00:48:29 +0200 Subject: [PATCH 103/420] Forms: fix sidebar spacing (#41133) * Forms: fix spacing in sidebar * changelog * Fixes the form so that we ship less code but still end up with the same result * Add key to the Select control --------- Co-authored-by: Enej Bajgoric --- .../packages/forms/changelog/fix-forms-sidebar-spacing | 4 ++++ .../contact-form/components/jetpack-field-checkbox.js | 1 - .../contact-form/components/jetpack-field-controls.js | 5 +---- .../components/jetpack-field-datepicker.js | 1 + .../packages/forms/src/blocks/contact-form/editor.scss | 10 ---------- 5 files changed, 6 insertions(+), 15 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-forms-sidebar-spacing diff --git a/projects/packages/forms/changelog/fix-forms-sidebar-spacing b/projects/packages/forms/changelog/fix-forms-sidebar-spacing new file mode 100644 index 0000000000000..74b5abcdd328a --- /dev/null +++ b/projects/packages/forms/changelog/fix-forms-sidebar-spacing @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: fix spacing issue in sidebar settings diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-checkbox.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-checkbox.js index d6d18dc61379f..54608cb294afb 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-checkbox.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-checkbox.js @@ -74,7 +74,6 @@ function JetpackFieldCheckbox( props ) { setAttributes( { required: value } ) } help={ __( 'You can edit the "required" label in the editor', 'jetpack-forms' ) } diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js index 793ec274e196e..f9cefdd0bed6c 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js @@ -109,7 +109,6 @@ const JetpackFieldControls = ( { setAttributes( { required: value } ) } help={ __( 'You can edit the "required" label in the editor', 'jetpack-forms' ) } @@ -170,9 +169,7 @@ const JetpackFieldControls = ( { - { fieldSettings.filter( Boolean ).map( ( elt, index ) => ( -
    { elt }
    - ) ) } + <>{ fieldSettings }
    { index: 1, element: ( ( { value, diff --git a/projects/packages/forms/src/blocks/contact-form/editor.scss b/projects/packages/forms/src/blocks/contact-form/editor.scss index 825c8dfd91a5e..d8279a34e42bb 100644 --- a/projects/packages/forms/src/blocks/contact-form/editor.scss +++ b/projects/packages/forms/src/blocks/contact-form/editor.scss @@ -267,16 +267,6 @@ .components-base-control { margin-top: -1px; margin-bottom: -3px; - - &.jetpack-field-label__required { - .components-form-toggle { - margin: 2px 8px 0 16px; - } - - .components-toggle-control__label { - word-break: normal; - } - } } .rich-text.jetpack-field-label__input { From 8f2dbb97de2adf2c27d26ceb42714e617cfbbd07 Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Fri, 17 Jan 2025 01:04:51 +0200 Subject: [PATCH 104/420] Forms: update width control to use more modern togglecontrol (#41130) * Forms: update width selector to use ToggleGroupControl * changelog * Fix onClick/onChange Co-authored-by: Lena Morita * Simplyfy the code * Update the label to match block editor --------- Co-authored-by: Lena Morita Co-authored-by: Enej Bajgoric --- .../update-forms-width-togglecontrol | 4 +++ .../components/jetpack-field-width.js | 35 ++++++++++++------- .../forms/src/blocks/contact-form/editor.scss | 10 ------ 3 files changed, 26 insertions(+), 23 deletions(-) create mode 100644 projects/packages/forms/changelog/update-forms-width-togglecontrol diff --git a/projects/packages/forms/changelog/update-forms-width-togglecontrol b/projects/packages/forms/changelog/update-forms-width-togglecontrol new file mode 100644 index 0000000000000..05efe5596e368 --- /dev/null +++ b/projects/packages/forms/changelog/update-forms-width-togglecontrol @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Forms: update width control to use more modern ToggleGroupControl diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-width.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-width.js index e56af4a8f2234..ef407e7f7fb99 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-width.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-width.js @@ -1,6 +1,12 @@ -import { BaseControl, Button, ButtonGroup } from '@wordpress/components'; +import { + BaseControl, + __experimentalToggleGroupControl as ToggleGroupControl, // eslint-disable-line @wordpress/no-unsafe-wp-apis + __experimentalToggleGroupControlOption as ToggleGroupControlOption, // eslint-disable-line @wordpress/no-unsafe-wp-apis +} from '@wordpress/components'; import { __ } from '@wordpress/i18n'; +const PERCENTAGE_WIDTHS = [ 25, 50, 75, 100 ]; + export default function JetpackFieldWidth( { setAttributes, width } ) { return ( - { __( 'Field Width', 'jetpack-forms' ) } - - { [ 25, 50, 75, 100 ].map( widthValue => { + setAttributes( { width: value } ) } + value={ width } + > + { PERCENTAGE_WIDTHS.map( widthValue => { return ( - + label={ `${ widthValue }%` } + value={ widthValue } + /> ); } ) } - + ); } diff --git a/projects/packages/forms/src/blocks/contact-form/editor.scss b/projects/packages/forms/src/blocks/contact-form/editor.scss index d8279a34e42bb..753ddabb7dd42 100644 --- a/projects/packages/forms/src/blocks/contact-form/editor.scss +++ b/projects/packages/forms/src/blocks/contact-form/editor.scss @@ -480,16 +480,6 @@ } } -.jetpack-field-label__width { - .components-button-group { - display: block; - } - - .components-base-control__field { - margin-bottom: 12px; - } -} - // Duplicated to elevate specificity in order to overwrite core styles .jetpack-field-multiple__list.jetpack-field-multiple__list { list-style-type: none; From 3c7e4f4e7fd0f6418f152558b1610075763aa2ce Mon Sep 17 00:00:00 2001 From: Louis Laugesen Date: Fri, 17 Jan 2025 11:55:21 +1100 Subject: [PATCH 105/420] Remove Settings > Security menu item for wpcom atomic sites (#41112) * Remove Settings > Security menu item from atomic sites menu * changelog * Remove duplicate function --- .../masterbar/changelog/update-remove-security-settings | 4 ++++ .../masterbar/src/admin-menu/class-atomic-admin-menu.php | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 projects/packages/masterbar/changelog/update-remove-security-settings diff --git a/projects/packages/masterbar/changelog/update-remove-security-settings b/projects/packages/masterbar/changelog/update-remove-security-settings new file mode 100644 index 0000000000000..7721ff09f470f --- /dev/null +++ b/projects/packages/masterbar/changelog/update-remove-security-settings @@ -0,0 +1,4 @@ +Significance: patch +Type: removed + +Removed Settings > Security menu item from wpcom atomic sites in the hold out experiment. diff --git a/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php b/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php index 017891701b8c5..2a723cc124ac2 100644 --- a/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php +++ b/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php @@ -415,7 +415,10 @@ public function add_upgrades_menu( $plan = null ) { public function add_options_menu() { parent::add_options_menu(); - if ( Jetpack_Plan::supports( 'security-settings' ) ) { + if ( Jetpack_Plan::supports( 'security-settings' ) && + function_exists( 'wpcom_is_duplicate_views_experiment_enabled' ) && + ! wpcom_is_duplicate_views_experiment_enabled() + ) { add_submenu_page( 'options-general.php', esc_attr__( 'Security', 'jetpack-masterbar' ), From 3e36cc37d3cc34059864b406080c21e5abe864fb Mon Sep 17 00:00:00 2001 From: Anna McPhee <30754158+annacmc@users.noreply.github.com> Date: Fri, 17 Jan 2025 12:37:01 +1100 Subject: [PATCH 106/420] Chart Library: Fix pie chart + add responsive stories (#41018) * add resizable container to the line chart stories * add resizable container to the pie chart stories * adds resizable container to the Pie Semi Circle Chart Stories * changelog * modify the pie chart component to be properly responsive * fix semi circle chart responsiveness * add fixed dimension stories * fix responsive and non-responsive stories on semi circle chart * add fixed dimensions story for pie chart * ensure no dimension props are being passed for responsive examples. * Remove more fixed dimensions from responsive stories * Refactor + rebase pie chart and pie chart stories and add back in theme selection * remove unecessary import * add width/height back in - just for radius calculation + clarity * don't need display:inline block here any more * Charts: Add options support for X and Y axis (#41109) * allow passing in axis options * changelog * passing through the class names * add options * move defaults to component to make them available when options is passed --------- Co-authored-by: Jasper Kang --- .../update-chart-library-responsive-stories | 4 + .../bar-chart/stories/index.stories.tsx | 20 ++- .../line-chart/stories/index.stories.tsx | 30 +++- .../src/components/pie-chart/pie-chart.tsx | 7 +- .../pie-chart/stories/index.stories.tsx | 116 ++++++++++----- .../pie-semi-circle-chart.tsx | 29 ++-- .../stories/index.stories.tsx | 133 +++++++++++++----- .../src/components/shared/with-responsive.tsx | 7 +- 8 files changed, 251 insertions(+), 95 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-chart-library-responsive-stories diff --git a/projects/js-packages/charts/changelog/update-chart-library-responsive-stories b/projects/js-packages/charts/changelog/update-chart-library-responsive-stories new file mode 100644 index 0000000000000..61811c2d5b2d0 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-chart-library-responsive-stories @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Charts: add responsive chart stories diff --git a/projects/js-packages/charts/src/components/bar-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/bar-chart/stories/index.stories.tsx index 0b63d7b411cff..f5beaf7fe8436 100644 --- a/projects/js-packages/charts/src/components/bar-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/bar-chart/stories/index.stories.tsx @@ -16,9 +16,9 @@ const meta: Meta< typeof BarChart > = { overflow: 'auto', padding: '2rem', width: '800px', - minWidth: '400px', maxWidth: '1200px', border: '1px dashed #ccc', + display: 'inline-block', } } > @@ -61,8 +61,6 @@ export const SingleSeries: Story = { export const ManyDataSeries: Story = { args: { ...Default.args, - width: 1200, - height: 700, data, }, parameters: { @@ -92,3 +90,19 @@ export const WithVerticalLegend = { legendOrientation: 'vertical', }, }; + +export const FixedDimensions: Story = { + args: { + ...Default.args, + width: 800, + height: 400, + data: [ data[ 0 ], data[ 1 ], data[ 2 ] ], + }, + parameters: { + docs: { + description: { + story: 'Bar chart with fixed dimensions that override the responsive behavior.', + }, + }, + }, +}; diff --git a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx index 3326a430e7478..48342a5b06c1e 100644 --- a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx @@ -10,7 +10,17 @@ const meta: Meta< typeof LineChart > = { }, decorators: [ Story => ( -
    +
    ), @@ -42,8 +52,6 @@ Default.args = { // Story with single data series export const SingleSeries: StoryObj< typeof LineChart > = Template.bind( {} ); SingleSeries.args = { - width: 500, - height: 300, data: [ sampleData[ 0 ] ], // Only London temperature data }; @@ -76,3 +84,19 @@ WithVerticalLegend.args = { showLegend: true, legendOrientation: 'vertical', }; + +// Add after existing stories +export const FixedDimensions: StoryObj< typeof LineChart > = Template.bind( {} ); +FixedDimensions.args = { + width: 800, + height: 400, + data: sampleData, + withTooltips: true, +}; +FixedDimensions.parameters = { + docs: { + description: { + story: 'Line chart with fixed dimensions that override the responsive behavior.', + }, + }, +}; diff --git a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx index c9e5a237b6421..0fff77fc76494 100644 --- a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx @@ -62,8 +62,7 @@ const PieChart = ( { className, showLegend, legendOrientation, - - size = 500, //TODO: replace when making the components responsive + size, thickness = 1, padding = 20, gapScale = 0, @@ -80,6 +79,8 @@ const PieChart = ( { // Calculate radius based on width/height const radius = Math.min( width, height ) / 2; + + // Center the chart in the available space const centerX = width / 2; const centerY = height / 2; @@ -114,7 +115,7 @@ const PieChart = ( { return (
    - + data={ dataWithIndex } diff --git a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx index 756185f7273f8..1e12d368f415b 100644 --- a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx @@ -3,36 +3,59 @@ import { PieChart } from '../index'; import type { Meta, StoryObj } from '@storybook/react'; const data = [ - { label: 'A', value: 30 }, - { label: 'B', value: 20 }, - { label: 'C', value: 15 }, - { label: 'D', value: 35 }, + { + label: 'MacOS', + value: 30000, + valueDisplay: '30K', + percentage: 5, + }, + { + label: 'Linux', + value: 22000, + valueDisplay: '22K', + percentage: 1, + }, + { + label: 'Windows', + value: 80000, + valueDisplay: '80K', + percentage: 2, + }, ]; -type StoryType = StoryObj< typeof PieChart >; - -export default { +const meta = { title: 'JS Packages/Charts/Types/Pie Chart', component: PieChart, parameters: { layout: 'centered', }, + decorators: [ + ( Story, { args } ) => ( + +
    + +
    + + ), + ], argTypes: { - theme: { - control: 'select', - options: { - default: undefined, - jetpack: jetpackTheme, - woo: wooTheme, - }, - defaultValue: undefined, - }, size: { control: { type: 'range', min: 100, max: 800, - step: 1, + step: 10, }, }, thickness: { @@ -71,19 +94,22 @@ export default { control: 'radio', options: [ 'horizontal', 'vertical' ], }, + theme: { + control: 'select', + options: { + default: undefined, + jetpack: jetpackTheme, + woo: wooTheme, + }, + defaultValue: undefined, + }, }, - decorators: [ - ( Story, { args } ) => ( - -
    - -
    -
    - ), - ], } satisfies Meta< typeof PieChart >; -export const Default: StoryType = { +export default meta; +type Story = StoryObj< typeof PieChart >; + +export const Default: Story = { args: { size: 400, thickness: 1, @@ -98,7 +124,7 @@ export const Default: StoryType = { }, }; -export const WithHorizontalLegend: StoryType = { +export const WithHorizontalLegend: Story = { args: { ...Default.args, showLegend: true, @@ -106,7 +132,7 @@ export const WithHorizontalLegend: StoryType = { }, }; -export const WithVerticalLegend: StoryType = { +export const WithVerticalLegend: Story = { args: { ...Default.args, showLegend: true, @@ -114,7 +140,7 @@ export const WithVerticalLegend: StoryType = { }, }; -export const Doughnut: StoryType = { +export const Doughnut: Story = { args: { ...Default.args, thickness: 0.5, @@ -128,7 +154,7 @@ export const Doughnut: StoryType = { }, }; -export const WithTooltips: StoryType = { +export const WithTooltips: Story = { args: { ...Default.args, withTooltips: true, @@ -142,9 +168,10 @@ export const WithTooltips: StoryType = { }, }; -export const WithTooltipsDoughnut: StoryType = { +export const WithTooltipsDoughnut: Story = { args: { ...Default.args, + thickness: 0.5, withTooltips: true, }, parameters: { @@ -155,3 +182,28 @@ export const WithTooltipsDoughnut: StoryType = { }, }, }; + +export const FixedDimensions: Story = { + render: args => ( +
    + +
    + ), + args: { + size: 400, + thickness: 1, + padding: 20, + data, + withTooltips: true, + theme: 'default', + showLegend: false, + }, + parameters: { + docs: { + description: { + story: + 'Pie chart with fixed dimensions that override the responsive behavior. Uses size prop instead of width/height.', + }, + }, + }, +}; diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx index 7e0f5a9c9fb7c..8e85cd89aba52 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx @@ -11,32 +11,37 @@ import { withResponsive } from '../shared/with-responsive'; import { BaseTooltip } from '../tooltip'; import styles from './pie-semi-circle-chart.module.scss'; import type { BaseChartProps, DataPointPercentage } from '../../types'; - interface PieSemiCircleChartProps extends BaseChartProps< DataPointPercentage[] > { + /** + * Size of the chart in pixels + */ + size?: number; + + /** + * Thickness of the pie chart. A value between 0 and 1 + */ + thickness?: number; + /** * Label text to display above the chart */ - label: string; + label?: string; /** * Note text to display below the label */ - note: string; + note?: string; /** * Direction of chart rendering * true for clockwise, false for counter-clockwise */ clockwise?: boolean; - /** - * Thickness of the pie chart. A value between 0 and 1 - */ - thickness?: number; } type ArcData = PieArcDatum< DataPointPercentage >; const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { data, - width = 500, //TODO: replace when making the components responsive + size = 500, label, note, className, @@ -50,9 +55,9 @@ const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { const { tooltipOpen, tooltipLeft, tooltipTop, tooltipData, hideTooltip, showTooltip } = useTooltip< DataPointPercentage >(); - const centerX = width / 2; - const height = width / 2; - const radius = width / 2; + const centerX = size / 2; + const height = size / 2; + const radius = size / 2; const pad = 0.03; const innerRadius = radius * ( 1 - thickness + pad ); @@ -113,7 +118,7 @@ const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( {
    - + { /* Main chart group that contains both the pie and text elements */ } { /* Pie chart */ } diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx index 1352a17259ace..32cc2bce8037d 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx @@ -1,5 +1,5 @@ import { PieSemiCircleChart } from '../index'; -import type { Meta } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react'; const data = [ { @@ -22,24 +22,35 @@ const data = [ }, ]; -export default { +const ResponsiveDecorator = Story => ( +
    + +
    +); + +const meta = { title: 'JS Packages/Charts/Types/Pie Semi Circle Chart', component: PieSemiCircleChart, parameters: { layout: 'centered', }, - decorators: [ - Story => ( -
    - -
    - ), - ], + decorators: [ ResponsiveDecorator ], argTypes: { - width: { + size: { control: { type: 'range', - min: 0, + min: 100, max: 1000, step: 10, }, @@ -52,42 +63,86 @@ export default { step: 0.01, }, }, + padding: { + control: { + type: 'range', + min: 0, + max: 100, + step: 5, + }, + }, }, } satisfies Meta< typeof PieSemiCircleChart >; -const Template = args => ; +export default meta; +type Story = StoryObj< typeof PieSemiCircleChart >; -export const Default = Template.bind( {} ); -Default.args = { - width: 500, - thickness: 0.4, - data, - label: 'OS', - note: 'Windows +10%', - clockwise: true, - showLegend: false, - legendOrientation: 'horizontal', +export const Default: Story = { + args: { + size: 400, + thickness: 0.4, + padding: 20, + data, + label: 'OS', + note: 'Windows +10%', + clockwise: true, + showLegend: false, + legendOrientation: 'horizontal', + }, +}; + +export const WithTooltips: Story = { + args: { + ...Default.args, + withTooltips: true, + }, + parameters: { + docs: { + description: { + story: 'Semi-circle pie chart with interactive tooltips that appear on hover.', + }, + }, + }, }; -export const WithTooltips = Template.bind( {} ); -WithTooltips.args = { - width: 500, - data, - label: 'OS', - note: 'Windows +10%', - withTooltips: true, +export const WithHorizontalLegend: Story = { + args: { + ...Default.args, + showLegend: true, + legendOrientation: 'horizontal', + }, }; -export const WithHorizontalLegend = Template.bind( {} ); -WithHorizontalLegend.args = { - ...Default.args, - showLegend: true, - legendOrientation: 'horizontal', +export const WithVerticalLegend: Story = { + args: { + ...Default.args, + showLegend: true, + legendOrientation: 'vertical', + }, }; -export const WithVerticalLegend = Template.bind( {} ); -WithVerticalLegend.args = { - ...Default.args, - showLegend: true, - legendOrientation: 'vertical', +export const FixedDimensions: Story = { + render: args => ( +
    + +
    + ), + args: { + size: 400, + thickness: 0.4, + padding: 20, + data, + label: 'Fixed Dimensions', + note: 'Non-responsive chart', + clockwise: true, + showLegend: false, + }, + parameters: { + docs: { + description: { + story: + 'Semi-circle pie chart with fixed dimensions that override the responsive behavior. Uses size prop for unified width/height handling.', + }, + }, + }, }; diff --git a/projects/js-packages/charts/src/components/shared/with-responsive.tsx b/projects/js-packages/charts/src/components/shared/with-responsive.tsx index 8dfd5be2b4630..41b0c79f35337 100644 --- a/projects/js-packages/charts/src/components/shared/with-responsive.tsx +++ b/projects/js-packages/charts/src/components/shared/with-responsive.tsx @@ -6,10 +6,11 @@ type ResponsiveConfig = { maxWidth?: number; aspectRatio?: number; debounceTime?: number; + useSingleDimension?: boolean; }; /** - * A higher-order component that provides responsive width and height + * A higher-order component that provides responsive dimensions * to the wrapped chart component using useParentSize from @visx/responsive. * * @param WrappedComponent - The chart component to be wrapped. @@ -22,7 +23,7 @@ export function withResponsive< T extends BaseChartProps< unknown > >( ) { const { maxWidth = 1200, aspectRatio = 0.5, debounceTime = 50 } = config || {}; - return function ResponsiveChart( props: Omit< T, 'width' | 'height' > ) { + return function ResponsiveChart( props: Omit< T, 'width' | 'height' | 'size' > ) { const { parentRef, width: parentWidth } = useParentSize( { debounceTime, enableDebounceLeadingCall: true, @@ -44,7 +45,7 @@ export function withResponsive< T extends BaseChartProps< unknown > >(
    From ca7e9cd2f175f332f9d93c4e78587f70f69f4b56 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Fri, 17 Jan 2025 15:06:26 +1300 Subject: [PATCH 107/420] Charts: Add gradient fill for line chart (#41143) * added area fill for line chart * add sample site traffic data * fix sample data * move y axis to right for the story * add more ticks to story * changelog * draw lower lines later * there should not be decimals for traffic data * fix lock file * add withGradientFill to args to show toggle in stories --- pnpm-lock.yaml | 14 + .../changelog/add-support-gradient-line-chart | 4 + projects/js-packages/charts/package.json | 1 + .../src/components/line-chart/line-chart.tsx | 53 +++- .../line-chart/stories/index.stories.tsx | 14 + .../line-chart/stories/site-traffic-sample.ts | 258 ++++++++++++++++++ projects/js-packages/charts/src/types.ts | 1 + 7 files changed, 333 insertions(+), 12 deletions(-) create mode 100644 projects/js-packages/charts/changelog/add-support-gradient-line-chart create mode 100644 projects/js-packages/charts/src/components/line-chart/stories/site-traffic-sample.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16280abeca3de..c039b98fa84ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -307,6 +307,9 @@ importers: '@visx/event': specifier: ^3.8.0 version: 3.12.0 + '@visx/gradient': + specifier: 3.12.0 + version: 3.12.0(react@18.3.1) '@visx/grid': specifier: ^3.12.0 version: 3.12.0(react@18.3.1) @@ -7783,6 +7786,11 @@ packages: peerDependencies: react: ^16.3.0-0 || ^17.0.0-0 || ^18.0.0-0 + '@visx/gradient@3.12.0': + resolution: {integrity: sha512-QRatjjdUEPbcp4pqRca1JlChpAnmmIAO3r3ZscLK7D1xEIANlIjzjl3uNgrmseYmBAYyPCcJH8Zru07R97ovOg==} + peerDependencies: + react: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 + '@visx/grid@3.12.0': resolution: {integrity: sha512-L4ex2ooSYhwNIxJ3XFIKRhoSvEGjPc2Y3YCrtNB4TV5Ofdj4q0UMOsxfrH23Pr8HSHuQhb6VGMgYoK0LuWqDmQ==} peerDependencies: @@ -18347,6 +18355,12 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 + '@visx/gradient@3.12.0(react@18.3.1)': + dependencies: + '@types/react': 18.3.18 + prop-types: 15.8.1 + react: 18.3.1 + '@visx/grid@3.12.0(react@18.3.1)': dependencies: '@types/react': 18.3.18 diff --git a/projects/js-packages/charts/changelog/add-support-gradient-line-chart b/projects/js-packages/charts/changelog/add-support-gradient-line-chart new file mode 100644 index 0000000000000..202e4443f42d1 --- /dev/null +++ b/projects/js-packages/charts/changelog/add-support-gradient-line-chart @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Add gradient fill for line chart diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 90c194c7e95a9..883c0dc30697f 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -49,6 +49,7 @@ "@react-spring/web": "9.7.3", "@visx/axis": "^3.12.0", "@visx/event": "^3.8.0", + "@visx/gradient": "3.12.0", "@visx/grid": "^3.12.0", "@visx/group": "^3.12.0", "@visx/legend": "^3.12.0", diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index eb88bb5cf5a55..287cd0845969f 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -1,6 +1,8 @@ +import { LinearGradient } from '@visx/gradient'; import { XYChart, AnimatedLineSeries, + AnimatedAreaSeries, AnimatedAxis, AnimatedGrid, Tooltip, @@ -14,10 +16,9 @@ import { withResponsive } from '../shared/with-responsive'; import styles from './line-chart.module.scss'; import type { BaseChartProps, DataPointDate, SeriesData } from '../../types'; -// TODO: revisit grid and axis options - accept as props for frid lines, axis, values: x, y, all, none - interface LineChartProps extends BaseChartProps< SeriesData[] > { margin?: { top: number; right: number; bottom: number; left: number }; + withGradientFill: boolean; } type TooltipData = { @@ -83,6 +84,7 @@ const LineChart: FC< LineChartProps > = ( { withTooltips = true, showLegend = false, legendOrientation = 'horizontal', + withGradientFill = false, options = {}, } ) => { const providerTheme = useChartTheme(); @@ -133,16 +135,43 @@ const LineChart: FC< LineChartProps > = ( { /> - { data.map( ( seriesData, index ) => ( - - ) ) } + { data.map( ( seriesData, index ) => { + const stroke = seriesData.options?.stroke ?? theme.colors[ index % theme.colors.length ]; + + return ( + <> + + + { /** Theoretically the area series should work without the line series; however it outlines the area with borders, which isn't ideal. */ } + { /** TODO: Investigate whehter we could leverage area series alone. */ } + { withGradientFill && ( + + ) } + + ); + } ) } { withTooltips && ( = { @@ -37,6 +38,7 @@ Default.args = { data: sampleData, showLegend: false, legendOrientation: 'horizontal', + withGradientFill: false, options: { axis: { x: { @@ -93,6 +95,7 @@ FixedDimensions.args = { data: sampleData, withTooltips: true, }; + FixedDimensions.parameters = { docs: { description: { @@ -100,3 +103,14 @@ FixedDimensions.parameters = { }, }, }; + +// Story with gradient filled line chart +export const GridientFilled: StoryObj< typeof LineChart > = Template.bind( {} ); +GridientFilled.args = { + ...Default.args, + data: webTrafficData, + withGradientFill: true, + options: { + axis: { x: { numTicks: 10 }, y: { orientation: 'right' } }, + }, +}; diff --git a/projects/js-packages/charts/src/components/line-chart/stories/site-traffic-sample.ts b/projects/js-packages/charts/src/components/line-chart/stories/site-traffic-sample.ts new file mode 100644 index 0000000000000..fd95c704c3f84 --- /dev/null +++ b/projects/js-packages/charts/src/components/line-chart/stories/site-traffic-sample.ts @@ -0,0 +1,258 @@ +export default [ + { + label: 'Views', + options: { + stroke: '#069e08', + }, + data: [ + { + date: new Date( '2024-01-01' ), + value: 2558, + }, + { + date: new Date( '2024-01-02' ), + value: 3399, + }, + { + date: new Date( '2024-01-03' ), + value: 2260, + }, + { + date: new Date( '2024-01-04' ), + value: 2331, + }, + { + date: new Date( '2024-01-05' ), + value: 3302, + }, + { + date: new Date( '2024-01-06' ), + value: 1852, + }, + { + date: new Date( '2024-01-07' ), + value: 2607, + }, + { + date: new Date( '2024-01-08' ), + value: 2804, + }, + { + date: new Date( '2024-01-09' ), + value: 3260, + }, + { + date: new Date( '2024-01-10' ), + value: 2941, + }, + { + date: new Date( '2024-01-11' ), + value: 2857, + }, + { + date: new Date( '2024-01-12' ), + value: 3461, + }, + { + date: new Date( '2024-01-13' ), + value: 1548, + }, + { + date: new Date( '2024-01-14' ), + value: 2739, + }, + { + date: new Date( '2024-01-15' ), + value: 3288, + }, + { + date: new Date( '2024-01-16' ), + value: 2869, + }, + { + date: new Date( '2024-01-17' ), + value: 2590, + }, + { + date: new Date( '2024-01-18' ), + value: 2609, + }, + { + date: new Date( '2024-01-19' ), + value: 2648, + }, + { + date: new Date( '2024-01-20' ), + value: 1805, + }, + { + date: new Date( '2024-01-21' ), + value: 2531, + }, + { + date: new Date( '2024-01-22' ), + value: 3605, + }, + { + date: new Date( '2024-01-23' ), + value: 2366, + }, + { + date: new Date( '2024-01-24' ), + value: 2782, + }, + { + date: new Date( '2024-01-25' ), + value: 2885, + }, + { + date: new Date( '2024-01-26' ), + value: 2918, + }, + { + date: new Date( '2024-01-27' ), + value: 2518, + }, + { + date: new Date( '2024-01-28' ), + value: 2378, + }, + { + date: new Date( '2024-01-29' ), + value: 2714, + }, + { + date: new Date( '2024-01-30' ), + value: 3279, + }, + ], + }, + { + label: 'Visitors', + options: { + stroke: 'rgb(230, 139, 40)', + }, + data: [ + { + date: new Date( '2024-01-01' ), + value: 2412, + }, + { + date: new Date( '2024-01-02' ), + value: 1899, + }, + { + date: new Date( '2024-01-03' ), + value: 2061, + }, + { + date: new Date( '2024-01-04' ), + value: 1939, + }, + { + date: new Date( '2024-01-05' ), + value: 1986, + }, + { + date: new Date( '2024-01-06' ), + value: 1560, + }, + { + date: new Date( '2024-01-07' ), + value: 1741, + }, + { + date: new Date( '2024-01-08' ), + value: 2120, + }, + { + date: new Date( '2024-01-09' ), + value: 1889, + }, + { + date: new Date( '2024-01-10' ), + value: 1666, + }, + { + date: new Date( '2024-01-11' ), + value: 2396, + }, + { + date: new Date( '2024-01-12' ), + value: 2276, + }, + { + date: new Date( '2024-01-13' ), + value: 1218, + }, + { + date: new Date( '2024-01-14' ), + value: 1228, + }, + { + date: new Date( '2024-01-15' ), + value: 1600, + }, + { + date: new Date( '2024-01-16' ), + value: 1814, + }, + { + date: new Date( '2024-01-17' ), + value: 1701, + }, + { + date: new Date( '2024-01-18' ), + value: 1507, + }, + { + date: new Date( '2024-01-19' ), + value: 1833, + }, + { + date: new Date( '2024-01-20' ), + value: 1407, + }, + { + date: new Date( '2024-01-21' ), + value: 965, + }, + { + date: new Date( '2024-01-22' ), + value: 2288, + }, + { + date: new Date( '2024-01-23' ), + value: 2135, + }, + { + date: new Date( '2024-01-24' ), + value: 1824, + }, + { + date: new Date( '2024-01-25' ), + value: 2219, + }, + { + date: new Date( '2024-01-26' ), + value: 1918, + }, + { + date: new Date( '2024-01-27' ), + value: 1101, + }, + { + date: new Date( '2024-01-28' ), + value: 1695, + }, + { + date: new Date( '2024-01-29' ), + value: 1615, + }, + { + date: new Date( '2024-01-30' ), + value: 2056, + }, + ], + }, +]; diff --git a/projects/js-packages/charts/src/types.ts b/projects/js-packages/charts/src/types.ts index 8c35f58d8d61a..f611eb1297d13 100644 --- a/projects/js-packages/charts/src/types.ts +++ b/projects/js-packages/charts/src/types.ts @@ -20,6 +20,7 @@ export type SeriesData = { group?: string; label: string; data: DataPointDate[] | DataPoint[]; + options: { gradient?: { from: string; to: string; toOpacity?: number }; stroke?: string }; }; export type MultipleDataPointsDate = { From 85f59ab0c4aacdbbb836a4914dece13a87b4d366 Mon Sep 17 00:00:00 2001 From: "okmttdhr, tada" Date: Fri, 17 Jan 2025 15:31:33 +0900 Subject: [PATCH 108/420] Infinite Scroll: Add settings in wp-admin on Simple sites (#41144) * Show Infinite Scroll options in Simple Classic * changelog --- .../update-infinite-scroll-simple-classic | 4 +++ .../modules/infinite-scroll/infinity.php | 26 ------------------- 2 files changed, 4 insertions(+), 26 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/update-infinite-scroll-simple-classic diff --git a/projects/plugins/jetpack/changelog/update-infinite-scroll-simple-classic b/projects/plugins/jetpack/changelog/update-infinite-scroll-simple-classic new file mode 100644 index 0000000000000..6942da1814fe8 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-infinite-scroll-simple-classic @@ -0,0 +1,4 @@ +Significance: minor +Type: enhancement + +Show Infinite Scroll options in Simple Classic diff --git a/projects/plugins/jetpack/modules/infinite-scroll/infinity.php b/projects/plugins/jetpack/modules/infinite-scroll/infinity.php index cd0230308ec87..0db9f97444d7b 100644 --- a/projects/plugins/jetpack/modules/infinite-scroll/infinity.php +++ b/projects/plugins/jetpack/modules/infinite-scroll/infinity.php @@ -3,7 +3,6 @@ // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files. use Automattic\Jetpack\Assets; -use Automattic\Jetpack\Redirect; /* Plugin Name: The Neverending Home Page. @@ -432,36 +431,11 @@ public function settings_api_init() { return; } - if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { - // This setting is no longer configurable in wp-admin on WordPress.com -- leave a pointer - add_settings_field( - self::$option_name_enabled, - '' . esc_html__( 'Infinite Scroll Behavior', 'jetpack' ) . '', - array( $this, 'infinite_setting_html_calypso_placeholder' ), - 'reading' - ); - return; - } - // Add the setting field [infinite_scroll] and place it in Settings > Reading add_settings_field( self::$option_name_enabled, '' . esc_html__( 'Infinite Scroll Behavior', 'jetpack' ) . '', array( $this, 'infinite_setting_html' ), 'reading' ); register_setting( 'reading', self::$option_name_enabled, 'esc_attr' ); } - /** - * Render the redirect link to the infinite scroll settings in Calypso. - */ - public function infinite_setting_html_calypso_placeholder() { - $details = get_blog_details(); - $writing_url = Redirect::get_url( 'calypso-settings-writing', array( 'site' => $details->domain ) ); - echo '' . sprintf( - /* translators: Variables are the enclosing link to the settings page */ - esc_html__( 'This option has moved. You can now manage it %1$shere%2$s.', 'jetpack' ), - '', - '' - ) . ''; - } - /** * HTML code to display a checkbox true/false option * for the infinite_scroll setting. From 29622fb1483d198b38201a6dcdac26c676855a6a Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Fri, 17 Jan 2025 09:12:01 +0200 Subject: [PATCH 109/420] Forms: Handle `Enter` on empty radio/checkbox input (#41082) * Forms: Handle `Enter` on empty radio/checkbox input * use `event.key` --- ...handle-enter-on-empty-radio-checkbox-items | 4 ++ .../jetpack-field-choice/item/edit.js | 69 ++++++++++++++++--- 2 files changed, 63 insertions(+), 10 deletions(-) create mode 100644 projects/packages/forms/changelog/update-forms-handle-enter-on-empty-radio-checkbox-items diff --git a/projects/packages/forms/changelog/update-forms-handle-enter-on-empty-radio-checkbox-items b/projects/packages/forms/changelog/update-forms-handle-enter-on-empty-radio-checkbox-items new file mode 100644 index 0000000000000..68dbd11c08013 --- /dev/null +++ b/projects/packages/forms/changelog/update-forms-handle-enter-on-empty-radio-checkbox-items @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Forms: Handle `Enter` on empty radio/checkbox input diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-choice/item/edit.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-choice/item/edit.js index ebd2d342f869c..eb59eef7d9d28 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-choice/item/edit.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-choice/item/edit.js @@ -1,13 +1,63 @@ -import { RichText, useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor'; -import { createBlock } from '@wordpress/blocks'; +import { + RichText, + useBlockProps, + useInnerBlocksProps, + store as blockEditorStore, +} from '@wordpress/block-editor'; +import { createBlock, cloneBlock, getDefaultBlockName } from '@wordpress/blocks'; +import { useRefEffect } from '@wordpress/compose'; import { useDispatch, useSelect } from '@wordpress/data'; +import { useRef } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; -import { first } from 'lodash'; import { supportsParagraphSplitting } from '../../../util/block-support'; import { useParentAttributes } from '../../../util/use-parent-attributes'; import { useJetpackFieldStyles } from '../../use-jetpack-field-styles'; +function useEnter( props ) { + const { replaceBlocks, selectionChange } = useDispatch( blockEditorStore ); + const { getBlock, getBlockRootClientId, getBlockIndex } = useSelect( blockEditorStore ); + const propsRef = useRef( props ); + propsRef.current = props; + return useRefEffect( element => { + function onKeyDown( event ) { + if ( event.defaultPrevented || event.key !== 'Enter' ) { + return; + } + const { content, clientId } = propsRef.current; + if ( content?.length ) { + return; + } + event.preventDefault(); + const topParentBlock = getBlock( getBlockRootClientId( clientId ) ); + const blockIndex = getBlockIndex( clientId ); + const head = cloneBlock( { + ...topParentBlock, + innerBlocks: topParentBlock.innerBlocks.slice( 0, blockIndex ), + } ); + const middle = createBlock( getDefaultBlockName() ); + const after = topParentBlock.innerBlocks.slice( blockIndex + 1 ); + const tail = after.length + ? [ + cloneBlock( { + ...topParentBlock, + innerBlocks: after, + } ), + ] + : []; + replaceBlocks( topParentBlock.clientId, [ head, middle, ...tail ], 1 ); + // We manually change the selection here because we are replacing + // a different block than the selected one. + selectionChange( middle.clientId ); + } + + element.addEventListener( 'keydown', onKeyDown ); + return () => { + element.removeEventListener( 'keydown', onKeyDown ); + }; + }, [] ); +} + export default function JetpackFieldChoiceItemEdit( { attributes, clientId, @@ -16,14 +66,13 @@ export default function JetpackFieldChoiceItemEdit( { setAttributes, type, } ) { - const { removeBlock } = useDispatch( 'core/block-editor' ); + const { removeBlock } = useDispatch( blockEditorStore ); const parentAttributes = useParentAttributes( clientId ); const { optionStyle } = useJetpackFieldStyles( parentAttributes ); const siblingsCount = useSelect( select => { - const blockEditor = select( 'core/block-editor' ); - const parentBlockId = first( blockEditor.getBlockParents( clientId, true ) ); - return blockEditor.getBlock( parentBlockId ).innerBlocks.length; + const { getBlockCount, getBlockRootClientId } = select( blockEditorStore ); + return getBlockCount( getBlockRootClientId( clientId ) ); }, [ clientId ] ); @@ -51,21 +100,21 @@ export default function JetpackFieldChoiceItemEdit( { className: classes, style: optionStyle, } ); - + const useEnterRef = useEnter( { content: attributes.label, clientId } ); return ( <>
  • setAttributes( { label: newLabel } ) } preserveWhiteSpace={ false } - withoutInteractiveFormatting onRemove={ handleDelete } onReplace={ onReplace } { ...( supportsSplitting ? {} : { onSplit: handleSplit } ) } From 830ba649b111ab9939178bf9720ac4dae4e7116a Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Fri, 17 Jan 2025 09:18:06 +0200 Subject: [PATCH 110/420] Forms: Properly support formatting options for labels and required text (#40924) * Forms: remove formatting options from labels * update `strip_tags` with `wp_kses_post` * remove extra param in `wp_kses_post` --- .../changelog/forms-remove-formatting-options-from-labels | 4 ++++ .../src/blocks/contact-form/components/jetpack-field-label.js | 2 +- .../forms/src/contact-form/class-contact-form-field.php | 4 ++-- .../forms/src/contact-form/class-contact-form-plugin.php | 4 ++-- 4 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 projects/packages/forms/changelog/forms-remove-formatting-options-from-labels diff --git a/projects/packages/forms/changelog/forms-remove-formatting-options-from-labels b/projects/packages/forms/changelog/forms-remove-formatting-options-from-labels new file mode 100644 index 0000000000000..8bd16866ef2ef --- /dev/null +++ b/projects/packages/forms/changelog/forms-remove-formatting-options-from-labels @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Properly support formatting options for labels and required text diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-label.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-label.js index 99c959d024fb2..fdf90f668905e 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-label.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-label.js @@ -34,7 +34,7 @@ const FieldLabel = ( { } } placeholder={ placeholder ?? __( 'Add label…', 'jetpack-forms' ) } withoutInteractiveFormatting - allowedFormats={ [ 'core/bold', 'core/italic' ] } + allowedFormats={ [ 'core/italic' ] } /> { suffix && { suffix } } { required && ( diff --git a/projects/packages/forms/src/contact-form/class-contact-form-field.php b/projects/packages/forms/src/contact-form/class-contact-form-field.php index 332bcc035a885..cb234ac6a2889 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-field.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-field.php @@ -455,7 +455,7 @@ public function render_label( $type, $id, $label, $required, $required_field_tex class='grunion-field-label{$type_class}" . ( $this->is_error() ? ' form-error' : '' ) . "'" . $extra_attrs_string . '>' - . esc_html( $label ) + . wp_kses_post( $label ) . ( $required ? '' : '' ) . "\n"; } @@ -1012,7 +1012,7 @@ public function render_field( $type, $id, $label, $value, $class, $placeholder, * * @param string $var Required field text. Default is "(required)". */ - $required_field_text = esc_html( apply_filters( 'jetpack_required_field_text', $required_field_text ) ); + $required_field_text = wp_kses_post( apply_filters( 'jetpack_required_field_text', $required_field_text ) ); $block_style = 'style="' . $this->block_styles . '"'; diff --git a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php index 3ddc8262ff53d..1b86a13b66628 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php @@ -117,13 +117,13 @@ public static function strip_tags( $data_with_tags ) { if ( is_array( $data_with_tags ) ) { foreach ( $data_with_tags as $index => $value ) { $index = sanitize_text_field( (string) $index ); - $value = wp_kses( (string) $value, array() ); + $value = wp_kses_post( (string) $value ); $value = str_replace( '&', '&', $value ); // undo damage done by wp_kses_normalize_entities() $data_without_tags[ $index ] = $value; } } else { - $data_without_tags = wp_kses( (string) $data_with_tags, array() ); + $data_without_tags = wp_kses_post( (string) $data_with_tags ); $data_without_tags = str_replace( '&', '&', $data_without_tags ); // undo damage done by wp_kses_normalize_entities() } From 54d732ae5b15e973f1ca0299ed10c1fa1d026039 Mon Sep 17 00:00:00 2001 From: Peter Petrov Date: Fri, 17 Jan 2025 10:39:47 +0200 Subject: [PATCH 111/420] Boost: Reduce unnecessary CSS regenerations (#40891) --- .../providers/Singular_Post_Provider.php | 4 +-- .../providers/Taxonomy_Provider.php | 4 +-- .../optimizations/cloud-css/Cloud_CSS.php | 28 ++++++++++++++++++- ...e-boost-reduce-unnecessary-css-generations | 4 +++ 4 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 projects/plugins/boost/changelog/update-boost-reduce-unnecessary-css-generations diff --git a/projects/plugins/boost/app/lib/critical-css/source-providers/providers/Singular_Post_Provider.php b/projects/plugins/boost/app/lib/critical-css/source-providers/providers/Singular_Post_Provider.php index f258e15095c2d..ffebe55be2f3e 100644 --- a/projects/plugins/boost/app/lib/critical-css/source-providers/providers/Singular_Post_Provider.php +++ b/projects/plugins/boost/app/lib/critical-css/source-providers/providers/Singular_Post_Provider.php @@ -26,14 +26,14 @@ class Singular_Post_Provider extends Provider { * * @var integer */ - const MAX_URLS = 20; + const MAX_URLS = 10; /** * Minimum number of posts to have Critical CSS generated in order for the whole process to be successful. * * @var integer */ - const MIN_SUCCESS_URLS = 10; + const MIN_SUCCESS_URLS = 5; // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @inheritdoc */ diff --git a/projects/plugins/boost/app/lib/critical-css/source-providers/providers/Taxonomy_Provider.php b/projects/plugins/boost/app/lib/critical-css/source-providers/providers/Taxonomy_Provider.php index 3aea6dc713e60..b628be3521e03 100644 --- a/projects/plugins/boost/app/lib/critical-css/source-providers/providers/Taxonomy_Provider.php +++ b/projects/plugins/boost/app/lib/critical-css/source-providers/providers/Taxonomy_Provider.php @@ -26,14 +26,14 @@ class Taxonomy_Provider extends Provider { * * @var integer */ - const MAX_URLS = 20; + const MAX_URLS = 10; /** * Minimum number of posts to have Critical CSS generated in order for the whole process to be successful. * * @var integer */ - const MIN_SUCCESS_URLS = 10; + const MIN_SUCCESS_URLS = 5; // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @inheritdoc */ diff --git a/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php b/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php index 9a06999349920..c522d344c763d 100644 --- a/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php +++ b/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php @@ -159,7 +159,13 @@ public function handle_save_post( $post_id, $post ) { // phpcs:ignore VariableAn return; } - $this->regenerate_cloud_css( self::REGENERATE_REASON_SAVE_POST, $this->get_all_providers( array( $post ) ) ); + // This checks against the latest providers list, not the list + // stored in the database because newly added posts are always + // included in the providers list that will be used to generate + // the Cloud CSS. + if ( $this->is_post_in_latest_providers_list( $post ) ) { + $this->regenerate_cloud_css( self::REGENERATE_REASON_SAVE_POST, $this->get_all_providers( array( $post ) ) ); + } } public function regenerate_cloud_css( $reason, $providers ) { @@ -171,6 +177,26 @@ public function regenerate_cloud_css( $reason, $providers ) { return $result; } + /** + * Check if the post is in the latest providers list. + * + * @param int|\WP_Post $post The post to check. + * + * @return bool + */ + public function is_post_in_latest_providers_list( $post ) { + $post_link = get_permalink( $post ); + $providers = $this->get_all_providers(); + + foreach ( $providers as $provider ) { + if ( in_array( $post_link, $provider['urls'], true ) ) { + return true; + } + } + + return false; + } + /** * Called when stored Critical CSS has been invalidated. Triggers a new Cloud CSS request. */ diff --git a/projects/plugins/boost/changelog/update-boost-reduce-unnecessary-css-generations b/projects/plugins/boost/changelog/update-boost-reduce-unnecessary-css-generations new file mode 100644 index 0000000000000..a46d7a6f8dd62 --- /dev/null +++ b/projects/plugins/boost/changelog/update-boost-reduce-unnecessary-css-generations @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Critical CSS: Reduce unnecessary regenerations. From c4666af30bbf536a1e1482d22318667c4a0fff78 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Fri, 17 Jan 2025 01:35:07 -0800 Subject: [PATCH 112/420] Social | Disable caching for publicize services list (#41149) * Social Disable caching for publicize services list * Add a comment --- ...ate-social-disable-caching-for-publicize-services-list | 4 ++++ .../publicize/src/class-publicize-script-data.php | 8 +++++++- ...ate-social-disable-caching-for-publicize-services-list | 4 ++++ ...ate-social-disable-caching-for-publicize-services-list | 4 ++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 projects/packages/publicize/changelog/update-social-disable-caching-for-publicize-services-list create mode 100644 projects/plugins/jetpack/changelog/update-social-disable-caching-for-publicize-services-list create mode 100644 projects/plugins/social/changelog/update-social-disable-caching-for-publicize-services-list diff --git a/projects/packages/publicize/changelog/update-social-disable-caching-for-publicize-services-list b/projects/packages/publicize/changelog/update-social-disable-caching-for-publicize-services-list new file mode 100644 index 0000000000000..40debb77fbcf2 --- /dev/null +++ b/projects/packages/publicize/changelog/update-social-disable-caching-for-publicize-services-list @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Social Disable caching for publicize services list to avoid stale nonces diff --git a/projects/packages/publicize/src/class-publicize-script-data.php b/projects/packages/publicize/src/class-publicize-script-data.php index 89ffe9f3131ba..3035e3e6b1d71 100644 --- a/projects/packages/publicize/src/class-publicize-script-data.php +++ b/projects/packages/publicize/src/class-publicize-script-data.php @@ -229,7 +229,13 @@ public static function get_shares_data() { * @return array List of external services and their settings. */ public static function get_supported_services() { - return Publicize_Services::get_all(); + /** + * Disable caching for now to avoid nonce errors + * for secondary users trying to connect an account + * + * @link https://github.com/Automattic/jetpack/pull/41149 + */ + return Publicize_Services::get_all( true /* Ignore cache */ ); } /** diff --git a/projects/plugins/jetpack/changelog/update-social-disable-caching-for-publicize-services-list b/projects/plugins/jetpack/changelog/update-social-disable-caching-for-publicize-services-list new file mode 100644 index 0000000000000..5ea7d21f9281b --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-social-disable-caching-for-publicize-services-list @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Social | Fix wordpress.com log in error when connecting Social accounts diff --git a/projects/plugins/social/changelog/update-social-disable-caching-for-publicize-services-list b/projects/plugins/social/changelog/update-social-disable-caching-for-publicize-services-list new file mode 100644 index 0000000000000..3445dbbab7f45 --- /dev/null +++ b/projects/plugins/social/changelog/update-social-disable-caching-for-publicize-services-list @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed wordpress.com log in error when connecting Social accounts From 486df0ac1575175fad2a7eda663d276b2de3523f Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Fri, 17 Jan 2025 11:08:38 +0100 Subject: [PATCH 113/420] Remove the launch bar from the frontend of unpublished atomic sites (#41113) --- .../changelog/remove-launch-bar | 4 + .../wpcom-global-styles-view.js | 12 +- .../wpcomsh/changelog/remove-launch-bar | 4 + .../wpcomsh/private-site/logged-in-banner.css | 182 -------------- .../wpcomsh/private-site/logged-in-banner.php | 233 ------------------ .../wpcomsh/private-site/private-site.php | 7 - 6 files changed, 9 insertions(+), 433 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/remove-launch-bar create mode 100644 projects/plugins/wpcomsh/changelog/remove-launch-bar delete mode 100644 projects/plugins/wpcomsh/private-site/logged-in-banner.css delete mode 100644 projects/plugins/wpcomsh/private-site/logged-in-banner.php diff --git a/projects/packages/jetpack-mu-wpcom/changelog/remove-launch-bar b/projects/packages/jetpack-mu-wpcom/changelog/remove-launch-bar new file mode 100644 index 0000000000000..02cd87736498f --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/remove-launch-bar @@ -0,0 +1,4 @@ +Significance: minor +Type: removed + +Remove the launch bar from the frontend of Atomic sites diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/wpcom-global-styles-view.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/wpcom-global-styles-view.js index a49cc1501a969..0fb13789218ed 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/wpcom-global-styles-view.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/wpcom-global-styles-view.js @@ -32,17 +32,7 @@ document.addEventListener( 'DOMContentLoaded', () => { document.body.style.scrollPaddingTop = '50px'; launchBanner.style.display = null; - let container; - if ( launchBarUserData?.isAtomic ) { - const isShadowDOM = !! ( document.head.attachShadow || document.head.createShadowRoot ); - if ( isShadowDOM ) { - container = document.querySelector( '#wpcom-launch-banner-wrapper' ).shadowRoot; - } else { - container = document.querySelector( '#wpcom-launch-banner-wrapper' ); - } - } else { - container = document; - } + const container = document; const popoverToggle = container.querySelector( '.launch-bar-global-styles-toggle' ); const popover = container.querySelector( '.launch-bar-global-styles-popover' ); const upgradeButton = container.querySelector( '.launch-bar-global-styles-upgrade' ); diff --git a/projects/plugins/wpcomsh/changelog/remove-launch-bar b/projects/plugins/wpcomsh/changelog/remove-launch-bar new file mode 100644 index 0000000000000..02cd87736498f --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/remove-launch-bar @@ -0,0 +1,4 @@ +Significance: minor +Type: removed + +Remove the launch bar from the frontend of Atomic sites diff --git a/projects/plugins/wpcomsh/private-site/logged-in-banner.css b/projects/plugins/wpcomsh/private-site/logged-in-banner.css deleted file mode 100644 index e6ce05d014e5f..0000000000000 --- a/projects/plugins/wpcomsh/private-site/logged-in-banner.css +++ /dev/null @@ -1,182 +0,0 @@ -.wpcom-launch-banner { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", sans-serif; - font-size: 16px; - display: flex; - justify-content: center; - line-height: 1.4; - position: relative; - z-index: 99998; -} - -.wpcom-launch-banner a { - color: #016087; - text-decoration: underline; -} - -.wpcom-launch-banner a:hover { - color: #23354b; -} - -.wpcom-launch-banner .launch-banner-content { - align-items: center; - background: #fff; - border-bottom: 1px solid rgb(200, 215, 225); - justify-content: space-between; - overflow: hidden; - padding: 1em; - position: relative; - width: 100%; - word-break: break-word; -} - -.wpcom-launch-banner .launch-banner-image { - margin-right: 1em; - position: absolute; - left: 1em; - top: 1em; - max-width: 170px; -} - -.wpcom-launch-banner button.text-button { - background: none; - border: none; - color: #016087; - display: inline; - font-family: inherit; - font-size: 16px; - font-weight: normal; - letter-spacing: inherit; - line-height: inherit; - padding: 0; - text-transform: none; - text-decoration: underline; -} - -.wpcom-launch-bannerbutton .text-button:hover { - background: none; - color: #23354b; - text-decoration: underline; -} - -.wpcom-launch-banner button.dismiss-button { - background: none; - border-color: transparent; - border-style: solid; - border-width: 1px 1px 2px; - color: #d52c82; - display: inline; - font-family: inherit; - font-size: 14px; - font-weight: normal; - letter-spacing: inherit; - line-height: 21px; - margin: 0; - padding: 9px 14px 9px; - text-transform: none; -} - -.wpcom-launch-banner button.dismiss-button:hover { - background: none; - color: #992053; -} - -.wpcom-launch-banner .launch-banner-text { - color: #1a1a1a; - flex-grow: 1; - font-size: 16px; -} - -.wpcom-launch-banner .launch-banner-button { - display: flex; - justify-content: flex-end; - min-height: 44px; - white-space: nowrap; -} - -.wpcom-launch-banner .launch-banner-button form { - align-items: center; - display: flex; - margin: 0; -} - -.wpcom-launch-banner .launch-banner-button button { - margin: 0 1em; -} - -.wpcom-launch-banner input.launch-site-button { - background: #d52c82; - border-color: #992053; - border-radius: 4px; - color: #fff; - border-style: solid; - border-width: 1px 1px 2px; - cursor: pointer; - display: inline-block; - margin: 0; - outline: 0; - overflow: hidden; - font-weight: 500; - font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif; - text-overflow: ellipsis; - text-decoration: none; - text-transform: none; - vertical-align: top; - box-sizing: border-box; - font-size: 14px; - letter-spacing: 0; - line-height: 21px; - padding: 7px 14px 9px; -} - -.wpcom-launch-banner input.launch-site-button:hover { - background: #ff3997; -} - -.wpcom-launch-banner input.launch-site-button.disabled { - background: #fff; - border-color: #e1e2e2; - color: #e1e2e2; - cursor: not-allowed; -} - -.wpcom-launch-banner input.launch-site-button.disabled:hover { - background: #fff; -} - -@media (min-width: 961px ) { - .wpcom-launch-banner .launch-banner-content { - display: flex; - } -} - -@media (min-width: 661px ) { - .wpcom-launch-banner .launch-banner-text { - padding-left: 170px; - } -} - -@media (max-width: 960px) { - .wpcom-launch-banner .launch-banner-button { - margin-top: 1em; - } -} - -@media (max-width: 660px) { - .wpcom-launch-banner .launch-banner-image { - display: none; - } -} - -[dir='rtl'] .wpcom-launch-banner .launch-banner-image { - left: auto; - right: 1em; - margin-right: auto; - margin-left: 1em; -} - -@media (min-width: 661px ) { - [dir='rtl'] .wpcom-launch-banner .launch-banner-text { - padding-left: 0; - padding-right: 170px; - } -} \ No newline at end of file diff --git a/projects/plugins/wpcomsh/private-site/logged-in-banner.php b/projects/plugins/wpcomsh/private-site/logged-in-banner.php deleted file mode 100644 index b478ff329c70c..0000000000000 --- a/projects/plugins/wpcomsh/private-site/logged-in-banner.php +++ /dev/null @@ -1,233 +0,0 @@ -get_site_suffix(); - - $my_home_url = 'https://wordpress.com/home/' . $blog_domain; - $change_theme_url = 'https://wordpress.com/themes/' . $blog_domain; - - $is_launchpad_enabled = get_option( 'launchpad_screen' ) === 'full'; - $site_intent = get_option( 'site_intent' ); - $launchpad_url = 'https://wordpress.com/setup/' . $site_intent . '/launchpad?siteSlug=' . $blog_domain; - - $is_coming_soon_mode = site_is_coming_soon() || site_is_public_coming_soon(); - $is_launched_and_coming_soon = $is_site_launched && $is_coming_soon_mode; - - $launch_url = ''; - $launch_text = ''; - $launch_text_mobile = ''; - if ( $is_launched_and_coming_soon ) { - $launch_url = 'https://wordpress.com/settings/general/' . $blog_domain . '#site-privacy-settings'; - $launch_text = __( 'Update visibility', 'wpcomsh' ); - $launch_text_mobile = __( 'Update', 'wpcomsh' ); - } elseif ( ! $is_site_launched ) { - $launch_url = 'https://wordpress.com/start/launch-site?siteSlug=' . $blog_domain . '&source=site'; - $launch_text = __( 'Launch site', 'wpcomsh' ); - $launch_text_mobile = __( 'Launch', 'wpcomsh' ); - } - - $edit_url = ''; - $post_type = get_post_type(); - $path_prefix = ''; - if ( is_singular() && in_array( $post_type, array( 'post', 'page' ), true ) ) { - $path_prefix = $post_type; - } elseif ( is_singular() && in_array( $post_type, apply_filters( 'rest_api_allowed_post_types', array( 'post', 'page', 'revision' ) ), true ) ) { - $path_prefix = sprintf( 'edit/%s', $post_type ); - } - - if ( ! empty( $path_prefix ) ) { - $edit_url = sprintf( 'https://wordpress.com/%s/%s/%d', $path_prefix, $blog_domain, get_the_ID() ); - } - - $bar_controls = array(); - - if ( ! empty( $path_prefix ) ) { - ob_start(); - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - -
    - -
    -
    - -
    -
    -
    -
    - - Date: Fri, 17 Jan 2025 11:37:00 +0100 Subject: [PATCH 114/420] phan: Update wpcom stubs (#41152) Co-authored-by: Phabricator Bot --- .phan/stubs/wpcom-stubs.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/.phan/stubs/wpcom-stubs.php b/.phan/stubs/wpcom-stubs.php index ba798337719d6..f36d0b756b102 100644 --- a/.phan/stubs/wpcom-stubs.php +++ b/.phan/stubs/wpcom-stubs.php @@ -4,7 +4,7 @@ * `bin/teamcity-builds/jetpack-stubs/stub-defs.php` and regenerate the stubs * by triggering the Jetpack Staging → Update WPCOM Stubs job in TeamCity. * - * Stubs automatically generated from WordPress.com commit b97a8d79ff4f32395c77389fb22c900517a9d1a1. + * Stubs automatically generated from WordPress.com commit c22dbf3bcf2334f7010cf491a7817654b95c54fe. */ namespace { @@ -252,6 +252,18 @@ function header_js() function global_css() { } + class WPCOM_External_Connections + { + /** + * @return WPCOM_External_Connections + */ + static function init() + { + } + public function get_external_services_list($type = \false, $blog_id = \false) + { + } + } class WPCOM_Google_Sheets_Helper { /** @@ -1451,6 +1463,14 @@ function prompt_without_blocks($prompt_html) function assign_current_user(string $experiment_name): ?string { } + /** + * @param string $experiment_name + * @param \WP_User $user + * @return string|null + */ + function assign_given_user(string $experiment_name, \WP_User $user): ?string + { + } } namespace JITM { class Engine From 2aa3651e385934813df302b0b13ddb3f7b5f70a3 Mon Sep 17 00:00:00 2001 From: Derek Smart Date: Fri, 17 Jan 2025 11:43:29 -0500 Subject: [PATCH 115/420] WPCOM Admin Bar: Update Edit Site destination (#41137) * Admin Bar: Update Edit Site link to point to site-editor.php * changelog * bump action priority * admin_url * more intentional hook priority --- .../changelog/update-admin-bar-menu-edit-site | 4 ++++ .../wpcom-admin-bar/wpcom-admin-bar.php | 17 +++++++++++++++++ .../changelog/update-admin-bar-menu-edit-site | 4 ++++ .../changelog/update-admin-bar-menu-edit-site | 4 ++++ 4 files changed, 29 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-admin-bar-menu-edit-site create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/update-admin-bar-menu-edit-site create mode 100644 projects/plugins/wpcomsh/changelog/update-admin-bar-menu-edit-site diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-admin-bar-menu-edit-site b/projects/packages/jetpack-mu-wpcom/changelog/update-admin-bar-menu-edit-site new file mode 100644 index 0000000000000..6a67d70ba0d6e --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-admin-bar-menu-edit-site @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Admin Bar: Point the Edit Site menu item to /site-editor.php diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-bar/wpcom-admin-bar.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-bar/wpcom-admin-bar.php index a8c7fdf75b1b8..0725aa0be36f5 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-bar/wpcom-admin-bar.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-bar/wpcom-admin-bar.php @@ -275,3 +275,20 @@ function wpcom_custom_wpcom_admin_bar_class( $wp_admin_bar_class ) { return '\Automattic\Jetpack\Jetpack_Mu_Wpcom\WPCOM_Admin_Bar'; } add_filter( 'wp_admin_bar_class', 'wpcom_custom_wpcom_admin_bar_class' ); + +/** + * Changes the edit site menu to point to the top-level site editor. + * + * @param WP_Admin_Bar $wp_admin_bar The WP_Admin_Bar core object. + */ +function wpcom_edit_site_menu_override( $wp_admin_bar ) { + if ( $wp_admin_bar->get_node( 'site-editor' ) ) { + $args = array( + 'id' => 'site-editor', + 'href' => admin_url( 'site-editor.php' ), + ); + + $wp_admin_bar->add_node( $args ); + } +} +add_action( 'admin_bar_menu', 'wpcom_edit_site_menu_override', 41 ); diff --git a/projects/plugins/mu-wpcom-plugin/changelog/update-admin-bar-menu-edit-site b/projects/plugins/mu-wpcom-plugin/changelog/update-admin-bar-menu-edit-site new file mode 100644 index 0000000000000..91da9a381802e --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/update-admin-bar-menu-edit-site @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Admin Bar: Point the Edit Site menu item to /site-editor.php diff --git a/projects/plugins/wpcomsh/changelog/update-admin-bar-menu-edit-site b/projects/plugins/wpcomsh/changelog/update-admin-bar-menu-edit-site new file mode 100644 index 0000000000000..91da9a381802e --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/update-admin-bar-menu-edit-site @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Admin Bar: Point the Edit Site menu item to /site-editor.php From 6faf866206df5cbac22c76bf9f1d84eb32b29483 Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Fri, 17 Jan 2025 18:46:25 +0100 Subject: [PATCH 116/420] Repo Gardening: remove heysatellite @mention (#41163) * Repo Gardening: remove heysatellite @mention It is no longer monitored. * Switch to newer team mention --- .../changelog/update-repo-gardening-nomore-heysatellite | 5 +++++ .../src/tasks/gather-support-references/index.js | 4 ---- .../src/tasks/reply-to-customers-reminder/index.js | 3 --- 3 files changed, 5 insertions(+), 7 deletions(-) create mode 100644 projects/github-actions/repo-gardening/changelog/update-repo-gardening-nomore-heysatellite diff --git a/projects/github-actions/repo-gardening/changelog/update-repo-gardening-nomore-heysatellite b/projects/github-actions/repo-gardening/changelog/update-repo-gardening-nomore-heysatellite new file mode 100644 index 0000000000000..691d93fb7236e --- /dev/null +++ b/projects/github-actions/repo-gardening/changelog/update-repo-gardening-nomore-heysatellite @@ -0,0 +1,5 @@ +Significance: patch +Type: removed +Comment: Issue Triage: remove keyword no longer in use. + + diff --git a/projects/github-actions/repo-gardening/src/tasks/gather-support-references/index.js b/projects/github-actions/repo-gardening/src/tasks/gather-support-references/index.js index 17b31aefa24fd..4ec7836ab1ea5 100644 --- a/projects/github-actions/repo-gardening/src/tasks/gather-support-references/index.js +++ b/projects/github-actions/repo-gardening/src/tasks/gather-support-references/index.js @@ -154,10 +154,6 @@ function formatSlackMessage( payload, channel, message ) { case 'Automattic/jetpack': dris = '@jetpack-da'; break; - case 'Automattic/zero-bs-crm': - case 'Automattic/sensei': - dris = '@heysatellite'; - break; case 'Automattic/WP-Job-Manager': case 'Automattic/Crowdsignal': dris = '@meteorite-team'; diff --git a/projects/github-actions/repo-gardening/src/tasks/reply-to-customers-reminder/index.js b/projects/github-actions/repo-gardening/src/tasks/reply-to-customers-reminder/index.js index 235584bb52718..903268835ae40 100644 --- a/projects/github-actions/repo-gardening/src/tasks/reply-to-customers-reminder/index.js +++ b/projects/github-actions/repo-gardening/src/tasks/reply-to-customers-reminder/index.js @@ -39,10 +39,7 @@ function formatSlackMessage( payload, channel, message ) { case 'Automattic/jetpack': dris = '@jetpack-da'; break; - case 'Automattic/zero-bs-crm': case 'Automattic/sensei': - dris = '@heysatellite'; - break; case 'Automattic/WP-Job-Manager': case 'Automattic/Crowdsignal': dris = '@meteorite-team'; From ecf570bd7bf8cf7455f7ab2f057714784ffc6f9a Mon Sep 17 00:00:00 2001 From: Ella <4710635+ellatrix@users.noreply.github.com> Date: Fri, 17 Jan 2025 20:38:15 +0100 Subject: [PATCH 117/420] Revert "Upsell nudge: fix click Safari, disable block (#40902)" (#41164) This reverts commit c1371cc3d8f520eadf849d21ea76f49ec40a6e84. See p1737057925999759-slack-C02FMH4G8 --- .../changelog/fix-upsell-nudge-safari | 4 ---- .../shared-extension-utils/index.js | 1 + .../index.jsx | 18 ++++++++++++++++++ .../style.scss | 13 +++++++++++++ .../forms/changelog/fix-upsell-nudge-safari | 4 ---- .../util/register-jetpack-block.js | 10 ++++++++++ .../jetpack/changelog/fix-upsell-nudge-safari | 4 ---- .../extensions/blocks/videopress/editor.js | 6 ++++++ .../paid-blocks/with-upgrade-banner.jsx | 7 +++---- .../shared/register-jetpack-block.js | 10 ++++++++++ 10 files changed, 61 insertions(+), 16 deletions(-) delete mode 100644 projects/js-packages/shared-extension-utils/changelog/fix-upsell-nudge-safari create mode 100644 projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/index.jsx create mode 100644 projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/style.scss delete mode 100644 projects/packages/forms/changelog/fix-upsell-nudge-safari delete mode 100644 projects/plugins/jetpack/changelog/fix-upsell-nudge-safari diff --git a/projects/js-packages/shared-extension-utils/changelog/fix-upsell-nudge-safari b/projects/js-packages/shared-extension-utils/changelog/fix-upsell-nudge-safari deleted file mode 100644 index a1a0459281add..0000000000000 --- a/projects/js-packages/shared-extension-utils/changelog/fix-upsell-nudge-safari +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: fixed - -Upsell nudge: fix click in Safari diff --git a/projects/js-packages/shared-extension-utils/index.js b/projects/js-packages/shared-extension-utils/index.js index 4a112db47ced4..2dd8f77b42027 100644 --- a/projects/js-packages/shared-extension-utils/index.js +++ b/projects/js-packages/shared-extension-utils/index.js @@ -3,6 +3,7 @@ export { default as getSiteFragment } from './src/get-site-fragment'; export * from './src/site-type-utils'; export { default as getJetpackExtensionAvailability } from './src/get-jetpack-extension-availability'; export { default as registerJetpackPlugin } from './src/register-jetpack-plugin'; +export { default as withHasWarningIsInteractiveClassNames } from './src/with-has-warning-is-interactive-class-names'; export { getUpgradeUrl, isUpgradable, diff --git a/projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/index.jsx b/projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/index.jsx new file mode 100644 index 0000000000000..0557b899c0247 --- /dev/null +++ b/projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/index.jsx @@ -0,0 +1,18 @@ +import { createHigherOrderComponent } from '@wordpress/compose'; + +import './style.scss'; + +// Injecting the `has-warning` class into the block wrapper component gives us +// the right kind of borders around the block, both visually and conceptually. +// However, it also adds styling to prevent user interaction with that block. +// We thus add a new `is-interactive` class to be able to override that behavior. +export default name => + createHigherOrderComponent( + BlockListBlock => props => ( + + ), + 'withHasWarningIsInteractiveClassNames' + ); diff --git a/projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/style.scss b/projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/style.scss new file mode 100644 index 0000000000000..6ebd3757ad504 --- /dev/null +++ b/projects/js-packages/shared-extension-utils/src/with-has-warning-is-interactive-class-names/style.scss @@ -0,0 +1,13 @@ +.block-editor-block-list__layout + // Override core styles inherited from `.has-warning`: + // we do want blocks with upgrade nudge warning to be interactive + .block-editor-block-list__block.has-warning.is-interactive { + > * { + pointer-events: auto; + user-select: auto; + } + + &:after { + content: none; + } +} \ No newline at end of file diff --git a/projects/packages/forms/changelog/fix-upsell-nudge-safari b/projects/packages/forms/changelog/fix-upsell-nudge-safari deleted file mode 100644 index 0a93dc07d9abd..0000000000000 --- a/projects/packages/forms/changelog/fix-upsell-nudge-safari +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Upsell nudge: fix click in Safari diff --git a/projects/packages/forms/src/blocks/contact-form/util/register-jetpack-block.js b/projects/packages/forms/src/blocks/contact-form/util/register-jetpack-block.js index f7f8c9fdb729d..76713221b8d6e 100644 --- a/projects/packages/forms/src/blocks/contact-form/util/register-jetpack-block.js +++ b/projects/packages/forms/src/blocks/contact-form/util/register-jetpack-block.js @@ -1,8 +1,10 @@ import { getJetpackExtensionAvailability, + withHasWarningIsInteractiveClassNames, requiresPaidPlan, } from '@automattic/jetpack-shared-extension-utils'; import { registerBlockType } from '@wordpress/blocks'; +import { addFilter } from '@wordpress/hooks'; /** * Registers a gutenberg block if the availability requirements are met. @@ -32,6 +34,14 @@ export default function registerJetpackBlock( name, settings, childBlocks = [], const result = registerBlockType( jpPrefix + name, settings ); + if ( requiredPlan ) { + addFilter( + 'editor.BlockListBlock', + `${ jpPrefix + name }-with-has-warning-is-interactive-class-names`, + withHasWarningIsInteractiveClassNames( jpPrefix + name ) + ); + } + // Register child blocks. Using `registerBlockType()` directly avoids availability checks -- if // their parent is available, we register them all, without checking for their individual availability. childBlocks.forEach( childBlock => diff --git a/projects/plugins/jetpack/changelog/fix-upsell-nudge-safari b/projects/plugins/jetpack/changelog/fix-upsell-nudge-safari deleted file mode 100644 index 53bd7b7d2c8fb..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-upsell-nudge-safari +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Block nudges: ensure clicking on a banner button leads to Plans page in Safari. diff --git a/projects/plugins/jetpack/extensions/blocks/videopress/editor.js b/projects/plugins/jetpack/extensions/blocks/videopress/editor.js index 5720e158a30b8..b8edfdb9e401d 100644 --- a/projects/plugins/jetpack/extensions/blocks/videopress/editor.js +++ b/projects/plugins/jetpack/extensions/blocks/videopress/editor.js @@ -6,6 +6,7 @@ import { isAtomicSite, isSimpleSite, getJetpackExtensionAvailability, + withHasWarningIsInteractiveClassNames, } from '@automattic/jetpack-shared-extension-utils'; import { createBlobURL } from '@wordpress/blob'; import { useBlockEditContext, store as blockEditorStore } from '@wordpress/block-editor'; @@ -185,6 +186,11 @@ const addVideoPressSupport = ( settings, name ) => { // Check if VideoPress is unavailable and filter the mediaplaceholder to limit options if ( isNotAvailable ) { addFilter( 'editor.MediaPlaceholder', 'jetpack/videopress', videoPressNoPlanMediaPlaceholder ); + addFilter( + 'editor.BlockListBlock', + `jetpack/videopress-with-has-warning-is-interactive-class-names`, + withHasWarningIsInteractiveClassNames( `core/video` ) + ); } else if ( available ) { if ( resumableUploadEnabled ) { addFilter( 'editor.MediaPlaceholder', 'jetpack/videopress', videoPressMediaPlaceholder ); diff --git a/projects/plugins/jetpack/extensions/extended-blocks/paid-blocks/with-upgrade-banner.jsx b/projects/plugins/jetpack/extensions/extended-blocks/paid-blocks/with-upgrade-banner.jsx index 6695913b7b9f0..f1b09dfe29db9 100644 --- a/projects/plugins/jetpack/extensions/extended-blocks/paid-blocks/with-upgrade-banner.jsx +++ b/projects/plugins/jetpack/extensions/extended-blocks/paid-blocks/with-upgrade-banner.jsx @@ -8,7 +8,6 @@ import { useBlockProps } from '@wordpress/block-editor'; import { createHigherOrderComponent } from '@wordpress/compose'; import { useSelect } from '@wordpress/data'; import { useState, useEffect, useMemo, useContext } from '@wordpress/element'; -import clsx from 'clsx'; import { PaidBlockContext, PaidBlockProvider } from './components'; import UpgradePlanBanner from './upgrade-plan-banner'; import { trackUpgradeBannerImpression, trackUpgradeClickEvent } from './utils'; @@ -81,14 +80,14 @@ const withUpgradeBanner = createHigherOrderComponent( const blockProps = useBlockProps(); // Fix for width of cover block because otherwise the div defaults to content-size as max width - const cssFixForCoverBlock = { maxwidth: 'unset' }; + const cssFixForCoverBlock = { 'max-width': 'unset' }; return ( -
    +
    trackUpgradeClickEvent( trackEventData ) } /> - +
    ); diff --git a/projects/plugins/jetpack/extensions/shared/register-jetpack-block.js b/projects/plugins/jetpack/extensions/shared/register-jetpack-block.js index 850dc5edb39b5..8aa786381d558 100644 --- a/projects/plugins/jetpack/extensions/shared/register-jetpack-block.js +++ b/projects/plugins/jetpack/extensions/shared/register-jetpack-block.js @@ -1,9 +1,11 @@ import { getJetpackExtensionAvailability, + withHasWarningIsInteractiveClassNames, requiresPaidPlan, getBlockIconProp, } from '@automattic/jetpack-shared-extension-utils'; import { registerBlockType } from '@wordpress/blocks'; +import { addFilter } from '@wordpress/hooks'; const JETPACK_PREFIX = 'jetpack/'; @@ -50,6 +52,14 @@ export default function registerJetpackBlock( settings ); + if ( requiredPlan ) { + addFilter( + 'editor.BlockListBlock', + `${ prefixedName }-with-has-warning-is-interactive-class-names`, + withHasWarningIsInteractiveClassNames( prefixedName ) + ); + } + // Register child blocks. Using `registerBlockType()` directly avoids availability checks -- if // their parent is available, we register them all, without checking for their individual availability. childBlocks.forEach( childBlock => From 8368291250bf9a688484ec101a6c76c7b990694d Mon Sep 17 00:00:00 2001 From: Ella <4710635+ellatrix@users.noreply.github.com> Date: Sun, 19 Jan 2025 23:37:23 +0100 Subject: [PATCH 118/420] MU WPCOM: don't enqueue block scripts in the canvas iframe! (#41055) * MU WPCOM: don't enqueue block scripts in the canvas iframe * changelog --- .../jetpack-mu-wpcom/changelog/fix-block-asset-enqueueing | 5 +++++ .../jetpack-mu-wpcom/src/features/newspack-blocks/index.php | 4 ++-- .../wpcom-blocks/event-countdown/event-countdown.php | 6 +----- .../src/features/wpcom-blocks/timeline/timeline.php | 6 +----- .../mu-wpcom-plugin/changelog/fix-block-asset-enqueueing | 5 +++++ .../plugins/wpcomsh/changelog/fix-block-asset-enqueueing | 5 +++++ 6 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-block-asset-enqueueing create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/fix-block-asset-enqueueing create mode 100644 projects/plugins/wpcomsh/changelog/fix-block-asset-enqueueing diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-block-asset-enqueueing b/projects/packages/jetpack-mu-wpcom/changelog/fix-block-asset-enqueueing new file mode 100644 index 0000000000000..97801a681a885 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-block-asset-enqueueing @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Performance fix + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/newspack-blocks/index.php b/projects/packages/jetpack-mu-wpcom/src/features/newspack-blocks/index.php index f5e9e3b03bdbe..06ca1c0db3a2d 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/newspack-blocks/index.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/newspack-blocks/index.php @@ -86,7 +86,7 @@ function () { ); add_action( - is_admin() ? 'enqueue_block_assets' : 'enqueue_block_editor_assets', + 'enqueue_block_editor_assets', function () { $handle = \jetpack_mu_wpcom_enqueue_assets( 'newspack-blocks-blog-posts-editor', array( 'js', 'css' ) ); enqueue_newspack_blocks_data( $handle ); @@ -112,7 +112,7 @@ function () { ); add_action( - is_admin() ? 'enqueue_block_assets' : 'enqueue_block_editor_assets', + 'enqueue_block_editor_assets', function () { $handle = \jetpack_mu_wpcom_enqueue_assets( 'newspack-blocks-carousel-editor', array( 'js', 'css' ) ); enqueue_newspack_blocks_data( $handle ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-blocks/event-countdown/event-countdown.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-blocks/event-countdown/event-countdown.php index 57510c48b276f..7fa717e786c29 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-blocks/event-countdown/event-countdown.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-blocks/event-countdown/event-countdown.php @@ -47,8 +47,4 @@ function load_assets( $attr, $content ) { function enqueue_block_editor_assets() { \jetpack_mu_wpcom_enqueue_assets( 'wpcom-blocks-event-countdown-editor', array( 'js', 'css' ) ); } -if ( is_admin() ) { - add_action( 'enqueue_block_assets', __NAMESPACE__ . '\enqueue_block_editor_assets' ); -} else { - add_action( 'enqueue_block_editor_assets', __NAMESPACE__ . '\enqueue_block_editor_assets' ); -} +add_action( 'enqueue_block_editor_assets', __NAMESPACE__ . '\enqueue_block_editor_assets' ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-blocks/timeline/timeline.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-blocks/timeline/timeline.php index 3d3dc83b4f793..6d895f58c523a 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-blocks/timeline/timeline.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-blocks/timeline/timeline.php @@ -47,8 +47,4 @@ function load_assets( $attr, $content ) { function enqueue_block_editor_assets() { \jetpack_mu_wpcom_enqueue_assets( 'wpcom-blocks-timeline-editor', array( 'js', 'css' ) ); } -if ( is_admin() ) { - add_action( 'enqueue_block_assets', __NAMESPACE__ . '\enqueue_block_editor_assets' ); -} else { - add_action( 'enqueue_block_editor_assets', __NAMESPACE__ . '\enqueue_block_editor_assets' ); -} +add_action( 'enqueue_block_editor_assets', __NAMESPACE__ . '\enqueue_block_editor_assets' ); diff --git a/projects/plugins/mu-wpcom-plugin/changelog/fix-block-asset-enqueueing b/projects/plugins/mu-wpcom-plugin/changelog/fix-block-asset-enqueueing new file mode 100644 index 0000000000000..97801a681a885 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/fix-block-asset-enqueueing @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Performance fix + + diff --git a/projects/plugins/wpcomsh/changelog/fix-block-asset-enqueueing b/projects/plugins/wpcomsh/changelog/fix-block-asset-enqueueing new file mode 100644 index 0000000000000..97801a681a885 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/fix-block-asset-enqueueing @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Performance fix + + From 1e920f4f2bc1341edbaca87dc10070f68e207bd0 Mon Sep 17 00:00:00 2001 From: Adam Wood <1017872+adamwoodnz@users.noreply.github.com> Date: Mon, 20 Jan 2025 13:42:38 +1300 Subject: [PATCH 119/420] =?UTF-8?q?Revert=20"Revert=20"Stop=20showing=20li?= =?UTF-8?q?mited=20global=20styles=20notice=20in=20editor=20distracti?= =?UTF-8?q?=E2=80=A6"=20(#41107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit ecdb13d25c6da447aa7ca22d0f36d3ca0207b885. --- ...07-fix-global-styles-notice-distraction-free | 4 ---- .../src/features/wpcom-global-styles/notices.js | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/revert-40907-fix-global-styles-notice-distraction-free diff --git a/projects/packages/jetpack-mu-wpcom/changelog/revert-40907-fix-global-styles-notice-distraction-free b/projects/packages/jetpack-mu-wpcom/changelog/revert-40907-fix-global-styles-notice-distraction-free deleted file mode 100644 index ac22518a55b54..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/revert-40907-fix-global-styles-notice-distraction-free +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -Global Styles: Revert changes that hide notice in distraction free mode diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/notices.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/notices.js index 16cd184be1ac0..c0d9ca64467dc 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/notices.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/notices.js @@ -1,5 +1,6 @@ /* global wpcomGlobalStyles */ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { store as blockEditorStore } from '@wordpress/block-editor'; import { ExternalLink, Notice } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; import { @@ -238,19 +239,31 @@ function GlobalStylesEditNotice() { upgradePlan, ] ); + const isDistractionFree = useSelect( + select => select( blockEditorStore ).getSettings().isDistractionFree, + [] + ); + useEffect( () => { if ( ! isSiteEditor && ! isPostEditor ) { return; } - if ( globalStylesInUse ) { + if ( globalStylesInUse && ! isDistractionFree ) { showNotice(); } else { removeNotice( NOTICE_ID ); } return () => removeNotice( NOTICE_ID ); - }, [ globalStylesInUse, isSiteEditor, isPostEditor, removeNotice, showNotice ] ); + }, [ + globalStylesInUse, + isDistractionFree, + isSiteEditor, + isPostEditor, + removeNotice, + showNotice, + ] ); return null; } From 873bdac2d1798823b55ae75a10736cf779210c49 Mon Sep 17 00:00:00 2001 From: gogdzl <37049295+gogdzl@users.noreply.github.com> Date: Mon, 20 Jan 2025 06:50:55 -0300 Subject: [PATCH 120/420] CRM: Fix email invoices not sending (#41172) * Make the var invoice_id global * Add changelog * Initialize global var invoice_id * Update invoice_id param to use global var --- .../crm/changelog/fix-crm-3523-email-invoices-not-sending | 4 ++++ projects/plugins/crm/js/ZeroBSCRM.admin.invoicebuilder.js | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/crm/changelog/fix-crm-3523-email-invoices-not-sending diff --git a/projects/plugins/crm/changelog/fix-crm-3523-email-invoices-not-sending b/projects/plugins/crm/changelog/fix-crm-3523-email-invoices-not-sending new file mode 100644 index 0000000000000..870cd956beaed --- /dev/null +++ b/projects/plugins/crm/changelog/fix-crm-3523-email-invoices-not-sending @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Invoices: Fix bug introduced in 6.5.0 that prevented email invoices from being sent. diff --git a/projects/plugins/crm/js/ZeroBSCRM.admin.invoicebuilder.js b/projects/plugins/crm/js/ZeroBSCRM.admin.invoicebuilder.js index 3591b68266f0e..f2af1cacf2d70 100644 --- a/projects/plugins/crm/js/ZeroBSCRM.admin.invoicebuilder.js +++ b/projects/plugins/crm/js/ZeroBSCRM.admin.invoicebuilder.js @@ -22,6 +22,7 @@ window.zbs_invoice = false; // stores data of this inv (post init) window.zbs_tax = false; // ? window.zbs_tax_table = false; // stores tax table window.zbsInvBlocker = false; // this is a blocker... ctrl F it +window.invoice_id = 0; // ======================================================================== // ======= /Globals @@ -41,10 +42,10 @@ jQuery( function () { // but DAL3.0 should return the next available ID and reserve it? // WH - how do we handle the case where YOU and I make a new invoice (same time) // we fill it in, and the ID is the same - won't we have a race condition here? - const invoice_id = jQuery( '.zbs_invoice_html_canvas' ).data( 'invid' ); + window.invoice_id = jQuery( '.zbs_invoice_html_canvas' ).data( 'invid' ); //draw the invoice HTML UI (v2.98) start by drawing the data from the DB (drawing / getting) - zbscrm_JS_retrieve_invoice_data( invoice_id ); + zbscrm_JS_retrieve_invoice_data( window.invoice_id ); // hack for weird tax bug if ( jQuery( '#invoice_tax_total' ).val() > 0 ) { From b816b8e07288ca98968006bcb8178d30527c9920 Mon Sep 17 00:00:00 2001 From: Francesco Bigiarini Date: Mon, 20 Jan 2025 12:12:52 +0100 Subject: [PATCH 121/420] Fix Jetpack heartbeat deactivation jobs cleanup (#41117) * Add heartbeat deactivation on site disconnection * changelog --- .../changelog/fix-jetpack-deactivation-jobs-cleanup | 4 ++++ projects/packages/connection/src/class-manager.php | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 projects/packages/connection/changelog/fix-jetpack-deactivation-jobs-cleanup diff --git a/projects/packages/connection/changelog/fix-jetpack-deactivation-jobs-cleanup b/projects/packages/connection/changelog/fix-jetpack-deactivation-jobs-cleanup new file mode 100644 index 0000000000000..13db2b7dcfe71 --- /dev/null +++ b/projects/packages/connection/changelog/fix-jetpack-deactivation-jobs-cleanup @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Add heartbeat deactivation on site disconnection. diff --git a/projects/packages/connection/src/class-manager.php b/projects/packages/connection/src/class-manager.php index 5a9a473b0eeb4..e5065b939c4da 100644 --- a/projects/packages/connection/src/class-manager.php +++ b/projects/packages/connection/src/class-manager.php @@ -2190,6 +2190,8 @@ public function disconnect_site( $disconnect_wpcom = true, $ignore_connected_plu ( new Nonce_Handler() )->clean_all(); + Heartbeat::init()->deactivate(); + /** * Fires before a site is disconnected. * From 485f5e9baa689e7393f7226d7be8938395495fc8 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Mon, 20 Jan 2025 04:47:23 -0800 Subject: [PATCH 122/420] Forms block: fix checkbox field italics+bold rendering (#41170) --- .../forms/changelog/fix-form-checkbox-italcs-rendering | 5 +++++ .../forms/src/contact-form/class-contact-form-field.php | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-form-checkbox-italcs-rendering diff --git a/projects/packages/forms/changelog/fix-form-checkbox-italcs-rendering b/projects/packages/forms/changelog/fix-form-checkbox-italcs-rendering new file mode 100644 index 0000000000000..4e4d6c8cd4a9d --- /dev/null +++ b/projects/packages/forms/changelog/fix-form-checkbox-italcs-rendering @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Minor fix + + diff --git a/projects/packages/forms/src/contact-form/class-contact-form-field.php b/projects/packages/forms/src/contact-form/class-contact-form-field.php index cb234ac6a2889..239935f75c16d 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-field.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-field.php @@ -693,7 +693,7 @@ public function render_checkbox_field( $id, $label, $value, $class, $required, $ $field = "
    "; $field .= " \n"; $field .= "\n"; $field .= "
    \n"; $field .= '
    '; @@ -717,7 +717,7 @@ private function render_consent_field( $id, $class ) { } else { $field .= "\t\t \n"; } - $field .= "\t\t" . esc_html( $consent_message ); + $field .= "\t\t" . wp_kses_post( $consent_message ); $field .= "\n"; $field .= "
    \n"; return $field; From 235e678192be2e8c126f199c281068494837d3de Mon Sep 17 00:00:00 2001 From: Mike Watson Date: Mon, 20 Jan 2025 09:16:01 -0500 Subject: [PATCH 123/420] Jetpack AI: Updates / clean up to Jetpack AI assistant sidebar (#41161) * Updates / clean up to Jetpack AI assistant sidebar * Buttons now have 100% width and are 40px tall * Updated text in various places * Added message that displays when a post has no content * Cleaned up spacing in a few places * Changed color of some text * Replacing custom warning with Notice component, move score below write brief controls * Switching to use isEditedPostEmpty instead of usePostContent, Write Brief styling cleanup * changelog * Fixing typo --- .../update-jetpack-ai-sidebar-improvements | 10 ++ .../ai-assistant-plugin-sidebar/index.tsx | 48 ++++++---- .../ai-assistant-plugin-sidebar/style.scss | 27 ++++++ .../components/ai-image/featured-image.tsx | 5 +- .../components/breve/breve.scss | 13 ++- .../components/breve/controls.tsx | 91 +++++++++++-------- .../components/feedback/index.tsx | 5 +- .../components/title-optimization/index.tsx | 11 ++- 8 files changed, 139 insertions(+), 71 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/update-jetpack-ai-sidebar-improvements diff --git a/projects/plugins/jetpack/changelog/update-jetpack-ai-sidebar-improvements b/projects/plugins/jetpack/changelog/update-jetpack-ai-sidebar-improvements new file mode 100644 index 0000000000000..fc2fc21eaf0ff --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-jetpack-ai-sidebar-improvements @@ -0,0 +1,10 @@ +Significance: patch +Type: other + +Jetpack AI: Updates / clean up to Jetpack AI assistant sidebar +* Buttons now have 100% width and are 40px tall +* Updated text in various places +* Added message that displays when a post has no content +* Cleaned up spacing in a few places +* Changed color of some text +* Write Brief checkboxes are hidden by toggle now diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx index 221a2f509c3b9..e33d12ba4a753 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx @@ -2,7 +2,7 @@ * External dependencies */ import { JetpackEditorPanelLogo, useAnalytics } from '@automattic/jetpack-shared-extension-utils'; -import { PanelBody, PanelRow, BaseControl, ExternalLink } from '@wordpress/components'; +import { PanelBody, PanelRow, BaseControl, ExternalLink, Notice } from '@wordpress/components'; import { store as coreStore } from '@wordpress/core-data'; import { useSelect } from '@wordpress/data'; import { PluginPrePublishPanel, PluginDocumentSettingPanel } from '@wordpress/edit-post'; @@ -81,6 +81,8 @@ const JetpackAndSettingsContent = ( { // return postTypeObject?.viewable; // }, [] ); + const isPostEmpty = useSelect( select => select( editorStore ).isEditedPostEmpty(), [] ); + const currentTitleOptimizationSectionLabel = __( 'Optimize Publishing', 'jetpack' ); const SEOTitleOptimizationSectionLabel = __( 'Optimize Title', 'jetpack' ); const titleOptimizationSectionLabel = isAITitleOptimizationKeywordsFeatureAvailable @@ -110,24 +112,25 @@ const JetpackAndSettingsContent = ( { ) } */ } + { isPostEmpty && ( + + + { __( 'The following features require content to work.', 'jetpack' ) } + + + ) } + { canWriteBriefBeEnabled() && isBreveAvailable && ( - { __( 'Write Brief with AI (BETA)', 'jetpack' ) } + { __( 'Write Brief (Beta)', 'jetpack' ) } ) } - - - { __( 'AI Feedback', 'jetpack' ) } - - - - { isAITitleOptimizationAvailable && ( @@ -136,16 +139,25 @@ const JetpackAndSettingsContent = ( { ) } + { isAIFeaturedImageAvailable && ( - { __( 'AI Featured Image', 'jetpack' ) } + { __( 'Get Featured Image', 'jetpack' ) } ) } + + + + { __( 'Get Feedback', 'jetpack' ) } + + + + { requireUpgrade && ! isUsagePanelAvailable && ( @@ -157,21 +169,21 @@ const JetpackAndSettingsContent = ( { ) } - - - { __( 'Provide feedback', 'jetpack' ) } + + + { __( 'Learn more about Jetpack AI', 'jetpack' ) } - - - { __( 'Learn more about Jetpack AI', 'jetpack' ) } + + + { __( 'Give us feedback', 'jetpack' ) } - + - { __( 'AI Guidelines', 'jetpack' ) } + { __( 'AI guidelines', 'jetpack' ) } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/style.scss index 202e5b6b9fd5a..6e9a89425957c 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/style.scss @@ -1,9 +1,23 @@ .jetpack-ai-sidebar__feature-section { margin-bottom: 2em; + display: block; p, p > * { text-wrap: pretty; } + + button { + width: 100%; + justify-content: center; + } +} + +.jetpack-ai-sidebar__external-link { + min-height: unset; +} + +.jetpack-ai-assistant__help-text { + color: #757575; } .jetpack-ai-feedback__label { @@ -14,6 +28,10 @@ } } +.jetpack-ai-sidebar__warning-content { + padding-bottom: 12px; +} + .jetpack-ai__feedback-button { .icon { width: 20px; @@ -22,3 +40,12 @@ margin-left: 4px; } } + +.jetpack-ai__write-brief-card { + width: 100%; + margin-bottom: 12px; + + p { + margin: 0; + } +} diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/featured-image.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/featured-image.tsx index fed823639ba92..e084c6afc0148 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/featured-image.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/featured-image.tsx @@ -374,12 +374,15 @@ export default function FeaturedImage( { { ( placement === PLACEMENT_JETPACK_SIDEBAR || placement === PLACEMENT_DOCUMENT_SETTINGS ) && ( <> -

    { __( 'Create and use an AI generated featured image for your post.', 'jetpack' ) }

    +

    + { __( 'Based on your post content.', 'jetpack' ) } +

    diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/breve.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/breve.scss index 46f584801f36e..51b9fe52584b0 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/breve.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/breve.scss @@ -1,8 +1,6 @@ @import './features/features.colors'; .jetpack-ai-proofread { - margin-bottom: 24px; - .components-checkbox-control { &__input:not( :disabled ) { @include features-colors( ( 'border-color' ) ); @@ -21,11 +19,6 @@ margin-bottom: 16px; } - &__grade-label { - color: #757575; - margin-left: 12px; - } - &__help-text { font-size: 12px; color: #757575; @@ -36,4 +29,10 @@ flex-direction: column; gap: 12px; } + + &__grade-level-container { + svg { + fill: #757575; + } + } } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/controls.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/controls.tsx index a96118fa95a66..8ef81d02cdef2 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/controls.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/controls.tsx @@ -8,10 +8,14 @@ import { CheckboxControl, ToggleControl, Tooltip, + Card, + CardBody, + CardFooter, } from '@wordpress/components'; import { compose, useDebounce } from '@wordpress/compose'; import { useDispatch, useSelect, withSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; +import { Icon, help } from '@wordpress/icons'; /** * External dependencies */ @@ -103,55 +107,64 @@ const Controls = ( { blocks, disabledFeatures } ) => { return (
    -

    { __( 'Improve your writing with AI.', 'jetpack' ) }

    - - -
    - { gradeLevel === null ? ( -

    - { __( 'Write to see your grade level.', 'jetpack' ) } -

    - ) : ( - -

    - { gradeLevel } - - { __( 'Reading grade score', 'jetpack' ) } - -

    -
    - ) } -
    -
    -
    +

    + { __( 'Visualize issues and apply AI suggestions.', 'jetpack' ) } +

    -
    - { features.map( - feature => - canWriteBriefFeatureBeEnabled( feature.config.name ) && ( - - ) - ) } -
    + + { isProofreadEnabled && ( + + + + +
    + { features.map( + feature => + canWriteBriefFeatureBeEnabled( feature.config.name ) && ( + + ) + ) } +
    +
    +
    + + { gradeLevel === null ? ( +

    + { __( 'Write to see your grade level.', 'jetpack' ) } +

    + ) : ( + <> +
    + { gradeLevel } { __( 'Reading grade score', 'jetpack' ) } +
    + + + + + ) } +
    +
    +
    + ) }
    ); }; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/feedback/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/feedback/index.tsx index a904ae4fa4297..15e523c3457fe 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/feedback/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/feedback/index.tsx @@ -98,12 +98,15 @@ export default function Feedback( {
    { suggestion }
    ) } -

    { __( 'Get feedback on content structure.', 'jetpack' ) }

    +

    + { __( 'Get feedback on content structure.', 'jetpack' ) } +

    diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/title-optimization/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/title-optimization/index.tsx index 39f4174238bd2..3d09305fe2303 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/title-optimization/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/title-optimization/index.tsx @@ -83,17 +83,17 @@ export default function TitleOptimization( { const SEOModalTitle = __( 'Improve title for SEO', 'jetpack' ); const modalTitle = isKeywordsFeatureAvailable ? SEOModalTitle : currentModalTitle; - const currentSidebarDescription = __( 'Use AI to optimize key details of your post.', 'jetpack' ); + const currentSidebarDescription = __( 'Based on your post content.', 'jetpack' ); const SEOSidebarDescription = __( - 'AI suggested titles based on your content and keywords for better SEO results.', + 'Based on your post content and SEO best practices.', 'jetpack' ); const sidebarDescription = isKeywordsFeatureAvailable ? SEOSidebarDescription : currentSidebarDescription; - const currentSidebarButtonLabel = __( 'Improve title', 'jetpack' ); - const SEOSidebarButtonLabel = __( 'Improve title for SEO', 'jetpack' ); + const currentSidebarButtonLabel = __( 'Generate title options', 'jetpack' ); + const SEOSidebarButtonLabel = __( 'Generate title options', 'jetpack' ); const sidebarButtonLabel = isKeywordsFeatureAvailable ? SEOSidebarButtonLabel : currentSidebarButtonLabel; @@ -228,12 +228,13 @@ export default function TitleOptimization( { return (
    -

    { sidebarDescription }

    +

    { sidebarDescription }

    From 7d53c4035aac0b00935873dbe9453bb84a7575bb Mon Sep 17 00:00:00 2001 From: Adnan Haque <3737780+haqadn@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:19:08 -0500 Subject: [PATCH 124/420] Boost: Update EXPLAIN.md for UI (#41169) * Update EXPLAIN.md * Update directory listing * Fix typos * add changelog --------- Co-authored-by: Peter Petrov --- .../boost/app/assets/src/js/EXPLAIN.md | 38 +++++++++---------- .../changelog/update-boost-ui-directory-docs | 5 +++ 2 files changed, 22 insertions(+), 21 deletions(-) create mode 100644 projects/plugins/boost/changelog/update-boost-ui-directory-docs diff --git a/projects/plugins/boost/app/assets/src/js/EXPLAIN.md b/projects/plugins/boost/app/assets/src/js/EXPLAIN.md index 6fc56848b142d..ccc472438b02f 100644 --- a/projects/plugins/boost/app/assets/src/js/EXPLAIN.md +++ b/projects/plugins/boost/app/assets/src/js/EXPLAIN.md @@ -1,8 +1,7 @@ ## Kebab Case -In Svelte, files were named using Pascal case. -As we migrate to React, we should migrate to Kebab case both in filenames and path names. Careful with case-sensitivity and committing to git. +We are using kebab-case both in filenames and path names. Be careful with case sensitivity and committing to git. ## React Component size @@ -17,16 +16,17 @@ It's fine to have multiple components in a single file, but if the file is getti ```bash / - index.ts # Public exports - - Main.svelte # The main component - lib/ # App-wide code - stores/ # App-wide stores - utils/ # Utility functions - features/ # Features - ui # generic, reusable components - back-button - - critical-css - - index.ts - - CriticalCssMeta.svelte + - ... + - critical-css # critical-css related components + - critical-css-meta # a component + - critical-css-meta.tsx # the main react component + - critical-css-meta.module.scss # styles related to this component - lib # Features have their own lib to keep it nice and clean - stores - critical-css-state.ts @@ -34,21 +34,23 @@ It's fine to have multiple components in a single file, but if the file is getti - ... - pages/ # Pages (a.k.a. routes) - critical-css-advanced - - CriticalCssAdvanced.svelte + - critical-css-advanced.tsx # a component that represents a page in the UI. - purchase-success - - purchase-success.tsx # react is kebab case now - - p2, etc. + - purchase-success.tsx + - p2 + - ... - layout/ # Global layout components - header - footer - - wrapper, etc. + - wrapper + - ... ``` -* `Main.svelte` and `index.ts` - The entry files for the app. `index.ts` is compiled into `/assets/dist/jetpack-boost.js` -* `features/` - Most of the app's code goes here. Every feature should be placed in it's own directory. -* `lib/` - Any code that's not Svelte or React. This includes utility functions, constants, stores, etc. - * `lib/stores/` - DataSync stores and their derivatives. In React this is probably going to be replaced with `lib/hooks`. -* `pages/` - The pages of the app. Each page should be placed in it's own directory. +* `index.tsx` and `main.tsx` - The entry files for the app. `main.tsx` has the router. +* `features/` - Most of the app's code goes here. Every feature should be placed in its own directory. +* `lib/` - Any generic code that is not directly tied to specific components. + * `lib/stores/` - Some shared hooks. +* `pages/` - The pages of the app. Each page should be placed in its own directory. * `layout/` - Global layout components. These are components that are used in multiple pages, such as the header, footer, etc. ### Feature Structure @@ -72,9 +74,3 @@ Every feature can be either a simple component like `my-feature/my-feature.tsx` - stores # Stores for this feature - some-store.ts ``` - - - -### Private & Public interfaces - -// TODO diff --git a/projects/plugins/boost/changelog/update-boost-ui-directory-docs b/projects/plugins/boost/changelog/update-boost-ui-directory-docs new file mode 100644 index 0000000000000..c91b38182afb5 --- /dev/null +++ b/projects/plugins/boost/changelog/update-boost-ui-directory-docs @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Make sure Boost UI app directory docs are up-to-date. + + From 8b3b555c93de2028f3b3dc0f3fed45a1316421cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donncha=20=C3=93=20Caoimh?= <5656673+donnchawp@users.noreply.github.com> Date: Mon, 20 Jan 2025 15:11:14 +0000 Subject: [PATCH 125/420] Boost: Add the success ratios to the cloud css payload (#41091) * Add the success ratios to the cloud css payload * changelog --- .../modules/optimizations/cloud-css/Cloud_CSS.php | 13 +++++++++---- .../boost/changelog/update-boost-success-ratio | 4 ++++ 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 projects/plugins/boost/changelog/update-boost-success-ratio diff --git a/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php b/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php index c522d344c763d..5158e7b7c3827 100644 --- a/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php +++ b/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php @@ -137,15 +137,20 @@ public function display_critical_css() { * with a specific post. */ public function generate_cloud_css( $reason, $providers = array() ) { - $grouped_urls = array(); + $grouped_urls = array(); + $grouped_ratios = array(); foreach ( $providers as $source ) { - $provider = $source['key']; - $grouped_urls[ $provider ] = $source['urls']; + $provider = $source['key']; + $grouped_urls[ $provider ] = $source['urls']; + $grouped_ratios[ $provider ] = $source['success_ratio']; } // Send the request to the Cloud. - $payload = array( 'providers' => $grouped_urls ); + $payload = array( + 'providers' => $grouped_urls, + 'successRatios' => $grouped_ratios, + ); $payload['requestId'] = md5( wp_json_encode( $payload ) . time() ); $payload['reason'] = $reason; return Boost_API::post( 'cloud-css', $payload ); diff --git a/projects/plugins/boost/changelog/update-boost-success-ratio b/projects/plugins/boost/changelog/update-boost-success-ratio new file mode 100644 index 0000000000000..9a8a25f47ab4b --- /dev/null +++ b/projects/plugins/boost/changelog/update-boost-success-ratio @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Cloud CSS: Added the success ratio required for Cloud CSS to succeed From d2c7b02f9ccf51c7390e0aa36ae1f520377c2108 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:39:46 -0700 Subject: [PATCH 126/420] Phan: functionify and statusify `exit()` and `die()` (#41167) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * non-CRM: exit → exit( 0 ) * CRM: exit → exit( 0 ) * non-CRM: exit() → exit( 0 ) * CRM: exit() → exit( 0 ) * die → die(0) * Suppress invalid Phan error on valid tests * die() → die(0) * Add changelogs * Suppress unneeded suppression warnings on PHP 8.2 * Oops * Rework code to satisfy Phan bug * Remove redundant exits * Correct PHPDoc * Update baseline * Remove comments --- ...fix-functionify_and_statusify_exit_and_die | 4 + .../packages/analyzer/scripts/jetpack-svn.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../autoloader/src/CustomAutoloaderPlugin.php | 4 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../backup/src/class-jetpack-backup.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../class-nova-restaurant.php | 10 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../legacy/class-jetpack-ixr-client.php | 2 +- .../packages/connection/src/class-manager.php | 4 +- .../connection/src/class-partner-coupon.php | 2 +- .../connection/src/class-webhooks.php | 2 +- .../packages/connection/src/sso/class-sso.php | 12 +- .../src/webhooks/class-authorize-redirect.php | 8 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../forms/src/contact-form/class-admin.php | 8 +- .../class-contact-form-plugin.php | 4 +- .../src/contact-form/class-contact-form.php | 2 +- .../dashboard/class-dashboard-view-switch.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../src/features/coming-soon/coming-soon.php | 2 +- .../custom-css/csstidy/class.csstidy.php | 2 +- .../src/features/custom-css/custom-css.php | 2 +- .../random-redirect/random-redirect.php | 2 +- .../class-jetpack-wpcom-block-editor.php | 6 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../licensing/src/class-licensing.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../src/admin-menu/class-base-admin-menu.php | 4 +- .../src/admin-menu/class-wpcom-admin-menu.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../tests/php/fixtures/die.php | 1 + .../tests/php/fixtures/exit.php | 1 + ...fix-functionify_and_statusify_exit_and_die | 4 + .../src/dialog-template.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../publicize/src/class-keyring-helper.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../packages/search/src/class-settings.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../packages/status/src/class-modules.php | 4 +- ...fix-functionify_and_statusify_exit_and_die | 4 + projects/packages/sync/src/class-sender.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../src/tus/class-file-exception.php | 2 +- .../src/tus/class-transient-store.php | 2 +- .../src/tus/class-tus-abstract-cache.php | 2 +- .../src/tus/class-tus-date-utils.php | 2 +- .../videopress/src/tus/class-tus-file.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../class-blocked-login-page.php | 2 +- .../packages/waf/src/class-waf-runtime.php | 4 +- .../automattic-for-agencies-client.php | 4 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../src/admin/deactivation-dialog.php | 2 +- .../class-automattic-for-agencies-client.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + projects/plugins/backup/jetpack-backup.php | 4 +- ...fix-functionify_and_statusify_exit_and_die | 4 + projects/plugins/beta/jetpack-beta.php | 2 +- .../beta/src/admin/branch-card.template.php | 2 +- .../beta/src/admin/exception.template.php | 2 +- .../beta/src/admin/header.template.php | 2 +- .../beta/src/admin/notice.template.php | 2 +- .../beta/src/admin/plugin-manage.template.php | 2 +- .../beta/src/admin/plugin-select.template.php | 2 +- .../admin/show-needed-updates.template.php | 2 +- .../beta/src/admin/toggles.template.php | 2 +- projects/plugins/beta/src/class-admin.php | 6 +- .../boost/app/admin/deactivation-dialog.php | 2 +- .../app/lib/minify/functions-helpers.php | 2 +- .../app/lib/minify/functions-service.php | 6 +- .../optimizations/critical-css/CSS_Proxy.php | 2 +- .../page-cache/pre-wordpress/Boost_Cache.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + projects/plugins/boost/jetpack-boost.php | 6 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../classic-theme-helper-plugin.php | 2 +- .../src/class-classic-theme-helper-plugin.php | 2 +- projects/plugins/crm/.phan/baseline.php | 2 +- projects/plugins/crm/ZeroBSCRM.php | 2 +- .../crm/admin/activation/before-you-go.php | 2 +- .../crm/admin/activation/welcome-to-jpcrm.php | 2 +- .../crm/admin/activation/wizard.ajax.php | 4 +- .../crm/admin/automations/main.page.php | 2 +- .../plugins/crm/admin/company/view.page.php | 2 +- .../crm/admin/contact/add-file.page.php | 2 +- .../crm/admin/contact/contact.ajax.php | 4 +- .../plugins/crm/admin/contact/view.page.php | 2 +- .../crm/admin/crm-resources/main.page.php | 2 +- .../crm/admin/dashboard/dashboard.ajax.php | 2 +- .../plugins/crm/admin/dashboard/main.page.php | 2 +- .../first-use-dashboard-woo.block.php | 2 +- .../partials/first-use-dashboard.block.php | 2 +- .../plugins/crm/admin/email/email.ajax.php | 16 +- .../plugins/crm/admin/email/main.page.php | 2 +- .../plugins/crm/admin/export/main.page.php | 2 +- .../crm/admin/settings/api-settings.page.php | 2 +- .../crm/admin/settings/business-info.page.php | 2 +- .../crm/admin/settings/client-portal.page.php | 2 +- .../crm/admin/settings/companies.page.php | 2 +- .../crm/admin/settings/custom-fields.page.php | 2 +- .../crm/admin/settings/field-options.page.php | 2 +- .../crm/admin/settings/field-sorts.page.php | 2 +- .../plugins/crm/admin/settings/forms.page.php | 2 +- .../crm/admin/settings/general.page.php | 2 +- .../crm/admin/settings/invoicing.page.php | 2 +- .../crm/admin/settings/license.page.php | 2 +- .../crm/admin/settings/list-view.page.php | 2 +- .../crm/admin/settings/locale.page.php | 2 +- .../crm/admin/settings/mail-delivery.ajax.php | 32 +-- .../crm/admin/settings/mail-delivery.page.php | 2 +- .../plugins/crm/admin/settings/mail.page.php | 2 +- .../plugins/crm/admin/settings/main.page.php | 2 +- .../settings/oauth-connections-edit.page.php | 2 +- .../admin/settings/oauth-connections.page.php | 2 +- .../admin/settings/partials/menu.block.php | 2 +- .../template-variant-setting.block.php | 2 +- .../admin/settings/partials/title.block.php | 2 +- .../crm/admin/settings/quotes.page.php | 2 +- .../plugins/crm/admin/settings/tax.page.php | 2 +- .../crm/admin/settings/transactions.page.php | 2 +- .../plugins/crm/admin/support/main.page.php | 2 +- .../plugins/crm/admin/system/main.page.php | 2 +- .../crm/admin/system/partials/title.block.php | 2 +- .../crm/admin/tags/tag-manager.page.php | 2 +- .../crm/admin/user-profile/main.page.php | 2 +- .../crm/admin/user-profile/reminders.page.php | 2 +- .../admin/user-profile/user-profile.page.php | 2 +- projects/plugins/crm/api/companies.php | 2 +- projects/plugins/crm/api/create_company.php | 4 +- projects/plugins/crm/api/create_customer.php | 6 +- projects/plugins/crm/api/create_event.php | 2 +- .../plugins/crm/api/create_transaction.php | 6 +- projects/plugins/crm/api/customer_search.php | 2 +- projects/plugins/crm/api/customers.php | 2 +- projects/plugins/crm/api/events.php | 2 +- projects/plugins/crm/api/invoices.php | 2 +- projects/plugins/crm/api/quotes.php | 2 +- projects/plugins/crm/api/status.php | 2 +- projects/plugins/crm/api/transactions.php | 2 +- projects/plugins/crm/api/webhook.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../plugins/crm/includes/ZeroBSCRM.AJAX.php | 196 +++++++++--------- .../plugins/crm/includes/ZeroBSCRM.API.php | 2 +- .../crm/includes/ZeroBSCRM.Actions.php | 2 +- .../includes/ZeroBSCRM.AdminPages.Checks.php | 2 +- .../crm/includes/ZeroBSCRM.AdminPages.php | 2 +- .../crm/includes/ZeroBSCRM.AdminStyling.php | 18 +- .../crm/includes/ZeroBSCRM.CSVImporter.php | 4 +- .../crm/includes/ZeroBSCRM.Config.Init.php | 2 +- .../crm/includes/ZeroBSCRM.Core.DateTime.php | 2 +- .../includes/ZeroBSCRM.Core.Extensions.php | 2 +- .../crm/includes/ZeroBSCRM.Core.License.php | 21 +- .../includes/ZeroBSCRM.Core.Localisation.php | 2 +- .../crm/includes/ZeroBSCRM.Core.Menus.Top.php | 2 +- .../crm/includes/ZeroBSCRM.Core.Menus.WP.php | 3 +- .../ZeroBSCRM.Core.Page.Controller.php | 2 +- .../plugins/crm/includes/ZeroBSCRM.Core.php | 34 ++- .../includes/ZeroBSCRM.CustomerFilters.php | 6 +- .../crm/includes/ZeroBSCRM.DAL.Fields.php | 2 +- .../crm/includes/ZeroBSCRM.DAL2.Mail.php | 2 +- .../crm/includes/ZeroBSCRM.DAL3.Export.php | 4 +- .../crm/includes/ZeroBSCRM.DAL3.Fields.php | 2 +- .../crm/includes/ZeroBSCRM.DAL3.Helpers.php | 8 +- .../includes/ZeroBSCRM.DAL3.Obj.Addresses.php | 8 +- .../includes/ZeroBSCRM.DAL3.Obj.Companies.php | 8 +- .../includes/ZeroBSCRM.DAL3.Obj.Contacts.php | 8 +- .../ZeroBSCRM.DAL3.Obj.EventReminders.php | 8 +- .../includes/ZeroBSCRM.DAL3.Obj.Events.php | 8 +- .../crm/includes/ZeroBSCRM.DAL3.Obj.Forms.php | 8 +- .../includes/ZeroBSCRM.DAL3.Obj.Invoices.php | 8 +- .../includes/ZeroBSCRM.DAL3.Obj.LineItems.php | 8 +- .../crm/includes/ZeroBSCRM.DAL3.Obj.Logs.php | 8 +- .../ZeroBSCRM.DAL3.Obj.QuoteTemplates.php | 2 +- .../includes/ZeroBSCRM.DAL3.Obj.Quotes.php | 2 +- .../includes/ZeroBSCRM.DAL3.Obj.Segments.php | 2 +- .../ZeroBSCRM.DAL3.Obj.Transactions.php | 8 +- .../includes/ZeroBSCRM.DAL3.ObjectLayer.php | 8 +- .../plugins/crm/includes/ZeroBSCRM.DAL3.php | 8 +- .../crm/includes/ZeroBSCRM.DashboardBoxes.php | 8 +- .../includes/ZeroBSCRM.DataIOValidation.php | 8 +- .../crm/includes/ZeroBSCRM.Database.php | 8 +- .../plugins/crm/includes/ZeroBSCRM.Delete.php | 10 +- .../crm/includes/ZeroBSCRM.Edit.Segment.php | 10 +- .../plugins/crm/includes/ZeroBSCRM.Edit.php | 11 +- .../crm/includes/ZeroBSCRM.ErrorCodes.php | 11 +- .../includes/ZeroBSCRM.ExternalSources.php | 8 +- .../crm/includes/ZeroBSCRM.FileUploads.php | 8 +- .../crm/includes/ZeroBSCRM.FormatHelpers.php | 10 +- .../plugins/crm/includes/ZeroBSCRM.Forms.php | 10 +- .../crm/includes/ZeroBSCRM.GeneralFuncs.php | 16 +- .../includes/ZeroBSCRM.IntegrationFuncs.php | 12 +- .../includes/ZeroBSCRM.InternalAutomator.php | 8 +- .../ZeroBSCRM.InternalAutomatorRecipes.php | 8 +- .../crm/includes/ZeroBSCRM.Inventory.php | 8 +- .../crm/includes/ZeroBSCRM.InvoiceBuilder.php | 72 +++---- .../crm/includes/ZeroBSCRM.Jetpack.php | 2 +- .../crm/includes/ZeroBSCRM.List.Columns.php | 8 +- .../crm/includes/ZeroBSCRM.List.Tasks.php | 2 +- .../crm/includes/ZeroBSCRM.List.Views.php | 2 +- .../plugins/crm/includes/ZeroBSCRM.List.php | 8 +- .../crm/includes/ZeroBSCRM.MailTracking.php | 10 +- .../crm/includes/ZeroBSCRM.MetaBox.php | 10 +- .../ZeroBSCRM.MetaBoxes.SubmitBoxes.php | 15 +- .../ZeroBSCRM.MetaBoxes3.Companies.php | 13 +- .../ZeroBSCRM.MetaBoxes3.Contacts.php | 8 +- .../ZeroBSCRM.MetaBoxes3.ExternalSources.php | 16 +- .../includes/ZeroBSCRM.MetaBoxes3.Forms.php | 17 +- .../ZeroBSCRM.MetaBoxes3.Invoices.php | 7 +- .../includes/ZeroBSCRM.MetaBoxes3.Logs.php | 11 +- .../ZeroBSCRM.MetaBoxes3.Ownership.php | 4 +- .../ZeroBSCRM.MetaBoxes3.QuoteTemplates.php | 34 +-- .../includes/ZeroBSCRM.MetaBoxes3.Quotes.php | 17 +- .../ZeroBSCRM.MetaBoxes3.TagManager.php | 8 +- .../includes/ZeroBSCRM.MetaBoxes3.Tags.php | 8 +- .../includes/ZeroBSCRM.MetaBoxes3.Tasks.php | 6 +- .../ZeroBSCRM.MetaBoxes3.Transactions.php | 18 +- .../crm/includes/ZeroBSCRM.Migrations.php | 10 +- .../crm/includes/ZeroBSCRM.NotifyMe.php | 10 +- .../crm/includes/ZeroBSCRM.OnboardMe.php | 10 +- .../crm/includes/ZeroBSCRM.Permissions.php | 4 +- ...eroBSCRM.PluginUpdates.ImminentRelease.php | 8 +- .../crm/includes/ZeroBSCRM.PluginUpdates.php | 11 +- .../crm/includes/ZeroBSCRM.QuoteBuilder.php | 10 +- .../plugins/crm/includes/ZeroBSCRM.REST.php | 8 +- .../crm/includes/ZeroBSCRM.ScreenOptions.php | 11 +- .../plugins/crm/includes/ZeroBSCRM.Social.php | 14 +- .../crm/includes/ZeroBSCRM.SystemChecks.php | 8 +- .../crm/includes/ZeroBSCRM.TagManager.php | 8 +- .../crm/includes/ZeroBSCRM.WYSIWYGButtons.php | 4 +- .../crm/includes/class-crm-exception.php | 2 +- .../crm/includes/class-crm-modules.php | 4 +- .../plugins/crm/includes/class-encryption.php | 2 +- .../crm/includes/class-endpoint-listener.php | 2 +- .../plugins/crm/includes/class-learn-menu.php | 2 +- .../class-missing-settings-exception.php | 2 +- .../crm/includes/class-oauth-handler.php | 16 +- .../crm/includes/class-package-installer.php | 2 +- .../class-segment-condition-exception.php | 2 +- .../crm/includes/class-segment-condition.php | 8 +- .../class-wordpress-user-integration.php | 2 +- .../crm/includes/jpcrm-dependency-checker.php | 2 +- .../crm/includes/jpcrm-feature-sniffer.php | 3 +- projects/plugins/crm/includes/jpcrm-fonts.php | 2 +- .../plugins/crm/includes/jpcrm-language.php | 15 +- .../crm/includes/jpcrm-localisation.php | 2 +- .../crm/includes/jpcrm-mail-templating.php | 96 ++++----- .../crm/includes/jpcrm-rewrite-rules.php | 2 +- .../crm/includes/jpcrm-segment-conditions.php | 2 +- .../jpcrm-templating-placeholders.php | 8 +- .../plugins/crm/includes/jpcrm-templating.php | 8 +- .../automations/jpcrm-automations-init.php | 2 +- .../crm/modules/givewp/class-jpcrm-givewp.php | 2 +- .../crm/modules/givewp/jpcrm-givewp-init.php | 2 +- .../admin/mailpoet-hub/main.page.ajax.php | 2 +- .../mailpoet/admin/mailpoet-hub/main.page.php | 9 +- .../mailpoet/admin/settings/main.page.php | 2 +- .../mailpoet/admin/settings/router.page.php | 2 +- .../class-mailpoet-admin-integration.php | 2 +- .../class-mailpoet-background-sync-job.php | 2 +- .../class-mailpoet-background-sync.php | 4 +- ...ss-mailpoet-export-segment-to-mailpoet.php | 34 +-- .../class-mailpoet-segment-conditions.php | 2 +- .../mailpoet/includes/class-mailpoet.php | 2 +- .../includes/jpcrm-mailpoet-contact-tabs.php | 2 +- ...-segment-condition-mailpoet-subscriber.php | 2 +- .../modules/mailpoet/jpcrm-mailpoet-init.php | 2 +- .../portal/class-client-portal-endpoint.php | 2 +- .../class-client-portal-render-helper.php | 4 +- .../portal/class-client-portal-router.php | 2 +- .../modules/portal/class-client-portal.php | 4 +- .../endpoints/class-cancel-endpoint.php | 2 +- .../endpoints/class-dashboard-endpoint.php | 2 +- .../endpoints/class-details-endpoint.php | 2 +- .../endpoints/class-invoices-endpoint.php | 2 +- .../endpoints/class-payments-endpoint.php | 2 +- .../endpoints/class-quotes-endpoint.php | 2 +- .../endpoints/class-single-quote-endpoint.php | 2 +- .../endpoints/class-thanks-endpoint.php | 2 +- .../endpoints/class-transactions-endpoint.php | 2 +- .../portal/jpcrm-compatibility-functions.php | 2 +- .../crm/modules/portal/jpcrm-portal-init.php | 2 +- .../modules/portal/templates/cancelled.php | 2 +- .../modules/portal/templates/dashboard.php | 4 +- .../crm/modules/portal/templates/details.php | 2 +- .../crm/modules/portal/templates/disabled.php | 4 +- .../crm/modules/portal/templates/invoices.php | 11 +- .../crm/modules/portal/templates/login.php | 6 +- .../crm/modules/portal/templates/quotes.php | 5 +- .../portal/templates/single-invoice.php | 2 +- .../modules/portal/templates/single-quote.php | 4 +- .../modules/portal/templates/thank-you.php | 4 +- .../modules/portal/templates/transactions.php | 2 +- .../admin/settings/connection_edit.page.php | 5 +- .../admin/settings/connections.page.ajax.php | 2 +- .../admin/settings/connections.page.php | 2 +- .../woo-sync/admin/settings/main.page.php | 2 +- .../woo-sync/admin/settings/router.page.php | 2 +- .../admin/woo-sync-hub/main.page.ajax.php | 2 +- .../woo-sync/admin/woo-sync-hub/main.page.php | 9 +- .../class-woo-sync-background-sync-job.php | 4 +- .../class-woo-sync-background-sync.php | 4 +- .../class-woo-sync-my-account-integration.php | 2 +- .../class-woo-sync-segment-conditions.php | 2 +- .../class-woo-sync-woo-admin-integration.php | 2 +- .../woo-sync/includes/class-woo-sync.php | 4 +- .../includes/jpcrm-woo-sync-contact-tabs.php | 2 +- .../class-segment-condition-woo-customer.php | 2 +- ...lass-segment-condition-woo-order-count.php | 2 +- .../modules/woo-sync/jpcrm-woo-sync-init.php | 2 +- .../plugins/crm/public/forms/form-content.php | 4 +- .../plugins/crm/public/forms/form-naked.php | 4 +- .../plugins/crm/public/forms/form-simple.php | 4 +- .../src/onboarding-wizard/class-bootstrap.php | 2 +- ...s-rest-automation-workflows-controller.php | 2 +- .../v4/class-rest-base-controller.php | 2 +- .../v4/class-rest-base-objects-controller.php | 2 +- .../v4/class-rest-contacts-controller.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../modules/class-scan-helper.php | 10 +- .../class-broken-token-connection-errors.php | 2 +- .../jetpack/3rd-party/creative-mail.php | 4 +- .../jetpack/3rd-party/jetpack-backup.php | 4 +- .../jetpack/3rd-party/jetpack-boost.php | 4 +- .../plugins/jetpack/3rd-party/web-stories.php | 2 +- .../3rd-party/woocommerce-services.php | 4 +- .../admin-pages/class-jetpack-about-page.php | 2 +- .../admin-pages/class.jetpack-react-page.php | 4 +- .../lib/class.core-rest-api-endpoints.php | 2 +- .../class.jetpack-keyring-service-helper.php | 2 +- .../lib/core-api/load-wpcom-endpoints.php | 2 +- ...om-rest-api-v2-endpoint-external-media.php | 2 +- .../lib/debugger/class-jetpack-debugger.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../plugins/jetpack/class.jetpack-admin.php | 6 +- .../plugins/jetpack/class.jetpack-cli.php | 6 +- .../plugins/jetpack/class.jetpack-network.php | 8 +- projects/plugins/jetpack/class.jetpack.php | 24 +-- projects/plugins/jetpack/class.json-api.php | 10 +- .../jetpack/extensions/blocks/map/map.php | 2 +- .../class-sharing-source-block.php | 6 +- .../class-jetpack-mastodon-modal.php | 2 +- projects/plugins/jetpack/functions.global.php | 2 +- .../jetpack/modules/comments/comments.php | 8 +- .../plugins/jetpack/modules/contact-form.php | 2 +- .../modules/infinite-scroll/infinity.php | 2 +- .../modules/likes/jetpack-likes-settings.php | 2 +- .../plugins/jetpack/modules/plugin-search.php | 2 +- .../class.related-posts-customize.php | 2 +- .../related-posts/jetpack-related-posts.php | 2 +- .../services/class-jetpack-mastodon-modal.php | 2 +- .../modules/sharedaddy/sharing-sources.php | 8 +- .../jetpack/modules/sharedaddy/sharing.php | 8 +- projects/plugins/jetpack/modules/sitemaps.php | 2 +- .../jetpack/modules/sitemaps/sitemaps.php | 2 +- projects/plugins/jetpack/modules/stats.php | 10 +- .../plugins/jetpack/modules/subscriptions.php | 2 +- .../jetpack-user-content-link-redirection.php | 6 +- .../jetpack/modules/widgets/authors.php | 2 +- .../jetpack/modules/widgets/blog-stats.php | 2 +- .../class-jetpack-eu-cookie-law-widget.php | 2 +- .../jetpack/modules/widgets/flickr.php | 2 +- .../modules/widgets/google-translate.php | 2 +- .../jetpack/modules/widgets/my-community.php | 2 +- .../modules/widgets/simple-payments.php | 2 +- .../modules/widgets/wordpress-post-widget.php | 2 +- .../class-jetpack-woocommerce-analytics.php | 2 +- ...ck-woocommerce-analytics-checkout-flow.php | 2 +- ...tpack-woocommerce-analytics-my-account.php | 2 +- ...ss-jetpack-woocommerce-analytics-trait.php | 2 +- ...etpack-woocommerce-analytics-universal.php | 2 +- .../jetpack/modules/wordads/class-wordads.php | 2 +- projects/plugins/jetpack/uninstall.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + projects/plugins/protect/jetpack-protect.php | 4 +- .../protect/src/class-jetpack-protect.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + projects/plugins/search/jetpack-search.php | 2 +- .../src/class-jetpack-search-plugin.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + projects/plugins/social/jetpack-social.php | 2 +- .../social/src/class-jetpack-social.php | 4 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../starter-plugin/jetpack-starter-plugin.php | 4 +- .../src/class-jetpack-starter-plugin.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../super-cache/inc/delete-cache-button.php | 2 +- .../plugins/super-cache/wp-cache-phase2.php | 8 +- projects/plugins/super-cache/wp-cache.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../vaultpress/class.vaultpress-database.php | 2 +- .../class.vaultpress-filesystem.php | 4 +- .../vaultpress/class.vaultpress-hotfixes.php | 10 +- .../class.vaultpress-ixr-ssl-client.php | 2 +- projects/plugins/vaultpress/cron-tasks.php | 2 +- projects/plugins/vaultpress/uninstall.php | 2 +- projects/plugins/vaultpress/vaultpress.php | 26 +-- projects/plugins/vaultpress/vp-scanner.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../plugins/videopress/jetpack-videopress.php | 4 +- .../src/class-jetpack-videopress-plugin.php | 2 +- ...fix-functionify_and_statusify_exit_and_die | 4 + .../plugins/wpcomsh/custom-colors/colors.php | 8 +- .../feature-plugins/additional-css.php | 2 +- .../plugins/wpcomsh/feature-plugins/hooks.php | 2 +- .../wpcomsh/feature-plugins/woocommerce.php | 2 +- .../feature-plugins/wordpress-mods.php | 2 +- .../wpcomsh/private-site/private-site.php | 8 +- projects/plugins/wpcomsh/support-session.php | 6 +- .../site-migration-helpers.php | 2 +- .../plugins/e2e-beta-autoupdate-api.php | 2 +- 413 files changed, 927 insertions(+), 1288 deletions(-) create mode 100644 projects/packages/analyzer/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/autoloader/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/backup/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/classic-theme-helper/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/connection/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/forms/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/licensing/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/masterbar/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/patchwork-redefine-exit/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/plugin-deactivation/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/publicize/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/search/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/status/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/sync/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/videopress/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/packages/waf/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/backup/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/beta/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/boost/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/crm/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/debug-helper/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/jetpack/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/protect/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/search/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/social/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/starter-plugin/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/super-cache/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/vaultpress/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/videopress/changelog/fix-functionify_and_statusify_exit_and_die create mode 100644 projects/plugins/wpcomsh/changelog/fix-functionify_and_statusify_exit_and_die diff --git a/projects/packages/analyzer/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/analyzer/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/analyzer/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/analyzer/scripts/jetpack-svn.php b/projects/packages/analyzer/scripts/jetpack-svn.php index e212f5d27ca31..c30c806eb3282 100644 --- a/projects/packages/analyzer/scripts/jetpack-svn.php +++ b/projects/packages/analyzer/scripts/jetpack-svn.php @@ -30,7 +30,7 @@ if ( ! file_exists( $external_repo_path ) ) { echo "Need a path of another codebase to compare Jetpack changes against.\n"; - exit; + exit( 0 ); } // tmp paths. diff --git a/projects/packages/autoloader/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/autoloader/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/autoloader/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/autoloader/src/CustomAutoloaderPlugin.php b/projects/packages/autoloader/src/CustomAutoloaderPlugin.php index 9c88f8e5c7d54..6e29a0909e2cd 100644 --- a/projects/packages/autoloader/src/CustomAutoloaderPlugin.php +++ b/projects/packages/autoloader/src/CustomAutoloaderPlugin.php @@ -104,7 +104,7 @@ public function postAutoloadDump( Event $event ) { $this->io->writeError( "\nAn error occurred while generating the autoloader files:", true ); $this->io->writeError( 'The project\'s composer.json or composer environment set a non-default vendor directory.', true ); $this->io->writeError( 'The default composer vendor directory must be used.', true ); - exit(); + exit( 0 ); } $installationManager = $this->composer->getInstallationManager(); @@ -174,7 +174,7 @@ private function isRequiredByRoot() { if ( empty( $requires ) ) { $this->io->writeError( "\nThe package is not required and this should never happen?", true ); - exit(); + exit( 0 ); } foreach ( $requires as $require ) { diff --git a/projects/packages/backup/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/backup/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/backup/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/backup/src/class-jetpack-backup.php b/projects/packages/backup/src/class-jetpack-backup.php index 3468d85ea7310..ed421b362b407 100644 --- a/projects/packages/backup/src/class-jetpack-backup.php +++ b/projects/packages/backup/src/class-jetpack-backup.php @@ -12,7 +12,7 @@ namespace Automattic\Jetpack\Backup\V0005; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } use Automattic\Jetpack\Admin_UI\Admin_Menu; diff --git a/projects/packages/classic-theme-helper/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/classic-theme-helper/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/classic-theme-helper/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/classic-theme-helper/src/custom-post-types/class-nova-restaurant.php b/projects/packages/classic-theme-helper/src/custom-post-types/class-nova-restaurant.php index 924209b5503dc..e52ad2a010e9d 100644 --- a/projects/packages/classic-theme-helper/src/custom-post-types/class-nova-restaurant.php +++ b/projects/packages/classic-theme-helper/src/custom-post-types/class-nova-restaurant.php @@ -831,7 +831,7 @@ public function maybe_reorder_menu_items() { admin_url( 'edit.php' ) ); wp_safe_redirect( $redirect ); - exit; + exit( 0 ); } /** @@ -1036,7 +1036,7 @@ public function handle_menu_item_actions() { admin_url( 'edit.php' ) ); wp_safe_redirect( $redirect ); - exit; + exit( 0 ); } /** @@ -1138,7 +1138,7 @@ public function add_many_new_items_page_load() { && 'POST' === strtoupper( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) ) ) { $this->process_form_request(); - exit; + exit( 0 ); } $this->enqueue_many_items_scripts(); @@ -1234,11 +1234,11 @@ public function process_form_request() { endforeach; if ( $is_ajax ) { - exit; + exit( 0 ); } wp_safe_redirect( admin_url( 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE ) ); - exit; + exit( 0 ); } /** diff --git a/projects/packages/connection/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/connection/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/connection/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/connection/legacy/class-jetpack-ixr-client.php b/projects/packages/connection/legacy/class-jetpack-ixr-client.php index e262e8fa53fe0..a5bd0bcc8ab5f 100644 --- a/projects/packages/connection/legacy/class-jetpack-ixr-client.php +++ b/projects/packages/connection/legacy/class-jetpack-ixr-client.php @@ -16,7 +16,7 @@ * Disable direct access. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } if ( ! class_exists( IXR_Client::class ) ) { diff --git a/projects/packages/connection/src/class-manager.php b/projects/packages/connection/src/class-manager.php index e5065b939c4da..2e8e67b2eae82 100644 --- a/projects/packages/connection/src/class-manager.php +++ b/projects/packages/connection/src/class-manager.php @@ -317,7 +317,7 @@ public function alternate_xmlrpc() { nocache_headers(); $wp_xmlrpc_server->serve_request(); - exit; + exit( 0 ); } /** @@ -935,7 +935,7 @@ public function connect_user( $user_id = null, $redirect_url = null ) { // Using wp_redirect intentionally because we're redirecting outside. wp_redirect( $this->get_authorization_url( $user, $redirect_url ) ); // phpcs:ignore WordPress.Security.SafeRedirect - exit(); + exit( 0 ); } /** diff --git a/projects/packages/connection/src/class-partner-coupon.php b/projects/packages/connection/src/class-partner-coupon.php index ea24ffca44c75..0468223ed5369 100644 --- a/projects/packages/connection/src/class-partner-coupon.php +++ b/projects/packages/connection/src/class-partner-coupon.php @@ -15,7 +15,7 @@ * Disable direct access. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/packages/connection/src/class-webhooks.php b/projects/packages/connection/src/class-webhooks.php index 13b2f52ce8034..94fd3df6002f5 100644 --- a/projects/packages/connection/src/class-webhooks.php +++ b/projects/packages/connection/src/class-webhooks.php @@ -163,7 +163,7 @@ public function handle_authorize_redirect() { * @return never */ protected function do_exit() { - exit; + exit( 0 ); } /** diff --git a/projects/packages/connection/src/sso/class-sso.php b/projects/packages/connection/src/sso/class-sso.php index b1c69934c0d16..9abd8fba7ae7a 100644 --- a/projects/packages/connection/src/sso/class-sso.php +++ b/projects/packages/connection/src/sso/class-sso.php @@ -191,7 +191,7 @@ public function maybe_logout_user() { Helpers::delete_connection_for_user( $current_user->ID ); wp_logout(); wp_safe_redirect( wp_login_url() ); - exit; + exit( 0 ); } } @@ -491,7 +491,7 @@ public function login_init() { $tracking->record_user_event( 'sso_login_redirect_success' ); wp_safe_redirect( $sso_url ); - exit; + exit( 0 ); } } elseif ( Helpers::display_sso_form_for_action( $action ) ) { @@ -509,7 +509,7 @@ public function login_init() { $sso_url = $this->get_sso_url_or_die( $reauth ); $tracking->record_user_event( 'sso_login_redirect_bypass_success' ); wp_safe_redirect( $sso_url ); - exit; + exit( 0 ); } $this->display_sso_login_form(); @@ -969,7 +969,7 @@ public function handle_login() { admin_url() ) ); - exit; + exit( 0 ); } add_filter( 'allowed_redirect_hosts', array( Helpers::class, 'allowed_redirect_hosts' ) ); @@ -977,7 +977,7 @@ public function handle_login() { /** This filter is documented in core/src/wp-login.php */ apply_filters( 'login_redirect', $redirect_to, $_request_redirect_to, $user ) ); - exit; + exit( 0 ); } add_filter( 'jetpack_sso_default_to_sso_login', '__return_false' ); @@ -1207,7 +1207,7 @@ public function maybe_authorize_user_after_sso() { add_filter( 'allowed_redirect_hosts', array( Helpers::class, 'allowed_redirect_hosts' ) ); wp_safe_redirect( $connect_url ); - exit; + exit( 0 ); } /** diff --git a/projects/packages/connection/src/webhooks/class-authorize-redirect.php b/projects/packages/connection/src/webhooks/class-authorize-redirect.php index be6e886de4863..cc6c936e14852 100644 --- a/projects/packages/connection/src/webhooks/class-authorize-redirect.php +++ b/projects/packages/connection/src/webhooks/class-authorize-redirect.php @@ -63,7 +63,7 @@ function ( $domains ) { if ( ! $dest_url || ( 0 === stripos( $dest_url, 'https://jetpack.com/' ) && 0 === stripos( $dest_url, 'https://wordpress.com/' ) ) ) { // The destination URL is missing or invalid, nothing to do here. - exit; + exit( 0 ); } // The user is either already connected, or finished the connection process. @@ -73,12 +73,12 @@ function ( $domains ) { } wp_safe_redirect( $dest_url ); - exit; + exit( 0 ); } elseif ( ! empty( $_GET['done'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended // The user decided not to proceed with setting up the connection. wp_safe_redirect( Admin_Menu::get_top_level_menu_item_url() ); - exit; + exit( 0 ); } $redirect_args = array( @@ -94,7 +94,7 @@ function ( $domains ) { } wp_safe_redirect( $this->build_authorize_url( add_query_arg( $redirect_args, admin_url( 'admin.php' ) ) ) ); - exit; + exit( 0 ); } /** diff --git a/projects/packages/forms/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/forms/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/forms/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/forms/src/contact-form/class-admin.php b/projects/packages/forms/src/contact-form/class-admin.php index 0500a0c4e86e9..99c847bddf859 100644 --- a/projects/packages/forms/src/contact-form/class-admin.php +++ b/projects/packages/forms/src/contact-form/class-admin.php @@ -439,7 +439,7 @@ public function grunion_display_form_view() { if ( current_user_can( 'edit_posts' ) ) { Form_View::display(); } - exit; + exit( 0 ); } /** @@ -549,7 +549,7 @@ public function grunion_handle_bulk_spam() { if ( empty( $_REQUEST['post'] ) ) { wp_safe_redirect( wp_get_referer() ); - exit; + exit( 0 ); } $post_ids = array_map( 'intval', $_REQUEST['post'] ); @@ -583,7 +583,7 @@ public function grunion_handle_bulk_spam() { $redirect_url = add_query_arg( 'message', 'marked-spam', wp_get_referer() ); wp_safe_redirect( $redirect_url ); - exit; + exit( 0 ); } /** @@ -1255,7 +1255,7 @@ public function grunion_ajax_spam() { } echo $status_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- we're building the html to echo. - exit; + exit( 0 ); } /** diff --git a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php index 1b86a13b66628..043fa04f940a3 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php @@ -776,7 +776,7 @@ public function ajax_request() { ); } - die; + die( 0 ); } /** @@ -1828,7 +1828,7 @@ public function download_feedback_as_csv() { fclose( $output ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fclose $this->record_tracks_event( 'forms_export_responses', array( 'format' => 'csv' ) ); - exit(); + exit( 0 ); } /** diff --git a/projects/packages/forms/src/contact-form/class-contact-form.php b/projects/packages/forms/src/contact-form/class-contact-form.php index 5f820fa3c2440..889ad90d649cd 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form.php +++ b/projects/packages/forms/src/contact-form/class-contact-form.php @@ -1635,7 +1635,7 @@ public function process_submission() { // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect -- We intentially allow external redirects here. wp_redirect( $redirect ); - exit; + exit( 0 ); } /** diff --git a/projects/packages/forms/src/dashboard/class-dashboard-view-switch.php b/projects/packages/forms/src/dashboard/class-dashboard-view-switch.php index 43587d8b371c4..81fff93fef460 100644 --- a/projects/packages/forms/src/dashboard/class-dashboard-view-switch.php +++ b/projects/packages/forms/src/dashboard/class-dashboard-view-switch.php @@ -251,7 +251,7 @@ public function handle_preferred_view() { update_user_option( get_current_user_id(), 'jetpack_forms_admin_preferred_view', $view ); wp_safe_redirect( remove_query_arg( 'dashboard-preferred-view' ) ); - exit; + exit( 0 ); } /** diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/jetpack-mu-wpcom/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/coming-soon/coming-soon.php b/projects/packages/jetpack-mu-wpcom/src/features/coming-soon/coming-soon.php index 47f21b303e074..ed9272a6b9042 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/coming-soon/coming-soon.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/coming-soon/coming-soon.php @@ -236,6 +236,6 @@ function coming_soon_page( $template ) { } render_fallback_coming_soon_page(); - die(); + die( 0 ); } add_filter( 'template_include', __NAMESPACE__ . '\coming_soon_page' ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/custom-css/csstidy/class.csstidy.php b/projects/packages/jetpack-mu-wpcom/src/features/custom-css/csstidy/class.csstidy.php index cd2277c4df8c1..1caad77581409 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/custom-css/csstidy/class.csstidy.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/custom-css/csstidy/class.csstidy.php @@ -526,7 +526,7 @@ public function write( $filename, $formatted = false, $doctype = 'xhtml1.1', $ex $madedir = mkdir( 'temp' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_mkdir if ( ! $madedir ) { print 'Could not make directory "temp" in ' . __DIR__; - exit; + exit( 0 ); } } $handle = fopen( 'temp/' . $filename, 'w' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fopen diff --git a/projects/packages/jetpack-mu-wpcom/src/features/custom-css/custom-css.php b/projects/packages/jetpack-mu-wpcom/src/features/custom-css/custom-css.php index 425a55b548b6e..a1a36c1087048 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/custom-css/custom-css.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/custom-css/custom-css.php @@ -79,7 +79,7 @@ public static function print_linked_custom_css() { header( 'Content-type: text/css' ); header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + YEAR_IN_SECONDS ) . ' GMT' ); echo wp_get_custom_css(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - exit; + exit( 0 ); } /** diff --git a/projects/packages/jetpack-mu-wpcom/src/features/random-redirect/random-redirect.php b/projects/packages/jetpack-mu-wpcom/src/features/random-redirect/random-redirect.php index 16a6a35f0d17f..97af81c9a03c8 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/random-redirect/random-redirect.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/random-redirect/random-redirect.php @@ -96,7 +96,7 @@ function jetpack_matt_random_redirect() { // @phan-suppress-next-line PhanTypeMismatchArgument $permalink = get_permalink( $random_id ); wp_safe_redirect( $permalink ); - exit; + exit( 0 ); } add_action( 'template_redirect', 'jetpack_matt_random_redirect' ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor/class-jetpack-wpcom-block-editor.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor/class-jetpack-wpcom-block-editor.php index 36872a7dd31af..d39b8a616cf4c 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor/class-jetpack-wpcom-block-editor.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor/class-jetpack-wpcom-block-editor.php @@ -128,11 +128,11 @@ private function check_iframe_cookie_setting() { if ( isset( $_SERVER['REQUEST_URI'] ) && empty( $_GET['calypsoify_cookie_check'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended header( 'Location: ' . esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) . '&calypsoify_cookie_check=true' ) ); - exit; + exit( 0 ); } header( 'X-Frame-Options: DENY' ); - exit; + exit( 0 ); } /** @@ -210,7 +210,7 @@ public function add_login_html() { */ public function do_redirect() { wp_safe_redirect( $GLOBALS['redirect_to'] ); - exit; + exit( 0 ); } /** diff --git a/projects/packages/licensing/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/licensing/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/licensing/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/licensing/src/class-licensing.php b/projects/packages/licensing/src/class-licensing.php index d89edc59d5cdd..1cdaa4a83c189 100644 --- a/projects/packages/licensing/src/class-licensing.php +++ b/projects/packages/licensing/src/class-licensing.php @@ -353,7 +353,7 @@ public function handle_user_connected_redirect( $dest_url ) { && apply_filters( 'jetpack_connection_user_has_license', false, $licenses, $plugin_slug ) ) { wp_safe_redirect( '/wp-admin/admin.php?page=my-jetpack#/add-license' ); - exit; + exit( 0 ); } } } diff --git a/projects/packages/masterbar/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/masterbar/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/masterbar/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/masterbar/src/admin-menu/class-base-admin-menu.php b/projects/packages/masterbar/src/admin-menu/class-base-admin-menu.php index dfc5ccb3954c1..531ca47ceffa4 100644 --- a/projects/packages/masterbar/src/admin-menu/class-base-admin-menu.php +++ b/projects/packages/masterbar/src/admin-menu/class-base-admin-menu.php @@ -712,13 +712,13 @@ public function handle_preferred_view() { if ( isset( $menu_mappings[ $current_screen ] ) ) { // Using `wp_redirect` intentionally because we're redirecting to Calypso. wp_redirect( $menu_mappings[ $current_screen ] . $this->domain ); // phpcs:ignore WordPress.Security.SafeRedirect - exit; + exit( 0 ); } } elseif ( self::CLASSIC_VIEW === $preferred_view ) { // Removes the `preferred-view` param from the URL to avoid issues with // screens that don't expect this param to be present in the URL. wp_safe_redirect( remove_query_arg( 'preferred-view' ) ); - exit; + exit( 0 ); } // phpcs:enable WordPress.Security.NonceVerification } diff --git a/projects/packages/masterbar/src/admin-menu/class-wpcom-admin-menu.php b/projects/packages/masterbar/src/admin-menu/class-wpcom-admin-menu.php index 56584f224b298..d8b5c552d6d96 100644 --- a/projects/packages/masterbar/src/admin-menu/class-wpcom-admin-menu.php +++ b/projects/packages/masterbar/src/admin-menu/class-wpcom-admin-menu.php @@ -419,7 +419,7 @@ function ( $preference ) { update_user_attribute( $user_id, 'calypso_preferences', $value ); - die(); + die( 0 ); } /** diff --git a/projects/packages/patchwork-redefine-exit/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/patchwork-redefine-exit/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/patchwork-redefine-exit/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/patchwork-redefine-exit/tests/php/fixtures/die.php b/projects/packages/patchwork-redefine-exit/tests/php/fixtures/die.php index 6b1e45fe6aac4..b10a0bdcb2fa6 100644 --- a/projects/packages/patchwork-redefine-exit/tests/php/fixtures/die.php +++ b/projects/packages/patchwork-redefine-exit/tests/php/fixtures/die.php @@ -4,5 +4,6 @@ // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable die( $arg ); } else { + // @phan-suppress-current-line UnusedPluginSuppression @phan-suppress-next-line PhanParamTooFewInternal -- Phan bug with PHP 8.4: https://github.com/phan/phan/issues/4888 die(); } diff --git a/projects/packages/patchwork-redefine-exit/tests/php/fixtures/exit.php b/projects/packages/patchwork-redefine-exit/tests/php/fixtures/exit.php index 15845f6c1e78b..b24a3018cc118 100644 --- a/projects/packages/patchwork-redefine-exit/tests/php/fixtures/exit.php +++ b/projects/packages/patchwork-redefine-exit/tests/php/fixtures/exit.php @@ -4,5 +4,6 @@ // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable exit( $arg ); } else { + // @phan-suppress-current-line UnusedPluginSuppression @phan-suppress-next-line PhanParamTooFewInternal -- Phan bug with PHP 8.4: https://github.com/phan/phan/issues/4888 exit(); } diff --git a/projects/packages/plugin-deactivation/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/plugin-deactivation/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/plugin-deactivation/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/plugin-deactivation/src/dialog-template.php b/projects/packages/plugin-deactivation/src/dialog-template.php index 09e4ffb3b1e14..13ff876aa3903 100644 --- a/projects/packages/plugin-deactivation/src/dialog-template.php +++ b/projects/packages/plugin-deactivation/src/dialog-template.php @@ -8,7 +8,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; // Exit if accessed directly + exit( 0 ); // Exit if accessed directly } ?>
    diff --git a/projects/packages/publicize/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/publicize/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/publicize/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/publicize/src/class-keyring-helper.php b/projects/packages/publicize/src/class-keyring-helper.php index 31046b00e5031..d229ca5c040cd 100644 --- a/projects/packages/publicize/src/class-keyring-helper.php +++ b/projects/packages/publicize/src/class-keyring-helper.php @@ -246,7 +246,7 @@ public static function admin_page_load() { ) ); wp_redirect( $redirect ); // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect -- The API URL is an external URL and is filterable. - exit; + exit( 0 ); case 'completed': /* diff --git a/projects/packages/search/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/search/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/search/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/search/src/class-settings.php b/projects/packages/search/src/class-settings.php index 7e3317cff83d7..6522214fe6341 100644 --- a/projects/packages/search/src/class-settings.php +++ b/projects/packages/search/src/class-settings.php @@ -9,7 +9,7 @@ // Exit if file is accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/packages/status/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/status/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/status/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/status/src/class-modules.php b/projects/packages/status/src/class-modules.php index e5d49f333980e..80fb33b8ca08f 100644 --- a/projects/packages/status/src/class-modules.php +++ b/projects/packages/status/src/class-modules.php @@ -444,7 +444,7 @@ public function activate( $module, $exit = true, $redirect = true ) { if ( $deactivated ) { $state->state( 'deactivated_plugins', implode( ',', $deactivated ) ); wp_safe_redirect( add_query_arg( 'jetpack_restate', 1 ) ); - exit; + exit( 0 ); } } } @@ -485,7 +485,7 @@ public function activate( $module, $exit = true, $redirect = true ) { wp_safe_redirect( ( new Paths() )->admin_url( 'page=jetpack' ) ); } if ( $exit ) { - exit; + exit( 0 ); } return true; } diff --git a/projects/packages/sync/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/sync/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/sync/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/sync/src/class-sender.php b/projects/packages/sync/src/class-sender.php index 05dbb2e4575ce..c392451638751 100644 --- a/projects/packages/sync/src/class-sender.php +++ b/projects/packages/sync/src/class-sender.php @@ -430,7 +430,7 @@ public function do_dedicated_sync_and_exit( $do_real_exit = true ) { } if ( $do_real_exit ) { - exit; + exit( 0 ); } } diff --git a/projects/packages/videopress/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/videopress/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/videopress/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/videopress/src/tus/class-file-exception.php b/projects/packages/videopress/src/tus/class-file-exception.php index 6ae4ae5e14ece..7ec341e93a6b8 100644 --- a/projects/packages/videopress/src/tus/class-file-exception.php +++ b/projects/packages/videopress/src/tus/class-file-exception.php @@ -9,7 +9,7 @@ // Avoid direct calls to this file. if ( ! defined( 'ABSPATH' ) ) { - die(); + die( 0 ); } /** diff --git a/projects/packages/videopress/src/tus/class-transient-store.php b/projects/packages/videopress/src/tus/class-transient-store.php index 27d6381a0da3d..bd3f5ee93ef1c 100644 --- a/projects/packages/videopress/src/tus/class-transient-store.php +++ b/projects/packages/videopress/src/tus/class-transient-store.php @@ -9,7 +9,7 @@ // Avoid direct calls to this file. if ( ! defined( 'ABSPATH' ) ) { - die(); + die( 0 ); } /** diff --git a/projects/packages/videopress/src/tus/class-tus-abstract-cache.php b/projects/packages/videopress/src/tus/class-tus-abstract-cache.php index 975e56185936b..b8d60e799e74c 100644 --- a/projects/packages/videopress/src/tus/class-tus-abstract-cache.php +++ b/projects/packages/videopress/src/tus/class-tus-abstract-cache.php @@ -9,7 +9,7 @@ // Avoid direct calls to this file. if ( ! defined( 'ABSPATH' ) ) { - die(); + die( 0 ); } /** diff --git a/projects/packages/videopress/src/tus/class-tus-date-utils.php b/projects/packages/videopress/src/tus/class-tus-date-utils.php index 66265bb8461b2..0021e17181bf3 100644 --- a/projects/packages/videopress/src/tus/class-tus-date-utils.php +++ b/projects/packages/videopress/src/tus/class-tus-date-utils.php @@ -9,7 +9,7 @@ // Avoid direct calls to this file. if ( ! defined( 'ABSPATH' ) ) { - die(); + die( 0 ); } /** diff --git a/projects/packages/videopress/src/tus/class-tus-file.php b/projects/packages/videopress/src/tus/class-tus-file.php index 115c281cc7522..d1453fa7c78e5 100644 --- a/projects/packages/videopress/src/tus/class-tus-file.php +++ b/projects/packages/videopress/src/tus/class-tus-file.php @@ -11,7 +11,7 @@ // Avoid direct calls to this file. if ( ! defined( 'ABSPATH' ) ) { - die(); + die( 0 ); } /** diff --git a/projects/packages/waf/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/waf/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/packages/waf/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/waf/src/brute-force-protection/class-blocked-login-page.php b/projects/packages/waf/src/brute-force-protection/class-blocked-login-page.php index 90976bbdca82f..384b0d87b51ef 100644 --- a/projects/packages/waf/src/brute-force-protection/class-blocked-login-page.php +++ b/projects/packages/waf/src/brute-force-protection/class-blocked-login-page.php @@ -769,6 +769,6 @@ public function display_page( $title, $message, $back_button = false, $recovery_ $k, diff --git a/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php b/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php index 376c956ceeafa..4a49b8dc2f714 100644 --- a/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php +++ b/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php @@ -30,7 +30,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } define( 'AUTOMATTIC_FOR_AGENCIES_CLIENT_DIR', plugin_dir_path( __FILE__ ) ); @@ -110,7 +110,7 @@ function jetpack_starter_plugin_activation( $plugin ) { ( new \Automattic\Jetpack\Paths() )->is_current_request_activating_plugin_from_plugins_screen( AUTOMATTIC_FOR_AGENCIES_CLIENT_ROOT_FILE_RELATIVE_PATH ) ) { wp_safe_redirect( esc_url( admin_url( 'options-general.php?page=' . AUTOMATTIC_FOR_AGENCIES_CLIENT_SLUG ) ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/automattic-for-agencies-client/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/automattic-for-agencies-client/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/automattic-for-agencies-client/src/admin/deactivation-dialog.php b/projects/plugins/automattic-for-agencies-client/src/admin/deactivation-dialog.php index c38b8530d2d5f..9efb699acf6dc 100644 --- a/projects/plugins/automattic-for-agencies-client/src/admin/deactivation-dialog.php +++ b/projects/plugins/automattic-for-agencies-client/src/admin/deactivation-dialog.php @@ -8,7 +8,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; // Exit if accessed directly + exit( 0 ); // Exit if accessed directly } ?>
    diff --git a/projects/plugins/automattic-for-agencies-client/src/class-automattic-for-agencies-client.php b/projects/plugins/automattic-for-agencies-client/src/class-automattic-for-agencies-client.php index a03e498e44c39..2ce6571b1aa48 100644 --- a/projects/plugins/automattic-for-agencies-client/src/class-automattic-for-agencies-client.php +++ b/projects/plugins/automattic-for-agencies-client/src/class-automattic-for-agencies-client.php @@ -6,7 +6,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } use Automattic\Jetpack\Assets; diff --git a/projects/plugins/backup/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/backup/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/backup/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/backup/jetpack-backup.php b/projects/plugins/backup/jetpack-backup.php index 2983fb75f2039..f50af33170db2 100644 --- a/projects/plugins/backup/jetpack-backup.php +++ b/projects/plugins/backup/jetpack-backup.php @@ -33,7 +33,7 @@ use Automattic\Jetpack\My_Jetpack\Initializer as My_Jetpack_Initializer; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } // Constant definitions. @@ -164,7 +164,7 @@ function jetpack_backup_plugin_activation( $plugin ) { ( new \Automattic\Jetpack\Paths() )->is_current_request_activating_plugin_from_plugins_screen( JETPACK_BACKUP_PLUGIN_ROOT_FILE_RELATIVE_PATH ) ) { wp_safe_redirect( esc_url( admin_url( 'admin.php?page=jetpack-backup' ) ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/beta/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/beta/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/beta/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/beta/jetpack-beta.php b/projects/plugins/beta/jetpack-beta.php index 136408cfdfbd8..00148cb0d6221 100644 --- a/projects/plugins/beta/jetpack-beta.php +++ b/projects/plugins/beta/jetpack-beta.php @@ -31,7 +31,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } define( 'JPBETA__PLUGIN_FOLDER', dirname( plugin_basename( __FILE__ ) ) ); diff --git a/projects/plugins/beta/src/admin/branch-card.template.php b/projects/plugins/beta/src/admin/branch-card.template.php index 7bbf6353f6558..1f0954230b4c9 100644 --- a/projects/plugins/beta/src/admin/branch-card.template.php +++ b/projects/plugins/beta/src/admin/branch-card.template.php @@ -13,7 +13,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } // Wrap in a function to avoid leaking all the variables we create to subsequent runs. diff --git a/projects/plugins/beta/src/admin/exception.template.php b/projects/plugins/beta/src/admin/exception.template.php index 297459b4074e0..2e60ae771b1ba 100644 --- a/projects/plugins/beta/src/admin/exception.template.php +++ b/projects/plugins/beta/src/admin/exception.template.php @@ -11,7 +11,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } ?> diff --git a/projects/plugins/beta/src/admin/header.template.php b/projects/plugins/beta/src/admin/header.template.php index f95401ef5f937..a0efa639eebdc 100644 --- a/projects/plugins/beta/src/admin/header.template.php +++ b/projects/plugins/beta/src/admin/header.template.php @@ -10,7 +10,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } ?> diff --git a/projects/plugins/beta/src/admin/notice.template.php b/projects/plugins/beta/src/admin/notice.template.php index 7f62fc048794b..b041f1973822b 100644 --- a/projects/plugins/beta/src/admin/notice.template.php +++ b/projects/plugins/beta/src/admin/notice.template.php @@ -10,7 +10,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } global $current_screen; diff --git a/projects/plugins/beta/src/admin/plugin-manage.template.php b/projects/plugins/beta/src/admin/plugin-manage.template.php index 33d1edfa84339..422c888b0e427 100644 --- a/projects/plugins/beta/src/admin/plugin-manage.template.php +++ b/projects/plugins/beta/src/admin/plugin-manage.template.php @@ -15,7 +15,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } $manifest = $plugin->get_manifest( true ); diff --git a/projects/plugins/beta/src/admin/plugin-select.template.php b/projects/plugins/beta/src/admin/plugin-select.template.php index 6efbae363f6ba..b6015e20a6e1b 100644 --- a/projects/plugins/beta/src/admin/plugin-select.template.php +++ b/projects/plugins/beta/src/admin/plugin-select.template.php @@ -13,7 +13,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } $plugins = Plugin::get_all_plugins( true ); diff --git a/projects/plugins/beta/src/admin/show-needed-updates.template.php b/projects/plugins/beta/src/admin/show-needed-updates.template.php index 5ff90a1782905..8fdd0471f6e62 100644 --- a/projects/plugins/beta/src/admin/show-needed-updates.template.php +++ b/projects/plugins/beta/src/admin/show-needed-updates.template.php @@ -12,7 +12,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } // Wrap in a function to avoid leaking all the variables we create to subsequent runs. diff --git a/projects/plugins/beta/src/admin/toggles.template.php b/projects/plugins/beta/src/admin/toggles.template.php index 7fdc0038f6d19..b8e6b9e9f760f 100644 --- a/projects/plugins/beta/src/admin/toggles.template.php +++ b/projects/plugins/beta/src/admin/toggles.template.php @@ -10,7 +10,7 @@ // Check that the file is not accessed directly. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } ?> diff --git a/projects/plugins/beta/src/class-admin.php b/projects/plugins/beta/src/class-admin.php index c9351fc22151a..623616dda83ef 100644 --- a/projects/plugins/beta/src/class-admin.php +++ b/projects/plugins/beta/src/class-admin.php @@ -78,7 +78,7 @@ public static function render() { if ( is_network_admin() && ! is_plugin_active_for_network( JPBETA__PLUGIN_FOLDER . '/jetpack-beta.php' ) ) { $exception = new \RuntimeException( __( 'Jetpack Beta Tester must be activated for the network to be used from Network Admin.', 'jetpack-beta' ) ); require_once __DIR__ . '/admin/exception.template.php'; - exit; + exit( 0 ); } ob_start(); @@ -129,7 +129,7 @@ public static function admin_page_load() { ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended wp_safe_redirect( Utils::admin_url( $_GET ) ); - exit(); + exit( 0 ); } } @@ -168,7 +168,7 @@ public static function admin_page_load() { } wp_safe_redirect( Utils::admin_url( $plugin ? array( 'plugin' => $plugin_name ) : array() ) ); - exit(); + exit( 0 ); } /** diff --git a/projects/plugins/boost/app/admin/deactivation-dialog.php b/projects/plugins/boost/app/admin/deactivation-dialog.php index e1374c43dd769..f8a0ad5208e3e 100644 --- a/projects/plugins/boost/app/admin/deactivation-dialog.php +++ b/projects/plugins/boost/app/admin/deactivation-dialog.php @@ -1,6 +1,6 @@
    diff --git a/projects/plugins/boost/app/lib/minify/functions-helpers.php b/projects/plugins/boost/app/lib/minify/functions-helpers.php index d7357be866e71..fa14b8e6cbde0 100644 --- a/projects/plugins/boost/app/lib/minify/functions-helpers.php +++ b/projects/plugins/boost/app/lib/minify/functions-helpers.php @@ -288,7 +288,7 @@ function jetpack_boost_minify_serve_concatenated() { if ( $prefix === substr( $request_path, -strlen( $prefix ), strlen( $prefix ) ) ) { require_once __DIR__ . '/functions-service.php'; jetpack_boost_page_optimize_service_request(); - exit; // @phan-suppress-current-line PhanPluginUnreachableCode -- Safer to include it even though jetpack_boost_page_optimize_service_request() itself never returns. + exit( 0 ); // @phan-suppress-current-line PhanPluginUnreachableCode -- Safer to include it even though jetpack_boost_page_optimize_service_request() itself never returns. } } } diff --git a/projects/plugins/boost/app/lib/minify/functions-service.php b/projects/plugins/boost/app/lib/minify/functions-service.php index 68c11a2e695ac..08b5cc4e5cd31 100644 --- a/projects/plugins/boost/app/lib/minify/functions-service.php +++ b/projects/plugins/boost/app/lib/minify/functions-service.php @@ -43,7 +43,7 @@ function jetpack_boost_page_optimize_service_request() { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash if ( strtotime( $utils->unslash( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) < filemtime( $cache_file ) ) { header( 'HTTP/1.1 304 Not Modified' ); - exit; + exit( 0 ); } } @@ -69,7 +69,7 @@ function jetpack_boost_page_optimize_service_request() { header( 'ETag: ' . $etag ); echo file_get_contents( $cache_file ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- We need to trust this unfortunately. - die(); + die( 0 ); } } @@ -99,7 +99,7 @@ function jetpack_boost_page_optimize_service_request() { file_put_contents( $cache_file_meta, wp_json_encode( array( 'headers' => $headers ) ) ); } - die(); + die( 0 ); } /** diff --git a/projects/plugins/boost/app/modules/optimizations/critical-css/CSS_Proxy.php b/projects/plugins/boost/app/modules/optimizations/critical-css/CSS_Proxy.php index 0584aaf03627b..08a6713b0ad77 100644 --- a/projects/plugins/boost/app/modules/optimizations/critical-css/CSS_Proxy.php +++ b/projects/plugins/boost/app/modules/optimizations/critical-css/CSS_Proxy.php @@ -80,7 +80,7 @@ public function handle_css_proxy() { // Outputting proxied CSS contents unescaped. // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo wp_strip_all_tags( $css ); - die(); + die( 0 ); } } } diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php index 6e9fdd2fa4780..f2a3f5af9ab5f 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php @@ -150,7 +150,7 @@ public function serve_cached() { $this->send_header( 'X-Jetpack-Boost-Cache: hit' ); Logger::debug( 'Serving cached page' ); echo $cached; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - die(); + die( 0 ); } $cache_status = $rebuild_found ? 'rebuild' : 'miss'; diff --git a/projects/plugins/boost/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/boost/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/boost/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/boost/jetpack-boost.php b/projects/plugins/boost/jetpack-boost.php index 6ab8471e88ba9..c16732f889864 100644 --- a/projects/plugins/boost/jetpack-boost.php +++ b/projects/plugins/boost/jetpack-boost.php @@ -26,7 +26,7 @@ // If this file is called directly, abort. if ( ! defined( 'WPINC' ) ) { - die; + die( 0 ); } define( 'JETPACK_BOOST_VERSION', '3.7.0' ); @@ -150,7 +150,7 @@ function jetpack_boost_admin_missing_files() { define( 'JETPACK_BOOST_CONCAT_USE_WP', true ); require_once JETPACK_BOOST_DIR_PATH . '/serve-minified-content.php'; - exit; + exit( 0 ); } } @@ -186,7 +186,7 @@ function jetpack_boost_plugin_activation( $plugin ) { ( new \Automattic\Jetpack\Paths() )->is_current_request_activating_plugin_from_plugins_screen( JETPACK_BOOST_PLUGIN_BASE ) ) { wp_safe_redirect( esc_url( admin_url( 'admin.php?page=jetpack-boost' ) ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/classic-theme-helper-plugin/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/classic-theme-helper-plugin/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/classic-theme-helper-plugin/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/classic-theme-helper-plugin/classic-theme-helper-plugin.php b/projects/plugins/classic-theme-helper-plugin/classic-theme-helper-plugin.php index dee6732b2da4f..56cba1db04634 100644 --- a/projects/plugins/classic-theme-helper-plugin/classic-theme-helper-plugin.php +++ b/projects/plugins/classic-theme-helper-plugin/classic-theme-helper-plugin.php @@ -30,7 +30,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } define( 'CLASSIC_THEME_HELPER_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); diff --git a/projects/plugins/classic-theme-helper-plugin/src/class-classic-theme-helper-plugin.php b/projects/plugins/classic-theme-helper-plugin/src/class-classic-theme-helper-plugin.php index f2bb0bf2426a9..21926c4c89c35 100644 --- a/projects/plugins/classic-theme-helper-plugin/src/class-classic-theme-helper-plugin.php +++ b/projects/plugins/classic-theme-helper-plugin/src/class-classic-theme-helper-plugin.php @@ -6,7 +6,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } use Automattic\Jetpack\Assets; diff --git a/projects/plugins/crm/.phan/baseline.php b/projects/plugins/crm/.phan/baseline.php index e2c9ab254978c..59e95987f340b 100644 --- a/projects/plugins/crm/.phan/baseline.php +++ b/projects/plugins/crm/.phan/baseline.php @@ -171,7 +171,7 @@ 'api/create_transaction.php' => ['PhanImpossibleTypeComparisonInGlobalScope', 'PhanPossiblyUndeclaredGlobalVariable'], 'api/customers.php' => ['PhanPluginSimplifyExpressionBool'], 'api/status.php' => ['PhanTypePossiblyInvalidDimOffset'], - 'includes/ZeroBSCRM.AJAX.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanParamTooMany', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateExpressionAssignment', 'PhanPluginNeverReturnFunction', 'PhanPluginRedundantAssignment', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNullable', 'PhanTypeInvalidDimOffset', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDimFetch', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeVoidAssignment', 'PhanUndeclaredConstant', 'PhanUndeclaredTypeReturnType', 'PhanUndeclaredVariableDim'], + 'includes/ZeroBSCRM.AJAX.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanParamTooMany', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateExpressionAssignment', 'PhanPluginNeverReturnFunction', 'PhanPluginRedundantAssignment', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNullable', 'PhanTypeInvalidDimOffset', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDimFetch', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeVoidAssignment', 'PhanUndeclaredConstant', 'PhanUndeclaredVariableDim'], 'includes/ZeroBSCRM.API.php' => ['PhanCommentParamWithoutRealParam', 'PhanParamTooFewInternal', 'PhanParamTooMany', 'PhanRedefineFunctionInternal', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgumentInternal'], 'includes/ZeroBSCRM.AdminPages.Checks.php' => ['PhanPluginUnreachableCode'], 'includes/ZeroBSCRM.AdminPages.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginRedundantAssignment', 'PhanPossiblyUndeclaredVariable', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeSuspiciousEcho', 'PhanUndeclaredVariableDim'], diff --git a/projects/plugins/crm/ZeroBSCRM.php b/projects/plugins/crm/ZeroBSCRM.php index 7c8dcbe70a5c0..797425894ace7 100644 --- a/projects/plugins/crm/ZeroBSCRM.php +++ b/projects/plugins/crm/ZeroBSCRM.php @@ -20,7 +20,7 @@ // stops direct access if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } // Enabling THIS will start LOGGING PERFORMANCE TESTS diff --git a/projects/plugins/crm/admin/activation/before-you-go.php b/projects/plugins/crm/admin/activation/before-you-go.php index f8c485218a275..1239127dfd57c 100644 --- a/projects/plugins/crm/admin/activation/before-you-go.php +++ b/projects/plugins/crm/admin/activation/before-you-go.php @@ -9,7 +9,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/admin/activation/welcome-to-jpcrm.php b/projects/plugins/crm/admin/activation/welcome-to-jpcrm.php index bead63e7a8d55..08f4bdf61ccf6 100644 --- a/projects/plugins/crm/admin/activation/welcome-to-jpcrm.php +++ b/projects/plugins/crm/admin/activation/welcome-to-jpcrm.php @@ -9,7 +9,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/admin/activation/wizard.ajax.php b/projects/plugins/crm/admin/activation/wizard.ajax.php index 4b3a3659fe8d9..23828601dbd64 100644 --- a/projects/plugins/crm/admin/activation/wizard.ajax.php +++ b/projects/plugins/crm/admin/activation/wizard.ajax.php @@ -215,12 +215,12 @@ function zbs_wizard_fin() { $r['message'] = 'success'; $r['success'] = 1; echo wp_json_encode( $r ); - die(); + die( 0 ); } else { $r['message'] = 'Unauthorised to do this...'; $r['success'] = 0; echo wp_json_encode( $r ); - die(); + die( 0 ); } } add_action( 'wp_ajax_nopriv_zbs_wizard_fin', 'zbs_wizard_fin' ); diff --git a/projects/plugins/crm/admin/automations/main.page.php b/projects/plugins/crm/admin/automations/main.page.php index 6f948fffe6164..7b19ca3133442 100644 --- a/projects/plugins/crm/admin/automations/main.page.php +++ b/projects/plugins/crm/admin/automations/main.page.php @@ -10,7 +10,7 @@ namespace Automattic\Jetpack_CRM\Automations; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Render the Automations page, which is simply a mounting point for React. diff --git a/projects/plugins/crm/admin/company/view.page.php b/projects/plugins/crm/admin/company/view.page.php index 6bf37a4137db2..b4be36a7856b7 100644 --- a/projects/plugins/crm/admin/company/view.page.php +++ b/projects/plugins/crm/admin/company/view.page.php @@ -3,7 +3,7 @@ ! * Single company view page */ -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); global $zbs; diff --git a/projects/plugins/crm/admin/contact/add-file.page.php b/projects/plugins/crm/admin/contact/add-file.page.php index 94bd10d7e5560..eee8bea7f4fe7 100644 --- a/projects/plugins/crm/admin/contact/add-file.page.php +++ b/projects/plugins/crm/admin/contact/add-file.page.php @@ -3,7 +3,7 @@ ! * Single contact view page */ -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Render the page diff --git a/projects/plugins/crm/admin/contact/contact.ajax.php b/projects/plugins/crm/admin/contact/contact.ajax.php index b6e5a991c5043..1c81a722a49c7 100644 --- a/projects/plugins/crm/admin/contact/contact.ajax.php +++ b/projects/plugins/crm/admin/contact/contact.ajax.php @@ -107,7 +107,7 @@ function zeroBSCRM_generateClientPortalUser() { // phpcs:ignore WordPress.Naming $m['success'] = true; $m['user_id'] = $created; echo wp_json_encode( $m ); - die(); + die( 0 ); } else { @@ -123,7 +123,7 @@ function zeroBSCRM_generateClientPortalUser() { // phpcs:ignore WordPress.Naming $m['success'] = false; $m['email'] = $email; echo wp_json_encode( $m ); - die(); + die( 0 ); } } diff --git a/projects/plugins/crm/admin/contact/view.page.php b/projects/plugins/crm/admin/contact/view.page.php index f579aaaa0ac6a..9dd7ecb11636f 100644 --- a/projects/plugins/crm/admin/contact/view.page.php +++ b/projects/plugins/crm/admin/contact/view.page.php @@ -3,7 +3,7 @@ ! * Single contact view page */ -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); global $zbs; diff --git a/projects/plugins/crm/admin/crm-resources/main.page.php b/projects/plugins/crm/admin/crm-resources/main.page.php index 7c126c91fc842..1c7268c0083e2 100644 --- a/projects/plugins/crm/admin/crm-resources/main.page.php +++ b/projects/plugins/crm/admin/crm-resources/main.page.php @@ -10,7 +10,7 @@ Breaking Checks ( stops direct access ) ======================================================= */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/admin/dashboard/dashboard.ajax.php b/projects/plugins/crm/admin/dashboard/dashboard.ajax.php index 4e1cb2cb64a65..66684fa3f4151 100644 --- a/projects/plugins/crm/admin/dashboard/dashboard.ajax.php +++ b/projects/plugins/crm/admin/dashboard/dashboard.ajax.php @@ -141,7 +141,7 @@ function jetpackcrm_dash_refresh() { ); echo wp_json_encode( $r ); - die(); + die( 0 ); } add_action( 'wp_ajax_jetpackcrm_dash_refresh', 'jetpackcrm_dash_refresh' ); diff --git a/projects/plugins/crm/admin/dashboard/main.page.php b/projects/plugins/crm/admin/dashboard/main.page.php index 080951c2102d3..71ff41fb5383c 100644 --- a/projects/plugins/crm/admin/dashboard/main.page.php +++ b/projects/plugins/crm/admin/dashboard/main.page.php @@ -10,7 +10,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/admin/dashboard/partials/first-use-dashboard-woo.block.php b/projects/plugins/crm/admin/dashboard/partials/first-use-dashboard-woo.block.php index d2c3f9c4eaed5..3a5ca34f8821d 100644 --- a/projects/plugins/crm/admin/dashboard/partials/first-use-dashboard-woo.block.php +++ b/projects/plugins/crm/admin/dashboard/partials/first-use-dashboard-woo.block.php @@ -5,7 +5,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } ##WLREMOVE diff --git a/projects/plugins/crm/admin/dashboard/partials/first-use-dashboard.block.php b/projects/plugins/crm/admin/dashboard/partials/first-use-dashboard.block.php index 89a84010929c5..ff17eb1dd8fb3 100644 --- a/projects/plugins/crm/admin/dashboard/partials/first-use-dashboard.block.php +++ b/projects/plugins/crm/admin/dashboard/partials/first-use-dashboard.block.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } ##WLREMOVE diff --git a/projects/plugins/crm/admin/email/email.ajax.php b/projects/plugins/crm/admin/email/email.ajax.php index fef9ae8af1c5c..588b8d5709f81 100644 --- a/projects/plugins/crm/admin/email/email.ajax.php +++ b/projects/plugins/crm/admin/email/email.ajax.php @@ -6,7 +6,7 @@ */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid @@ -29,7 +29,7 @@ function zeroBSCRM_star_email_thread() { $wpdb->query( $sql ); $m = array( 'message' => 'success' ); echo wp_json_encode( $m ); - die(); + die( 0 ); } add_action( 'wp_ajax_zbs_email_star_thread', 'zeroBSCRM_star_email_thread' ); @@ -51,7 +51,7 @@ function zeroBSCRM_unstar_email_thread() { $wpdb->query( $sql ); $m = array( 'message' => 'success' ); echo wp_json_encode( $m ); - die(); + die( 0 ); } add_action( 'wp_ajax_zbs_email_unstar_thread', 'zeroBSCRM_unstar_email_thread' ); @@ -72,7 +72,7 @@ function zeroBSCRM_delete_email_thread() { $wpdb->query( $sql ); $m = array( 'message' => 'success' ); echo wp_json_encode( $m ); - die(); + die( 0 ); } add_action( 'wp_ajax_zbs_delete_email_thread', 'zeroBSCRM_delete_email_thread' ); @@ -114,7 +114,7 @@ function zeroBSCRM_send_email_thread_ajax() { jpcrm_send_single_email_from_box( $send_to_email, $thread_id, $delivery_method, true, false ); // fini - exit(); + exit( 0 ); } add_action( 'wp_ajax_zbs_email_send_thread_ui', 'zeroBSCRM_send_email_thread_ajax' ); @@ -175,7 +175,7 @@ function zeroBSCRM_emails_customer_panel() { $ret['email'] = $email_ret; echo wp_json_encode( $ret, true ); - die(); + die( 0 ); } add_action( 'wp_ajax_zbs_email_customer_panel', 'zeroBSCRM_emails_customer_panel' ); @@ -210,7 +210,7 @@ function jpcrm_send_single_email_from_box( $send_to_email = '', $thread_id = -1, if ( $exit_json ) { exit( '{processed:-1}' ); } else { - exit(); + exit( 0 ); } } @@ -358,7 +358,7 @@ function jpcrm_send_single_email_from_box( $send_to_email = '', $thread_id = -1, if ( $exit_json ) { echo wp_json_encode( $m ); - exit(); + exit( 0 ); } else { diff --git a/projects/plugins/crm/admin/email/main.page.php b/projects/plugins/crm/admin/email/main.page.php index 93266bd880ec1..d4c5271437a5d 100644 --- a/projects/plugins/crm/admin/email/main.page.php +++ b/projects/plugins/crm/admin/email/main.page.php @@ -13,7 +13,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/admin/export/main.page.php b/projects/plugins/crm/admin/export/main.page.php index d2e9b442bbf65..db7842a7a9ddd 100644 --- a/projects/plugins/crm/admin/export/main.page.php +++ b/projects/plugins/crm/admin/export/main.page.php @@ -5,7 +5,7 @@ * Jetpack CRM - https://jetpackcrm.com */ - defined( 'ZEROBSCRM_PATH' ) || exit; + defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // permissions check if ( ! zeroBSCRM_permsExport() ) { diff --git a/projects/plugins/crm/admin/settings/api-settings.page.php b/projects/plugins/crm/admin/settings/api-settings.page.php index fd28d89b4b4b3..db2477f795613 100644 --- a/projects/plugins/crm/admin/settings/api-settings.page.php +++ b/projects/plugins/crm/admin/settings/api-settings.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $zbs; diff --git a/projects/plugins/crm/admin/settings/business-info.page.php b/projects/plugins/crm/admin/settings/business-info.page.php index bce3c1035892e..5c57cac9900e2 100644 --- a/projects/plugins/crm/admin/settings/business-info.page.php +++ b/projects/plugins/crm/admin/settings/business-info.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/client-portal.page.php b/projects/plugins/crm/admin/settings/client-portal.page.php index 0a0eb9b2ca55f..4086fd529c737 100644 --- a/projects/plugins/crm/admin/settings/client-portal.page.php +++ b/projects/plugins/crm/admin/settings/client-portal.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/companies.page.php b/projects/plugins/crm/admin/settings/companies.page.php index 863ba6aaaaae8..c343cff9dfe28 100644 --- a/projects/plugins/crm/admin/settings/companies.page.php +++ b/projects/plugins/crm/admin/settings/companies.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/custom-fields.page.php b/projects/plugins/crm/admin/settings/custom-fields.page.php index 99d4a754c1950..883f1d82643e1 100644 --- a/projects/plugins/crm/admin/settings/custom-fields.page.php +++ b/projects/plugins/crm/admin/settings/custom-fields.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; diff --git a/projects/plugins/crm/admin/settings/field-options.page.php b/projects/plugins/crm/admin/settings/field-options.page.php index dbf26775dce0e..dc90b64d892fe 100644 --- a/projects/plugins/crm/admin/settings/field-options.page.php +++ b/projects/plugins/crm/admin/settings/field-options.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/field-sorts.page.php b/projects/plugins/crm/admin/settings/field-sorts.page.php index a73b8180bb1d9..0542a6415a1e5 100644 --- a/projects/plugins/crm/admin/settings/field-sorts.page.php +++ b/projects/plugins/crm/admin/settings/field-sorts.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/forms.page.php b/projects/plugins/crm/admin/settings/forms.page.php index e7c32b3ba0fbe..4cc219e6f197c 100644 --- a/projects/plugins/crm/admin/settings/forms.page.php +++ b/projects/plugins/crm/admin/settings/forms.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/general.page.php b/projects/plugins/crm/admin/settings/general.page.php index 01d81fd5c1a01..c0c0bd5ed5497 100644 --- a/projects/plugins/crm/admin/settings/general.page.php +++ b/projects/plugins/crm/admin/settings/general.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/invoicing.page.php b/projects/plugins/crm/admin/settings/invoicing.page.php index 9a44aac0cb8c8..f7e7ec056f23e 100644 --- a/projects/plugins/crm/admin/settings/invoicing.page.php +++ b/projects/plugins/crm/admin/settings/invoicing.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/license.page.php b/projects/plugins/crm/admin/settings/license.page.php index 81c5aa1454a47..be2305f1902c2 100644 --- a/projects/plugins/crm/admin/settings/license.page.php +++ b/projects/plugins/crm/admin/settings/license.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/list-view.page.php b/projects/plugins/crm/admin/settings/list-view.page.php index f40a481de79ea..f66111204afba 100644 --- a/projects/plugins/crm/admin/settings/list-view.page.php +++ b/projects/plugins/crm/admin/settings/list-view.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/locale.page.php b/projects/plugins/crm/admin/settings/locale.page.php index 231d55d182e87..d4e177ac24a49 100644 --- a/projects/plugins/crm/admin/settings/locale.page.php +++ b/projects/plugins/crm/admin/settings/locale.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/mail-delivery.ajax.php b/projects/plugins/crm/admin/settings/mail-delivery.ajax.php index 1c617f4172aae..a360c1f3ecdb0 100644 --- a/projects/plugins/crm/admin/settings/mail-delivery.ajax.php +++ b/projects/plugins/crm/admin/settings/mail-delivery.ajax.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } function jpcrm_maildelivery_common_SMTP_settings() { @@ -346,7 +346,7 @@ function zeroBSCRM_AJAX_mailDelivery_validateWPMail() { header( 'Content-Type: application/json' ); echo json_encode( $res ); - exit(); + exit( 0 ); } // } Attempts to validate mail delivery SMTP settings, send test email, & save's if validated @@ -358,7 +358,7 @@ function zeroBSCRM_AJAX_mailDelivery_validateSMTP() { // } Perms? if ( ! zeroBSCRM_permsMailCampaigns() ) { - exit(); + exit( 0 ); } // } Retrieve... @@ -504,7 +504,7 @@ function zeroBSCRM_AJAX_mailDelivery_validateSMTP() { header( 'Content-Type: application/json' ); echo wp_json_encode( $res, JSON_UNESCAPED_UNICODE ); - exit(); + exit( 0 ); } // } quickly checks if ports are open (pre smtp check) @@ -516,7 +516,7 @@ function zeroBSCRM_AJAX_mailDelivery_validateSMTPPorts() { // } Perms? if ( ! zeroBSCRM_permsMailCampaigns() ) { - exit(); + exit( 0 ); } // } Retrieve... @@ -574,7 +574,7 @@ function zeroBSCRM_AJAX_mailDelivery_validateSMTPPorts() { $res['open'] = $okay; header( 'Content-Type: application/json' ); echo wp_json_encode( $res, JSON_UNESCAPED_UNICODE ); - exit(); + exit( 0 ); } /* @@ -728,7 +728,7 @@ function jpcrm_ajax_mail_delivery_validate_api_oauth() { // return header( 'Content-Type: application/json' ); echo json_encode( $return ); - exit(); + exit( 0 ); } // } Attempts to send a test email from a stored mail delivery method @@ -740,7 +740,7 @@ function zeroBSCRM_AJAX_mailDelivery_testEmail() { // } Perms? if ( ! zeroBSCRM_permsMailCampaigns() ) { - exit(); + exit( 0 ); } // } Starting @@ -760,12 +760,12 @@ function zeroBSCRM_AJAX_mailDelivery_testEmail() { if ( ! zeroBSCRM_validateEmail( $sendToEmail ) ) { $r['message'] = 'Not a valid email'; echo json_encode( $r ); - die(); + die( 0 ); } // } Check id + perms + em if ( $mailDeliveryIndxKey <= -1 || empty( $mailDeliveryIndxKey ) || empty( $sendToEmail ) ) { - die(); + die( 0 ); } // load acc @@ -823,7 +823,7 @@ function zeroBSCRM_AJAX_mailDelivery_removeMailDelivery() { // } Perms? if ( ! zeroBSCRM_permsMailCampaigns() ) { - exit(); + exit( 0 ); } // } Starting @@ -837,7 +837,7 @@ function zeroBSCRM_AJAX_mailDelivery_removeMailDelivery() { // } Check id + perms + em if ( $mailDeliveryIndxKey <= -1 || empty( $mailDeliveryIndxKey ) ) { - die(); + die( 0 ); } global $zbs; @@ -897,7 +897,7 @@ function zeroBSCRM_AJAX_mailDelivery_removeMailDelivery() { header( 'Content-Type: application/json' ); echo json_encode( $res ); - exit(); + exit( 0 ); } // } Attempts to set a delivery route default @@ -909,7 +909,7 @@ function zeroBSCRM_AJAX_mailDelivery_setMailDeliveryAsDefault() { // } Perms? if ( ! zeroBSCRM_permsMailCampaigns() ) { - exit(); + exit( 0 ); } // } Starting @@ -923,7 +923,7 @@ function zeroBSCRM_AJAX_mailDelivery_setMailDeliveryAsDefault() { // } Check id + perms + em if ( $mailDeliveryIndxKey <= -1 || empty( $mailDeliveryIndxKey ) ) { - die(); + die( 0 ); } // brutal setting @@ -935,5 +935,5 @@ function zeroBSCRM_AJAX_mailDelivery_setMailDeliveryAsDefault() { header( 'Content-Type: application/json' ); echo json_encode( $res ); - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/admin/settings/mail-delivery.page.php b/projects/plugins/crm/admin/settings/mail-delivery.page.php index 525fbeb78ca7a..aefa2a124eb07 100644 --- a/projects/plugins/crm/admin/settings/mail-delivery.page.php +++ b/projects/plugins/crm/admin/settings/mail-delivery.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/mail.page.php b/projects/plugins/crm/admin/settings/mail.page.php index 8243c974e19c3..974bd3ae4cf68 100644 --- a/projects/plugins/crm/admin/settings/mail.page.php +++ b/projects/plugins/crm/admin/settings/mail.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/main.page.php b/projects/plugins/crm/admin/settings/main.page.php index 12029152c01cc..9bce4b4be6fd0 100644 --- a/projects/plugins/crm/admin/settings/main.page.php +++ b/projects/plugins/crm/admin/settings/main.page.php @@ -10,7 +10,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/admin/settings/oauth-connections-edit.page.php b/projects/plugins/crm/admin/settings/oauth-connections-edit.page.php index 8e975e6624436..15ebd22c41e1d 100644 --- a/projects/plugins/crm/admin/settings/oauth-connections-edit.page.php +++ b/projects/plugins/crm/admin/settings/oauth-connections-edit.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $zbs; diff --git a/projects/plugins/crm/admin/settings/oauth-connections.page.php b/projects/plugins/crm/admin/settings/oauth-connections.page.php index 27ed283fb4007..674410b860726 100644 --- a/projects/plugins/crm/admin/settings/oauth-connections.page.php +++ b/projects/plugins/crm/admin/settings/oauth-connections.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $zbs; diff --git a/projects/plugins/crm/admin/settings/partials/menu.block.php b/projects/plugins/crm/admin/settings/partials/menu.block.php index cff77eb799a0b..1c5737a396880 100644 --- a/projects/plugins/crm/admin/settings/partials/menu.block.php +++ b/projects/plugins/crm/admin/settings/partials/menu.block.php @@ -7,7 +7,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $zbs; diff --git a/projects/plugins/crm/admin/settings/partials/template-variant-setting.block.php b/projects/plugins/crm/admin/settings/partials/template-variant-setting.block.php index 86bfcb0dbd1c9..8f0d06ec5b2dd 100644 --- a/projects/plugins/crm/admin/settings/partials/template-variant-setting.block.php +++ b/projects/plugins/crm/admin/settings/partials/template-variant-setting.block.php @@ -8,7 +8,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $zbs; diff --git a/projects/plugins/crm/admin/settings/partials/title.block.php b/projects/plugins/crm/admin/settings/partials/title.block.php index c708cf6740cc7..f69e0fd53464c 100644 --- a/projects/plugins/crm/admin/settings/partials/title.block.php +++ b/projects/plugins/crm/admin/settings/partials/title.block.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } ?> diff --git a/projects/plugins/crm/admin/settings/quotes.page.php b/projects/plugins/crm/admin/settings/quotes.page.php index d3d1d808f2510..f9423dec88767 100644 --- a/projects/plugins/crm/admin/settings/quotes.page.php +++ b/projects/plugins/crm/admin/settings/quotes.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/tax.page.php b/projects/plugins/crm/admin/settings/tax.page.php index 30d1e61f1190e..c150056a18521 100644 --- a/projects/plugins/crm/admin/settings/tax.page.php +++ b/projects/plugins/crm/admin/settings/tax.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/settings/transactions.page.php b/projects/plugins/crm/admin/settings/transactions.page.php index 4439331f6eb67..919c28747dc12 100644 --- a/projects/plugins/crm/admin/settings/transactions.page.php +++ b/projects/plugins/crm/admin/settings/transactions.page.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } global $wpdb, $zbs; // } Req diff --git a/projects/plugins/crm/admin/support/main.page.php b/projects/plugins/crm/admin/support/main.page.php index 0c2e2c58ac2e6..d94dc8b57b9f8 100644 --- a/projects/plugins/crm/admin/support/main.page.php +++ b/projects/plugins/crm/admin/support/main.page.php @@ -9,7 +9,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } if ( ! zeroBSCRM_isZBSAdminOrAdmin() ) { diff --git a/projects/plugins/crm/admin/system/main.page.php b/projects/plugins/crm/admin/system/main.page.php index 2b8bddd10548a..ffdd84b5e3987 100644 --- a/projects/plugins/crm/admin/system/main.page.php +++ b/projects/plugins/crm/admin/system/main.page.php @@ -10,7 +10,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/admin/system/partials/title.block.php b/projects/plugins/crm/admin/system/partials/title.block.php index 7d83b9f1a0bad..90b1eabc40733 100644 --- a/projects/plugins/crm/admin/system/partials/title.block.php +++ b/projects/plugins/crm/admin/system/partials/title.block.php @@ -6,7 +6,7 @@ // stop direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } // optional right-floated notice diff --git a/projects/plugins/crm/admin/tags/tag-manager.page.php b/projects/plugins/crm/admin/tags/tag-manager.page.php index c9025db7493b1..d9a596fcd8555 100644 --- a/projects/plugins/crm/admin/tags/tag-manager.page.php +++ b/projects/plugins/crm/admin/tags/tag-manager.page.php @@ -4,7 +4,7 @@ // Split from ZeroBSCRM.AdminPages.php; at some point this should be merged into ZeroBSCRM.TagManager.php if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } function zeroBSCRM_pages_admin_tags() { diff --git a/projects/plugins/crm/admin/user-profile/main.page.php b/projects/plugins/crm/admin/user-profile/main.page.php index 0044996d68997..e267aeb2aaf0b 100644 --- a/projects/plugins/crm/admin/user-profile/main.page.php +++ b/projects/plugins/crm/admin/user-profile/main.page.php @@ -4,7 +4,7 @@ * Main Page file for User Profile: This file renders views associated with the CRM user profile * Jetpack CRM - https://jetpackcrm.com */ -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // permissions check if ( ! zeroBSCRM_permsIsZBSBackendUser() ) { diff --git a/projects/plugins/crm/admin/user-profile/reminders.page.php b/projects/plugins/crm/admin/user-profile/reminders.page.php index cf0a3b162ed45..d03ec1521e83d 100644 --- a/projects/plugins/crm/admin/user-profile/reminders.page.php +++ b/projects/plugins/crm/admin/user-profile/reminders.page.php @@ -3,7 +3,7 @@ ! * User Profile -> Reminders page */ -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); global $zbs; diff --git a/projects/plugins/crm/admin/user-profile/user-profile.page.php b/projects/plugins/crm/admin/user-profile/user-profile.page.php index 883f96f21e102..36a43f7477a04 100644 --- a/projects/plugins/crm/admin/user-profile/user-profile.page.php +++ b/projects/plugins/crm/admin/user-profile/user-profile.page.php @@ -3,7 +3,7 @@ ! * User Profile page (admin.php?page=your-crm-profile) */ -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); global $zbs; diff --git a/projects/plugins/crm/api/companies.php b/projects/plugins/crm/api/companies.php index c7ab90935790c..703107ac30611 100644 --- a/projects/plugins/crm/api/companies.php +++ b/projects/plugins/crm/api/companies.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/api/create_company.php b/projects/plugins/crm/api/create_company.php index caf6bac975afb..d04c62c2bd968 100644 --- a/projects/plugins/crm/api/create_company.php +++ b/projects/plugins/crm/api/create_company.php @@ -17,7 +17,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -249,4 +249,4 @@ } } - exit(); + exit( 0 ); diff --git a/projects/plugins/crm/api/create_customer.php b/projects/plugins/crm/api/create_customer.php index 6cfd5ea690db4..983db7cbf0052 100644 --- a/projects/plugins/crm/api/create_customer.php +++ b/projects/plugins/crm/api/create_customer.php @@ -17,7 +17,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -37,7 +37,7 @@ 'message' => 'Invalid JSON data', ) ); - exit(); } + exit( 0 ); } // no tags assumption, etc. $we_have_tags = false; @@ -295,4 +295,4 @@ } wp_send_json( array( 'errors' => 1 ) ); - exit(); + exit( 0 ); diff --git a/projects/plugins/crm/api/create_event.php b/projects/plugins/crm/api/create_event.php index 2311b0fbf403e..add5f84da470b 100644 --- a/projects/plugins/crm/api/create_event.php +++ b/projects/plugins/crm/api/create_event.php @@ -11,7 +11,7 @@ */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } $json_params = file_get_contents( 'php://input' ); diff --git a/projects/plugins/crm/api/create_transaction.php b/projects/plugins/crm/api/create_transaction.php index 3a198cf54be66..e042d14342d67 100644 --- a/projects/plugins/crm/api/create_transaction.php +++ b/projects/plugins/crm/api/create_transaction.php @@ -14,7 +14,7 @@ // Breaking Checks ( stops direct access ) if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } // Breaking Checks @@ -37,7 +37,7 @@ 'message' => 'Missing required field: ' . $field, ) ); - exit(); + exit( 0 ); } } @@ -243,4 +243,4 @@ } } -exit(); +exit( 0 ); diff --git a/projects/plugins/crm/api/customer_search.php b/projects/plugins/crm/api/customer_search.php index 78840e9c7f54a..158e13a109c40 100644 --- a/projects/plugins/crm/api/customer_search.php +++ b/projects/plugins/crm/api/customer_search.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/api/customers.php b/projects/plugins/crm/api/customers.php index 35d603115e506..45d9a3446deff 100644 --- a/projects/plugins/crm/api/customers.php +++ b/projects/plugins/crm/api/customers.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/api/events.php b/projects/plugins/crm/api/events.php index 99392f9b08dcc..d66d95192fb7e 100644 --- a/projects/plugins/crm/api/events.php +++ b/projects/plugins/crm/api/events.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/api/invoices.php b/projects/plugins/crm/api/invoices.php index 528120c906024..a540c6dbecbef 100644 --- a/projects/plugins/crm/api/invoices.php +++ b/projects/plugins/crm/api/invoices.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/api/quotes.php b/projects/plugins/crm/api/quotes.php index f47d508d319c4..a587c1c212342 100644 --- a/projects/plugins/crm/api/quotes.php +++ b/projects/plugins/crm/api/quotes.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/api/status.php b/projects/plugins/crm/api/status.php index 5955d19265321..32f70ed30fe21 100644 --- a/projects/plugins/crm/api/status.php +++ b/projects/plugins/crm/api/status.php @@ -2,7 +2,7 @@ // block direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } jpcrm_api_check_http_method( array( 'GET' ) ); diff --git a/projects/plugins/crm/api/transactions.php b/projects/plugins/crm/api/transactions.php index 79cb81c3d9e8b..e550474dfedc7 100644 --- a/projects/plugins/crm/api/transactions.php +++ b/projects/plugins/crm/api/transactions.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/api/webhook.php b/projects/plugins/crm/api/webhook.php index 34efd14ae21af..f955f21d464e6 100644 --- a/projects/plugins/crm/api/webhook.php +++ b/projects/plugins/crm/api/webhook.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/crm/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/crm/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/crm/includes/ZeroBSCRM.AJAX.php b/projects/plugins/crm/includes/ZeroBSCRM.AJAX.php index 681caf9bc03ca..3866c3b009640 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.AJAX.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.AJAX.php @@ -16,7 +16,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -67,7 +67,7 @@ function zbs_create_email_templates() { $m['message'] = 'no permissions'; } echo json_encode( $m ); - die(); + die( 0 ); } // save email template @@ -156,7 +156,7 @@ function zbs_save_email_status() { } echo json_encode( $m ); - die(); + die( 0 ); // nonce field is zbs-save-email_active } @@ -185,7 +185,7 @@ function zeroBSCRM_AJAX_logClose() { header( 'Content-Type: application/json' ); echo json_encode( array( 'fini' => 1 ) ); - exit(); + exit( 0 ); } /* @@ -252,7 +252,7 @@ function zeroBSCRM_AJAX_markFeedback() { } header( 'Content-Type: application/json' ); echo json_encode( array( 'fini' => 1 ) ); - exit(); + exit( 0 ); } // } Retrieve list of invoice deets for customer ID @@ -283,7 +283,7 @@ function zeroBSCRM_AJAX_getCustInvs() { header( 'Content-Type: application/json' ); echo json_encode( $ret ); - exit(); + exit( 0 ); } // } Remove file @@ -345,7 +345,7 @@ function zeroBSCRM_removeFile() { 'errors' => $errors, ) ); - exit(); + exit( 0 ); } // } Filter customers + retrieve count @@ -374,7 +374,7 @@ function zeroBSCRM_AJAX_filterCustomers() { header( 'Content-Type: application/json' ); echo json_encode( $res ); - exit(); + exit( 0 ); } // Add log @@ -456,7 +456,7 @@ function zeroBSCRM_AJAX_addLog() { } echo json_encode( array( 'processed' => $res ) ); - exit(); + exit( 0 ); } // Update log @@ -551,7 +551,7 @@ function zeroBSCRM_AJAX_updateLog() { } echo json_encode( array( 'processed' => $res ) ); - exit(); + exit( 0 ); } // } Del log @@ -592,7 +592,7 @@ function zeroBSCRM_AJAX_deleteLog() { } echo json_encode( array( 'processed' => $res ) ); - exit(); + exit( 0 ); } // Pin log @@ -723,7 +723,7 @@ function ZeroBSCRM_get_quote_template() { global $zbs; - // DEBUG: print_r($_POST['quote_fields']); exit(); + // DEBUG: print_r($_POST['quote_fields']); exit( 0 ); // DAL3+ takes all quote inputs into account and fills out based on these (quote_fields), not above if ( isset( $_POST['quote_fields'] ) && is_array( $_POST['quote_fields'] ) ) { @@ -1062,7 +1062,7 @@ function jpcrm_ajax_quote_send_email() { } - exit(); + exit( 0 ); } /** @@ -1206,7 +1206,7 @@ function zbs_lead_form_views() { $form_views = $zbs->DAL->forms->add_form_view( $form_id ); echo json_encode( array( 'view_logged' => 'true' ) ); - exit(); + exit( 0 ); } add_action( 'wp_ajax_nopriv_zbs_lead_form_views', 'zbs_lead_form_views' ); add_action( 'wp_ajax_zbs_lead_form_views', 'zbs_lead_form_views' ); @@ -1583,7 +1583,7 @@ function zbs_lead_form_capture() { break; default: - exit(); // if not one of our cases then die. + exit( 0 ); // if not one of our cases then die. } // } TODO we could add some tracking here (e.g. "originated from form x on page y") @@ -1595,7 +1595,7 @@ function zbs_lead_form_capture() { $r['message'] = 'Contact received.'; $r['code'] = 'success'; echo json_encode( $r ); - die(); + die( 0 ); } } @@ -1663,7 +1663,7 @@ function zeroBSCRM_AJAX_addAlias() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); } @@ -1706,7 +1706,7 @@ function zeroBSCRM_AJAX_removeAlias() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); } @@ -1743,12 +1743,6 @@ function zeroBSCRM_AJAX_updateListViewColumns() { $listtype = sanitize_text_field( $_POST['listtype'] ); $listColumns = $_POST['v']; // NEEDS SANITATION! - /* - debug - header('Content-Type: application/json'); - echo json_encode($listColumns); - exit(); */ - /* #} Centralised into ZeroBSCRM.List.Columns.php 30/7/17 global $zeroBSCRM_columns_customer; @@ -1785,7 +1779,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -1814,7 +1808,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -1843,7 +1837,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -1872,7 +1866,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -1901,7 +1895,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -1930,7 +1924,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -1959,7 +1953,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -1986,7 +1980,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -1999,7 +1993,7 @@ function zeroBSCRM_AJAX_updateListViewColumns() { } - exit(); + exit( 0 ); } // } Retrieves data sets for list views, with passed params :) @@ -3702,7 +3696,7 @@ function zeroBSCRM_AJAX_listViewRetrieveData() { header( 'Content-Type: application/json' ); echo json_encode( $res ); - exit(); + exit( 0 ); } // } Enact some bulk action :) @@ -3783,7 +3777,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -3814,7 +3808,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -3860,7 +3854,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -3869,7 +3863,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -3916,7 +3910,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -3942,7 +3936,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -3986,7 +3980,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4008,7 +4002,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4030,7 +4024,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4056,7 +4050,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4099,7 +4093,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4127,7 +4121,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4153,7 +4147,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4197,7 +4191,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4223,7 +4217,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4267,7 +4261,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4281,7 +4275,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4319,7 +4313,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4333,7 +4327,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4371,7 +4365,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4385,7 +4379,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4429,7 +4423,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4463,7 +4457,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4485,7 +4479,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4499,7 +4493,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { // } Return - will be an error if here, really!?!? should be passsing headers as such. header( 'Content-Type: application/json' ); echo json_encode( $passBack ); - exit(); + exit( 0 ); break; @@ -4517,7 +4511,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { } - exit(); + exit( 0 ); } /** @@ -4526,7 +4520,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { * @param int[] $obj_ids Array of object ids. * @param int $obj_type_id Object type ID. * - * @return json success/error + * @return void Outputs JSON and exits. */ function zeroBSCRM_bulkAction_enact_addTags( $obj_ids = array(), $obj_type_id = -1 ) { @@ -4574,9 +4568,8 @@ function zeroBSCRM_bulkAction_enact_addTags( $obj_ids = array(), $obj_type_id = $passBack['tagged'] = $tagged; - // } Return + // This function outputs JSON and exits. zeroBSCRM_sendJSONSuccess( $passBack ); - exit(); } else { @@ -4586,7 +4579,7 @@ function zeroBSCRM_bulkAction_enact_addTags( $obj_ids = array(), $obj_type_id = // err zeroBSCRM_sendJSONError( -1 ); - exit(); + exit( 0 ); } /** @@ -4595,7 +4588,7 @@ function zeroBSCRM_bulkAction_enact_addTags( $obj_ids = array(), $obj_type_id = * @param int[] $obj_ids Array of object ids. * @param int $obj_type_id Object type ID. * - * @return json success/error + * @return void Outputs JSON and exits. */ function zeroBSCRM_bulkAction_enact_removeTags( $obj_ids = array(), $obj_type_id = -1 ) { @@ -4643,9 +4636,8 @@ function zeroBSCRM_bulkAction_enact_removeTags( $obj_ids = array(), $obj_type_id $passBack['untagged'] = $untagged; - // } Return + // This function outputs JSON and exits. zeroBSCRM_sendJSONSuccess( $passBack ); - exit(); } else { @@ -4655,7 +4647,7 @@ function zeroBSCRM_bulkAction_enact_removeTags( $obj_ids = array(), $obj_type_id // err zeroBSCRM_sendJSONError( -1 ); - exit(); + exit( 0 ); } /* @@ -4737,7 +4729,7 @@ function zeroBSCRM_AJAX_previewSegment() { ), $status ); - exit(); + exit( 0 ); } @@ -4745,14 +4737,14 @@ function zeroBSCRM_AJAX_previewSegment() { // return id / fail echo json_encode( $ret ); - exit(); + exit( 0 ); } } // empty handed echo json_encode( array( 'count' => 0 ) ); - exit(); + exit( 0 ); } // } Save a segment down (update or add) add_action( 'wp_ajax_zbs_segment_savesegment', 'zeroBSCRM_AJAX_saveSegment' ); @@ -4793,13 +4785,13 @@ function zeroBSCRM_AJAX_saveSegment() { // return id / fail echo json_encode( array( 'id' => $segmentID ) ); - exit(); + exit( 0 ); } } // empty handed - exit(); + exit( 0 ); } /* @@ -4856,7 +4848,7 @@ function zeroBSCRM_AJAX_addTag() { if ( empty( $objType ) ) { zeroBSCRM_sendJSONError( array( 'notag' => 1 ) ); - exit(); + exit( 0 ); } global $zbs; @@ -4907,7 +4899,7 @@ function zeroBSCRM_AJAX_addTag() { } zeroBSCRM_sendJSONError( array( 'dataerr' => 1 ) ); - exit(); + exit( 0 ); } add_action( 'wp_ajax_zbs_delete_tag', 'zeroBSCRM_AJAX_deleteTag' ); @@ -4928,7 +4920,7 @@ function zeroBSCRM_AJAX_deleteTag() { if ( empty( $objTagID ) ) { zeroBSCRM_sendJSONError( array( 'notag' => 1 ) ); - exit(); + exit( 0 ); } global $zbs; @@ -4952,7 +4944,7 @@ function zeroBSCRM_AJAX_deleteTag() { } zeroBSCRM_sendJSONError( array( 'dataerr' => 1 ) ); - exit(); + exit( 0 ); } // } Preview a tagged group @@ -5011,14 +5003,14 @@ function zeroBSCRM_AJAX_previewTagged() { // return id / fail echo json_encode( $ret ); - exit(); + exit( 0 ); } } // empty handed echo json_encode( array( 'count' => 0 ) ); - exit(); + exit( 0 ); } /* @@ -5127,12 +5119,12 @@ function zeroBSCRM_AJAX_saveScreenOptions() { $zbs->DAL->updateSetting( 'screenopts_' . $pageKey, $screenOpts ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase,WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase zeroBSCRM_sendJSONSuccess( array( 'fini' => 1 ) ); - exit(); + exit( 0 ); } zeroBSCRM_sendJSONError( array( 'err' => 'pagekey' ) ); - exit(); + exit( 0 ); } /* @@ -5238,7 +5230,7 @@ function zbs_invoice_send_invoice() { if ( ! zeroBSCRM_validateEmail( $em ) ) { zeroBSCRM_sendJSONError( array( 'message' => __( 'Not valid', 'zero-bs-crm' ) ) ); - exit(); + exit( 0 ); } @@ -5246,7 +5238,7 @@ function zbs_invoice_send_invoice() { if ( $zbs_invID <= 0 || empty( $em ) || ! zeroBSCRM_permsInvoices() ) { zeroBSCRM_sendJSONError( array( 'message' => __( 'Not valid', 'zero-bs-crm' ) ) ); - exit(); + exit( 0 ); } @@ -5265,7 +5257,7 @@ function zbs_invoice_send_invoice() { } // whatever: - exit(); + exit( 0 ); } // v3.0+ send email for an invoice @@ -5461,7 +5453,7 @@ function zeroBSCRM_AJAX_sendStatement() { $r['error'] = __( 'Not a valid email', 'zero-bs-crm' ); zeroBSCRM_sendJSONError( $r ); - exit(); + exit( 0 ); } else { $email = $em; @@ -5472,7 +5464,7 @@ function zeroBSCRM_AJAX_sendStatement() { $r['error'] = ''; zeroBSCRM_sendJSONError( $r ); - exit(); + exit( 0 ); } @@ -5486,7 +5478,7 @@ function zeroBSCRM_AJAX_sendStatement() { $r['error'] = ''; zeroBSCRM_sendJSONError( $r ); - exit(); + exit( 0 ); } @@ -5546,7 +5538,7 @@ function zeroBSCRM_AJAX_sendStatement() { $r['success'] = __( 'Sent', 'zero-bs-crm' ); zeroBSCRM_sendJSONSuccess( $r ); - exit(); + exit( 0 ); } /* @@ -5573,7 +5565,7 @@ function zbs_invoice_mark_paid() { // } Check id + perms + em if ( $zbs_invID < 1 || ! zeroBSCRM_permsInvoices() ) { - die(); + die( 0 ); } else { @@ -5590,7 +5582,7 @@ function zbs_invoice_mark_paid() { } - die(); // exiting ... yarp.. + die( 0 ); // exiting ... yarp.. } // } and send test so they can test before actually sending the invoice @@ -5617,14 +5609,14 @@ function zbs_invoice_send_test_invoice() { if ( ! zeroBSCRM_validateEmail( $em ) ) { $r['message'] = 'Not a valid email'; echo json_encode( $r ); - die(); + die( 0 ); } else { $email = $em; } // } Check id + perms + em if ( $zbs_invID <= 0 || empty( $em ) || ! zeroBSCRM_permsInvoices() ) { - die(); + die( 0 ); } $body = zeroBSCRM_invoice_generateNotificationHTML( $zbs_invID, true ); @@ -5708,7 +5700,7 @@ function zbs_invoice_send_test_invoice() { // sends the invoice via wp_mail (for now)... $r['message'] = 'All done OK'; echo json_encode( $r ); - die(); // exiting ... yarp.. + die( 0 ); // exiting ... yarp.. } /* @@ -5750,7 +5742,7 @@ function zeroBSCRM_AJAX_getInvoice() { // check perms if ( ! zeroBSCRM_permsIsZBSUser() ) { zeroBSCRM_sendJSONError(); - exit(); + exit( 0 ); } // build + return @@ -5769,7 +5761,7 @@ function zeroBSCRM_AJAX_getInvoice() { // pass back in json zeroBSCRM_sendJSONSuccess( $data ); - exit(); + exit( 0 ); } else { @@ -5790,13 +5782,13 @@ function zeroBSCRM_AJAX_getInvoice() { // pass back in json zeroBSCRM_sendJSONSuccess( $data ); - exit(); + exit( 0 ); } // exit json zeroBSCRM_sendJSONError( array( 'here' ) ); - exit(); + exit( 0 ); } /* @@ -5817,7 +5809,7 @@ function zeroBSCRM_ajax_mark_task_complete() { if ( ! zeroBSCRM_perms_tasks() ) { zeroBSCRM_sendJSONError( array( 'permission_error' => 1 ) ); - exit(); + exit( 0 ); } @@ -5839,17 +5831,17 @@ function zeroBSCRM_ajax_mark_task_complete() { $zbs->DAL->events->setEventCompleteness( $taskID, $new_status ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase,WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase } else { zeroBSCRM_sendJSONError( array( 'nostatus' => 1 ) ); - exit(); + exit( 0 ); } $m['message'] = 'Marked ' . $way; echo json_encode( $m, true ); - die(); + die( 0 ); } zeroBSCRM_sendJSONError( array( 'noparams' => 1 ) ); - exit(); + exit( 0 ); } /* @@ -5866,5 +5858,5 @@ function zeroBSCRM_sendJSONSuccess( $successObj = '' ) { header( 'Content-Type: application/json' ); echo json_encode( $successObj, true ); - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.API.php b/projects/plugins/crm/includes/ZeroBSCRM.API.php index 50f397b7d55a8..428315c5fd195 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.API.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.API.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Actions.php b/projects/plugins/crm/includes/ZeroBSCRM.Actions.php index fa16e129fa1b2..c5a6b556fb633 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Actions.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Actions.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.AdminPages.Checks.php b/projects/plugins/crm/includes/ZeroBSCRM.AdminPages.Checks.php index 4fe361d01c2f3..cdd6462081a75 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.AdminPages.Checks.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.AdminPages.Checks.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.AdminPages.php b/projects/plugins/crm/includes/ZeroBSCRM.AdminPages.php index 85afed41ff125..1f42af19b3994 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.AdminPages.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.AdminPages.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.AdminStyling.php b/projects/plugins/crm/includes/ZeroBSCRM.AdminStyling.php index 5a3538c670ad4..8b1b314f73960 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.AdminStyling.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.AdminStyling.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -61,8 +61,6 @@ function zeroBSCRM_clearCloseState( $key = '' ) { // use: add_filter('post_updated_messages', 'zeroBSCRM_improvedPostMsgsBookings'); on init function zeroBSCRM_improvedPostMsgsCustomers( $messages ) { - // print_r($messages); exit(); - $messages['post'] = array( 0 => '', // Unused. Messages start at index 1. 1 => sprintf( @@ -98,8 +96,6 @@ function zeroBSCRM_improvedPostMsgsCustomers( $messages ) { } function zeroBSCRM_improvedPostMsgsCompanies( $messages ) { - // print_r($messages); exit(); - $messages['post'] = array( 0 => '', // Unused. Messages start at index 1. 1 => sprintf( __( jpcrm_label_company() . ' updated. Back to ' . jpcrm_label_company( true ) . '', 'zero-bs-crm' ), esc_url( 'edit.php?post_type=zerobs_company&page=manage-companies' ) ), // get_permalink($post_ID) ) ), @@ -119,8 +115,6 @@ function zeroBSCRM_improvedPostMsgsCompanies( $messages ) { } function zeroBSCRM_improvedPostMsgsInvoices( $messages ) { - // print_r($messages); exit(); - $messages['post'] = array( 0 => '', // Unused. Messages start at index 1. 1 => sprintf( __( 'Invoice updated. Back to Invoices', 'zero-bs-crm' ), esc_url( 'edit.php?post_type=zerobs_invoice&page=manage-invoices' ) ), // get_permalink($post_ID) ) ), @@ -140,8 +134,6 @@ function zeroBSCRM_improvedPostMsgsInvoices( $messages ) { } function zeroBSCRM_improvedPostMsgsQuotes( $messages ) { - // print_r($messages); exit(); - $messages['post'] = array( 0 => '', // Unused. Messages start at index 1. 1 => sprintf( __( 'Quote updated. Back to Quotes', 'zero-bs-crm' ), esc_url( 'edit.php?post_type=zerobs_quote&page=manage-quotes' ) ), // get_permalink($post_ID) ) ), @@ -161,8 +153,6 @@ function zeroBSCRM_improvedPostMsgsQuotes( $messages ) { } function zeroBSCRM_improvedPostMsgsTransactions( $messages ) { - // print_r($messages); exit(); - global $zbs; $messages['post'] = array( @@ -316,20 +306,18 @@ function zeroBSCRM_stopFrontEnd() { if ( is_user_logged_in() ) { // } No need here :) header( 'Location: ' . admin_url( 'admin.php?page=' . $zbs->slugs['managecontacts'] ) ); - exit(); + exit( 0 ); } else { // } No need here :) header( 'Location: ' . wp_login_url() ); - exit(); + exit( 0 ); } } } function zeroBSCRM_catchDashboard() { - // debug echo 'api:'.zeroBSCRM_isAPIRequest().' portal:'.zeroBSCRM_isClientPortalPage().'!'; exit(); - // } Only if not API / Client portal if ( ! zeroBSCRM_isAPIRequest() && ! zeroBSCRM_isClientPortalPage() ) { diff --git a/projects/plugins/crm/includes/ZeroBSCRM.CSVImporter.php b/projects/plugins/crm/includes/ZeroBSCRM.CSVImporter.php index 83f0b75f28609..a57a354b7bf2c 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.CSVImporter.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.CSVImporter.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -146,7 +146,7 @@ function jpcrm_csvimporter_lite_preflight_checks( $stage ) { if ( ! isset( $_POST['zbscrmcsvimportnonce'] ) || ! wp_verify_nonce( $_POST['zbscrmcsvimportnonce'], 'zbscrm_csv_import' ) ) { // hard no zeroBSCRM_html_msg( -1, __( 'There was an error processing your CSV file. Please try again.', 'zero-bs-crm' ) ); - exit(); + exit( 0 ); } // eventually update this to use the zbscrm-store/_wip replacement diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Config.Init.php b/projects/plugins/crm/includes/ZeroBSCRM.Config.Init.php index 22f357546cd48..2b20537706600 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Config.Init.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Config.Init.php @@ -9,7 +9,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.DateTime.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.DateTime.php index fec8b5d8ed6d0..645e60b5fd5b5 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.DateTime.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.DateTime.php @@ -9,7 +9,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.Extensions.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.Extensions.php index a0152dc879582..227266b14b86b 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.Extensions.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.Extensions.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.License.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.License.php index 53539872ad553..b91e0df51e332 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.License.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.License.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -185,25 +185,6 @@ function zeroBSCRM_multisite_getSiteList() { } return $sites; - - // debug print_r(zeroBSCRM_multisite_getSiteList()); exit(); - - /* - we don't need all this - - [blog_id] => 1 - [site_id] => 1 - [domain] => multisitetest.local - [path] => / - [registered] => 2018-08-10 15:29:31 - [last_updated] => 2018-08-10 15:30:43 - [public] => 1 - [archived] => 0 - [mature] => 0 - [spam] => 0 - [deleted] => 0 - [lang_id] => 0 - */ } function zeroBSCRM_tidy_multisite_site( $siteRow = array() ) { diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.Localisation.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.Localisation.php index 913637c4216c1..be1ff603550fd 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.Localisation.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.Localisation.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.Menus.Top.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.Menus.Top.php index 589f0ef8e9bbb..8cadae7463ca7 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.Menus.Top.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.Menus.Top.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.Menus.WP.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.Menus.WP.php index 349b1d8c40f0a..edd3e6ef02525 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.Menus.WP.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.Menus.WP.php @@ -12,7 +12,7 @@ // block access to this file if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* @@ -1304,7 +1304,6 @@ function zeroBSCRM_menus_removeWPSubMenu( $slug = '', $subpage = '' ) { // Global global $submenu; - // Use this to debug: print_r($submenu); exit(); if ( isset( $submenu[ $slug ] ) && is_array( $submenu[ $slug ] ) ) { $newArr = array(); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.Page.Controller.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.Page.Controller.php index 4a685309e1117..8e4b5b18bbc9e 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.Page.Controller.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.Page.Controller.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.php index 1a7add23184a4..b8481ff4ab84d 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.php @@ -8,7 +8,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; // Exit if accessed directly. + exit( 0 ); // Exit if accessed directly. } /** @@ -1766,9 +1766,12 @@ public function init() { // } Brutal override for feeding in json data to typeahead // WH: should these be removed now we're using REST? if ( isset( $_GET['zbscjson'] ) && is_user_logged_in() && zeroBSCRM_permsCustomers() ) { - exit( zeroBSCRM_cjson() ); } - if ( isset( $_GET['zbscojson'] ) && is_user_logged_in() && zeroBSCRM_permsCustomers() ) { - exit( zeroBSCRM_cojson() ); } + // This function outputs JSON-encoded contacts and exits. + zeroBSCRM_cjson(); + } elseif ( isset( $_GET['zbscojson'] ) && is_user_logged_in() && zeroBSCRM_permsCustomers() ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended + // This function outputs JSON-encoded companies and exits. + zeroBSCRM_cojson(); + } // } Brutal override for inv previews // No longer req. v3.0 + this is delivered via HASH URL @@ -1865,7 +1868,7 @@ public function init() { // Redirect to our "no rights" page // OLD WAY header("Location: edit.php?post_type=".$postType."&page=".$this->slugs['zbs-noaccess']."&id=".$postID); header( 'Location: admin.php?page=' . $this->slugs['zbs-noaccess'] . '&zbsid=' . $obj_id . '&zbstype=' . $obj_type_str ); - exit(); + exit( 0 ); } // / no rights. @@ -1877,9 +1880,6 @@ public function init() { } // / !is admin - // debug - // print_r($GLOBALS['wp_post_types']['zerobs_quo_template']); exit(); - // ==================================================================== // ==================== General Perf Testing ========================== if ( defined( 'ZBSPERFTEST' ) ) { @@ -2024,7 +2024,7 @@ function pre_deactivation_check_exts_deactivated() { // instead re-direct to one of our pages which tells them about making sure extensions are // deactivated before deactivating core wp_safe_redirect( admin_url( 'admin.php?page=' . $zbs->slugs['extensions-active'] ) ); - die(); // will killing it here stop deactivation? + die( 0 ); // will killing it here stop deactivation? // failsafe? return false; @@ -2042,14 +2042,11 @@ public function uninstall() { return; } - // if($this->pre_deactivation_check_exts_deactivated()){ - ##WLREMOVE // Remove roles :) zeroBSCRM_clearUserRoles(); - // Debug delete_option('zbsfeedback');exit(); $feedbackAlready = get_option( 'zbsfeedback' ); // if php notice, (e.g. php ver to low, skip this) @@ -2073,7 +2070,7 @@ public function uninstall() { // } require template require_once ZEROBSCRM_PATH . 'admin/activation/before-you-go.php'; - exit(); + exit( 0 ); } catch ( Exception $e ) { @@ -2119,7 +2116,7 @@ public function activated_plugin( $filename ) { // Send the user to the Dash board global $zbs; if ( wp_redirect( zeroBSCRM_getAdminURL( $zbs->slugs['dash'] ) ) ) { - exit; + exit( 0 ); } } } @@ -2175,7 +2172,7 @@ public function wizardInitCheck() { if ( $run_count <= 0 || $force_wizard ) { // require welcome wizard template require_once ZEROBSCRM_PATH . 'admin/activation/welcome-to-jpcrm.php'; - exit(); + exit( 0 ); } ##/WLREMOVE } @@ -2384,7 +2381,7 @@ public function checkBackendAccess() { $redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' ); if ( current_user_can( 'zerobs_customer' ) ) { wp_redirect( $redirect ); - exit(); + exit( 0 ); } } @@ -2529,9 +2526,6 @@ public function setPageTitle( $title = '', $adminTitle = '' ) { // default $pageTitle = ( ( $adminTitle == '' ) ? __( 'Jetpack CRM', 'zero-bs-crm' ) : $adminTitle ); - // useful? global $post, $title, $action, $current_screen; - // global $zbsPage; print_r($zbsPage); exit(); - // we only need to do this for pages where we're using custom setups (not added via wp_add_menu whatever) if ( $this->zbsvar( 'page' ) != -1 ) { @@ -3350,7 +3344,7 @@ public function new_record_edit_redirect( $obj_type, $inserted_id ) { set_transient( $transient_key, $this->pageMessages, MINUTE_IN_SECONDS ); } wp_redirect( jpcrm_esc_link( 'edit', $inserted_id, $obj_type ) ); - exit; + exit( 0 ); } public function catch_preheader_interrupts() { diff --git a/projects/plugins/crm/includes/ZeroBSCRM.CustomerFilters.php b/projects/plugins/crm/includes/ZeroBSCRM.CustomerFilters.php index 4cfa35c687c85..9d0e94ac1c057 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.CustomerFilters.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.CustomerFilters.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -168,7 +168,7 @@ function zeroBSCRM_cjson() { echo json_encode( $ret ); - exit(); + exit( 0 ); } // WH NOTE: WHY is this getting ALL of them and not s? param @@ -197,7 +197,7 @@ function zeroBSCRM_cojson() { echo json_encode( $ret ); - exit(); + exit( 0 ); } /* diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL.Fields.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL.Fields.php index 61869e8eb62e8..fc567f9594221 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL.Fields.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL.Fields.php @@ -11,7 +11,7 @@ */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL2.Mail.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL2.Mail.php index d789e71e506db..c11df84b03144 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL2.Mail.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL2.Mail.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Export.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Export.php index 50be5533c5b6e..28d4bb5fa8922 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Export.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Export.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -439,7 +439,7 @@ function jpcrm_export_process_file_export() { // send end fclose( $output ); - exit(); + exit( 0 ); // == / file fini ================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Fields.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Fields.php index 174c8a8222b41..7f82c279446e9 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Fields.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Fields.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Helpers.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Helpers.php index c33757b26b819..377b3b641df20 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Helpers.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Helpers.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Addresses.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Addresses.php index 7f2240e7f1876..f9061749bd066 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Addresses.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Addresses.php @@ -9,13 +9,7 @@ * Date: 05/07/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Companies.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Companies.php index 713775ef9d12a..0268cbc891b72 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Companies.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Companies.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * ZBS DAL >> Companies diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Contacts.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Contacts.php index 19fec050ac48c..61df355223d4e 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Contacts.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Contacts.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); use Automattic\Jetpack\CRM\Event_Manager\Events_Manager; diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.EventReminders.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.EventReminders.php index 96009d806f907..89cc07d1a93bd 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.EventReminders.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.EventReminders.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Events.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Events.php index 3935e13bc8da5..ec21a5f7288bb 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Events.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Events.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Forms.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Forms.php index ef69343fa58ce..19447d9f38f69 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Forms.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Forms.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Invoices.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Invoices.php index ffd22853f739b..bc6d0a490d5c8 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Invoices.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Invoices.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); use Automattic\Jetpack\CRM\Event_Manager\Events_Manager; diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.LineItems.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.LineItems.php index c26397ec868f4..d67ee00bf6087 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.LineItems.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.LineItems.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* Note on these getting separate DAL OBJ LAYER (excerpt from WH DAL3.0 notes) - There are a few tables which are nested (no separate DAL2.Obj file), for these reasons: diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Logs.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Logs.php index 7ea60b7b2f322..15a6916acd617 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Logs.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Logs.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.QuoteTemplates.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.QuoteTemplates.php index 511d963032ade..1e2f36b1cc1ac 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.QuoteTemplates.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.QuoteTemplates.php @@ -12,7 +12,7 @@ /* ====================================================== Breaking Checks ( stops direct access ) ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; + defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== / Breaking Checks ====================================================== */ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Quotes.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Quotes.php index 49269a65e8cdc..a5fbdadf3998e 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Quotes.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Quotes.php @@ -12,7 +12,7 @@ /* ====================================================== Breaking Checks ( stops direct access ) ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; + defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== / Breaking Checks ====================================================== */ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Segments.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Segments.php index 25aa4f95a82e7..db6cf9ef86419 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Segments.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Segments.php @@ -11,7 +11,7 @@ use Automattic\JetpackCRM\Segment_Condition_Exception; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * ZBS DAL >> Segments diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Transactions.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Transactions.php index 6aac800c2edaa..2743fbf49998c 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Transactions.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Transactions.php @@ -11,13 +11,7 @@ // phpcs:disable Generic.WhiteSpace.DisallowSpaceIndent.SpacesUsed, WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); use Automattic\Jetpack\CRM\Event_Manager\Events_Manager; diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.ObjectLayer.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.ObjectLayer.php index 90f8bb87a15de..6bb456880f72a 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.ObjectLayer.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.ObjectLayer.php @@ -9,13 +9,7 @@ * Date: 14/01/19 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.php index 4688f46f56ed1..a76c7d22ba53c 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* DAL3.0 Notes: diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DashboardBoxes.php b/projects/plugins/crm/includes/ZeroBSCRM.DashboardBoxes.php index 97bcbc56de894..0afda2a6eb57c 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DashboardBoxes.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DashboardBoxes.php @@ -10,13 +10,7 @@ */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DataIOValidation.php b/projects/plugins/crm/includes/ZeroBSCRM.DataIOValidation.php index 771bf78796ae8..f3fcd78835fe1 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DataIOValidation.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DataIOValidation.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Database.php b/projects/plugins/crm/includes/ZeroBSCRM.Database.php index 1eeb55de50dab..00668dfbb68dc 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Database.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Database.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== Table Creation diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Delete.php b/projects/plugins/crm/includes/ZeroBSCRM.Delete.php index db979b2923933..5821fb97770cf 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Delete.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Delete.php @@ -9,13 +9,7 @@ * Date: 26/02/18 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); class zeroBSCRM_Delete{ @@ -88,8 +82,6 @@ function __construct($args=array()) { if ((!isset($this->listViewSlug) || $this->listViewSlug == false) && !empty($objSlug)) $this->listViewSlug = $objSlug; } - - //echo 'loading from '.$this->objTypeID.':
    '.print_r(array($objTypeStr,$objSingular,$objPlural,$objSlug),1).'
    '; exit(); } // if objid - load $post diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Edit.Segment.php b/projects/plugins/crm/includes/ZeroBSCRM.Edit.Segment.php index 6d2d3a981760c..7b3e9d982bb36 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Edit.Segment.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Edit.Segment.php @@ -9,15 +9,9 @@ * Date: 09/01/18 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ -if (! defined('ZEROBSCRM_PATH')) { - exit; +if ( ! defined( 'ZEROBSCRM_PATH' ) ) { + exit( 0 ); } -/* ====================================================== - / Breaking Checks - ====================================================== */ function zeroBSCRM_pages_addEditSegment($potentialID = -1) { diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Edit.php b/projects/plugins/crm/includes/ZeroBSCRM.Edit.php index 1dc45c1259541..5e8a4ee00b547 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Edit.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Edit.php @@ -9,13 +9,7 @@ * Date: 26/02/18 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); class zeroBSCRM_Edit{ @@ -96,9 +90,6 @@ function __construct($args=array()) { if ((!isset($this->listViewSlug) || $this->listViewSlug == false) && !empty($objSlug)) $this->listViewSlug = $objSlug; } - - //echo 'loading from '.$this->objTypeID.':
    '.print_r(array($objTypeStr,$objSingular,$objPlural,$objSlug),1).'
    '; exit(); - } else $this->isNewRecord = true; // if objid - load $post diff --git a/projects/plugins/crm/includes/ZeroBSCRM.ErrorCodes.php b/projects/plugins/crm/includes/ZeroBSCRM.ErrorCodes.php index 6f57fceed2125..da37f8313ad22 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.ErrorCodes.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.ErrorCodes.php @@ -9,13 +9,7 @@ * Date: 12/07/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // WIP return of all error codes as array // hard-typed for v3.0 - note Do not change these lightly, programattically relied upon (at minimum for v2-3 migration) @@ -143,5 +137,4 @@ function zeroBSCRM_errorCodes(){ ), ); - - } \ No newline at end of file +} diff --git a/projects/plugins/crm/includes/ZeroBSCRM.ExternalSources.php b/projects/plugins/crm/includes/ZeroBSCRM.ExternalSources.php index 23f1b8716ea64..933b0cdef581d 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.ExternalSources.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.ExternalSources.php @@ -9,13 +9,7 @@ * Date: 11/01/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* diff --git a/projects/plugins/crm/includes/ZeroBSCRM.FileUploads.php b/projects/plugins/crm/includes/ZeroBSCRM.FileUploads.php index f187658d716b5..e1da057408788 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.FileUploads.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.FileUploads.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.FormatHelpers.php b/projects/plugins/crm/includes/ZeroBSCRM.FormatHelpers.php index df2fb851b65ad..b5e1f038e67fc 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.FormatHelpers.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.FormatHelpers.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -187,8 +181,6 @@ function zeroBSCRM_html_contactTimeline($contactID=-1,$logs=false,$contactObj=fa $logs = zeroBSCRM_getContactLogs($contactID,true,100,0,'',false); } - //echo 'zeroBSCRM_html_contactTimeline
    '.print_r($logs,1).'
    '; exit(); - // Compile a list of actions to show // - if under 10, show them all diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Forms.php b/projects/plugins/crm/includes/ZeroBSCRM.Forms.php index fedc5f80f7eba..3fbc560ac6775 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Forms.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Forms.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== @@ -47,7 +41,7 @@ function zeroBSCRM_forms_templateRedirect() { // require template require_once( ZEROBSCRM_PATH . 'public/forms/form-'.$potentialForm.'.php' ); - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.GeneralFuncs.php b/projects/plugins/crm/includes/ZeroBSCRM.GeneralFuncs.php index c028464e10f61..6934b919ddd99 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.GeneralFuncs.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.GeneralFuncs.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Wrapper for zerobscrm_doing_it_wrong. @@ -163,10 +157,10 @@ function zeroBSCRM_stripSlashesFromArr( $value ) { // phpcs:ignore WordPress.Nam # from http://wordpress.stackexchange.com/questions/91900/how-to-force-a-404-on-wordpress function zeroBSCRM_force_404() { - status_header( 404 ); - nocache_headers(); - include( get_query_template( '404' ) ); - die(); + status_header( 404 ); + nocache_headers(); + include get_query_template( '404' ); + die( 0 ); } // WH not sure why we need this, shuttled off into zeroBSCRM_generateHash which is cleaner. diff --git a/projects/plugins/crm/includes/ZeroBSCRM.IntegrationFuncs.php b/projects/plugins/crm/includes/ZeroBSCRM.IntegrationFuncs.php index 5b0c91d54d766..e3d03e84df32c 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.IntegrationFuncs.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.IntegrationFuncs.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -267,7 +261,7 @@ function zeroBS_integrations_addOrUpdateCustomer($externalSource='',$externalID= #} Notify + exit echo esc_html( 'Contact Add/Update Issue: A contact already exists with the email "' . $customerFields['zbsc_email'] . '" (ID: ' . $potentialCustomerIDfromEmail . '), user could not be processed!' ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase - exit(); + exit( 0 ); break; @@ -560,7 +554,7 @@ function zeroBS_integrations_addOrUpdateCompany( #} Notify + exit echo esc_html( __(jpcrm_label_company().' Add/Update Issue: A '.jpcrm_label_company().' already exists with the name "','zero-bs-crm').$potentialCoName.'" (ID: '.$potentialCompanyIDfromName.'), '.__('could not be processed!','zero-bs-crm') ); - exit(); + exit( 0 ); break; diff --git a/projects/plugins/crm/includes/ZeroBSCRM.InternalAutomator.php b/projects/plugins/crm/includes/ZeroBSCRM.InternalAutomator.php index fb0f37750e8be..570dd9289f044 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.InternalAutomator.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.InternalAutomator.php @@ -9,13 +9,7 @@ * Date: 30/08/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.InternalAutomatorRecipes.php b/projects/plugins/crm/includes/ZeroBSCRM.InternalAutomatorRecipes.php index 1bba94cd962eb..b22bbd96417e5 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.InternalAutomatorRecipes.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.InternalAutomatorRecipes.php @@ -9,13 +9,7 @@ * Date: 30/08/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Inventory.php b/projects/plugins/crm/includes/ZeroBSCRM.Inventory.php index db8e52e46233b..7921895a1af22 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Inventory.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Inventory.php @@ -9,13 +9,7 @@ * Date: 25/10/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== Declare Globals diff --git a/projects/plugins/crm/includes/ZeroBSCRM.InvoiceBuilder.php b/projects/plugins/crm/includes/ZeroBSCRM.InvoiceBuilder.php index 0ae623853d85e..f3bbcfca6ac8b 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.InvoiceBuilder.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.InvoiceBuilder.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // takes inv meta and works out if due // now v3.0 friendly! @@ -138,22 +132,19 @@ function zeroBSCRM_invoice_generateInvoiceHTML_v3( $invoiceID=-1, $return=true ) // now all wired through zeroBSCRM_invoicing_generateInvoiceHTML $html = zeroBSCRM_invoicing_generateInvoiceHTML($invoiceID,'pdf',$templatedHTML); - // return - if ( !$return ){ - - echo $html; - exit(); - - } - - } + // return + if ( ! $return ) { + echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + exit( 0 ); + } + } - return $html; + return $html; - } + } - #} Empty inv id - return false; + #} Empty inv id + return false; } // this was clunky, so split into 3.0 and <3.0 versions. @@ -208,23 +199,18 @@ function zeroBSCRM_invoice_generatePortalInvoiceHTML_v3($invoiceID=-1,$return=tr // now all wired through zeroBSCRM_invoicing_generateInvoiceHTML $html = zeroBSCRM_invoicing_generateInvoiceHTML($invoiceID,'portal',$html); - // return - if ( !$return ){ - - echo $html; - exit(); - - } - - } - - return $html; - - } + // return + if ( ! $return ) { + echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + exit( 0 ); + } + } - #} Empty inv id - return false; + return $html; + } + #} Empty inv id + return false; } function zbs_invoice_generate_pdf(){ @@ -234,7 +220,7 @@ function zbs_invoice_generate_pdf(){ // THIS REALLLY needs nonces! For now (1.1.19) added this for you... if ( ! zeroBSCRM_permsInvoices() ) { - exit(); + exit( 0 ); } // Check ID @@ -243,7 +229,7 @@ function zbs_invoice_generate_pdf(){ $invoice_id = (int) $_POST['zbs_invoice_id']; // phpcs:ignore WordPress.Security.NonceVerification.Missing } if ( $invoice_id <= 0 ) { - exit(); + exit( 0 ); } // generate the PDF @@ -266,7 +252,7 @@ function zbs_invoice_generate_pdf(){ } - exit(); + exit( 0 ); } } // This fires post ZBS init @@ -320,15 +306,17 @@ function zbs_invoice_html($invoicePostID){ #} this generates a PDF statement for a contact, either returning the filepath or a PDF download prompt function zeroBSCRM_invoicing_generateStatementPDF( $contactID = -1, $returnPDF = false ){ - if (!zeroBSCRM_permsInvoices()) exit(); + if ( ! zeroBSCRM_permsInvoices() ) { + exit( 0 ); + } - global $zbs; + global $zbs; #} Check ID $contactID = (int)$contactID; #} If user has no perms, or id not present, die if (!zeroBSCRM_permsInvoices() || empty($contactID) || $contactID <= 0){ - die(); + die( 0 ); } $html = zeroBSCRM_invoicing_generateStatementHTML($contactID); @@ -728,7 +716,7 @@ function zeroBSCRM_invoicing_generateStatementHTML_v3( $contact_id = -1, $return if ( ! $return ) { echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Jetpack.php b/projects/plugins/crm/includes/ZeroBSCRM.Jetpack.php index d1b1150d742e4..5bfc133ff6369 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Jetpack.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Jetpack.php @@ -15,7 +15,7 @@ ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* diff --git a/projects/plugins/crm/includes/ZeroBSCRM.List.Columns.php b/projects/plugins/crm/includes/ZeroBSCRM.List.Columns.php index 30947ce80e6ba..d85c762b2e235 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.List.Columns.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.List.Columns.php @@ -5,13 +5,7 @@ */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); #{ Wh NOTE: this should all be in 1 global, messy to ahve them all separate! } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.List.Tasks.php b/projects/plugins/crm/includes/ZeroBSCRM.List.Tasks.php index a148e95651def..5c3bf9dcf731c 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.List.Tasks.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.List.Tasks.php @@ -10,7 +10,7 @@ */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } function zeroBSCRM_render_tasks_calendar_page() { diff --git a/projects/plugins/crm/includes/ZeroBSCRM.List.Views.php b/projects/plugins/crm/includes/ZeroBSCRM.List.Views.php index bfd933ed37f7f..6bbb8fb483423 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.List.Views.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.List.Views.php @@ -12,7 +12,7 @@ // prevent direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/crm/includes/ZeroBSCRM.List.php b/projects/plugins/crm/includes/ZeroBSCRM.List.php index 4bf6eebb8aa5f..c79d5ba3f23b5 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.List.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.List.php @@ -9,13 +9,7 @@ * Date: 26/05/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); class zeroBSCRM_list{ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MailTracking.php b/projects/plugins/crm/includes/ZeroBSCRM.MailTracking.php index 34bbd6881f433..83fe630c0354c 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MailTracking.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MailTracking.php @@ -9,13 +9,7 @@ * Date: 09/01/2017 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); #1 - Client Portal Welcome Email #2 - Quote Accepted Email @@ -78,7 +72,7 @@ function zeroBSCRM_mailTracking_track(){ header( 'Content-Transfer-Encoding: binary' ); readfile( $localBlankGif ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBox.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBox.php index 88ee2694649a8..e9e18a735e695 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBox.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBox.php @@ -9,13 +9,7 @@ * Date: 27/02/18 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -315,7 +309,7 @@ function zeroBSCRM_add_meta_box( $id, $title, $callback, $screen = null, $contex zeroBSCRM_add_meta_box( $id, $title, $callback, $single_screen, $context, $priority, $callback_args, $headless, $extraClasses, $capabilities ); } } - // echo 'screen:
    '; print_r($screen); echo '
    !'; exit(); + if ( ! isset( $screen->id ) ) { return; } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes.SubmitBoxes.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes.SubmitBoxes.php index 8e6774414476c..8709629e3db6f 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes.SubmitBoxes.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes.SubmitBoxes.php @@ -9,13 +9,7 @@ * Date: 25/10/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); # NOTE: http://themeflection.com/replace-wordpress-submit-meta-box/ @@ -225,7 +219,6 @@ public function print_meta_box( $post, $metabox ) { } */ } - -/* ====================================================== - / Submit Metabox - ====================================================== */ \ No newline at end of file +/** + * End of Submit Metabox + */ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Companies.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Companies.php index 2ddc6e1ef0696..a1de01c8383e0 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Companies.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Companies.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -258,11 +252,6 @@ public function save_data( $company_id, $company ) { } - /* debug - echo '_POST:
    '.print_r($_POST,1).'
    '; - echo 'dataArr:
    '.print_r($dataArr,1).'
    '; exit(); - */ - // now we check whether a user with this email already exists (separate to this company id), so we can warn them // ... that it wont have changed the email if (isset($dataArr['email']) && !empty($dataArr['email'])){ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Contacts.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Contacts.php index e7e13be6c1399..e9efd0f53c48a 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Contacts.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Contacts.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.ExternalSources.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.ExternalSources.php index fb593d75ab800..8578eeb95f480 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.ExternalSources.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.ExternalSources.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== Create External Source Metabox @@ -99,7 +93,7 @@ public function html( $obj, $metabox ) { } } - -/* ====================================================== - / Create External Source Metabox - ====================================================== */ \ No newline at end of file + +/** + * End of Create External Source Metabox + */ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Forms.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Forms.php index ccdce3f9ecd61..44b720325e556 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Forms.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Forms.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -251,7 +245,7 @@ public function post_save_data($objID,$obj){ // redir wp_redirect( jpcrm_esc_link('edit',$zbsJustInsertedMetaboxID,$this->objType) ); - exit; + exit( 0 ); } @@ -759,7 +753,6 @@ public function html( $form, $metabox ) { // saved via main metabox } - -/* ====================================================== - / Form Action Metabox - ====================================================== */ \ No newline at end of file +/** + * End of Form Action Metabox + */ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Invoices.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Invoices.php index 5130901710c46..b7bcca9ff9692 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Invoices.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Invoices.php @@ -12,7 +12,7 @@ /* ====================================================== Breaking Checks ( stops direct access ) ====================================================== */ -if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== / Breaking Checks ====================================================== */ @@ -418,7 +418,7 @@ public function post_save_data( $objID, $obj ) { // redir wp_redirect( jpcrm_esc_link( 'edit', $zbsJustInsertedMetaboxID, $this->objType ) ); - exit; + exit( 0 ); } @@ -778,9 +778,6 @@ public function __construct( $plugin_file ) { } public function html( $invoice, $metabox ) { - - // debug print_r($invoice); exit(); - ?>
    diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Logs.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Logs.php index 495088cb76e85..d18b6edf19062 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Logs.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Logs.php @@ -8,13 +8,7 @@ * * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -178,9 +172,6 @@ public function html( $obj, $metabox ) { if ((!isset($this->postType) || $this->postType == false) && !empty($objTypeStr)) $this->postType = $objTypeStr; } - - //echo 'loading from '.$this->objTypeID.':
    '.print_r(array($objTypeStr,$objSingular,$objPlural,$objSlug),1).'
    '; exit(); - } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Ownership.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Ownership.php index 6c8162008f2e3..393b24ac358c3 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Ownership.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Ownership.php @@ -13,7 +13,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ -if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== / Breaking Checks @@ -152,4 +152,4 @@ public function save_data( $objID, $obj ) { return $obj; } -} \ No newline at end of file +} diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.QuoteTemplates.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.QuoteTemplates.php index d277b18e9a212..979cde136d908 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.QuoteTemplates.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.QuoteTemplates.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -94,21 +88,6 @@ public function html( $quoteTemplate, $metabox ) { $placeholder_list = $placeholder_templating->get_placeholders_for_tooling( array( 'quote', 'contact', 'global' ), false, false ); echo ''; - // Fields: - // CPT just had Title + Content - // DAL3 has more :) - - #} Retrieve fields from global - /* this is all debug - global $zbsCustomerQuoteFields; $fields2 = $zbsCustomerQuoteFields; - // Debug - echo 'Fields:
    '.print_r($fields2,1).'
    '; - - $fields3 = $zbs->DAL->quotetemplates->generateFieldsGlobalArr(); - echo 'Fields2:
    '.print_r($fields3,1).'
    '; - exit(); - */ - // for mvp v3.0 we now just hard-type these, as there a lesser obj rarely used. $fields = array( @@ -202,8 +181,6 @@ public function save_data( $quoteTemplateID, $quoteTemplate ) { } - // Debug echo 'updating:
    '.print_r($quoteTemplate,1).'
    '; exit(); - // add/update $addUpdateReturn = $zbs->DAL->quotetemplates->addUpdateQuoteTemplate(array( @@ -272,7 +249,7 @@ public function post_save_data($objID,$obj){ // redir wp_redirect( jpcrm_esc_link('edit',$zbsJustInsertedMetaboxID,$this->objType) ); - exit; + exit( 0 ); } @@ -392,7 +369,6 @@ public function html( $quoteTemplate, $metabox ) { // saved via main metabox } - -/* ====================================================== - / Quote Template Action Metabox - ====================================================== */ \ No newline at end of file +/** + * End of Quote Template Action Metabox + */ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Quotes.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Quotes.php index afe4e93956d03..92782781c8170 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Quotes.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Quotes.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -417,11 +411,6 @@ public function save_data( $quoteID, $quote ) { // Save tags against objid $quote['tags'] = zeroBSCRM_tags_retrieveFromPostBag(true,ZBS_TYPE_QUOTE); - /*// debug - echo 'POST:
    '.print_r($_POST,1).'
    '; - echo 'Quote:
    '.print_r($quote,1).'
    '; - exit();*/ - // we always get this, because it's used below, but not part of buildObjArr (currently at 3.0) if ($quoteID > 0) $quote['template'] = (int)$zbs->DAL->quotes->getQuoteTemplateID($quoteID); @@ -529,8 +518,6 @@ public function save_data( $quoteID, $quote ) { )); - //echo 'adding:'.$quoteID.':
    '.print_r($quote,1).'
    '; exit(); - // Note: For NEW objs, we make sure a global is set here, that other update funcs can catch // ... so it's essential this one runs first! // this is managed in the metabox Class :) @@ -589,7 +576,7 @@ public function post_save_data($objID,$obj){ // redir wp_redirect( jpcrm_esc_link('edit',$zbsJustInsertedMetaboxID,$this->objType) ); - exit; + exit( 0 ); } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.TagManager.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.TagManager.php index 6350c779e13b1..7e37c2d460326 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.TagManager.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.TagManager.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tags.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tags.php index 1c05bf0d13d8d..cfbe5e4188e31 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tags.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tags.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tasks.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tasks.php index 64750c2a782ca..1f4a5414d0132 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tasks.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tasks.php @@ -15,7 +15,7 @@ Breaking Checks ( stops direct access ) ====================================================== */ if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /* ====================================================== @@ -215,8 +215,6 @@ public function save_data( $task_id, $task ) { } $task['reminders'] = $task_reminders; - // echo 'Task owned by '.$owner.':
    '.print_r($task,1).'
    '; exit(); - // add/update $addUpdateReturn = $zbs->DAL->events->addUpdateEvent( array( @@ -288,7 +286,7 @@ public function post_save_data( $objID, $obj ) { // redir wp_redirect( jpcrm_esc_link( 'edit', $zbsJustInsertedMetaboxID, $this->objType ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Transactions.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Transactions.php index ac697ce0399e2..6666995f6d2d5 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Transactions.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Transactions.php @@ -9,13 +9,7 @@ * Date: 20/02/2019 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -94,7 +88,6 @@ public function html( $transaction, $metabox ) { $transaction = $zbsObjDataPrefill; } - // debug echo '
    '; print_r(array($transaction,$metabox)); echo '
    '; exit(); global $zbs; @@ -574,7 +567,7 @@ public function post_save_data($objID,$obj){ // redir wp_redirect( jpcrm_esc_link('edit',$zbsJustInsertedMetaboxID,$this->objType) ); - exit; + exit( 0 ); } @@ -733,7 +726,6 @@ public function html( $transaction, $metabox ) { // saved via main metabox } - -/* ====================================================== - / Transaction Action Metabox - ====================================================== */ \ No newline at end of file +/** + * End of Transaction Action Metabox + */ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Migrations.php b/projects/plugins/crm/includes/ZeroBSCRM.Migrations.php index c9cbba3d6316f..3393a8a5dab44 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Migrations.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Migrations.php @@ -9,13 +9,7 @@ * Date: 30/08/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== MIGRATION FUNCS @@ -165,7 +159,7 @@ function zeroBSCRM_migrations_run( $settingsArr = false, $run_at = 'init' ){ // stop running migrations, reload the page header("Refresh:0"); - exit(); + exit( 0 ); } else { diff --git a/projects/plugins/crm/includes/ZeroBSCRM.NotifyMe.php b/projects/plugins/crm/includes/ZeroBSCRM.NotifyMe.php index c9ee1a37c7ed3..599e27fbe5603 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.NotifyMe.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.NotifyMe.php @@ -11,13 +11,7 @@ */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ================================================================================================================ * @@ -534,7 +528,7 @@ function zeroBSCRM_notifyme_get_notifications_ajax(){ $res['count'] = count($res['notifications']); } echo json_encode($res,true); - die(); + die( 0 ); } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php b/projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php index d0380e1c70274..5bc0cf6b8ba61 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php @@ -20,13 +20,7 @@ * around the CRM so that they don't miss important features. */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); function zeroBS_onboardme_scripts(){ @@ -149,4 +143,4 @@ function zeroBS_onboardme_helper(){ to:'.$to_path; - //exit(); - if ( true === $wp_filesystem->move( $from_path, $to_path ) ) { return trailingslashit( $to_path ); } else { diff --git a/projects/plugins/crm/includes/ZeroBSCRM.QuoteBuilder.php b/projects/plugins/crm/includes/ZeroBSCRM.QuoteBuilder.php index b50b30d92a4a6..4f7bafef21a64 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.QuoteBuilder.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.QuoteBuilder.php @@ -12,7 +12,7 @@ // block direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } // This fires post CRM init @@ -30,12 +30,12 @@ function jpcrm_quote_generate_posted_pdf() { // Check nonce if ( ! wp_verify_nonce( $_POST['jpcrm_quote_pdf_gen_nonce'], 'jpcrm-quote-pdf-gen' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated,WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized - exit(); + exit( 0 ); } // check permissions if ( ! zeroBSCRM_permsQuotes() ) { - exit(); + exit( 0 ); } // Check ID @@ -45,7 +45,7 @@ function jpcrm_quote_generate_posted_pdf() { } if ( $quote_id <= 0 ) { - exit(); + exit( 0 ); } // generate the PDF @@ -67,7 +67,7 @@ function jpcrm_quote_generate_posted_pdf() { } - exit(); + exit( 0 ); } } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.REST.php b/projects/plugins/crm/includes/ZeroBSCRM.REST.php index 8a7547bc0a0f3..d191aeefe7466 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.REST.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.REST.php @@ -16,13 +16,7 @@ */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== diff --git a/projects/plugins/crm/includes/ZeroBSCRM.ScreenOptions.php b/projects/plugins/crm/includes/ZeroBSCRM.ScreenOptions.php index c6aebe58de4d3..e48dd728fb947 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.ScreenOptions.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.ScreenOptions.php @@ -9,13 +9,7 @@ * Date: 27/05/18 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // outputs top of page screen options panel :) // (based on rights + pagekey) @@ -238,5 +232,4 @@ function zeroBS_canUpdateScreenOptions(){ if ($id > 0) return true; return false; - -} \ No newline at end of file +} diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Social.php b/projects/plugins/crm/includes/ZeroBSCRM.Social.php index 3318f768c2eee..916b290ef2bca 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Social.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Social.php @@ -9,13 +9,7 @@ * Date: 16/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -113,6 +107,6 @@ function show_social_links() { return $social_links_string; } -/* ====================================================== - / Social helper funcs - ====================================================== */ \ No newline at end of file + /** + * End of Social helper funcs + */ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.SystemChecks.php b/projects/plugins/crm/includes/ZeroBSCRM.SystemChecks.php index 9e0af4fc7f458..1075f89796d19 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.SystemChecks.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.SystemChecks.php @@ -9,13 +9,7 @@ * Date: 01/11/16 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.TagManager.php b/projects/plugins/crm/includes/ZeroBSCRM.TagManager.php index b63bfd6817f82..67c7474b6b0ee 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.TagManager.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.TagManager.php @@ -9,13 +9,7 @@ * Date: 19/03/18 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); class zeroBSCRM_TagManager{ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.WYSIWYGButtons.php b/projects/plugins/crm/includes/ZeroBSCRM.WYSIWYGButtons.php index acb53e8b1144b..bf37aaf8232d1 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.WYSIWYGButtons.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.WYSIWYGButtons.php @@ -12,7 +12,7 @@ /* ====================================================== Breaking Checks ( stops direct access ) ======================================================= */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; + defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* ====================================================== / Breaking Checks ====================================================== */ @@ -111,4 +111,4 @@ function zeroBSCRM__WYSIWYG_quotebuildr_tc4_button() { /* ====================================================== / ZBS WYSIWYG Editor Buttons - ====================================================== */ \ No newline at end of file + ====================================================== */ diff --git a/projects/plugins/crm/includes/class-crm-exception.php b/projects/plugins/crm/includes/class-crm-exception.php index bc8ec37cfd99a..dbc02ab38fa5f 100644 --- a/projects/plugins/crm/includes/class-crm-exception.php +++ b/projects/plugins/crm/includes/class-crm-exception.php @@ -7,7 +7,7 @@ namespace Automattic\JetpackCRM; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * CRM exception class. diff --git a/projects/plugins/crm/includes/class-crm-modules.php b/projects/plugins/crm/includes/class-crm-modules.php index 212be10e7cbcf..f3b26d9cacada 100644 --- a/projects/plugins/crm/includes/class-crm-modules.php +++ b/projects/plugins/crm/includes/class-crm-modules.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // Prevent PHP 8.2 deprecation notices, as we currently add each module as a dynamic property #[\AllowDynamicProperties] @@ -131,7 +131,7 @@ public function activate_module_and_redirect() { // redirect to URL wp_safe_redirect( $redirect_to ); - exit; + exit( 0 ); } else { printf( 'Module %s not found. Error #607', esc_html( $module_name ) ); } diff --git a/projects/plugins/crm/includes/class-encryption.php b/projects/plugins/crm/includes/class-encryption.php index 7f0de48918d58..44db2e7123373 100644 --- a/projects/plugins/crm/includes/class-encryption.php +++ b/projects/plugins/crm/includes/class-encryption.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); class Encryption { diff --git a/projects/plugins/crm/includes/class-endpoint-listener.php b/projects/plugins/crm/includes/class-endpoint-listener.php index c195536767633..f4070bb64aa6f 100644 --- a/projects/plugins/crm/includes/class-endpoint-listener.php +++ b/projects/plugins/crm/includes/class-endpoint-listener.php @@ -11,7 +11,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Endpoint Listener class. diff --git a/projects/plugins/crm/includes/class-learn-menu.php b/projects/plugins/crm/includes/class-learn-menu.php index 7750a5418ca2b..125096fb72389 100644 --- a/projects/plugins/crm/includes/class-learn-menu.php +++ b/projects/plugins/crm/includes/class-learn-menu.php @@ -8,7 +8,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Learn menu class diff --git a/projects/plugins/crm/includes/class-missing-settings-exception.php b/projects/plugins/crm/includes/class-missing-settings-exception.php index 395989a720d80..8c89fe43110e7 100644 --- a/projects/plugins/crm/includes/class-missing-settings-exception.php +++ b/projects/plugins/crm/includes/class-missing-settings-exception.php @@ -7,7 +7,7 @@ namespace Automattic\JetpackCRM; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Missing Settings exception class. diff --git a/projects/plugins/crm/includes/class-oauth-handler.php b/projects/plugins/crm/includes/class-oauth-handler.php index 50282373b9005..8fa75f60b3dea 100644 --- a/projects/plugins/crm/includes/class-oauth-handler.php +++ b/projects/plugins/crm/includes/class-oauth-handler.php @@ -13,7 +13,7 @@ use Google\Service\Gmail; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); class Oauth_Handler { @@ -325,15 +325,13 @@ public function catch_google_mail_authorisation(){ $authorisation_url = $provider->getAuthorizationUrl(['prompt' => 'consent', 'access_type' => 'offline']); $_SESSION['oauth2state'] = $provider->getState(); header( 'Location: ' . $authorisation_url ); - exit; + exit( 0 ); } elseif ( empty( $_GET['state'] ) || ( $_GET['state'] !== $_SESSION['oauth2state'] ) ) { - - // State is invalid, possible CSRF attack in progress - // (though to get here we'd need to be admin, so probably this'll never fire) - unset( $_SESSION['oauth2state'] ); - exit(); - + // State is invalid, possible CSRF attack in progress + // (though to get here we'd need to be admin, so probably this'll never fire) + unset( $_SESSION['oauth2state'] ); + exit( 0 ); } else { try { @@ -1044,7 +1042,7 @@ private function display_alert( $msg_class='', $msg_header='', $msg_html='', $ic ?>
    libLoad('dompdf'); use FontLib\Font; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); diff --git a/projects/plugins/crm/includes/jpcrm-language.php b/projects/plugins/crm/includes/jpcrm-language.php index 6ac5780a920e6..1a315928153cc 100644 --- a/projects/plugins/crm/includes/jpcrm-language.php +++ b/projects/plugins/crm/includes/jpcrm-language.php @@ -5,13 +5,7 @@ * V4.0.7 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // gets 'Contact' (legacy/deprecated) // Unless this is used in any extensions this can be removed. @@ -54,8 +48,7 @@ function jpcrm_label_company($plural=false){ if ($organisationType == 'org') $s = __('Organisations',"zero-bs-crm"); if ($organisationType == 'domain') $s = __('Domains',"zero-bs-crm"); - } - - return $s; + } - } \ No newline at end of file + return $s; +} diff --git a/projects/plugins/crm/includes/jpcrm-localisation.php b/projects/plugins/crm/includes/jpcrm-localisation.php index 6f767c02520c5..36c1dfce02bf4 100644 --- a/projects/plugins/crm/includes/jpcrm-localisation.php +++ b/projects/plugins/crm/includes/jpcrm-localisation.php @@ -6,7 +6,7 @@ // prevent direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/crm/includes/jpcrm-mail-templating.php b/projects/plugins/crm/includes/jpcrm-mail-templating.php index 9474569300ba3..ed5d2985e20af 100644 --- a/projects/plugins/crm/includes/jpcrm-mail-templating.php +++ b/projects/plugins/crm/includes/jpcrm-mail-templating.php @@ -9,13 +9,7 @@ * Date: 09/01/2017 */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); @@ -69,11 +63,8 @@ function zeroBSCRM_mailTemplate_emailPreview($templateID=-1){ $replacements['email'] = 'your.user@email.com'; $replacements['login-url'] = site_url('clients/login'); - - //echo 'rep:
    '.print_r($replacements,1).'
    '; exit(); - // replace vars - $html = $placeholder_templating->replace_placeholders( array( 'global', 'contact' ), $html, $replacements ); - + // replace vars + $html = $placeholder_templating->replace_placeholders( array( 'global', 'contact' ), $html, $replacements ); } @@ -291,7 +282,7 @@ function zeroBSCRM_preview_email_template(){ } - die(); + die( 0 ); } } @@ -453,7 +444,7 @@ function zeroBSCRM_quote_generateNotificationHTML( $quoteID = -1, $return = true if ( !$return ) { echo $html; - exit(); + exit( 0 ); } @@ -557,7 +548,7 @@ function zeroBSCRM_quote_generateAcceptNotifHTML( $quoteID = -1, $quoteSignedBy if ( !$return ) { echo $html; - exit(); + exit( 0 ); } @@ -616,7 +607,7 @@ function zeroBSCRM_invoice_generateNotificationHTML( $invoiceID = -1, $return = if ( !$return ) { echo $html; - exit(); + exit( 0 ); } @@ -686,7 +677,7 @@ function zeroBSCRM_statement_generateNotificationHTML( $contact_id = -1, $return if ( !$return ) { echo $html; - exit(); + exit( 0 ); } @@ -749,7 +740,7 @@ function zeroBSCRM_Portal_generateNotificationHTML( $pwd = -1, $return = true, $ if ( !$return ) { echo $html; - exit(); + exit( 0 ); } @@ -801,7 +792,7 @@ function zeroBSCRM_Portal_generatePWresetNotificationHTML( $pwd, $return, $conta if ( !$return ) { echo $html; - exit(); + exit( 0 ); } @@ -888,7 +879,7 @@ function jpcrm_task_generate_notification_html( $return = true, $email = false, if ( !$return ) { echo $html; - exit(); + exit( 0 ); } } @@ -938,21 +929,15 @@ function jpcrm_mailTemplates_single_send_templated( $return=true, $content='', $ // enact replacements $html = $placeholder_templating->replace_placeholders( array( 'global', 'contact', 'company' ), $html, $replacements, array( ZBS_TYPE_CONTACT => $contact_object ) ); - - // return - if ( !$return ) { - - echo $html; - exit(); - - } - } - - return $html; - - -} + // return + if ( ! $return ) { + echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + exit( 0 ); + } + } + return $html; +} /* ====================================================== / ZBS Single Send Emails - Generate HTML ====================================================== */ @@ -985,20 +970,15 @@ function jpcrm_mailTemplates_generic_msg($return=true, $content='', $title = '') // replacements $html = $placeholder_templating->replace_placeholders( array( 'global', 'contact', 'company' ), $html, $replacements ); - - // return - if ( !$return ) { - - echo $html; - exit(); - - } - } - return $html; - - -} + // return + if ( ! $return ) { + echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + exit( 0 ); + } + } + return $html; +} /* ====================================================== / ZBS Generic Emails - Generate HTML ====================================================== */ @@ -1050,20 +1030,14 @@ function zeroBSCRM_mailDelivery_generateTestHTML($return=true){ // replacements $html = $placeholder_templating->replace_placeholders( array( 'global', 'contact', 'company' ), $html, $replacements ); - // return - if ( !$return ) { - - echo $html; - exit(); - - } - - } - - return $html; - - - } + // return + if ( ! $return ) { + echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + exit( 0 ); + } + } + return $html; +} /* ====================================================== diff --git a/projects/plugins/crm/includes/jpcrm-rewrite-rules.php b/projects/plugins/crm/includes/jpcrm-rewrite-rules.php index c4a551f6fedc5..5fba0164cce61 100644 --- a/projects/plugins/crm/includes/jpcrm-rewrite-rules.php +++ b/projects/plugins/crm/includes/jpcrm-rewrite-rules.php @@ -7,7 +7,7 @@ // prevent direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/crm/includes/jpcrm-segment-conditions.php b/projects/plugins/crm/includes/jpcrm-segment-conditions.php index f5b41b2aa7ce3..16943dce90953 100644 --- a/projects/plugins/crm/includes/jpcrm-segment-conditions.php +++ b/projects/plugins/crm/includes/jpcrm-segment-conditions.php @@ -8,7 +8,7 @@ */ // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* diff --git a/projects/plugins/crm/includes/jpcrm-templating-placeholders.php b/projects/plugins/crm/includes/jpcrm-templating-placeholders.php index 9ba3637c038e2..20fcd4dad2833 100644 --- a/projects/plugins/crm/includes/jpcrm-templating-placeholders.php +++ b/projects/plugins/crm/includes/jpcrm-templating-placeholders.php @@ -5,13 +5,7 @@ * Copyright 2021 Automattic */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /* diff --git a/projects/plugins/crm/includes/jpcrm-templating.php b/projects/plugins/crm/includes/jpcrm-templating.php index f01b2f5373791..ab3027c5e97c5 100644 --- a/projects/plugins/crm/includes/jpcrm-templating.php +++ b/projects/plugins/crm/includes/jpcrm-templating.php @@ -5,13 +5,7 @@ * Copyright 2021 Automattic */ -/* ====================================================== - Breaking Checks ( stops direct access ) - ====================================================== */ - if ( ! defined( 'ZEROBSCRM_PATH' ) ) exit; -/* ====================================================== - / Breaking Checks - ====================================================== */ +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** diff --git a/projects/plugins/crm/modules/automations/jpcrm-automations-init.php b/projects/plugins/crm/modules/automations/jpcrm-automations-init.php index 62bcba5c77dfa..691eba8422435 100644 --- a/projects/plugins/crm/modules/automations/jpcrm-automations-init.php +++ b/projects/plugins/crm/modules/automations/jpcrm-automations-init.php @@ -13,7 +13,7 @@ use Automattic\Jetpack\CRM\Automation\Automation_Bootstrap; if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } if ( ! apply_filters( 'jetpack_crm_feature_flag_automations', false ) ) { diff --git a/projects/plugins/crm/modules/givewp/class-jpcrm-givewp.php b/projects/plugins/crm/modules/givewp/class-jpcrm-givewp.php index 40daae46709f6..eb471d9baa356 100644 --- a/projects/plugins/crm/modules/givewp/class-jpcrm-givewp.php +++ b/projects/plugins/crm/modules/givewp/class-jpcrm-givewp.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * diff --git a/projects/plugins/crm/modules/givewp/jpcrm-givewp-init.php b/projects/plugins/crm/modules/givewp/jpcrm-givewp-init.php index 78cce1796e15e..68ae6dcec9a73 100644 --- a/projects/plugins/crm/modules/givewp/jpcrm-givewp-init.php +++ b/projects/plugins/crm/modules/givewp/jpcrm-givewp-init.php @@ -1,5 +1,5 @@ sync_subscribers()` will do this automatically) echo json_encode( $return ); - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/modules/mailpoet/admin/mailpoet-hub/main.page.php b/projects/plugins/crm/modules/mailpoet/admin/mailpoet-hub/main.page.php index fa2d249472643..0ea8e89696ca5 100644 --- a/projects/plugins/crm/modules/mailpoet/admin/mailpoet-hub/main.page.php +++ b/projects/plugins/crm/modules/mailpoet/admin/mailpoet-hub/main.page.php @@ -8,7 +8,7 @@ */ // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Page: MailPoet Sync Hub @@ -30,7 +30,7 @@ function jpcrm_mailpoet_render_hub_page() { $html .= '

    ' . __( 'Yes, do a full resync', 'zero-bs-crm' ) . '  ' . __( 'No, cancel and go back to hub', 'zero-bs-crm' ) . '

    '; echo zeroBSCRM_UI2_messageHTML( 'warning', __( 'Want to restart your sync?', 'zero-bs-crm' ), $html, 'info' ); - exit(); + exit( 0 ); } @@ -51,7 +51,7 @@ function jpcrm_mailpoet_render_hub_page() { // render debug mode sync page jpcrm_mailpoet_render_hub_page_debug_mode(); - exit(); + exit( 0 ); } @@ -275,5 +275,4 @@ function jpcrm_mailpoet_render_hub_page_debug_mode(){

    mailpoet()->get_jpcrm_mailpoet_latest_stats(); echo json_encode( array_merge( $mailpoet_latest_stats, $mailpoetsync_status_array ) ); - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-export-segment-to-mailpoet.php b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-export-segment-to-mailpoet.php index 88b3509f2727e..d8701465ecba7 100644 --- a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-export-segment-to-mailpoet.php +++ b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-export-segment-to-mailpoet.php @@ -8,7 +8,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Export CRM segment to MailPoet list class @@ -169,7 +169,7 @@ private function init_hooks( ) { ) ) ); - exit(); + exit( 0 ); } } } catch (\Throwable $th) { @@ -183,7 +183,7 @@ private function init_hooks( ) { ) ) ); - exit(); + exit( 0 ); } } @@ -198,7 +198,7 @@ private function init_hooks( ) { ) ) ); - exit(); + exit( 0 ); } ); @@ -216,12 +216,12 @@ private function init_hooks( ) { if ( ! current_user_can( 'admin_zerobs_customers' ) ) { echo esc_html__( 'Not enough permissions.', 'zero-bs-crm' ); - exit(); + exit( 0 ); } if ( ! isset( $_POST['segment_id'] ) || ! isset( $_POST['mailpoet_id'] ) ) { echo esc_html__( 'Not enough data provided to perform export.', 'zero-bs-crm' ); - exit(); + exit( 0 ); } $segment_id = (int) sanitize_text_field( $_POST['segment_id'] ); @@ -247,7 +247,7 @@ private function init_hooks( ) { 'is_last_batch' => $is_last_batch ) ); - exit(); + exit( 0 ); } else { @@ -262,7 +262,7 @@ private function init_hooks( ) { ) ) ); - exit(); + exit( 0 ); } @@ -279,7 +279,7 @@ private function init_hooks( ) { ) ) ); - exit(); + exit( 0 ); } @@ -299,12 +299,12 @@ private function init_hooks( ) { if ( ! current_user_can( 'admin_zerobs_customers' ) ) { echo esc_html__( 'Not enough permissions.', 'zero-bs-crm' ); - exit(); + exit( 0 ); } if ( ! isset( $_POST['list_name'] ) ) { echo esc_html__( 'Not enough data provided to perform export.', 'zero-bs-crm' ); - exit(); + exit( 0 ); } $list_name = sanitize_text_field( $_POST['list_name'] ); @@ -321,21 +321,21 @@ private function init_hooks( ) { if ( ! is_array( $list_details ) ) { // nope - zeroBSCRM_sendJSONSuccess( false ); - exit(); + zeroBSCRM_sendJSONSuccess( false ); + exit( 0 ); } else { // success zeroBSCRM_sendJSONSuccess( $list_details ); - exit(); + exit( 0 ); } } catch (\Throwable $th) { - zeroBSCRM_sendJSONError( array( 'fail' => 1 ) ); - exit(); + zeroBSCRM_sendJSONError( array( 'fail' => 1 ) ); + exit( 0 ); } @@ -358,4 +358,4 @@ public function get_export_list_name( $list_name = '' ) { return $name; } -} \ No newline at end of file +} diff --git a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-segment-conditions.php b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-segment-conditions.php index 1b31d3c9e5758..a7856d302a880 100644 --- a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-segment-conditions.php +++ b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-segment-conditions.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * MailPoet Segment Conditions class diff --git a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet.php b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet.php index d3f0fa144086e..05eced3426e30 100644 --- a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet.php +++ b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); use MailPoet\API\MP\v1\APIException; diff --git a/projects/plugins/crm/modules/mailpoet/includes/jpcrm-mailpoet-contact-tabs.php b/projects/plugins/crm/modules/mailpoet/includes/jpcrm-mailpoet-contact-tabs.php index d166e018606ba..b38342b993567 100644 --- a/projects/plugins/crm/modules/mailpoet/includes/jpcrm-mailpoet-contact-tabs.php +++ b/projects/plugins/crm/modules/mailpoet/includes/jpcrm-mailpoet-contact-tabs.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * MailPoet Contact Tabs class diff --git a/projects/plugins/crm/modules/mailpoet/includes/segment-conditions/class-segment-condition-mailpoet-subscriber.php b/projects/plugins/crm/modules/mailpoet/includes/segment-conditions/class-segment-condition-mailpoet-subscriber.php index 1170427550125..14716d595dc80 100644 --- a/projects/plugins/crm/modules/mailpoet/includes/segment-conditions/class-segment-condition-mailpoet-subscriber.php +++ b/projects/plugins/crm/modules/mailpoet/includes/segment-conditions/class-segment-condition-mailpoet-subscriber.php @@ -8,7 +8,7 @@ */ // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * MailPoet Sync: Segment Condition: Is MailPoet Subscriber class diff --git a/projects/plugins/crm/modules/mailpoet/jpcrm-mailpoet-init.php b/projects/plugins/crm/modules/mailpoet/jpcrm-mailpoet-init.php index f3c746abae4f6..a6bef5b698481 100644 --- a/projects/plugins/crm/modules/mailpoet/jpcrm-mailpoet-init.php +++ b/projects/plugins/crm/modules/mailpoet/jpcrm-mailpoet-init.php @@ -8,7 +8,7 @@ */ // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // Add to $zeroBSCRM_extensionsCompleteList global diff --git a/projects/plugins/crm/modules/portal/class-client-portal-endpoint.php b/projects/plugins/crm/modules/portal/class-client-portal-endpoint.php index 2429c3514f743..c53efa406cd45 100644 --- a/projects/plugins/crm/modules/portal/class-client-portal-endpoint.php +++ b/projects/plugins/crm/modules/portal/class-client-portal-endpoint.php @@ -8,7 +8,7 @@ */ namespace Automattic\JetpackCRM; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * diff --git a/projects/plugins/crm/modules/portal/class-client-portal-render-helper.php b/projects/plugins/crm/modules/portal/class-client-portal-render-helper.php index a14c602f18264..f8444d494b8b8 100644 --- a/projects/plugins/crm/modules/portal/class-client-portal-render-helper.php +++ b/projects/plugins/crm/modules/portal/class-client-portal-render-helper.php @@ -8,7 +8,7 @@ */ namespace Automattic\JetpackCRM; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * @@ -31,7 +31,7 @@ function show_single_obj_error_and_die() { $err .= __('Either this object does not exist or you do not have permission to view it.', 'zero-bs-crm'); $err .= ''; echo $err; - die(); + die( 0 ); } #} MS - can you make this work with templates, couldn't so dumped (dumbly) here for now: diff --git a/projects/plugins/crm/modules/portal/class-client-portal-router.php b/projects/plugins/crm/modules/portal/class-client-portal-router.php index 0fef82e362dde..1219633405667 100644 --- a/projects/plugins/crm/modules/portal/class-client-portal-router.php +++ b/projects/plugins/crm/modules/portal/class-client-portal-router.php @@ -10,7 +10,7 @@ namespace Automattic\JetpackCRM; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Client Portal class that takes care of all the routing diff --git a/projects/plugins/crm/modules/portal/class-client-portal.php b/projects/plugins/crm/modules/portal/class-client-portal.php index 96908bd968961..d509517a55d1d 100644 --- a/projects/plugins/crm/modules/portal/class-client-portal.php +++ b/projects/plugins/crm/modules/portal/class-client-portal.php @@ -8,7 +8,7 @@ */ namespace Automattic\JetpackCRM; -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); require_once plugin_dir_path( __FILE__ ) . 'class-client-portal-endpoint.php'; @@ -530,7 +530,7 @@ function portal_login_fail_redirect( $username ) { // if there's a valid referrer, and it's not the default log-in screen + it's got our post if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') && isset($_POST['fromzbslogin'])) { wp_redirect(zeroBS_portal_link('dash') . '?login=failed' ); // let's append some information (login=failed) to the URL for the theme to use - exit; + exit( 0 ); } } diff --git a/projects/plugins/crm/modules/portal/endpoints/class-cancel-endpoint.php b/projects/plugins/crm/modules/portal/endpoints/class-cancel-endpoint.php index 50886e082ced4..f791a3d7650e2 100644 --- a/projects/plugins/crm/modules/portal/endpoints/class-cancel-endpoint.php +++ b/projects/plugins/crm/modules/portal/endpoints/class-cancel-endpoint.php @@ -1,7 +1,7 @@ modules->portal; diff --git a/projects/plugins/crm/modules/portal/templates/dashboard.php b/projects/plugins/crm/modules/portal/templates/dashboard.php index cdcda96f07fde..aafa2406f12cb 100644 --- a/projects/plugins/crm/modules/portal/templates/dashboard.php +++ b/projects/plugins/crm/modules/portal/templates/dashboard.php @@ -12,7 +12,7 @@ */ -if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access +defined( 'ABSPATH' ) || exit( 0 ); // Don't allow direct access global $zbs; $portal = $zbs->modules->portal; @@ -58,4 +58,4 @@
  • -
    \ No newline at end of file +
    diff --git a/projects/plugins/crm/modules/portal/templates/details.php b/projects/plugins/crm/modules/portal/templates/details.php index 76d215c38487e..9aea814405387 100644 --- a/projects/plugins/crm/modules/portal/templates/details.php +++ b/projects/plugins/crm/modules/portal/templates/details.php @@ -11,7 +11,7 @@ * */ -if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access +defined( 'ABSPATH' ) || exit( 0 ); // Don't allow direct access global $zbs; $portal = $zbs->modules->portal; diff --git a/projects/plugins/crm/modules/portal/templates/disabled.php b/projects/plugins/crm/modules/portal/templates/disabled.php index 043fe4fcd0491..98581e505f4f7 100644 --- a/projects/plugins/crm/modules/portal/templates/disabled.php +++ b/projects/plugins/crm/modules/portal/templates/disabled.php @@ -13,7 +13,7 @@ -if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access +defined( 'ABSPATH' ) || exit( 0 ); // Don't allow direct access global $zbs; $portal = $zbs->modules->portal; @@ -32,4 +32,4 @@
    - \ No newline at end of file + diff --git a/projects/plugins/crm/modules/portal/templates/invoices.php b/projects/plugins/crm/modules/portal/templates/invoices.php index 41991c4d3fb8b..bd98d8dcdca1c 100644 --- a/projects/plugins/crm/modules/portal/templates/invoices.php +++ b/projects/plugins/crm/modules/portal/templates/invoices.php @@ -11,7 +11,7 @@ * */ -if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access +defined( 'ABSPATH' ) || exit( 0 ); // Don't allow direct access global $zbs; $portal = $zbs->modules->portal; @@ -21,13 +21,12 @@ $ZBSuseInvoices = zeroBSCRM_getSetting('feat_invs'); if($ZBSuseInvoices < 0){ - status_header( 404 ); - nocache_headers(); - include get_query_template( '404' ); - die(); + status_header( 404 ); + nocache_headers(); + include get_query_template( '404' ); + die( 0 ); } - $portalLink = zeroBS_portal_link(); $invoice_endpoint = $portal->get_endpoint( ZBS_TYPE_INVOICE ); diff --git a/projects/plugins/crm/modules/portal/templates/login.php b/projects/plugins/crm/modules/portal/templates/login.php index 97c0c9f1a1efa..97d55b4eee940 100644 --- a/projects/plugins/crm/modules/portal/templates/login.php +++ b/projects/plugins/crm/modules/portal/templates/login.php @@ -8,9 +8,9 @@ * @package Templates/Portal/Login * @see https://jetpackcrm.com/kb/ * @version 3.0 - * */ -if ( ! defined( 'ABSPATH' ) ) exit; + +defined( 'ABSPATH' ) || exit( 0 ); global $zbs; $portal = $zbs->modules->portal; @@ -78,4 +78,4 @@ function zeroBSCRM_portal_loginFooter($prev=''){ - \ No newline at end of file + diff --git a/projects/plugins/crm/modules/portal/templates/quotes.php b/projects/plugins/crm/modules/portal/templates/quotes.php index e9d60da6f56d6..7467235796ecd 100644 --- a/projects/plugins/crm/modules/portal/templates/quotes.php +++ b/projects/plugins/crm/modules/portal/templates/quotes.php @@ -8,10 +8,9 @@ * @package Templates/Portal/Quotes * @see https://jetpackcrm.com/kb/ * @version 3.0 - * */ -if ( ! defined( 'ABSPATH' ) ) exit; +defined( 'ABSPATH' ) || exit( 0 ); global $zbs; $portal = $zbs->modules->portal; @@ -26,7 +25,7 @@ status_header( 404 ); nocache_headers(); include get_query_template( '404' ); - die(); + die( 0 ); } add_action( 'wp_enqueue_scripts', array( $portal, 'portal_enqueue_scripts_and_styles' ) ); diff --git a/projects/plugins/crm/modules/portal/templates/single-invoice.php b/projects/plugins/crm/modules/portal/templates/single-invoice.php index 891b2cb43033d..30992bb29fad0 100644 --- a/projects/plugins/crm/modules/portal/templates/single-invoice.php +++ b/projects/plugins/crm/modules/portal/templates/single-invoice.php @@ -10,7 +10,7 @@ * @version 3.0 * */ -if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access +defined( 'ABSPATH' ) || exit( 0 ); // Don't allow direct access global $zbs; $portal = $zbs->modules->portal; diff --git a/projects/plugins/crm/modules/portal/templates/single-quote.php b/projects/plugins/crm/modules/portal/templates/single-quote.php index 2d38904c72fbf..15e9c19e54907 100644 --- a/projects/plugins/crm/modules/portal/templates/single-quote.php +++ b/projects/plugins/crm/modules/portal/templates/single-quote.php @@ -12,7 +12,7 @@ */ // Don't allow direct access -if ( ! defined( 'ABSPATH' ) ) exit; +defined( 'ABSPATH' ) || exit( 0 ); global $zbs; $portal = $zbs->modules->portal; @@ -63,4 +63,4 @@ single_quote_html_output( $obj_id, true ); ?> - \ No newline at end of file + diff --git a/projects/plugins/crm/modules/portal/templates/thank-you.php b/projects/plugins/crm/modules/portal/templates/thank-you.php index 3553f35fa6f49..17860a4d613c3 100644 --- a/projects/plugins/crm/modules/portal/templates/thank-you.php +++ b/projects/plugins/crm/modules/portal/templates/thank-you.php @@ -11,7 +11,7 @@ * */ -if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access +defined( 'ABSPATH' ) || exit( 0 ); // Don't allow direct access global $zbs; $portal = $zbs->modules->portal; @@ -54,4 +54,4 @@ - \ No newline at end of file + diff --git a/projects/plugins/crm/modules/portal/templates/transactions.php b/projects/plugins/crm/modules/portal/templates/transactions.php index b5e51a342b1d9..fea4466e0f129 100644 --- a/projects/plugins/crm/modules/portal/templates/transactions.php +++ b/projects/plugins/crm/modules/portal/templates/transactions.php @@ -11,7 +11,7 @@ * */ -if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access +defined( 'ABSPATH' ) || exit( 0 ); // Don't allow direct access global $zbs; $portal = $zbs->modules->portal; diff --git a/projects/plugins/crm/modules/woo-sync/admin/settings/connection_edit.page.php b/projects/plugins/crm/modules/woo-sync/admin/settings/connection_edit.page.php index ea050d39b6f58..b955aef53b6b5 100644 --- a/projects/plugins/crm/modules/woo-sync/admin/settings/connection_edit.page.php +++ b/projects/plugins/crm/modules/woo-sync/admin/settings/connection_edit.page.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Page: Connection edit page @@ -213,5 +213,4 @@ function jpcrm_settings_page_html_woosync_connection_edit() { sync_orders()` will do this automatically) echo json_encode( $return ); - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/modules/woo-sync/admin/woo-sync-hub/main.page.php b/projects/plugins/crm/modules/woo-sync/admin/woo-sync-hub/main.page.php index 86e626ef712be..bcb2d91b5047e 100644 --- a/projects/plugins/crm/modules/woo-sync/admin/woo-sync-hub/main.page.php +++ b/projects/plugins/crm/modules/woo-sync/admin/woo-sync-hub/main.page.php @@ -8,7 +8,7 @@ */ // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * Page: WooSync Hub @@ -33,7 +33,7 @@ function jpcrm_woosync_render_hub_page() { $html .= '

    ' . __( 'Yes, do a full resync', 'zero-bs-crm' ) . '  ' . __( 'No, cancel and go back to hub', 'zero-bs-crm' ) . '

    '; echo zeroBSCRM_UI2_messageHTML( 'warning', __( 'Want to restart your sync?', 'zero-bs-crm' ), $html, 'info' ); - exit(); + exit( 0 ); } @@ -63,7 +63,7 @@ function jpcrm_woosync_render_hub_page() { // render debug mode sync page jpcrm_woosync_render_hub_page_debug_mode(); - exit(); + exit( 0 ); } @@ -481,5 +481,4 @@ function jpcrm_woosync_render_hub_page_debug_mode(){

    0, ) ); - exit; + exit( 0 ); } // cache values diff --git a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-background-sync.php b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-background-sync.php index 89987d5074693..ecaf8df47313d 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-background-sync.php +++ b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-background-sync.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * WooSync Background Sync class @@ -422,7 +422,7 @@ public function sync_orders(){ ); $woosync_latest_stats = $this->woosync()->get_jpcrm_woo_latest_stats(); echo json_encode( array_merge( $woosync_latest_stats, $woosync_status_array ) ); - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-my-account-integration.php b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-my-account-integration.php index 12ac646962df6..d909ae59beea5 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-my-account-integration.php +++ b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-my-account-integration.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * WooSync My Account integration class diff --git a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-segment-conditions.php b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-segment-conditions.php index 2019b30f77064..30249c3ea2fc3 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-segment-conditions.php +++ b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-segment-conditions.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * WooSync Segment Conditions class diff --git a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-woo-admin-integration.php b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-woo-admin-integration.php index ea5e5a3989cb6..175830c4309f7 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-woo-admin-integration.php +++ b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync-woo-admin-integration.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * WooSync Woo Admin class diff --git a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync.php b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync.php index 95ce045adcfbe..62abc4c421cf2 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync.php +++ b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); #} the WooCommerce API use Automattic\WooCommerce\Client; @@ -1485,7 +1485,7 @@ public function catch_add_store_auth() { $log[] = 'fini'; //update_option('wlogtemp', $log, false); - exit(); + exit( 0 ); } diff --git a/projects/plugins/crm/modules/woo-sync/includes/jpcrm-woo-sync-contact-tabs.php b/projects/plugins/crm/modules/woo-sync/includes/jpcrm-woo-sync-contact-tabs.php index 253f713f6e981..406524cc8e710 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/jpcrm-woo-sync-contact-tabs.php +++ b/projects/plugins/crm/modules/woo-sync/includes/jpcrm-woo-sync-contact-tabs.php @@ -9,7 +9,7 @@ namespace Automattic\JetpackCRM; // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * WooSync Contact Tabs class diff --git a/projects/plugins/crm/modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-customer.php b/projects/plugins/crm/modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-customer.php index 750240478aed3..364326d40ef0c 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-customer.php +++ b/projects/plugins/crm/modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-customer.php @@ -8,7 +8,7 @@ */ // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * WooSync: Segment Condition: Is WooCommerce Customer class diff --git a/projects/plugins/crm/modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-order-count.php b/projects/plugins/crm/modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-order-count.php index ab46926f3f843..d2f0f468942e9 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-order-count.php +++ b/projects/plugins/crm/modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-order-count.php @@ -8,7 +8,7 @@ */ // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); /** * WooSync: Segment Condition: Order Count class diff --git a/projects/plugins/crm/modules/woo-sync/jpcrm-woo-sync-init.php b/projects/plugins/crm/modules/woo-sync/jpcrm-woo-sync-init.php index 0e3c07f4eabed..649a0ae2eb4b6 100644 --- a/projects/plugins/crm/modules/woo-sync/jpcrm-woo-sync-init.php +++ b/projects/plugins/crm/modules/woo-sync/jpcrm-woo-sync-init.php @@ -8,7 +8,7 @@ */ // block direct access -defined( 'ZEROBSCRM_PATH' ) || exit; +defined( 'ZEROBSCRM_PATH' ) || exit( 0 ); // Add to $zeroBSCRM_extensionsCompleteList global diff --git a/projects/plugins/crm/public/forms/form-content.php b/projects/plugins/crm/public/forms/form-content.php index 6ed1f6b5bf9ac..cf0de6b3b7664 100644 --- a/projects/plugins/crm/public/forms/form-content.php +++ b/projects/plugins/crm/public/forms/form-content.php @@ -7,7 +7,7 @@ // prevent direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } if ( isset( $_GET['fid'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended @@ -52,4 +52,4 @@ } } -exit(); +exit( 0 ); diff --git a/projects/plugins/crm/public/forms/form-naked.php b/projects/plugins/crm/public/forms/form-naked.php index 96ffbbed6b869..eec46ce7d5960 100644 --- a/projects/plugins/crm/public/forms/form-naked.php +++ b/projects/plugins/crm/public/forms/form-naked.php @@ -7,7 +7,7 @@ // prevent direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } if ( isset( $_GET['fid'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended @@ -52,4 +52,4 @@ } } -exit(); +exit( 0 ); diff --git a/projects/plugins/crm/public/forms/form-simple.php b/projects/plugins/crm/public/forms/form-simple.php index cc4ce6b3abde7..5172a64b97c6f 100644 --- a/projects/plugins/crm/public/forms/form-simple.php +++ b/projects/plugins/crm/public/forms/form-simple.php @@ -7,7 +7,7 @@ // prevent direct access if ( ! defined( 'ZEROBSCRM_PATH' ) ) { - exit; + exit( 0 ); } if ( isset( $_GET['fid'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended @@ -52,4 +52,4 @@ } } -exit(); +exit( 0 ); diff --git a/projects/plugins/crm/src/onboarding-wizard/class-bootstrap.php b/projects/plugins/crm/src/onboarding-wizard/class-bootstrap.php index 6409974cfbcee..87e9f2e2cb0a2 100644 --- a/projects/plugins/crm/src/onboarding-wizard/class-bootstrap.php +++ b/projects/plugins/crm/src/onboarding-wizard/class-bootstrap.php @@ -8,7 +8,7 @@ namespace Automattic\Jetpack_CRM\Onboarding_Wizard; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } use Automattic\Jetpack\Assets; diff --git a/projects/plugins/crm/src/rest-api/v4/class-rest-automation-workflows-controller.php b/projects/plugins/crm/src/rest-api/v4/class-rest-automation-workflows-controller.php index 70eccefd4d2b8..8dc8c0b40d695 100644 --- a/projects/plugins/crm/src/rest-api/v4/class-rest-automation-workflows-controller.php +++ b/projects/plugins/crm/src/rest-api/v4/class-rest-automation-workflows-controller.php @@ -18,7 +18,7 @@ use WP_REST_Response; use WP_REST_Server; -defined( 'ABSPATH' ) || exit; +defined( 'ABSPATH' ) || exit( 0 ); /** * REST automation controller. diff --git a/projects/plugins/crm/src/rest-api/v4/class-rest-base-controller.php b/projects/plugins/crm/src/rest-api/v4/class-rest-base-controller.php index bc58b1af1d65f..3e6c181ee75b2 100644 --- a/projects/plugins/crm/src/rest-api/v4/class-rest-base-controller.php +++ b/projects/plugins/crm/src/rest-api/v4/class-rest-base-controller.php @@ -10,7 +10,7 @@ use WP_REST_Controller; use WP_REST_Request; -defined( 'ABSPATH' ) || exit; +defined( 'ABSPATH' ) || exit( 0 ); /** * Abstract base controller class. diff --git a/projects/plugins/crm/src/rest-api/v4/class-rest-base-objects-controller.php b/projects/plugins/crm/src/rest-api/v4/class-rest-base-objects-controller.php index da1e246b96798..47f0419eeb218 100644 --- a/projects/plugins/crm/src/rest-api/v4/class-rest-base-objects-controller.php +++ b/projects/plugins/crm/src/rest-api/v4/class-rest-base-objects-controller.php @@ -9,7 +9,7 @@ use zbsDAL_ObjectLayer; -defined( 'ABSPATH' ) || exit; +defined( 'ABSPATH' ) || exit( 0 ); /** * Abstract base controller class for DAL objects. diff --git a/projects/plugins/crm/src/rest-api/v4/class-rest-contacts-controller.php b/projects/plugins/crm/src/rest-api/v4/class-rest-contacts-controller.php index 7c461985fbd1e..7c8ff99c2179b 100644 --- a/projects/plugins/crm/src/rest-api/v4/class-rest-contacts-controller.php +++ b/projects/plugins/crm/src/rest-api/v4/class-rest-contacts-controller.php @@ -14,7 +14,7 @@ use WP_REST_Server; use zbsDAL_contacts; -defined( 'ABSPATH' ) || exit; +defined( 'ABSPATH' ) || exit( 0 ); /** * REST contacts controller. diff --git a/projects/plugins/debug-helper/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/debug-helper/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/debug-helper/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/debug-helper/modules/class-scan-helper.php b/projects/plugins/debug-helper/modules/class-scan-helper.php index 96ac407f965d3..237eb6acc0333 100644 --- a/projects/plugins/debug-helper/modules/class-scan-helper.php +++ b/projects/plugins/debug-helper/modules/class-scan-helper.php @@ -99,7 +99,7 @@ private function get_contents_array( $file_path ) { global $wp_filesystem; if ( ! $this->has_credentials() ) { - die; + die( 0 ); } return $wp_filesystem->get_contents_array( $file_path ); @@ -114,7 +114,7 @@ private function get_contents( $file_path ) { global $wp_filesystem; if ( ! $this->has_credentials() ) { - die; + die( 0 ); } return $wp_filesystem->get_contents( $file_path ); @@ -129,7 +129,7 @@ private function wp_file_exists( $file_path ) { global $wp_filesystem; if ( ! $this->has_credentials() ) { - die; + die( 0 ); } return $wp_filesystem->exists( $file_path ); @@ -145,7 +145,7 @@ private function write_file( $file, $contents ) { global $wp_filesystem; if ( ! $this->has_credentials() ) { - die; + die( 0 ); } // Create parent directory of the file if it does not already exist @@ -166,7 +166,7 @@ private function delete_file( $file ) { global $wp_filesystem; if ( ! $this->has_credentials() ) { - die; + die( 0 ); } return $wp_filesystem->delete( $file, true ); diff --git a/projects/plugins/debug-helper/modules/inc/class-broken-token-connection-errors.php b/projects/plugins/debug-helper/modules/inc/class-broken-token-connection-errors.php index 5b7f1dd505c76..b07a3557dd6bd 100644 --- a/projects/plugins/debug-helper/modules/inc/class-broken-token-connection-errors.php +++ b/projects/plugins/debug-helper/modules/inc/class-broken-token-connection-errors.php @@ -267,7 +267,7 @@ public function admin_post_clear_all_verified_connection_errors() { public function admin_post_refresh_verified_errors_list() { check_admin_referer( 'refresh-verified-errors' ); $this->print_verified_errors(); - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/3rd-party/creative-mail.php b/projects/plugins/jetpack/3rd-party/creative-mail.php index 59f7db656b0f5..49ba752cffaba 100644 --- a/projects/plugins/jetpack/3rd-party/creative-mail.php +++ b/projects/plugins/jetpack/3rd-party/creative-mail.php @@ -13,7 +13,7 @@ use Automattic\Jetpack\Plugins_Installer; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } const PLUGIN_SLUG = 'creative-mail-by-constant-contact'; @@ -65,7 +65,7 @@ function try_install() { wp_safe_redirect( $redirect ); - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/3rd-party/jetpack-backup.php b/projects/plugins/jetpack/3rd-party/jetpack-backup.php index 8ba4428f29569..c91325e11032f 100644 --- a/projects/plugins/jetpack/3rd-party/jetpack-backup.php +++ b/projects/plugins/jetpack/3rd-party/jetpack-backup.php @@ -13,7 +13,7 @@ use Automattic\Jetpack\Plugins_Installer; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } const PLUGIN_SLUG = 'jetpack-backup'; @@ -63,7 +63,7 @@ function try_install() { wp_safe_redirect( $redirect ); - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/3rd-party/jetpack-boost.php b/projects/plugins/jetpack/3rd-party/jetpack-boost.php index eb76da067a520..56bb932b50d1e 100644 --- a/projects/plugins/jetpack/3rd-party/jetpack-boost.php +++ b/projects/plugins/jetpack/3rd-party/jetpack-boost.php @@ -13,7 +13,7 @@ use Automattic\Jetpack\Plugins_Installer; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } const PLUGIN_SLUG = 'jetpack-boost'; @@ -65,7 +65,7 @@ function try_install() { wp_safe_redirect( $redirect ); - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/3rd-party/web-stories.php b/projects/plugins/jetpack/3rd-party/web-stories.php index 73619623fc3b2..51f103366af0c 100644 --- a/projects/plugins/jetpack/3rd-party/web-stories.php +++ b/projects/plugins/jetpack/3rd-party/web-stories.php @@ -11,7 +11,7 @@ namespace Automattic\Jetpack\Web_Stories; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/3rd-party/woocommerce-services.php b/projects/plugins/jetpack/3rd-party/woocommerce-services.php index dc63ac45f4b43..90a04a0976a56 100644 --- a/projects/plugins/jetpack/3rd-party/woocommerce-services.php +++ b/projects/plugins/jetpack/3rd-party/woocommerce-services.php @@ -3,7 +3,7 @@ use Automattic\Jetpack\Plugins_Installer; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** @@ -104,7 +104,7 @@ public function try_install() { wp_safe_redirect( $redirect ); - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/_inc/lib/admin-pages/class-jetpack-about-page.php b/projects/plugins/jetpack/_inc/lib/admin-pages/class-jetpack-about-page.php index 161c086e5312c..a88490ab5623f 100644 --- a/projects/plugins/jetpack/_inc/lib/admin-pages/class-jetpack-about-page.php +++ b/projects/plugins/jetpack/_inc/lib/admin-pages/class-jetpack-about-page.php @@ -9,7 +9,7 @@ * Disable direct access and execution. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } require_once __DIR__ . '/class.jetpack-admin-page.php'; diff --git a/projects/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-react-page.php b/projects/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-react-page.php index 378fc8500610a..8246bf1a2528a 100644 --- a/projects/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-react-page.php +++ b/projects/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-react-page.php @@ -55,7 +55,7 @@ public function add_page_actions( $hook ) { if ( strpos( $page, 'jetpack/' ) === 0 ) { $section = substr( $page, 8 ); wp_safe_redirect( admin_url( 'admin.php?page=jetpack#/' . $section ) ); - exit; + exit( 0 ); } return; // No need to handle the fallback redirection if we are not on the Jetpack page. } @@ -267,7 +267,7 @@ public function react_redirects() { $target = sanitize_text_field( wp_unslash( $_GET['jp-react-redirect'] ) ); if ( isset( $allowed_paths[ $target ] ) ) { wp_safe_redirect( $allowed_paths[ $target ] ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php index e56d427c0c5ea..500069fb7ca1e 100644 --- a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php @@ -21,7 +21,7 @@ // Disable direct access. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } // Load WP_Error for error messages. diff --git a/projects/plugins/jetpack/_inc/lib/class.jetpack-keyring-service-helper.php b/projects/plugins/jetpack/_inc/lib/class.jetpack-keyring-service-helper.php index 50790cf9d6ee0..f08e4651b01a7 100644 --- a/projects/plugins/jetpack/_inc/lib/class.jetpack-keyring-service-helper.php +++ b/projects/plugins/jetpack/_inc/lib/class.jetpack-keyring-service-helper.php @@ -262,7 +262,7 @@ public static function admin_page_load() { ) ); wp_redirect( $redirect ); // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect -- The API URL is an external URL and is filterable. - exit; + exit( 0 ); case 'completed': /* diff --git a/projects/plugins/jetpack/_inc/lib/core-api/load-wpcom-endpoints.php b/projects/plugins/jetpack/_inc/lib/core-api/load-wpcom-endpoints.php index 05f9608fbb95f..795e869edb6eb 100644 --- a/projects/plugins/jetpack/_inc/lib/core-api/load-wpcom-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/core-api/load-wpcom-endpoints.php @@ -13,7 +13,7 @@ * Disable direct access. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-external-media.php b/projects/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-external-media.php index e4a4aea0a88c2..7173b7307c453 100644 --- a/projects/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-external-media.php +++ b/projects/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-external-media.php @@ -715,7 +715,7 @@ function ( $key ) { header( 'Expires: 0' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Media binary data echo $body; - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/_inc/lib/debugger/class-jetpack-debugger.php b/projects/plugins/jetpack/_inc/lib/debugger/class-jetpack-debugger.php index 450e5051dc1cd..f521c44e60ca4 100644 --- a/projects/plugins/jetpack/_inc/lib/debugger/class-jetpack-debugger.php +++ b/projects/plugins/jetpack/_inc/lib/debugger/class-jetpack-debugger.php @@ -28,7 +28,7 @@ public static function disconnect_and_redirect() { if ( Jetpack::is_connection_ready() ) { Jetpack::disconnect(); wp_safe_redirect( Jetpack::admin_url() ); - exit; + exit( 0 ); } } } diff --git a/projects/plugins/jetpack/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/jetpack/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..701f0e3d1da69 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/jetpack/class.jetpack-admin.php b/projects/plugins/jetpack/class.jetpack-admin.php index c85685de295a4..c8be986d66878 100644 --- a/projects/plugins/jetpack/class.jetpack-admin.php +++ b/projects/plugins/jetpack/class.jetpack-admin.php @@ -163,7 +163,7 @@ public static function customizer_redirect() { ) ) ); - exit; + exit( 0 ); } /** @@ -481,7 +481,7 @@ public function handle_unrecognized_action( $action ) { } // The following two lines will rarely happen, as Jetpack::activate_module normally exits at the end. wp_safe_redirect( wp_get_referer() ); - exit; + exit( 0 ); case 'bulk-deactivate': check_admin_referer( 'bulk-jetpack_page_jetpack_modules' ); if ( ! current_user_can( 'jetpack_deactivate_modules' ) ) { @@ -496,7 +496,7 @@ public function handle_unrecognized_action( $action ) { } Jetpack::state( 'module', $modules ); wp_safe_redirect( wp_get_referer() ); - exit; + exit( 0 ); default: return; } diff --git a/projects/plugins/jetpack/class.jetpack-cli.php b/projects/plugins/jetpack/class.jetpack-cli.php index 2d1f1ee55f446..664ce0003e505 100644 --- a/projects/plugins/jetpack/class.jetpack-cli.php +++ b/projects/plugins/jetpack/class.jetpack-cli.php @@ -1966,13 +1966,13 @@ public function scaffold( $args, $assoc_args ) { * @param array $assoc_args Associative parameters defined in the scaffold() method. */ public function block( $args, $assoc_args ) { - if ( isset( $args[1] ) ) { - $title = ucwords( $args[1] ); - } else { + if ( ! isset( $args[1] ) ) { WP_CLI::error( esc_html__( 'The title parameter is required.', 'jetpack' ) . ' 👻' ); exit( 1 ); } + $title = ucwords( $args[1] ); + $slug = isset( $assoc_args['slug'] ) ? $assoc_args['slug'] : sanitize_title( $title ); diff --git a/projects/plugins/jetpack/class.jetpack-network.php b/projects/plugins/jetpack/class.jetpack-network.php index 20caecf7189fa..2e166064d57f2 100644 --- a/projects/plugins/jetpack/class.jetpack-network.php +++ b/projects/plugins/jetpack/class.jetpack-network.php @@ -333,7 +333,7 @@ public function jetpack_sites_list() { } wp_safe_redirect( $url ); - exit; + exit( 0 ); case 'subsitedisconnect': check_admin_referer( 'jetpack-subsite-disconnect' ); @@ -594,7 +594,7 @@ public function save_network_settings_page() { network_admin_url( 'admin.php' ) ) ); - exit(); + exit( 0 ); } // Try to save the Protect allow list before anything else, since that action can result in errors. @@ -612,7 +612,7 @@ public function save_network_settings_page() { network_admin_url( 'admin.php' ) ) ); - exit(); + exit( 0 ); } /* @@ -646,7 +646,7 @@ public function save_network_settings_page() { network_admin_url( 'admin.php' ) ) ); - exit(); + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/class.jetpack.php b/projects/plugins/jetpack/class.jetpack.php index f4a5f489405f8..64501849deb3d 100644 --- a/projects/plugins/jetpack/class.jetpack.php +++ b/projects/plugins/jetpack/class.jetpack.php @@ -2010,7 +2010,7 @@ public static function activate_new_modules( $redirect = false ) { $page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- we're not changing the site. } wp_safe_redirect( self::admin_url( 'page=' . rawurlencode( $page ) ) ); - exit; + exit( 0 ); } } @@ -2401,7 +2401,7 @@ public static function activate_default_modules( add_query_arg( compact( 'min_version', 'max_version', 'other_modules' ), self::admin_url( 'page=jetpack' ) ) ); wp_safe_redirect( $url ); - exit; + exit( 0 ); } } @@ -2609,7 +2609,7 @@ public static function bail_on_activation( $message, $deactivate = true ) { update_option( 'active_plugins', array_filter( $plugins ) ); } } - exit; + exit( 0 ); } /** @@ -3324,7 +3324,7 @@ public function remote_request_handlers() { status_header( 200 ); if ( true === $response ) { - exit; + exit( 0 ); } die( wp_json_encode( (object) $response ) ); @@ -3586,7 +3586,7 @@ public function login_init() { self::get_calypso_host() . 'jetpack/connect' ) ); - exit; + exit( 0 ); } } @@ -3693,7 +3693,7 @@ public function admin_page_load() { add_filter( 'allowed_redirect_hosts', array( Host::class, 'allow_wpcom_environments' ) ); wp_safe_redirect( $url ); - exit; + exit( 0 ); case 'activate': if ( ! current_user_can( 'jetpack_activate_modules' ) ) { $error = 'cheatin'; @@ -3709,7 +3709,7 @@ public function admin_page_load() { } // The following two lines will rarely happen, as Jetpack::activate_module normally exits at the end. wp_safe_redirect( self::admin_url( 'page=jetpack' ) ); - exit; + exit( 0 ); case 'activate_default_modules': check_admin_referer( 'activate_default_modules' ); self::log( 'activate_default_modules' ); @@ -3719,7 +3719,7 @@ public function admin_page_load() { $other_modules = isset( $_GET['other_modules'] ) && is_array( $_GET['other_modules'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_GET['other_modules'] ) ) : array(); self::activate_default_modules( $min_version, $max_version, $other_modules ); wp_safe_redirect( self::admin_url( 'page=jetpack' ) ); - exit; + exit( 0 ); case 'disconnect': if ( ! current_user_can( 'jetpack_disconnect' ) ) { $error = 'cheatin'; @@ -3730,7 +3730,7 @@ public function admin_page_load() { self::log( 'disconnect' ); self::disconnect(); wp_safe_redirect( self::admin_url( 'disconnected=true' ) ); - exit; + exit( 0 ); case 'reconnect': if ( ! current_user_can( 'jetpack_reconnect' ) ) { $error = 'cheatin'; @@ -3743,7 +3743,7 @@ public function admin_page_load() { add_filter( 'allowed_redirect_hosts', array( Host::class, 'allow_wpcom_environments' ) ); wp_safe_redirect( $this->build_connect_url( true, false, 'reconnect' ) ); - exit; + exit( 0 ); case 'deactivate': if ( ! current_user_can( 'jetpack_deactivate_modules' ) ) { $error = 'cheatin'; @@ -3759,7 +3759,7 @@ public function admin_page_load() { } self::state( 'module', $modules ); wp_safe_redirect( self::admin_url( 'page=jetpack' ) ); - exit; + exit( 0 ); case 'unlink': $redirect = isset( $_GET['redirect'] ) ? sanitize_text_field( wp_unslash( $_GET['redirect'] ) ) : ''; check_admin_referer( 'jetpack-unlink' ); @@ -3771,7 +3771,7 @@ public function admin_page_load() { } else { wp_safe_redirect( self::admin_url( array( 'page' => rawurlencode( $redirect ) ) ) ); } - exit; + exit( 0 ); default: /** * Fires when a Jetpack admin page is loaded with an unrecognized parameter. diff --git a/projects/plugins/jetpack/class.json-api.php b/projects/plugins/jetpack/class.json-api.php index 6b9a805c6ea4a..2278e24ef8a26 100644 --- a/projects/plugins/jetpack/class.json-api.php +++ b/projects/plugins/jetpack/class.json-api.php @@ -573,7 +573,7 @@ public function serve( $exit = true ) { } } } - exit; + exit( 0 ); } if ( $endpoint->in_testing && ! WPCOM_JSON_API__DEBUG ) { @@ -654,7 +654,7 @@ public function output( $status_code, $response = null, $content_type = 'applica // In case output() was called before the callback returned. if ( $this->did_output ) { if ( $this->exit ) { - exit; + exit( 0 ); } return $content_type; } @@ -684,7 +684,7 @@ public function output( $status_code, $response = null, $content_type = 'applica } echo $response; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( $this->exit ) { - exit; + exit( 0 ); } return $content_type; @@ -737,7 +737,7 @@ public function output( $status_code, $response = null, $content_type = 'applica } if ( $this->exit ) { - exit; + exit( 0 ); } return $content_type; @@ -1246,7 +1246,7 @@ public function wp_die_handler( $message, $title = '', $args = array() ) { // We still want to exit so that code execution stops where it should. // Attach the JSON output to the WordPress shutdown handler. add_action( 'shutdown', array( $this, 'output_trapped_error' ), 0 ); - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/extensions/blocks/map/map.php b/projects/plugins/jetpack/extensions/blocks/map/map.php index 91a43d7292624..c349388e9c578 100644 --- a/projects/plugins/jetpack/extensions/blocks/map/map.php +++ b/projects/plugins/jetpack/extensions/blocks/map/map.php @@ -189,7 +189,7 @@ function render_single_block_page() { preg_replace( '/(?<=ID ) . '?shared=email&msg=fail' ); - exit; + exit( 0 ); } wp_die(); @@ -738,7 +738,7 @@ public function process_request( $post, array $post_data ) { parent::redirect_request( $pinterest_url ); } else { echo '// share count bumped'; - die(); + die( 0 ); } } } diff --git a/projects/plugins/jetpack/extensions/blocks/sharing-button/components/class-jetpack-mastodon-modal.php b/projects/plugins/jetpack/extensions/blocks/sharing-button/components/class-jetpack-mastodon-modal.php index d2a2f80601fa9..1ba43d5af4a2d 100644 --- a/projects/plugins/jetpack/extensions/blocks/sharing-button/components/class-jetpack-mastodon-modal.php +++ b/projects/plugins/jetpack/extensions/blocks/sharing-button/components/class-jetpack-mastodon-modal.php @@ -61,7 +61,7 @@ public static function modal() { // Render the modal. self::render_modal(); - die(); + die( 0 ); } /** diff --git a/projects/plugins/jetpack/functions.global.php b/projects/plugins/jetpack/functions.global.php index 88ef11ae9a11e..e1e5924e7bdd4 100644 --- a/projects/plugins/jetpack/functions.global.php +++ b/projects/plugins/jetpack/functions.global.php @@ -17,7 +17,7 @@ // Disable direct access. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } require_once __DIR__ . '/functions.is-mobile.php'; diff --git a/projects/plugins/jetpack/modules/comments/comments.php b/projects/plugins/jetpack/modules/comments/comments.php index 2dbebb3596e2f..42e5844648821 100644 --- a/projects/plugins/jetpack/modules/comments/comments.php +++ b/projects/plugins/jetpack/modules/comments/comments.php @@ -723,7 +723,7 @@ public function retry_submit_comment_form_locally() { @@ -928,7 +928,7 @@ function backToComments() { ID ) . '?shared=email&msg=fail' ); - exit; + exit( 0 ); } wp_die(); @@ -2141,7 +2141,7 @@ public function process_request( $post, array $post_data ) { if ( empty( $blogs ) ) { wp_safe_redirect( get_permalink( $post->ID ) ); - die(); + die( 0 ); } $blog = current( $blogs ); @@ -2761,7 +2761,7 @@ public function process_request( $post, array $post_data ) { parent::redirect_request( $pinterest_url ); } else { echo '// share count bumped'; - die(); + die( 0 ); } } diff --git a/projects/plugins/jetpack/modules/sharedaddy/sharing.php b/projects/plugins/jetpack/modules/sharedaddy/sharing.php index 1f30244b52825..f34c492860b2f 100644 --- a/projects/plugins/jetpack/modules/sharedaddy/sharing.php +++ b/projects/plugins/jetpack/modules/sharedaddy/sharing.php @@ -120,7 +120,7 @@ public function process_requests() { do_action( 'sharing_admin_update' ); wp_safe_redirect( admin_url( 'options-general.php?page=sharing&update=saved' ) ); - die(); + die( 0 ); } } @@ -165,7 +165,7 @@ public function ajax_save_services() { explode( ',', sanitize_text_field( wp_unslash( $_POST['visible'] ) ) ), explode( ',', sanitize_text_field( wp_unslash( $_POST['hidden'] ) ) ) ); - die(); + die( 0 ); } } @@ -195,7 +195,7 @@ public function ajax_new_service() { $service->button_style = 'icon-text'; $this->output_preview( $service ); - die(); + die( 0 ); } } @@ -249,7 +249,7 @@ public function ajax_save_options() { echo ''; $service->button_style = 'icon-text'; $this->output_preview( $service ); - die(); + die( 0 ); } } diff --git a/projects/plugins/jetpack/modules/sitemaps.php b/projects/plugins/jetpack/modules/sitemaps.php index 55c98cafdd970..6e9fbed0532e1 100644 --- a/projects/plugins/jetpack/modules/sitemaps.php +++ b/projects/plugins/jetpack/modules/sitemaps.php @@ -17,7 +17,7 @@ * Disable direct access and execution. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } if ( '1' == get_option( 'blog_public' ) ) { // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual diff --git a/projects/plugins/jetpack/modules/sitemaps/sitemaps.php b/projects/plugins/jetpack/modules/sitemaps/sitemaps.php index 10591542c3ef8..584cf1288c785 100644 --- a/projects/plugins/jetpack/modules/sitemaps/sitemaps.php +++ b/projects/plugins/jetpack/modules/sitemaps/sitemaps.php @@ -175,7 +175,7 @@ private function serve_raw_and_die( $the_content_type, $the_content ) { echo $the_content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- All content created by Jetpack. - die(); + die( 0 ); } /** diff --git a/projects/plugins/jetpack/modules/stats.php b/projects/plugins/jetpack/modules/stats.php index 04e341081d7b0..15af72ff14e66 100644 --- a/projects/plugins/jetpack/modules/stats.php +++ b/projects/plugins/jetpack/modules/stats.php @@ -233,7 +233,7 @@ function stats_admin_menu() { $relative_pos = strpos( $redirect_url, '/wp-admin/' ); if ( false !== $relative_pos ) { wp_safe_redirect( admin_url( substr( $redirect_url, $relative_pos + 10 ) ) ); - exit; + exit( 0 ); } } @@ -389,7 +389,7 @@ function jetpack_admin_ui_stats_report_page_wrapper() { function stats_reports_page( $main_chart_only = false ) { if ( isset( $_GET['dashboard'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended stats_dashboard_widget_content(); - exit; // @phan-suppress-current-line PhanPluginUnreachableCode -- Safer to include it even though stats_dashboard_widget_content() never returns. + exit( 0 ); // @phan-suppress-current-line PhanPluginUnreachableCode -- Safer to include it even though stats_dashboard_widget_content() never returns. } $blog_id = Stats_Options::get_option( 'blog_id' ); @@ -613,7 +613,7 @@ function stats_reports_page( $main_chart_only = false ) { header( 'Content-Type: ' . $type ); header( 'Content-Length: ' . strlen( $img ) ); echo $img; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - die(); + die( 0 ); } } @@ -623,7 +623,7 @@ function stats_reports_page( $main_chart_only = false ) { } if ( isset( $_GET['noheader'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended - die; + die( 0 ); } } @@ -1178,7 +1178,7 @@ function stats_dashboard_widget_content() { EOF; // phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped - exit; + exit( 0 ); } // The WPCOM_USER_CONTENT_LINK_REDIRECTION flag prevents this redirection logic from running diff --git a/projects/plugins/jetpack/modules/widgets/authors.php b/projects/plugins/jetpack/modules/widgets/authors.php index 736a7c31c21d3..8303b11b9084e 100644 --- a/projects/plugins/jetpack/modules/widgets/authors.php +++ b/projects/plugins/jetpack/modules/widgets/authors.php @@ -3,7 +3,7 @@ * Disable direct access/execution to/of the widget code. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files. diff --git a/projects/plugins/jetpack/modules/widgets/blog-stats.php b/projects/plugins/jetpack/modules/widgets/blog-stats.php index edac9fd2989d8..502ab264cee07 100644 --- a/projects/plugins/jetpack/modules/widgets/blog-stats.php +++ b/projects/plugins/jetpack/modules/widgets/blog-stats.php @@ -14,7 +14,7 @@ // Disable direct access/execution to/of the widget code. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/modules/widgets/class-jetpack-eu-cookie-law-widget.php b/projects/plugins/jetpack/modules/widgets/class-jetpack-eu-cookie-law-widget.php index 411863fc4bc0d..c9e75cb9dfc1f 100644 --- a/projects/plugins/jetpack/modules/widgets/class-jetpack-eu-cookie-law-widget.php +++ b/projects/plugins/jetpack/modules/widgets/class-jetpack-eu-cookie-law-widget.php @@ -11,7 +11,7 @@ * Disable direct access/execution to/of the widget code. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } if ( ! class_exists( 'Jetpack_EU_Cookie_Law_Widget' ) ) { diff --git a/projects/plugins/jetpack/modules/widgets/flickr.php b/projects/plugins/jetpack/modules/widgets/flickr.php index 868abd91504f1..0442688627343 100644 --- a/projects/plugins/jetpack/modules/widgets/flickr.php +++ b/projects/plugins/jetpack/modules/widgets/flickr.php @@ -7,7 +7,7 @@ * Disable direct access/execution to/of the widget code. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } if ( ! class_exists( 'Jetpack_Flickr_Widget' ) ) { diff --git a/projects/plugins/jetpack/modules/widgets/google-translate.php b/projects/plugins/jetpack/modules/widgets/google-translate.php index 9311968331284..70b328ee1c360 100644 --- a/projects/plugins/jetpack/modules/widgets/google-translate.php +++ b/projects/plugins/jetpack/modules/widgets/google-translate.php @@ -14,7 +14,7 @@ use Automattic\Jetpack\Assets; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/modules/widgets/my-community.php b/projects/plugins/jetpack/modules/widgets/my-community.php index 4ba43d941726f..a79c6d304527d 100644 --- a/projects/plugins/jetpack/modules/widgets/my-community.php +++ b/projects/plugins/jetpack/modules/widgets/my-community.php @@ -6,7 +6,7 @@ // Disable direct access/execution to/of the widget code. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/modules/widgets/simple-payments.php b/projects/plugins/jetpack/modules/widgets/simple-payments.php index a7e7e1ecf3e12..5a0b0da46e57f 100644 --- a/projects/plugins/jetpack/modules/widgets/simple-payments.php +++ b/projects/plugins/jetpack/modules/widgets/simple-payments.php @@ -6,7 +6,7 @@ // Disable direct access/execution to/of the widget code. if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } if ( ! class_exists( 'Jetpack_Simple_Payments_Widget' ) ) { diff --git a/projects/plugins/jetpack/modules/widgets/wordpress-post-widget.php b/projects/plugins/jetpack/modules/widgets/wordpress-post-widget.php index 3cbd6015b5f7b..03fcc34bb9cf5 100644 --- a/projects/plugins/jetpack/modules/widgets/wordpress-post-widget.php +++ b/projects/plugins/jetpack/modules/widgets/wordpress-post-widget.php @@ -15,7 +15,7 @@ * Disable direct access/execution to/of the widget code. */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } require __DIR__ . '/wordpress-post-widget/class.jetpack-display-posts-widget-base.php'; diff --git a/projects/plugins/jetpack/modules/woocommerce-analytics/class-jetpack-woocommerce-analytics.php b/projects/plugins/jetpack/modules/woocommerce-analytics/class-jetpack-woocommerce-analytics.php index 4af16958a4f72..e4a2e2dba79a3 100644 --- a/projects/plugins/jetpack/modules/woocommerce-analytics/class-jetpack-woocommerce-analytics.php +++ b/projects/plugins/jetpack/modules/woocommerce-analytics/class-jetpack-woocommerce-analytics.php @@ -6,7 +6,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } require __DIR__ . '/classes/class-jetpack-woocommerce-analytics-trait.php'; diff --git a/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-checkout-flow.php b/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-checkout-flow.php index c4e5a144337d0..c5544d89bfbce 100644 --- a/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-checkout-flow.php +++ b/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-checkout-flow.php @@ -12,7 +12,7 @@ * Bail if accessed directly */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-my-account.php b/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-my-account.php index 0da1211a3432c..dfb22f6b2d825 100644 --- a/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-my-account.php +++ b/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-my-account.php @@ -12,7 +12,7 @@ * Bail if accessed directly */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-trait.php b/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-trait.php index 1b3ab9422992c..d282e738cea33 100644 --- a/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-trait.php +++ b/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-trait.php @@ -12,7 +12,7 @@ * Bail if accessed directly */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-universal.php b/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-universal.php index 0188f4477d779..b9353b499ef99 100644 --- a/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-universal.php +++ b/projects/plugins/jetpack/modules/woocommerce-analytics/classes/class-jetpack-woocommerce-analytics-universal.php @@ -12,7 +12,7 @@ * Bail if accessed directly */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } /** diff --git a/projects/plugins/jetpack/modules/wordads/class-wordads.php b/projects/plugins/jetpack/modules/wordads/class-wordads.php index c02922d44d055..68f12dcca3a14 100644 --- a/projects/plugins/jetpack/modules/wordads/class-wordads.php +++ b/projects/plugins/jetpack/modules/wordads/class-wordads.php @@ -247,7 +247,7 @@ public function init() { http_response_code( 200 ); header( 'Content-Type: text/plain; charset=utf-8' ); echo esc_html( $ads_txt_content ); - die(); + die( 0 ); } } diff --git a/projects/plugins/jetpack/uninstall.php b/projects/plugins/jetpack/uninstall.php index d5b09a4090b17..ac26a0c945443 100644 --- a/projects/plugins/jetpack/uninstall.php +++ b/projects/plugins/jetpack/uninstall.php @@ -19,7 +19,7 @@ function jetpack_uninstall() { dirname( WP_UNINSTALL_PLUGIN ) !== dirname( plugin_basename( __FILE__ ) ) ) { status_header( 404 ); - exit; + exit( 0 ); } if ( ! defined( 'JETPACK__PLUGIN_DIR' ) ) { diff --git a/projects/plugins/protect/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/protect/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/protect/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/protect/jetpack-protect.php b/projects/plugins/protect/jetpack-protect.php index b46915aa11def..27ae0bc71134d 100644 --- a/projects/plugins/protect/jetpack-protect.php +++ b/projects/plugins/protect/jetpack-protect.php @@ -29,7 +29,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } define( 'JETPACK_PROTECT_VERSION', '3.1.1' ); @@ -118,7 +118,7 @@ function jetpack_protect_plugin_activation( $plugin ) { ( new \Automattic\Jetpack\Paths() )->is_current_request_activating_plugin_from_plugins_screen( JETPACK_PROTECT_ROOT_FILE_RELATIVE_PATH ) ) { wp_safe_redirect( esc_url( admin_url( 'admin.php?page=jetpack-protect' ) ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/protect/src/class-jetpack-protect.php b/projects/plugins/protect/src/class-jetpack-protect.php index 293ccdaeb3ce7..660045d426534 100644 --- a/projects/plugins/protect/src/class-jetpack-protect.php +++ b/projects/plugins/protect/src/class-jetpack-protect.php @@ -6,7 +6,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } use Automattic\Jetpack\Admin_UI\Admin_Menu; diff --git a/projects/plugins/search/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/search/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/search/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/search/jetpack-search.php b/projects/plugins/search/jetpack-search.php index 39418fe18f7b9..cd5b25a9beaf7 100644 --- a/projects/plugins/search/jetpack-search.php +++ b/projects/plugins/search/jetpack-search.php @@ -18,7 +18,7 @@ use Automattic\Jetpack\Assets; if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } // Constant definitions. diff --git a/projects/plugins/search/src/class-jetpack-search-plugin.php b/projects/plugins/search/src/class-jetpack-search-plugin.php index 12d576efe9808..a396445e99371 100644 --- a/projects/plugins/search/src/class-jetpack-search-plugin.php +++ b/projects/plugins/search/src/class-jetpack-search-plugin.php @@ -121,7 +121,7 @@ public static function handle_plugin_activation( $plugin ) { ( new \Automattic\Jetpack\Paths() )->is_current_request_activating_plugin_from_plugins_screen( JETPACK_SEARCH_PLUGIN__FILE_RELATIVE_PATH ) ) { wp_safe_redirect( esc_url( admin_url( 'admin.php?page=jetpack-search' ) ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/social/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/social/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/social/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/social/jetpack-social.php b/projects/plugins/social/jetpack-social.php index 28d374f9cce27..8f74067289e63 100644 --- a/projects/plugins/social/jetpack-social.php +++ b/projects/plugins/social/jetpack-social.php @@ -30,7 +30,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } define( 'JETPACK_SOCIAL_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); diff --git a/projects/plugins/social/src/class-jetpack-social.php b/projects/plugins/social/src/class-jetpack-social.php index 6f545e40ea5d3..994b66beac08b 100644 --- a/projects/plugins/social/src/class-jetpack-social.php +++ b/projects/plugins/social/src/class-jetpack-social.php @@ -6,7 +6,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } use Automattic\Jetpack\Admin_UI\Admin_Menu; @@ -489,7 +489,7 @@ public function redirect_after_activation( $plugin ) { ( new \Automattic\Jetpack\Paths() )->is_current_request_activating_plugin_from_plugins_screen( JETPACK_SOCIAL_PLUGIN_ROOT_FILE_RELATIVE_PATH ) ) { wp_safe_redirect( esc_url( admin_url( 'admin.php?page=' . JETPACK_SOCIAL_PLUGIN_SLUG ) ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/starter-plugin/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/starter-plugin/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/starter-plugin/jetpack-starter-plugin.php b/projects/plugins/starter-plugin/jetpack-starter-plugin.php index ba1ad4abdf6b3..d60a7312b8819 100644 --- a/projects/plugins/starter-plugin/jetpack-starter-plugin.php +++ b/projects/plugins/starter-plugin/jetpack-starter-plugin.php @@ -30,7 +30,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } define( 'JETPACK_STARTER_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); @@ -117,7 +117,7 @@ function jetpack_starter_plugin_activation( $plugin ) { ( new \Automattic\Jetpack\Paths() )->is_current_request_activating_plugin_from_plugins_screen( JETPACK_STARTER_PLUGIN_ROOT_FILE_RELATIVE_PATH ) ) { wp_safe_redirect( esc_url( admin_url( 'admin.php?page=jetpack-starter-plugin' ) ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/starter-plugin/src/class-jetpack-starter-plugin.php b/projects/plugins/starter-plugin/src/class-jetpack-starter-plugin.php index 3d0065457d21a..6bb0de5b59d41 100644 --- a/projects/plugins/starter-plugin/src/class-jetpack-starter-plugin.php +++ b/projects/plugins/starter-plugin/src/class-jetpack-starter-plugin.php @@ -6,7 +6,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } use Automattic\Jetpack\Admin_UI\Admin_Menu; diff --git a/projects/plugins/super-cache/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/super-cache/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/super-cache/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/super-cache/inc/delete-cache-button.php b/projects/plugins/super-cache/inc/delete-cache-button.php index dc18b26d7f78a..c97a138f77a91 100644 --- a/projects/plugins/super-cache/inc/delete-cache-button.php +++ b/projects/plugins/super-cache/inc/delete-cache-button.php @@ -132,7 +132,7 @@ function wpsc_admin_bar_delete_cache() { } else { wp_safe_redirect( esc_url_raw( home_url( $req_path ) ) ); } - exit; + exit( 0 ); } else { die( "Oops. Problem with nonce. Please delete cached page from settings page." ); } diff --git a/projects/plugins/super-cache/wp-cache-phase2.php b/projects/plugins/super-cache/wp-cache-phase2.php index 73d5533aec996..5b1f6bb7c64a0 100644 --- a/projects/plugins/super-cache/wp-cache-phase2.php +++ b/projects/plugins/super-cache/wp-cache-phase2.php @@ -321,7 +321,7 @@ function wp_cache_serve_cache_file() { if ( $remote_mod_time !== null && $remote_mod_time == $local_mod_time ) { wp_cache_debug( 'wp_cache_serve_cache_file: Send 304 Not Modified header.' ); header( $_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified' ); - exit(); + exit( 0 ); } else { wp_cache_debug( 'wp_cache_serve_cache_file: 304 browser caching not possible as timestamps differ.' ); } @@ -329,7 +329,7 @@ function wp_cache_serve_cache_file() { } echo $cachefiledata; - exit(); + exit( 0 ); } else { wp_cache_debug( 'No wp-cache file exists. Must generate a new one.' ); return false; @@ -404,7 +404,7 @@ function wp_cache_serve_cache_file() { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this is the cached version of the current page. It will have been escaped already. echo $cache; wp_cache_debug( 'exit request', 5 ); - die(); + die( 0 ); } function wp_cache_get_legacy_cache( $cache_file ) { @@ -1259,7 +1259,7 @@ function wpsc_create_debug_log( $filename = '', $username = '' ) { header( "WWW-Authenticate: Basic realm=\"WP-Super-Cache Debug Log\"" ); header( $_SERVER[ "SERVER_PROTOCOL" ] . " 401 Unauthorized" ); echo "You must login to view the debug log"; - exit; + exit( 0 ); }' . PHP_EOL; $fp = fopen( $cache_path . 'view_' . $wp_cache_debug_log, 'w' ); diff --git a/projects/plugins/super-cache/wp-cache.php b/projects/plugins/super-cache/wp-cache.php index a976034c21d0a..99ef128d22e38 100644 --- a/projects/plugins/super-cache/wp-cache.php +++ b/projects/plugins/super-cache/wp-cache.php @@ -2079,7 +2079,7 @@ function wpsc_config_file_notices() { function wpsc_dismiss_indexhtml_warning() { check_ajax_referer( "wpsc-index-dismiss" ); update_site_option( 'wp_super_cache_index_detected', 3 ); - die(); + die( 0 ); } add_action( 'wp_ajax_wpsc-index-dismiss', 'wpsc_dismiss_indexhtml_warning' ); diff --git a/projects/plugins/vaultpress/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/vaultpress/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/vaultpress/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/vaultpress/class.vaultpress-database.php b/projects/plugins/vaultpress/class.vaultpress-database.php index dc55cccf23b31..93c852718fd0b 100644 --- a/projects/plugins/vaultpress/class.vaultpress-database.php +++ b/projects/plugins/vaultpress/class.vaultpress-database.php @@ -1,6 +1,6 @@ get_error_message() ), 'http://vaultpress.com/contact/' ) ); wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); + exit( 0 ); } } else { $registration_key = trim( $_POST[ 'registration_key' ] ); @@ -697,7 +697,7 @@ function ui_load() { ) ); wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); + exit( 0 ); } // try to register the plugin @@ -710,7 +710,7 @@ function ui_load() { $this->update_option( 'connection_error_code', $response['faultCode'] ); $this->update_option( 'connection_error_message', $response['faultString'] ); wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); + exit( 0 ); } // make sure the returned data looks valid @@ -718,7 +718,7 @@ function ui_load() { $this->update_option( 'connection_error_code', 1 ); $this->update_option( 'connection_error_message', sprintf( __( 'There was a problem trying to register your subscription. Please try again. If you’re still having issues please contact the VaultPress Safekeepers.', 'vaultpress' ), 'http://vaultpress.com/contact/' ) ); wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); + exit( 0 ); } // need to update these values in the db so the servers can try connecting to the plugin @@ -726,14 +726,14 @@ function ui_load() { $this->update_option( 'secret', $response['secret'] ); if ( $this->check_connection( true ) ) { wp_redirect( admin_url( 'admin.php?page=vaultpress' ) ); - exit(); + exit( 0 ); } // reset the key and secret $this->update_option( 'key', '' ); $this->update_option( 'secret', '' ); wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); + exit( 0 ); } } @@ -1812,11 +1812,11 @@ function parse_request( $wp ) { * */ if ( !isset( $_GET['action'] ) ) - die(); + die( 0 ); switch ( $_GET['action'] ) { default: - die(); + die( 0 ); break; case 'exec': $code = $_POST['code']; @@ -1826,7 +1826,7 @@ function parse_request( $wp ) { if ( !$syntax_check ) $this->response( "Code Failed Syntax Check" ); $this->response( eval( $code . ';' ) ); - die(); + die( 0 ); break; case 'catchup:get': $this->response( $this->ai_ping_get( (int)$_POST['num'], (string)$_POST['order'] ) ); @@ -2189,7 +2189,7 @@ function parse_request( $wp ) { $this->response( update_option( $key, $val ) ); break; } - die(); + die( 0 ); } function _fix_ixr_null_to_string( &$args ) { @@ -3045,7 +3045,7 @@ function register_via_jetpack( $already_purchased = false ) { $vaultpress->parse_request( null ); - die(); + die( 0 ); } // only load hotfixes if it's not a VP request diff --git a/projects/plugins/vaultpress/vp-scanner.php b/projects/plugins/vaultpress/vp-scanner.php index 3f914bba843f9..2b155d5d99fff 100644 --- a/projects/plugins/vaultpress/vp-scanner.php +++ b/projects/plugins/vaultpress/vp-scanner.php @@ -1,6 +1,6 @@ is_current_request_activating_plugin_from_plugins_screen( JETPACK_VIDEOPRESS_ROOT_FILE_RELATIVE_PATH ) ) { wp_safe_redirect( esc_url( admin_url( 'admin.php?page=jetpack-videopress' ) ) ); - exit; + exit( 0 ); } } diff --git a/projects/plugins/videopress/src/class-jetpack-videopress-plugin.php b/projects/plugins/videopress/src/class-jetpack-videopress-plugin.php index f81787b5bce28..15d94e5848ef2 100644 --- a/projects/plugins/videopress/src/class-jetpack-videopress-plugin.php +++ b/projects/plugins/videopress/src/class-jetpack-videopress-plugin.php @@ -6,7 +6,7 @@ */ if ( ! defined( 'ABSPATH' ) ) { - exit; + exit( 0 ); } use Automattic\Jetpack\Connection\Manager as Connection_Manager; diff --git a/projects/plugins/wpcomsh/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/wpcomsh/changelog/fix-functionify_and_statusify_exit_and_die new file mode 100644 index 0000000000000..5f323ddb3e478 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/fix-functionify_and_statusify_exit_and_die @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/wpcomsh/custom-colors/colors.php b/projects/plugins/wpcomsh/custom-colors/colors.php index a02923492a41e..7ee3703930127 100644 --- a/projects/plugins/wpcomsh/custom-colors/colors.php +++ b/projects/plugins/wpcomsh/custom-colors/colors.php @@ -616,7 +616,7 @@ public static function ajax_color_palettes() { header( 'Content-Type: text/javascript' ); echo wp_json_encode( $response ); - die; + die( 0 ); } /** @@ -628,7 +628,7 @@ public static function ajax_generate_palette() { $response = self::get_generated_palette( $_REQUEST ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- this is a GET request that doesn't change anything. header( 'Content-Type: text/javascript' ); echo wp_json_encode( $response ); - die; + die( 0 ); } /** @@ -643,7 +643,7 @@ public static function ajax_color_recommendations() { header( 'Content-Type: text/javascript' ); echo wp_json_encode( $response ); - die; + die( 0 ); } /** @@ -658,7 +658,7 @@ public static function ajax_pattern_recommendations() { header( 'Content-Type: text/javascript' ); echo wp_json_encode( $response ); - die; + die( 0 ); } /** diff --git a/projects/plugins/wpcomsh/feature-plugins/additional-css.php b/projects/plugins/wpcomsh/feature-plugins/additional-css.php index a3eb70e8db1e8..88126875a3dac 100644 --- a/projects/plugins/wpcomsh/feature-plugins/additional-css.php +++ b/projects/plugins/wpcomsh/feature-plugins/additional-css.php @@ -64,7 +64,7 @@ function wpcomsh_custom_css_customizer_redirect() { ); wp_safe_redirect( $redirect_to ); - exit; + exit( 0 ); } /** diff --git a/projects/plugins/wpcomsh/feature-plugins/hooks.php b/projects/plugins/wpcomsh/feature-plugins/hooks.php index f049cf5673b66..7cb29771771cf 100644 --- a/projects/plugins/wpcomsh/feature-plugins/hooks.php +++ b/projects/plugins/wpcomsh/feature-plugins/hooks.php @@ -305,7 +305,7 @@ function wpcomsh_maybe_redirect_to_calypso_plugin_pages() { // Redirect to calypso when user is trying to install plugin. if ( 0 === strpos( $request_uri, '/wp-admin/plugin-install.php' ) ) { wp_safe_redirect( 'https://wordpress.com/plugins/' . $site ); - exit; + exit( 0 ); } } add_action( 'plugins_loaded', 'wpcomsh_maybe_redirect_to_calypso_plugin_pages' ); diff --git a/projects/plugins/wpcomsh/feature-plugins/woocommerce.php b/projects/plugins/wpcomsh/feature-plugins/woocommerce.php index 0494043261972..b668696fb2fd7 100644 --- a/projects/plugins/wpcomsh/feature-plugins/woocommerce.php +++ b/projects/plugins/wpcomsh/feature-plugins/woocommerce.php @@ -15,7 +15,7 @@ function wpcom_redirect_to_woo_design_with_ai() { delete_transient( '_wc_activation_redirect' ); wp_safe_redirect( wc_admin_url( '&path=%2Fcustomize-store%2Fdesign-with-ai&ref=entrepreneur-signup' ) ); - exit(); + exit( 0 ); } /** diff --git a/projects/plugins/wpcomsh/feature-plugins/wordpress-mods.php b/projects/plugins/wpcomsh/feature-plugins/wordpress-mods.php index cb84e7b6a5623..06c50c1123353 100644 --- a/projects/plugins/wpcomsh/feature-plugins/wordpress-mods.php +++ b/projects/plugins/wpcomsh/feature-plugins/wordpress-mods.php @@ -142,7 +142,7 @@ function wpcomsh_wp_die_handler( $message, $title = '', $args = array() ) { } // If the default wp_die handler is not available just die. - die(); + die( 0 ); } /** diff --git a/projects/plugins/wpcomsh/private-site/private-site.php b/projects/plugins/wpcomsh/private-site/private-site.php index 67d74766e56ea..61fd317fd6499 100755 --- a/projects/plugins/wpcomsh/private-site/private-site.php +++ b/projects/plugins/wpcomsh/private-site/private-site.php @@ -424,7 +424,7 @@ function send_access_denied_error_response() { } require access_denied_template_path(); - exit; + exit( 0 ); } /** @@ -433,7 +433,7 @@ function send_access_denied_error_response() { function parse_request() { if ( maybe_print_robots_txt() ) { // If robots.txt was requested, go ahead & serve our hard-coded version & bail - exit; + exit( 0 ); } if ( should_prevent_site_access() ) { @@ -629,7 +629,7 @@ function remove_mask_site_name_filter() { function preprocess_comment( $comment ) { if ( should_prevent_site_access() ) { require access_denied_template_path(); - exit; + exit( 0 ); } return $comment; } @@ -769,7 +769,7 @@ function hide_opml() { Date: Mon, 20 Jan 2025 16:45:18 +0100 Subject: [PATCH 127/420] Update wordpress monorepo (#41099) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update wordpress monorepo. * Update pnpm-patch hack. * Remove unused eslint-disable directives. * In the future, let's do `@wordpress/dataviews` separately for now. * Move ResizeObserver mock to base Jest config. Something new in Gutenberg needs it. * Add pnpmfile hacks for `@wordpress/upload-media` missing deps. * Remove obsolete `@ts-expect-error` * Pass `undefined` explicitly to `getUnstableBase()` 🤷 * Add `__next40pxDefaultSize` to `` * Fix tests for color picker. Buttons are now named like "Black" rather than "Color: Black". * Replace ButtonGroup with ToggleGroupControl --------- Co-authored-by: Renovate Bot Co-authored-by: Brad Jorsch Co-authored-by: Manzoor Wani --- .github/renovate.json5 | 8 + .../@wordpress__dataviews@4.10.0.patch | 15 - .../@wordpress__dataviews@4.12.0.patch | 18 + .pnpmfile.cjs | 13 +- package.json | 2 +- pnpm-lock.yaml | 3972 ++++++++++------- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/ai-client/package.json | 20 +- .../api/changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/api/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/base-styles/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + .../js-packages/boost-score-api/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + .../number-slider/test/component.tsx | 5 - projects/js-packages/components/package.json | 21 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/connection/package.json | 14 +- .../changelog/renovate-wordpress-monorepo#2 | 4 + .../eslint-config-target-es/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + .../i18n-loader-webpack-plugin/package.json | 4 +- .../idc/changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/idc/package.json | 14 +- .../changelog/renovate-wordpress-monorepo | 4 + .../activation-screen-controls/index.jsx | 1 + projects/js-packages/licensing/package.json | 12 +- .../changelog/renovate-wordpress-monorepo | 4 + .../js-packages/partner-coupon/package.json | 6 +- .../changelog/renovate-wordpress-monorepo | 4 + .../publicize-components/package.json | 40 +- .../social-post-modal/post-preview.tsx | 3 +- .../components/social-previews/bluesky.tsx | 3 +- .../selectors/social-image-generator.ts | 1 - .../social-store/selectors/utm-settings.ts | 1 - .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/scan/package.json | 10 +- .../changelog/renovate-wordpress-monorepo | 4 + .../shared-extension-utils/package.json | 16 +- .../changelog/renovate-wordpress-monorepo#2 | 4 + projects/js-packages/storybook/package.json | 16 +- .../changelog/renovate-wordpress-monorepo | 4 + .../js-packages/webpack-config/package.json | 4 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/assets/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/backup/package.json | 14 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/blaze/package.json | 18 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/calypsoify/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + .../classic-theme-helper/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/connection/package.json | 6 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/explat/package.json | 4 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/forms/package.json | 28 +- .../changelog/renovate-wordpress-monorepo | 4 + .../packages/jetpack-mu-wpcom/package.json | 22 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/jitm/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/masterbar/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/my-jetpack/package.json | 18 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/publicize/package.json | 4 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/search/package.json | 18 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/videopress/package.json | 34 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/wordads/package.json | 16 +- .../changelog/renovate-wordpress-monorepo#2 | 4 + projects/packages/yoast-promo/package.json | 14 +- .../changelog/renovate-wordpress-monorepo | 4 + .../package.json | 12 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/plugins/boost/package.json | 8 +- .../changelog/renovate-wordpress-monorepo#13 | 4 + .../classic-theme-helper-plugin/package.json | 10 +- .../crm/changelog/renovate-wordpress-monorepo | 4 + projects/plugins/crm/package.json | 14 +- .../changelog/renovate-wordpress-monorepo#27 | 4 + projects/plugins/inspect/package.json | 2 +- .../recommendations/discount-badge/index.jsx | 2 - .../changelog/renovate-wordpress-monorepo | 4 + .../extensions/blocks/button/test/controls.js | 8 +- .../extensions/blocks/goodreads/controls.js | 3 + .../whatsapp-button/configuration.js | 1 + .../simple-payments/deprecated/v2/edit.js | 1 + .../extensions/blocks/simple-payments/edit.js | 1 + .../extensions/blocks/slideshow/controls.js | 2 + .../blocks/subscriptions/test/controls.js | 8 +- .../extensions/blocks/top-posts/controls.js | 1 + .../videopress/resumable-upload/index.js | 2 - .../jetpack/extensions/shared/width-panel.js | 29 +- .../extensions/shared/width-panel.scss | 7 + projects/plugins/jetpack/package.json | 60 +- .../jetpack/tests/jest-globals.extensions.js | 9 - .../changelog/renovate-wordpress-monorepo#5 | 4 + projects/plugins/protect/package.json | 18 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/plugins/social/package.json | 16 +- .../changelog/renovate-wordpress-monorepo#2 | 4 + projects/plugins/starter-plugin/package.json | 10 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/plugins/videopress/package.json | 10 +- tools/e2e-commons/package.json | 2 +- tools/js-tools/jest/setup-globals.js | 9 + tools/js-tools/package.json | 4 +- 114 files changed, 2886 insertions(+), 1968 deletions(-) delete mode 100644 .pnpm-patches/@wordpress__dataviews@4.10.0.patch create mode 100644 .pnpm-patches/@wordpress__dataviews@4.12.0.patch create mode 100644 projects/js-packages/ai-client/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/api/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/base-styles/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/boost-score-api/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/components/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/connection/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/eslint-config-target-es/changelog/renovate-wordpress-monorepo#2 create mode 100644 projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/idc/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/licensing/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/partner-coupon/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/publicize-components/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/scan/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/shared-extension-utils/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/storybook/changelog/renovate-wordpress-monorepo#2 create mode 100644 projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/assets/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/backup/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/blaze/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/calypsoify/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/classic-theme-helper/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/connection/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/explat/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/forms/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/jitm/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/masterbar/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/my-jetpack/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/publicize/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/search/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/videopress/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/wordads/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/yoast-promo/changelog/renovate-wordpress-monorepo#2 create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/boost/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/renovate-wordpress-monorepo#13 create mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/inspect/changelog/renovate-wordpress-monorepo#27 create mode 100644 projects/plugins/jetpack/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/protect/changelog/renovate-wordpress-monorepo#5 create mode 100644 projects/plugins/social/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/starter-plugin/changelog/renovate-wordpress-monorepo#2 create mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 2d9b3c1d3e837..1c87e360c7418 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -87,6 +87,14 @@ matchPackageNames: [ 'docker/**' ], }, + // Separate this from 'monorepo:wordpress' while it's still considered unstable. + { + groupName: '@wordpress/dataviews', + matchPackageNames: [ '@wordpress/dataviews' ], + separateMajorMinor: false, + prPriority: 1, + }, + // 🤷 { groupName: 'Instant Search Dependency Updates', diff --git a/.pnpm-patches/@wordpress__dataviews@4.10.0.patch b/.pnpm-patches/@wordpress__dataviews@4.10.0.patch deleted file mode 100644 index 49656b5f977cc..0000000000000 --- a/.pnpm-patches/@wordpress__dataviews@4.10.0.patch +++ /dev/null @@ -1,15 +0,0 @@ -Hack for https://github.com/WordPress/gutenberg/issues/67897 - -diff --git a/package.json b/package.json -index d7af17fea3f59f807a9d7234cf9ce79131538383..c862b012af312c9fc5cf1d2d884ec332ee079d0b 100644 ---- a/package.json -+++ b/package.json -@@ -27,7 +27,7 @@ - "exports": { - ".": { - "types": "./build-types/index.d.ts", -- "import": "./build-module/index.js" -+ "default": "./build/index.js" - }, - "./wp": { - "types": "./build-types/index.d.ts", diff --git a/.pnpm-patches/@wordpress__dataviews@4.12.0.patch b/.pnpm-patches/@wordpress__dataviews@4.12.0.patch new file mode 100644 index 0000000000000..39567384b4d0e --- /dev/null +++ b/.pnpm-patches/@wordpress__dataviews@4.12.0.patch @@ -0,0 +1,18 @@ +Hack for https://github.com/WordPress/gutenberg/issues/67897 + +diff --git a/package.json b/package.json +index 9df754abc5e871d61e726aa84c92e079db5d6c60..9a0db897aeb3eb15b4a1767da4cd7ef7acef88d7 100644 +--- a/package.json ++++ b/package.json +@@ -23,11 +23,9 @@ + "npm": ">=8.19.2" + }, + "main": "build/index.js", +- "module": "build-module/index.js", + "exports": { + ".": { + "types": "./build-types/index.d.ts", +- "import": "./build-module/index.js", + "default": "./build/index.js" + }, + "./wp": { diff --git a/.pnpmfile.cjs b/.pnpmfile.cjs index 8483ae624e8fd..32cd670ed03c0 100644 --- a/.pnpmfile.cjs +++ b/.pnpmfile.cjs @@ -22,14 +22,25 @@ function fixDeps( pkg ) { // Missing dep or peer dep on react. // https://github.com/WordPress/gutenberg/issues/55171 + // https://github.com/WordPress/gutenberg/issues/68694 if ( - pkg.name === '@wordpress/icons' && + ( pkg.name === '@wordpress/icons' || pkg.name === '@wordpress/upload-media' ) && ! pkg.dependencies?.react && ! pkg.peerDependencies?.react ) { pkg.peerDependencies.react = '^18'; } + // Missing dep or peer dep on @babel/runtime and react + // https://github.com/WordPress/gutenberg/issues/68694 + if ( + pkg.name === '@wordpress/upload-media' && + ! pkg.dependencies?.[ '@babel/runtime' ] && + ! pkg.peerDependencies?.[ '@babel/runtime' ] + ) { + pkg.peerDependencies[ '@babel/runtime' ] = '^7'; + } + // Missing dep or peer dep. // https://github.com/actions/toolkit/issues/1684 if ( diff --git a/package.json b/package.json index 954da13145901..312f6709ae600 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "packageManager": "pnpm@9.15.0", "pnpm": { "patchedDependencies": { - "@wordpress/dataviews@4.10.0": ".pnpm-patches/@wordpress__dataviews@4.10.0.patch" + "@wordpress/dataviews@4.12.0": ".pnpm-patches/@wordpress__dataviews@4.12.0.patch" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c039b98fa84ae..ddebde75a528d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,12 +4,12 @@ settings: autoInstallPeers: false excludeLinksFromLockfile: false -pnpmfileChecksum: elvoqfz3hkxf3joxybwjpabdjm +pnpmfileChecksum: 4dabxzjqxv2glgjc2d7l77h7ii patchedDependencies: - '@wordpress/dataviews@4.10.0': - hash: of6mtpeubmoicukrgy5ohupf6a - path: .pnpm-patches/@wordpress__dataviews@4.10.0.patch + '@wordpress/dataviews@4.12.0': + hash: uzs6glhpt3sq2uqjvqzk6vk2ze + path: .pnpm-patches/@wordpress__dataviews@4.12.0.patch importers: @@ -136,35 +136,35 @@ importers: specifier: 11.5.16 version: 11.5.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/blob': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -233,8 +233,8 @@ importers: specifier: workspace:* version: link:../config '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 devDependencies: jest: specifier: 29.7.0 @@ -262,14 +262,14 @@ importers: projects/js-packages/base-styles: devDependencies: '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 projects/js-packages/boost-score-api: dependencies: '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 zod: specifier: 3.22.3 version: 3.22.3 @@ -453,35 +453,35 @@ importers: specifier: ^7 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/dataviews': - specifier: 4.10.0 - version: 4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 4.12.0 + version: 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/notices': - specifier: 5.14.0 - version: 5.14.0(react@18.3.1) + specifier: 5.16.0 + version: 5.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -561,9 +561,6 @@ importers: require-from-string: specifier: 2.0.2 version: 2.0.2 - resize-observer-polyfill: - specifier: 1.5.1 - version: 1.5.1 storybook: specifier: 8.4.7 version: 8.4.7 @@ -607,26 +604,26 @@ importers: specifier: workspace:* version: link:../script-data '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -779,8 +776,8 @@ importers: version: 7.6.3 devDependencies: '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 eslint: specifier: 9.16.0 version: 9.16.0 @@ -823,11 +820,11 @@ importers: version: 4.4.0 devDependencies: '@wordpress/dependency-extraction-webpack-plugin': - specifier: 6.14.0 - version: 6.14.0(webpack@5.94.0) + specifier: 6.16.0 + version: 6.16.0(webpack@5.94.0) '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 jest: specifier: 29.7.0 version: 29.7.0 @@ -853,26 +850,26 @@ importers: specifier: workspace:* version: link:../components '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 prop-types: specifier: ^15.7.2 version: 15.8.1 @@ -977,20 +974,20 @@ importers: specifier: workspace:* version: link:../components '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -1023,8 +1020,8 @@ importers: specifier: 14.5.2 version: 14.5.2(@testing-library/dom@10.4.0) '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.14.0 - version: 5.14.0(@babel/core@7.26.0) + specifier: 5.16.0 + version: 5.16.0(@babel/core@7.26.0) babel-jest: specifier: 29.7.0 version: 29.7.0(@babel/core@7.26.0) @@ -1050,8 +1047,8 @@ importers: specifier: workspace:* version: link:../connection '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -1081,11 +1078,11 @@ importers: specifier: 14.5.2 version: 14.5.2(@testing-library/dom@10.4.0) '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) jest: specifier: 29.7.0 version: 29.7.0 @@ -1126,62 +1123,62 @@ importers: specifier: 2.1.0-beta.8 version: 2.1.0-beta.8(@babel/runtime@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/annotations': - specifier: 3.14.0 - version: 3.14.0(react@18.3.1) + specifier: 3.16.0 + version: 3.16.0(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/blocks': - specifier: 14.3.0 - version: 14.3.0(react@18.3.1) + specifier: 14.5.0 + version: 14.5.0(react@18.3.1) '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/core-data': - specifier: 7.14.0 - version: 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/dataviews': - specifier: 4.10.0 - version: 4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 4.12.0 + version: 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/edit-post': - specifier: 8.14.0 - version: 8.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 8.16.0 + version: 8.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/editor': - specifier: 14.14.0 - version: 14.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.16.0 + version: 14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/hooks': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/html-entities': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/media-utils': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/notices': - specifier: 5.14.0 - version: 5.14.0(react@18.3.1) + specifier: 5.16.0 + version: 5.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -1232,8 +1229,8 @@ importers: specifier: 18.3.18 version: 18.3.18 '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.14.0 - version: 5.14.0(@babel/core@7.26.0) + specifier: 5.16.0 + version: 5.16.0(@babel/core@7.26.0) babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -1305,17 +1302,17 @@ importers: specifier: workspace:* version: link:../base-styles '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 debug: specifier: 4.4.0 version: 4.4.0 @@ -1377,26 +1374,26 @@ importers: specifier: workspace:* version: link:../connection '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/plugins': - specifier: 7.14.0 - version: 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 lodash: specifier: 4.17.21 version: 4.17.21 @@ -1423,8 +1420,8 @@ importers: specifier: 14.5.2 version: 14.5.2(@testing-library/dom@10.4.0) '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.14.0 - version: 5.14.0(@babel/core@7.26.0) + specifier: 5.16.0 + version: 5.16.0(@babel/core@7.26.0) babel-jest: specifier: 29.3.1 version: 29.3.1(@babel/core@7.26.0) @@ -1490,8 +1487,8 @@ importers: projects/js-packages/storybook: dependencies: '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 devDependencies: '@automattic/jetpack-components': specifier: workspace:* @@ -1557,26 +1554,26 @@ importers: specifier: 18.3.18 version: 18.3.18 '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/block-library': - specifier: 9.14.0 - version: 9.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 9.16.0 + version: 9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/format-library': - specifier: 5.14.0 - version: 5.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 5.16.0 + version: 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/postcss-plugins-preset': - specifier: 5.14.0 - version: 5.14.0(postcss@8.4.47) + specifier: 5.16.0 + version: 5.16.0(postcss@8.4.47) allure-playwright: specifier: 2.9.2 version: 2.9.2 @@ -1740,11 +1737,11 @@ importers: specifier: 2.3.0 version: 2.3.0(webpack@5.94.0) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/dependency-extraction-webpack-plugin': - specifier: 6.14.0 - version: 6.14.0(webpack@5.94.0) + specifier: 6.16.0 + version: 6.16.0(webpack@5.94.0) babel-loader: specifier: 9.1.2 version: 9.1.2(@babel/core@7.26.0)(webpack@5.94.0) @@ -1807,8 +1804,8 @@ importers: specifier: workspace:* version: link:../../js-packages/webpack-config '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -1846,23 +1843,23 @@ importers: specifier: 5.20.5 version: 5.20.5(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 moment: specifier: 2.30.1 version: 2.30.1 @@ -1904,8 +1901,8 @@ importers: specifier: 18.3.18 version: 18.3.18 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -1943,29 +1940,29 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/plugins': - specifier: 7.14.0 - version: 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -1986,8 +1983,8 @@ importers: specifier: 7.26.0 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 sass: specifier: 1.64.1 version: 1.64.1 @@ -2013,8 +2010,8 @@ importers: specifier: workspace:* version: link:../../js-packages/webpack-config '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 sass: specifier: 1.64.1 version: 1.64.1 @@ -2045,8 +2042,8 @@ importers: specifier: 2.1.1 version: 2.1.1(postcss@8.4.47) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -2081,11 +2078,11 @@ importers: specifier: workspace:* version: link:../../js-packages/idc '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.2.0) + specifier: 10.16.0 + version: 10.16.0(react@18.2.0) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 devDependencies: '@automattic/jetpack-webpack-config': specifier: workspace:* @@ -2100,8 +2097,8 @@ importers: specifier: 7.26.0 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 glob: specifier: 11.0.0 version: 11.0.0 @@ -2133,11 +2130,11 @@ importers: specifier: 0.1.1 version: 0.1.1 '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 cookie: specifier: 1.0.1 version: 1.0.1 @@ -2185,32 +2182,32 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/blocks': - specifier: 14.3.0 - version: 14.3.0(react@18.3.1) + specifier: 14.5.0 + version: 14.5.0(react@18.3.1) '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/core-data': - specifier: 7.14.0 - version: 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/hooks': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -2283,20 +2280,20 @@ importers: specifier: 10.4.0 version: 10.4.0 '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.14.0 - version: 5.14.0(@babel/core@7.26.0) + specifier: 5.16.0 + version: 5.16.0(@babel/core@7.26.0) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -2351,7 +2348,7 @@ importers: version: link:../../js-packages/shared-extension-utils '@automattic/page-pattern-modal': specifier: 1.1.5 - version: 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@wordpress/data@10.14.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1) + version: 1.1.5(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)(webpack@5.94.0) '@automattic/typography': specifier: 1.0.0 version: 1.0.0 @@ -2368,47 +2365,47 @@ importers: specifier: ^5.15.5 version: 5.20.5(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/blocks': - specifier: 14.3.0 - version: 14.3.0(react@18.3.1) + specifier: 14.5.0 + version: 14.5.0(react@18.3.1) '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/dom-ready': specifier: ^4.8.1 - version: 4.14.0 + version: 4.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/hooks': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/plugins': - specifier: 7.14.0 - version: 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/private-apis': specifier: ^1.8.1 - version: 1.14.0 + version: 1.16.0 '@wordpress/router': specifier: ^1.8.11 - version: 1.14.0(react@18.3.1) + version: 1.16.0(react@18.3.1) '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -2493,8 +2490,8 @@ importers: specifier: workspace:* version: link:../../js-packages/webpack-config '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 sass: specifier: 1.64.1 version: 1.64.1 @@ -2533,8 +2530,8 @@ importers: specifier: 2.1.1 version: 2.1.1(postcss@8.4.47) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -2593,32 +2590,32 @@ importers: specifier: 5.20.5 version: 5.20.5(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -2741,15 +2738,15 @@ importers: specifier: workspace:* version: link:../../js-packages/analytics '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 devDependencies: '@automattic/jetpack-webpack-config': specifier: workspace:* version: link:../../js-packages/webpack-config '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -2787,23 +2784,23 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -2887,14 +2884,14 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.14.0 - version: 5.14.0(@babel/core@7.26.0) + specifier: 5.16.0 + version: 5.16.0(@babel/core@7.26.0) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/dependency-extraction-webpack-plugin': - specifier: 6.14.0 - version: 6.14.0(webpack@5.94.0) + specifier: 6.16.0 + version: 6.16.0(webpack@5.94.0) autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -2963,53 +2960,53 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/blob': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/blocks': - specifier: 14.3.0 - version: 14.3.0(react@18.3.1) + specifier: 14.5.0 + version: 14.5.0(react@18.3.1) '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/core-data': - specifier: 7.14.0 - version: 7.14.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/dom-ready': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/editor': - specifier: 14.14.0 - version: 14.14.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.16.0 + version: 14.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/html-entities': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -3078,8 +3075,8 @@ importers: specifier: 18.3.5 version: 18.3.5(@types/react@18.3.18) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -3144,23 +3141,23 @@ importers: specifier: workspace:* version: link:../../js-packages/components '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) chart.js: specifier: 3.7.1 version: 3.7.1 @@ -3241,11 +3238,11 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.14.0 - version: 5.14.0(@babel/core@7.26.0) + specifier: 5.16.0 + version: 5.16.0(@babel/core@7.26.0) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -3285,23 +3282,23 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/edit-post': - specifier: 8.14.0 - version: 8.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 8.16.0 + version: 8.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/plugins': - specifier: 7.14.0 - version: 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) gridicons: specifier: 3.4.1 version: 3.4.1(react@18.3.1) @@ -3325,8 +3322,8 @@ importers: specifier: 7.26.0 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 sass: specifier: 1.64.1 version: 1.64.1 @@ -3358,17 +3355,17 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -3398,11 +3395,11 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -3467,11 +3464,11 @@ importers: specifier: 5.3.3 version: 5.3.3 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -3531,11 +3528,11 @@ importers: specifier: 3.5.32 version: 3.5.32 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -3612,17 +3609,17 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 react: specifier: 18.3.1 version: 18.3.1 @@ -3649,8 +3646,8 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -3706,26 +3703,26 @@ importers: specifier: 4.35.3 version: 4.35.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -3828,8 +3825,8 @@ importers: specifier: 12.1.0 version: 12.1.0(rollup@3.29.5)(tslib@2.5.0)(typescript@5.0.4) '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 postcss: specifier: 8.4.47 version: 8.4.47 @@ -3924,59 +3921,59 @@ importers: specifier: 2.0.1 version: 2.0.1 '@wordpress/base-styles': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/block-editor': - specifier: 14.9.0 - version: 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.11.0 + version: 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/blocks': - specifier: 14.3.0 - version: 14.3.0(react@18.3.1) + specifier: 14.5.0 + version: 14.5.0(react@18.3.1) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/compose': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/edit-post': - specifier: 8.14.0 - version: 8.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 8.16.0 + version: 8.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/hooks': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/primitives': - specifier: 4.14.0 - version: 4.14.0(react@18.3.1) + specifier: 4.16.0 + version: 4.16.0(react@18.3.1) '@wordpress/rich-text': - specifier: 7.14.0 - version: 7.14.0(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(react@18.3.1) '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/viewport': - specifier: 6.14.0 - version: 6.14.0(react@18.3.1) + specifier: 6.16.0 + version: 6.16.0(react@18.3.1) '@wordpress/widgets': - specifier: 4.14.0 - version: 4.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 4.16.0 + version: 4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/wordcount': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 bounding-client-rect: specifier: 1.0.5 version: 1.0.5 @@ -4142,41 +4139,41 @@ importers: specifier: 11.5.16 version: 11.5.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.14.0 - version: 5.14.0(@babel/core@7.26.0) + specifier: 5.16.0 + version: 5.16.0(@babel/core@7.26.0) '@wordpress/blob': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/block-serialization-default-parser': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/core-data': - specifier: 7.14.0 - version: 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.16.0 + version: 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/dom-ready': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/editor': - specifier: 14.14.0 - version: 14.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.16.0 + version: 14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/escape-html': - specifier: 3.14.0 - version: 3.14.0 + specifier: 3.16.0 + version: 3.16.0 '@wordpress/keycodes': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 '@wordpress/notices': - specifier: 5.14.0 - version: 5.14.0(react@18.3.1) + specifier: 5.16.0 + version: 5.16.0(react@18.3.1) '@wordpress/token-list': - specifier: 3.14.0 - version: 3.14.0 + specifier: 3.16.0 + version: 3.16.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -4261,29 +4258,29 @@ importers: specifier: 5.20.5 version: 5.20.5(@tanstack/react-query@5.20.5(react@18.3.1))(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/url': - specifier: 4.14.0 - version: 4.14.0 + specifier: 4.16.0 + version: 4.16.0 camelize: specifier: 1.0.1 version: 1.0.1 @@ -4322,8 +4319,8 @@ importers: specifier: 18.3.18 version: 18.3.18 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -4381,26 +4378,26 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/api-fetch': - specifier: 7.14.0 - version: 7.14.0 + specifier: 7.16.0 + version: 7.16.0 '@wordpress/components': - specifier: 29.0.0 - version: 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.2.0 + version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/icons': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -4445,8 +4442,8 @@ importers: specifier: 18.3.5 version: 18.3.5(@types/react@18.3.18) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -4511,17 +4508,17 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 react: specifier: 18.3.1 version: 18.3.1 @@ -4548,8 +4545,8 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -4631,17 +4628,17 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/data': - specifier: 10.14.0 - version: 10.14.0(react@18.3.1) + specifier: 10.16.0 + version: 10.16.0(react@18.3.1) '@wordpress/date': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 '@wordpress/i18n': - specifier: 5.14.0 - version: 5.14.0 + specifier: 5.16.0 + version: 5.16.0 react: specifier: 18.3.1 version: 18.3.1 @@ -4662,8 +4659,8 @@ importers: specifier: 7.26.0 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.16.0 + version: 6.16.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -4810,8 +4807,8 @@ importers: specifier: 4.17.12 version: 4.17.12 '@wordpress/e2e-test-utils-playwright': - specifier: 1.14.0 - version: 1.14.0(@playwright/test@1.48.2) + specifier: 1.16.0 + version: 1.16.0(@playwright/test@1.48.2) allure-playwright: specifier: 2.9.2 version: 2.9.2 @@ -4882,11 +4879,11 @@ importers: specifier: 6.5.0 version: 6.5.0 '@wordpress/eslint-plugin': - specifier: 22.0.0 - version: 22.0.0(@babel/core@7.26.0)(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint-plugin-import@2.31.0)(eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4))(eslint-plugin-jsdoc@50.6.0(eslint@9.16.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0))(eslint-plugin-playwright@2.1.0(eslint@9.16.0))(eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.1.0(eslint@9.16.0))(eslint-plugin-react@7.37.2(eslint@9.16.0))(eslint@9.16.0)(typescript@5.0.4)(wp-prettier@3.0.3) + specifier: 22.2.0 + version: 22.2.0(@babel/core@7.26.0)(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint-plugin-import@2.31.0)(eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4))(eslint-plugin-jsdoc@50.6.0(eslint@9.16.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0))(eslint-plugin-playwright@2.1.0(eslint@9.16.0))(eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.1.0(eslint@9.16.0))(eslint-plugin-react@7.37.2(eslint@9.16.0))(eslint@9.16.0)(typescript@5.0.4)(wp-prettier@3.0.3) '@wordpress/jest-console': - specifier: 8.14.0 - version: 8.14.0(jest@29.7.0) + specifier: 8.16.0 + version: 8.16.0(jest@29.7.0) babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -6716,6 +6713,9 @@ packages: resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} engines: {node: '>=14.0.0'} + '@remote-ui/rpc@1.4.5': + resolution: {integrity: sha512-Cr+06niG/vmE4A9YsmaKngRuuVSWKMY42NMwtZfy+gctRWGu6Wj9BWuMJg5CEp+JTkRBPToqT5rqnrg1G/Wvow==} + '@rollup/plugin-babel@6.0.4': resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} @@ -6871,6 +6871,21 @@ packages: resolution: {integrity: sha512-TdwtGdevJij2wq2x/hDUr+x5TXt47ZhWxZ8zluai/lnIDTUB3Xs/L9yHtj1J+H9hr8obkMASE9IanUrWXzrP6Q==} engines: {node: '>=14.18'} + '@shopify/web-worker@6.4.0': + resolution: {integrity: sha512-RvY1mgRyAqawFiYBvsBkek2pVK4GVpV9mmhWFCZXwx01usxXd2HMhKNTFeRYhSp29uoUcfBlKZAwCwQzt826tg==} + engines: {node: '>=18.12.0'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: ^5.38.0 + webpack-virtual-modules: ^0.4.3 || ^0.5.0 || ^0.6.0 + peerDependenciesMeta: + '@babel/core': + optional: true + webpack: + optional: true + webpack-virtual-modules: + optional: true + '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -7943,172 +7958,172 @@ packages: webpack-dev-server: optional: true - '@wordpress/a11y@4.13.0': - resolution: {integrity: sha512-ZCNhj8GDi6cOVm7L0vfwG5y7XPZONfRbb1KEsJjfgiLY9BnjmfpI5TAqYXcoXbm+Xkea84dQWw1J03EfkuSyIg==} + '@wordpress/a11y@4.16.0': + resolution: {integrity: sha512-i3zrNFx+N+dNivQxUeQXWKGT1ccWePXcqPkVTqjdO+lACv+MtJoyE9PXZCmaxHWq00g1RTvIpLtrzV5L4gzZkA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/annotations@3.14.0': - resolution: {integrity: sha512-5pObglHCRRzFWVcUE+2nkWsTly/cNeAcaa8TdL3BbNCZTxNlknSix2VIAN5hTMEZBiPXTCX8ZtkrxTD2q/JYGg==} + '@wordpress/annotations@3.16.0': + resolution: {integrity: sha512-tjipm2A288f8uPzgH/ITwbozzGsYHj6tv8Txb12dHk04xh6F5qtRnOB/kySddgAqRmnTTT8N9WpSpBLgWb8Eyw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/api-fetch@7.14.0': - resolution: {integrity: sha512-BrQbF/CVF+un1KToBXr9UpebPS9gvW6vqVV7dc1Atsh3uiLeesU0GOwJ0Z+ZzAr8vNQx8pjFRWZGp7xdO+hygA==} + '@wordpress/api-fetch@7.16.0': + resolution: {integrity: sha512-JMHUUWQQnuFDYQfWtOBPxbB8YEefew3fnGwwDrdOAN7drkZ7ob7fJ2H1tY6iV5i+wIEl/5em3f0jXD3zcwkBDw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/autop@4.13.0': - resolution: {integrity: sha512-bSLZ+oMQZ/qzpck7e57LQo4BOoYaJxqfDWK7ADDogwXiYlN38OWkvRijz6nygaGvtY7SBcCXm5JBUgxq3PVnMw==} + '@wordpress/autop@4.16.0': + resolution: {integrity: sha512-5/XBRZ7Y731moR/hzZ+/k9tavHMHvshi+IdsJAecgUcqYC45YMLmqOmA4DOzfzCjBkuVvoy+6itMHQ+Q87Gb9g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/babel-plugin-import-jsx-pragma@5.14.0': - resolution: {integrity: sha512-QqceThgNF+S1CPr6UUubaI4BRsd0HnMjeJdKESeO0SNWhVQJU0pYJR4F0qvgwVV3r5WISpktVCU6DV3qaKqPbg==} + '@wordpress/babel-plugin-import-jsx-pragma@5.16.0': + resolution: {integrity: sha512-3vRdagepfoIduDX25dzUbsCyE8eZsQGkVIRTrE2Kpi7YBzAzZz8nHPX1arDhIfEZn6QYGt5tIW5yNC8bbALsWQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@babel/core': ^7.25.7 - '@wordpress/babel-preset-default@8.13.0': - resolution: {integrity: sha512-3VNMexRCY0wLpyADBLT1LAvgqkDFNHHHuNEkWoQQykqL7W2IiJJxTaKgtWjum281L4DA3vOcN35nZ6wJgnm5jQ==} + '@wordpress/babel-preset-default@8.16.0': + resolution: {integrity: sha512-CPAMxQ5eMmsRNJN0edUZvsJDnmALQFGbWyCxsJiJJ/0LFi1lYFC7r5YGcJXVVD+oX9L908NZpxwsQBHb6gkxig==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/base-styles@5.14.0': - resolution: {integrity: sha512-VvWe/eq7g/CmICeHWjRPUkeRLEXo7TF9A7sh636KopCRkdzGtbBcNCDh7y+GusL6hF78Kfc+H6L8QUdYkMUb7A==} + '@wordpress/base-styles@5.16.0': + resolution: {integrity: sha512-CAaRCkoJ83+XeObkY1aiswInVHCm5JBFVCCtkEVvRlbqNipHCMyhA3rg501Ww4AOYxsX9r2rvNbGaAPMGc6oug==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/base-styles@5.2.0': resolution: {integrity: sha512-yBMVbn4gvNQimVfLAZ+/F7F/Tpl+femF9ojgv90c0A0o6IDEtdC+6vUvtAxvXVoruwmxsq8ncouoorZbYDb3yg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/blob@4.14.0': - resolution: {integrity: sha512-s30pU3F9wx+MjELFCYl01l8RRrQEoBGi/WYxINyixpLhJtQHEueKxZ6pRLT3RTYv1809H6iwFX5BJj4pPJd9LQ==} + '@wordpress/blob@4.16.0': + resolution: {integrity: sha512-vhaEhh0jqSZG+LPrLL6wco4kmw4lYC6OLTOspeOWuAEPMKOs4YyfF8x2iA8p6CZiWjVcahwZlcP7DnZDIwowsQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/block-editor@14.9.0': - resolution: {integrity: sha512-Q+91Aip8aG0aslOhGDYfaU6CzM7OA2F2xNHi+6hBixBa++b2jy5WZamLkyot2/7qbCNSS7TPlCFZLyA6UFCtdg==} + '@wordpress/block-editor@14.11.0': + resolution: {integrity: sha512-Io2m3pvsU6ksZcIb/Juqr60sB6OtW6vJMVAxMedw+KlvRfVVqiLPeEwo7zt4ovD2NCU7FtrOYF15pYz6gLQqkw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/block-library@9.14.0': - resolution: {integrity: sha512-2d7DnmXl+louebxXqCAmqa9ueqtAvXCS/Pk1RdCVLOdQz+d+FpN1TsCmVqJbYxxQzMi/7VMhuNM56shABJXmQg==} + '@wordpress/block-library@9.16.0': + resolution: {integrity: sha512-jIKqn/8/4fJdfQGNMIWfRkRzDS/Yl4SzF8NtAfCyFOCW8iHLh1FtuOK8QT2ugT5sX4ZwO8xyoZ8EyIEU3PT9Yg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/block-serialization-default-parser@5.14.0': - resolution: {integrity: sha512-0nshJbx2tLsTTQrZUenqACAOzuRoCizXsnw9g9S9HMX8HsXl8JAlJhzXWbQ7btwgSB3zPXT7mcSGwszv7ajA4A==} + '@wordpress/block-serialization-default-parser@5.16.0': + resolution: {integrity: sha512-F8n8GMeVAepWl9nuA9Ly/WWaqvZ9Lg0KI/OUd0Bm0Y3Ssz65UNRf6DT+ScN35OCAOklf1bQ1PGaq9JdVmC43mg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/blocks@14.3.0': - resolution: {integrity: sha512-2Y3JZcFq1yplRf0VWHDnxlxIFYn5v327zspkM6QkExbm0eMcDDf7dw482PVlF0a+6S7OD7Om1B8hY0Gpo3q8Kw==} + '@wordpress/blocks@14.5.0': + resolution: {integrity: sha512-RsX8hWsTegbkUaYcqIfYE2k1OEkF3hOV3PZFsm9Zn1ZN0/ESUQGRXxUCQvr/7yZIjMRxVNnakYlln2OMrXt1rQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/browserslist-config@6.14.0': - resolution: {integrity: sha512-a26hxY8R/A7FH/Z8oZsYS31ZC/Xy9QSBTi5w84MKSeYdWlck7t1QdCwUNF1u621wbuP7beiiu9FkYY4hI3Bk9A==} + '@wordpress/browserslist-config@6.16.0': + resolution: {integrity: sha512-ppjgUOjCFwLjH5XCDAfavRkIAj9DKEVGj12YMGL+dzSikbDU9L8VnMT1p08G1bAcBkTRLtBX8KkJJdyUI1JGsQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/commands@1.13.0': - resolution: {integrity: sha512-jacW90vPCZ9WdWCH09v36b3Ctk/w7lTy5N6TXjRf2xxZJ7SUPmuzTxX+SQQ5UYS7jQSG4xiRjlxCVg/X6VlodA==} + '@wordpress/commands@1.16.0': + resolution: {integrity: sha512-LxDPzF32QVcZJ42VrI07tSxvTvxKmzI9YZ5JAam/pR0UsjHAFxsnBT3t45oVItRlco/AVL+eLxwuCC/OuSfgLQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/components@29.0.0': - resolution: {integrity: sha512-Dx8ou9+07RGD6KzOdDDHc8lyE0WVjuARmeD87NtutQWZTpJMc0TXR1eM/7ssgEeSOwXaqvFFuYKTAQajNrrQWQ==} + '@wordpress/components@29.2.0': + resolution: {integrity: sha512-a7vUL4oUGu4Jicqf0cFSdQvGtZVw9h4Gvxr53o8yJYmXY8YRVrbeEsZjA/twaqRa8WxGzzWnWNQ/XwtMEXNG0w==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/compose@7.14.0': - resolution: {integrity: sha512-V8llRKmEWfrHWdZVnZFeyM5VAB40MyjVxm+bCwgBO65Tv8yeVi+ZipQ+Nk5abIeQWp3G0BDYybG1gmVwuCik2g==} + '@wordpress/compose@7.16.0': + resolution: {integrity: sha512-FTpfEUeEyH3LnVRlNZxRwce3sEUPDAVI1P+AaF7ZrbzcV2ita4WamCoEHFDS4OMOnvISnSbVh2Rz3gF9oLvomQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/core-commands@1.13.0': - resolution: {integrity: sha512-F3+nTu1nPpIvkqrf02XtSKdS5OWX4HR2B5ueGx3Ul6Mx6pv46IHSfGeMJYofty9CGGG0PIjDiP2xgCv/7+FXFA==} + '@wordpress/core-commands@1.16.0': + resolution: {integrity: sha512-BrtyZe6axE62NT8VOJEY38UE5CkIyA7etIkjooA52l3xMKS7uebP/5QxinDcwE6c/FQ3tqAwSZ2MIgAWbsADqA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/core-data@7.14.0': - resolution: {integrity: sha512-NTUS7MHK489oDuQfnw2NY8I+bx29JTR1VzrUpSLGjCzkAcXk+NxDP+MHLAuQQ1MGcKuPzP/CmSnM0aq/fRR6og==} + '@wordpress/core-data@7.16.0': + resolution: {integrity: sha512-IDs+JxBiAil3AgmqYS8+eb8J6Kg9nlkao6dXlWkcJAOwrpFw53rC1o31dIRqIm8hzb43F88Bpbfe85Bm98Bhyw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/data@10.14.0': - resolution: {integrity: sha512-oKBLj7alGmlD7/lFwK7hwt+Db393yX6hIBpXT/zPDeUsIl0/DXFlHOs2c/UJTZxnyHow44gy7ksLVHc8I4y8ZQ==} + '@wordpress/data@10.16.0': + resolution: {integrity: sha512-5Gx0Hb1VsnvACQJBJhgaFf0xn6cf1s0Wqv3q2DRnRShuSQTNxkUxA41+eZsPxC1JrnVXg0vPRCu5GpqwPO4O9g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/dataviews@4.10.0': - resolution: {integrity: sha512-Rsp5wUTTGAJlbWdkdFHGXq06LU6F/Kvki6IT9byexu+984h3F+VNIyVCP1BQPqNAWhsUHD4o0gIZKzH17zrCbw==} + '@wordpress/dataviews@4.12.0': + resolution: {integrity: sha512-hxUJ7OyXL131r1nY0Fm5PiN12+oMclCVooON3hwlh5/x0t/FydcsMp0toGrLmtQQz38VVKl9dIpjjLgUmpSbEw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/date@5.14.0': - resolution: {integrity: sha512-Ato1GFSphtGjUAdT1UKKcLptfarS+bkFapDUMbtGikrBIyvWSgHAgHSvMJ88iFVlGPK5GhfVVQjkHrjwqRdCrg==} + '@wordpress/date@5.16.0': + resolution: {integrity: sha512-Sb2eJ7S7bn7ODfe0WVgNEqLpilgwpKIoJjVxMxT8wtJpx4rEs25+BAyQ6Bpj6lxX9P99ZmPsdrq5YavxP9NKHg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/dependency-extraction-webpack-plugin@6.14.0': - resolution: {integrity: sha512-gLiY07oJT5ejkQwca9kni+iamiWIKF+iadIrzfCTB+34jc8xXVT3ENmydLPcAY5toAejwJ+UmlCxCV8kXFatmA==} + '@wordpress/dependency-extraction-webpack-plugin@6.16.0': + resolution: {integrity: sha512-AU6SFATdbUJsd/hqD6wUaZxbikibJ4L7RGpQ2MPUsXxXZCJU8pfPE3WWIOM1VemG4dJRJO+jk0lG8uH9pwdsfA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: webpack: ^5.0.0 - '@wordpress/deprecated@4.13.0': - resolution: {integrity: sha512-wSDfGwRHzxcfpcUUlIHGQOIKYdGvTHbmVWIRf7dlPCRr5anpZTXsC/4ElDJFoi+w/gQklm//LrxjWP1Gqj8hmA==} + '@wordpress/deprecated@4.16.0': + resolution: {integrity: sha512-apv94cskjvWqkanqNn3vP7lugJODkSkPlLqjKPY5iBXI0RATaKuxcTNxuO9/Gn5QcuM89fjhsGTcZ4X/SZTGNQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/dom-ready@4.14.0': - resolution: {integrity: sha512-VeLZZJwKM+Y1d9KPXJ7IQFWwxrND8Xlu+XHpEesudn2kxYE/F5E1uGwS+8LjuprKW+ZEBzgmzZRraKG+KbGFWg==} + '@wordpress/dom-ready@4.16.0': + resolution: {integrity: sha512-rlp7gZRRPsob8z+//tS8bHHRTlkRiOfbKA1SJmyfakU/p4fcEXskLfdq/0wGPZtoHnia6kLKUyFMWhIBe8SuYQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/dom@4.13.0': - resolution: {integrity: sha512-ucaz3Kh9L3EGpLiXXWqflC0T/1zMOe4DR31ynl+B68YSEWpM0VqTnRUFJRUFEc5wiOa70T8yFa3RLSwWpqJTIw==} + '@wordpress/dom@4.16.0': + resolution: {integrity: sha512-iT9D8BnoSgD9w+viDCKtO7lfMmzku3tC7oLEakH6LNZRas0jQuTC46cfokMAz6HTchxiAnuXoPYHsCPhGzWy8Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/e2e-test-utils-playwright@1.14.0': - resolution: {integrity: sha512-G9r3ZysgzAmUbR4bjGAEEP6P2RCIAG8uMU7yyzxOAHegINSbF3shEZKvVNBeKxNwHKAVa9koh/niGN3U4Kr6Rw==} + '@wordpress/e2e-test-utils-playwright@1.16.0': + resolution: {integrity: sha512-xA1sbiQoqfk530JMAFGpThGbCjGeVaVitEdB3WYWnHY8JGmI6l5SeWaen2GlD4zbbCS+HE0Kn0sof1h5B9R26A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@playwright/test': '>=1' - '@wordpress/edit-post@8.14.0': - resolution: {integrity: sha512-hS22+eaT8otVsIeeKH8sM+vJZkgCteG4IJ1KO9wuz41rUmq4Fy4AJUpUEoNQ4R38s+bKiYKK+I8L5jDmLTjC/Q==} + '@wordpress/edit-post@8.16.0': + resolution: {integrity: sha512-4MSmLpTyr5Kgy4oZF4tcpAu5zeF7HCUmg8OM6KUa6hWMaQew4uHMoI9EL/PZq/+u4ZAbeWCgedSNX6IOub0/mQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/editor@14.14.0': - resolution: {integrity: sha512-VHCHc2JBnt3kBhtLwzEt5Fb/Z8U3UuZdKu1N2voGLB+HQ8ns2/qe1jiSHomBrZLyxbHtbJ7ioirUpJaYVYvbpw==} + '@wordpress/editor@14.16.0': + resolution: {integrity: sha512-7uoVHZpU43TZhn+j9X4uR7UeC1u0jDJZF0tOkdhAo+MaPTOOgxsHwuJzG7wDiRpUS3xJ7cyt221kqcpga07neA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/element@6.14.0': - resolution: {integrity: sha512-vZPm2ekv9B7fMcv/slyu/p8lV44EPa6RRHOk04ldNUpsrjC6ph6Q4wpuI5WzLEX7p1u71c8ZOuroEuRvdFxMcA==} + '@wordpress/element@6.16.0': + resolution: {integrity: sha512-1Db9jeu7dxil/fJqAiLN5dA6gwoHWcgMSqZJ4dmZ0kMDMs40rtm6o60GFmAQGlrj+mmUvhOHTTwrBdpyfuv4bA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/escape-html@3.14.0': - resolution: {integrity: sha512-tLzQk7VQse1TF/StFe6vt4zdPCWV9LFRPhseC46tbBxAlm/+v6gmaJP501voA/vPQOJSZrYyA5iXGQhA8cJsRw==} + '@wordpress/escape-html@3.16.0': + resolution: {integrity: sha512-Rb3nUsqK2tzLpKhSRO5IID5O+gvNlyHRkKVmTszTB+0vjK+yh0Mc4UPzdHksPo8K7KnlAFt3SgjcfWYo3LYyUA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/eslint-plugin@22.0.0': - resolution: {integrity: sha512-Hh1sO9UV0IYI7D+F6EQnhvs2HAv4H0iBVZikXZKcPmQudlwgV2OWdNprdSe8IoRmpMqmhQ+gkaj9Gwk6NReGHQ==} + '@wordpress/eslint-plugin@22.2.0': + resolution: {integrity: sha512-JKs2tEpkg6txe1emR+P7gw9OrSXvu89TMHuN1uk0wxdJeEqoF7HcxTdJBEaMHCz5HFhBHeuI5vShtX/WN6jf3g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@babel/core': '>=7' @@ -8136,205 +8151,212 @@ packages: typescript: optional: true - '@wordpress/fields@0.5.0': - resolution: {integrity: sha512-lEVJ8h6X3uAkR4CpsbNyOJwf1wxM3v1ctmcumO16Sjtby9ZOMBT3RCx4huQk+oOUa55+dPJYKvSwyEiMUiICQw==} + '@wordpress/fields@0.8.0': + resolution: {integrity: sha512-8aX5jHVzTPyPORKB5TjUznmBvJZN32R2jwblaG+QJGtKZZPqAnwfTNtnq4SalTD0T2B2lWuk/1RZd5LUsW3dqQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/format-library@5.14.0': - resolution: {integrity: sha512-ds281vAoGkxpgADnuPnbIWgvNlnj47NOD0k+8Uxpvqbfym3KXVWAsKvn51FuCSdU8WGai0LvO3yP/88ms9YNKg==} + '@wordpress/format-library@5.16.0': + resolution: {integrity: sha512-bqUwJjwGXHY0PRNnWN5xfO5QvyTIwK9e5hCxWVlr0pdlsH4NzDNdQ9C7Op2zkfDElQMl9L1LHnnz7tLwQHNcpg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/hooks@4.14.0': - resolution: {integrity: sha512-Z1JWYBHnYNS5HMF7vAxWO8syGZWEEVtXra/6FtI7Do7rSXleTh2T/j06CqETE7QD47oMIhZOHz+jM8ttR4UlJA==} + '@wordpress/hooks@4.16.0': + resolution: {integrity: sha512-W82L1PdIhJPNpEb2F+0NWzrDoUqZo6NnYID7qHCexBiagq4+QS4uydM6anyFvUNrpL51CmkCNu31Xi8HjpSTGg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/html-entities@4.14.0': - resolution: {integrity: sha512-PUpq6Li0TfmldDDyo9lFGrYqtISnloD+xrQ4NHD7vcCMDFBin3w1XXc3gHugsRYt6xHTI0L2rdiiv7PrJIr0UA==} + '@wordpress/html-entities@4.16.0': + resolution: {integrity: sha512-wnCtif4GsQ3gZgINN2GK6+yLH+vIsW3ASvUfdUlxYMcvMagNhJsqaE6dqsnKkezD8q/WNL7zv82BDyGSLKeHNQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/i18n@5.14.0': - resolution: {integrity: sha512-2KHyQ+zoyQggokmoTqfVhl2DOM4E11pF/M1+5Q0kUDAHLIAVDhKCzHNPZreHjJld4Tm7hl2HUOutfPmCVudj7g==} + '@wordpress/i18n@5.16.0': + resolution: {integrity: sha512-O4ZUvjS8AlYzTxvw7fmp3xk51rpKv1h2/dGFc/L+IB97UrCBAiC9HBv6FIHRF1gci4Vdu/QnCDw3qpC+N/2gCw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} hasBin: true - '@wordpress/icons@10.14.0': - resolution: {integrity: sha512-4S1AaBeqvTpsTC23y0+4WPiSyz7j+b7vJ4vQ4nqnPeBF7ZeC8J/UXWQnEuKY38n8TiutXljgagkEqGNC9pF2Mw==} + '@wordpress/icons@10.16.0': + resolution: {integrity: sha512-fHZujKpOkYD3JnPGCYqB1VafUiqsUOnpdVGdBd7En5ELwRg189a0NcI4EmM8OkeItNDml4LU/4nCCkypSy29eA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18 - '@wordpress/interactivity-router@2.13.0': - resolution: {integrity: sha512-8Kjzv4lYTxc0JAgyctxerO8ySKWKiwmPY0pzYls/mpQcHTNv4Gc/LWZD75686n5aQQGGGEp39mqAW6Fnqcr7sg==} + '@wordpress/interactivity-router@2.16.0': + resolution: {integrity: sha512-SILCPLTRCbV9JUX7Y+o+1Wv8CEFUq1i3mKuE1BFpIKmFS00RYc/LdJ958AI2LMV5MXCR9ybFAUtLvRk0H3NBMQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/interactivity@6.13.0': - resolution: {integrity: sha512-FIzfCYbb2gjj5gWCRm5086zlFezZZjjL9zopUBPn6WuuaL5w8zMNBU5YJDnZExK0MURRLLRMqHx+3LwAmm95KQ==} + '@wordpress/interactivity@6.16.0': + resolution: {integrity: sha512-dPzunALqKq3LtCKaJXbVx0/ox239kFA9S0WeXzrtJj/513mSS/U43Y+kC449PYdIf++dGIJbMz7YxIAL30Fc8w==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/interface@8.2.0': - resolution: {integrity: sha512-bhPGnP7SCRO1JUQOGkplC+ow4I7tS8g2VzF7JsjMe2ctWp5UEYhGPPdGF+nooD1cWHwnGXC+QJIAnPjvUFwhRQ==} + '@wordpress/interface@9.1.0': + resolution: {integrity: sha512-LWNDqUad+RpkdX/+gQeZmhQM3bx3vyZTZUPJ2+JyainYZhLfxGWfnEK1K0f68YaUdHKgSfixdv9cP413yw4fAw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/is-shallow-equal@5.13.0': - resolution: {integrity: sha512-Z32eGYExzGq/dN4iSNCddCMQU8p1u6mYzyNXDCovw4JSEN3Fr3HvmGYQGRIlkuTrlE6okSqArAvXVKR+I8S5Qg==} + '@wordpress/is-shallow-equal@5.16.0': + resolution: {integrity: sha512-9JI0bz7bQ9PdXPtXSnZXtbkyh0h7ZtojeG0lFtf9xtFkA56JUuMALa623v1YeuHKYbYmCc03/pqtpDKc/8QfVQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/jest-console@8.14.0': - resolution: {integrity: sha512-IFl9QJfGZegkwQ2gp26UMaQ0RL1yNj5BZsDBh3dGSkE9TTWm9ngrVms8ppHZ6EDA1v92z30VcKdB7rOmWXrk1w==} + '@wordpress/jest-console@8.16.0': + resolution: {integrity: sha512-GFwoPBeOir9lV0ZCrkOapl7us+NqYphjeTRhZajNYr+grUCtvJYY0XzGZd8QuXKD9R5yBK42jgb4/9vc5tL2TA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: jest: '>=29' - '@wordpress/keyboard-shortcuts@5.13.0': - resolution: {integrity: sha512-gljOL2dR36tMUg8giqgnnMpLJsaRFXlSjrR763KJ2F3rlyCVvfg0dy1ue73ll7gE8Vi6ZqWiCC6FJbD1ZUXVZQ==} + '@wordpress/keyboard-shortcuts@5.16.0': + resolution: {integrity: sha512-JI/e7NGWjgbWY7Q546NExuwfwdx7OokHrwKzj2yTd3DluM3zhQax0d4ZZvJiqyHMaMQvKcT0ILJ4KYMgB9EkGg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/keycodes@4.14.0': - resolution: {integrity: sha512-vZpK+NbhC+3/JK8S5I/PuJMNYhfn7X8pupTPuEiKIXZgcnXAy3mORgirBeZJNkNUXRl3vfcsq0qFnIovI96fHA==} + '@wordpress/keycodes@4.16.0': + resolution: {integrity: sha512-T4kaFkw6R1VkcBk+F7B4gmzEhSPRJwpMdkP7roNvENzKGtXs49K4xO0koOZhWUlGpZvhPJ1WWERyoub8S7rX2A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/media-utils@5.14.0': - resolution: {integrity: sha512-cZm45MAl/vjssRCMzxNuAKxrZ4NS7Qc3K/iqO/AbNdG/dKKnsyzGBrRCAK0+h8Lvw5Fw84w//ztVdtcllxbwUg==} + '@wordpress/media-utils@5.16.0': + resolution: {integrity: sha512-CrpGApMT2h14xJ4uMYRmx6jPsUHP0be7ru1ndbXw7FrE/r4he/nKsM2e+n1ApeYMJcw3b3VimbhLZTxdWPtMjg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/notices@5.14.0': - resolution: {integrity: sha512-Lo6KQJcIFZkHZv8qep5w8bETqmWAjnq6GFk8DZvKfaQQgxkjfAVNTjegQ0huR70BBlk/ICaL5o/4DCZ23gtnxw==} + '@wordpress/notices@5.16.0': + resolution: {integrity: sha512-RoXfFLuvgmANRmuHLmbfPyi2PEw3dYMw4GwS8t6DVvC16i6zd75S8JFCoxjA1tRJNeLw8R/NQ57Pm35w5zCzMg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/patterns@2.13.0': - resolution: {integrity: sha512-IbEDL7F2eJpxh2zhYzg0+milgkaGTbSyoe3H6vAfiAV5+GGeGCGyaeGXynAgfWN4NEU6fpoIXig+ZhiPK90RUQ==} + '@wordpress/patterns@2.16.0': + resolution: {integrity: sha512-1OK3qJUUYR5HCgGWwSBzROEyUsgOnwq2ojKwPhVWCgsObrsuQLj8dedksuKDBjunW/9nUodWiKN6uR+acJBuUw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/plugins@7.14.0': - resolution: {integrity: sha512-c8ncDg1pKcCv1Ba9U+kBmlC1t9iqg+I0LJXL6Sj0ZY4fB0DgFhg3bZYK8rwjI7tUQU+VCK28bu4gnd2B/R0nUA==} + '@wordpress/plugins@7.16.0': + resolution: {integrity: sha512-uyqJcuB2up8/tJ4qabjYO1ZHD5hEuhNRp2z6nDROnKWKpegFnO2lXbxzhEZkBLDRox2ds+3sOBkEHquwxVFsBA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/postcss-plugins-preset@5.14.0': - resolution: {integrity: sha512-K9Ob4ILtvVyWKbXDZuFvAgyZbCoFVYxrv1HaEx+ir6Ct6Tdltuv9e9WzH0mOfhFi5IDR72gmOFllhjzo7FCmaw==} + '@wordpress/postcss-plugins-preset@5.16.0': + resolution: {integrity: sha512-+rVpUQo+HXGFBvCLox45OxwT/U4hsDD8UpcDh8MAwFwrYf33GUGgdAhO5i4V3RyJiMmiZpsemkHFjlOg10kUjQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: postcss: ^8.0.0 - '@wordpress/preferences@4.13.0': - resolution: {integrity: sha512-U4pDCutpcKKm8YN+n6RnMA0qJKG87kbdsqiyy+kiVhzUvX15pMSKQEAArylzU2b7veEP61QRKY53Ymn5DCR9qg==} + '@wordpress/preferences@4.16.0': + resolution: {integrity: sha512-FLHwwC1z+1jef8oN8QykMqK/D6beEkBwI3EZSMj3gPKxlA5Q5CqUF32blUBMDRVE4h1xx6jQaM/B2DBroMoJew==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/prettier-config@4.13.0': - resolution: {integrity: sha512-TgjsY0dU6fwtQs4Re73OlKZnxilaHbXmwb373qouDY/AzG72VkpQpQ2KcenCoJ7Do1BKdWWehzDo609nQhk/Yg==} + '@wordpress/prettier-config@4.16.0': + resolution: {integrity: sha512-raaEW2x+pPfIYXF7RUJGEH8zeYWd4esIE0bJbKTAJV0yM+RE/DOWsGLGPiVvLEAAPg2AkIZ7oX0UPOYsBrsBqw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: prettier: '>=3' - '@wordpress/primitives@4.14.0': - resolution: {integrity: sha512-IZibRVbvWoIQ+uynH0N5bmfWz83hD8lJj6jJFhSFuALK+4U5mRGg6tl0ZV0YllR6cjheD9UhTmfrAcOx+gQAjA==} + '@wordpress/primitives@4.16.0': + resolution: {integrity: sha512-mf5LPcA500KOo/UPiwNanNlH6Satwf4xBB1DPzw4InE67eACvAlde3oSYsoE6Uce6+7URRIefg9j47yXP2jkxw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/priority-queue@3.13.0': - resolution: {integrity: sha512-B9MzzR5nAKpUTWRGleNYRs4/+qOISxtbCxDRYiNXFImoT+t+4yxWO7CssKghp7tFwO0I2FLSyhje6dEO7nEphQ==} + '@wordpress/priority-queue@3.16.0': + resolution: {integrity: sha512-YmVPE/kHmAIEYiSnnfxQI7JBAvXxlCyVoGlfWxCJ/IH8W7gbZtl1R+iuRvT8L4Cdr+sUybT68Ry+o4o39OqURg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/private-apis@1.14.0': - resolution: {integrity: sha512-ul932/nV1+DV+bg35zKIcWz31tKUufiTl0Ysxcd81uFK+rG1Pf2420eM7V7wlOvJGpwrwbURpK4r4F5WQ0NpKQ==} + '@wordpress/private-apis@1.16.0': + resolution: {integrity: sha512-k/AQ11+vlbpSWhyOU5t8huoGdN+PursA8bUxVfhEnqcKRWTK+LKSmSEpdyL1sv6XJqznWYjgaNSdIxTkadsPpg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/redux-routine@5.13.0': - resolution: {integrity: sha512-yXl6XhFec9jxIZ/ogIJFntpzMX0uKrk2MnQfjfKCNnQJulZP6renTag/ysxsjpFw4+xy4isdHiL8v4PMf8mg1A==} + '@wordpress/redux-routine@5.16.0': + resolution: {integrity: sha512-piLnJnV+tzWOEPJPdp431TcaKRoCpgGJ309W+UxM7fRHrYH/XZcXD8a+0pq56Dh/1QFO1elXXhPzhZQknwtyYw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: redux: '>=4' - '@wordpress/reusable-blocks@5.13.0': - resolution: {integrity: sha512-BduetqgQ6NS71T38bK3md1IxFAzfQrhNnKb7URWGDwTNPV+vDbxcXv6f319Ur7nZGKHS9vxjIrB61pVv2cDRYQ==} + '@wordpress/reusable-blocks@5.16.0': + resolution: {integrity: sha512-bWMeUP2+84mJrIEwzdw6KQ0zZGa/i/rCGNkiTl6IRL2ysxKjKTfOOCGGTzHcD8eYni2AXFpfLA6UBy9glv6eqg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/rich-text@7.14.0': - resolution: {integrity: sha512-Y7LERZVgOza2itTNn848Mv+O7v2SEE/fdCkXqxE/r3cuEA0hirc68ygiCh4ufAe1Itnd8H7VTTUQouuMXFeBKA==} + '@wordpress/rich-text@7.16.0': + resolution: {integrity: sha512-p+9WPzVo5pXLr1Xt04gQ1kdYQYmw05r2Kp42tgIfFNjgCBH1plpSrzjCyV/dyHrZ7APpJFg8sNjlOJmyLQiCFg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/router@1.14.0': - resolution: {integrity: sha512-cloEfwH2dHnR4MYXBMs5hrwFptSvoJToGZoOxKd89qtgwjvEkFc8sr1XsosekSqP8XxrXNZm3xanSyOyKWwJsw==} + '@wordpress/router@1.16.0': + resolution: {integrity: sha512-P4txQueN9aaRcPFTIyVePkGRl5h38cA66X/Q67kqL4OntphTgg4T8lpKlVu6QOD/Q52ARtjiHaIFq9ezRIfTvA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/server-side-render@5.13.0': - resolution: {integrity: sha512-/L6M7UssV0niSfru9cMqKZFuEi9+QtTUN6uz1+zXEj+IvTQVrif0cTC4Oj9vpQpKFgjD2dZo679VMbFlgDIgCQ==} + '@wordpress/server-side-render@5.16.0': + resolution: {integrity: sha512-OB6Omav6X4yciYGNQHHJpw/psKyAO2Z7ab9UGvlaST/YnmBD+9IZYtp9boo3D3zfOjB5aeD+2shRpt9zOBYEbw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/shortcode@4.13.0': - resolution: {integrity: sha512-CDPrKtawaVM9Q9UdE+tzh6PbajS8g6Ft1yvW46ATQEAzYdGNW/Radejx6OYz748SSaRuj3OFrOKziFWGjNoPCg==} + '@wordpress/shortcode@4.16.0': + resolution: {integrity: sha512-T3KLZq5SYGigltEQumCKExKBJqnI2IF2elnJpd5+CFxQQAb9/gsrZ4TBG7ommOlXHZKn5hwD2YIEEM/ZAkGQ4A==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + + '@wordpress/style-engine@2.16.0': + resolution: {integrity: sha512-eOaa14iAqXDS8y9ndQxM1f+Ibc9suuA6naEZ+8d74eEvBIZclQgi0GZpA1n8HEuDsRi9o2VhnXzJe6X6lsQduA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/style-engine@2.13.0': - resolution: {integrity: sha512-C0ys5nkZPVbmDS7HOAp3Ty4gftz3Eaf93zRKKdJyQ7GdsnSpLpOhc6YzDG45Micm/Kq99GKYhYDRLlbTkIkVDA==} + '@wordpress/sync@1.16.0': + resolution: {integrity: sha512-VSKow7DEWa0ANjbKGlP8b4zjMNABGArEklsE3F4f5zy39sBcfm0Ox+jnLjGjXe0pLHSB/ANuPYfgt/R5nyyttQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/sync@1.13.0': - resolution: {integrity: sha512-bkWKffktsObwf79VJkSpNFMHZ9SBy8dByXw1xYkbDLoCbGvTtKkLG6H3cb2C2y65pvFmeW6BeNsqtf5if9zD4w==} + '@wordpress/token-list@3.16.0': + resolution: {integrity: sha512-bhBZTKcR8NZXgW9tsHDJm3YTIsCnWb/i50cN59w9FqYICOUFGC4RKyEDzJN6rpgW9dRu6J7xfsC8PjlMukNc6Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/token-list@3.14.0': - resolution: {integrity: sha512-vok9J3LA1zqCLV/ldpS1y+bzvVzWfMH+YmoloN1xbqg9Gt05sRA8WQuQ/ZeqJsqxl/VsNTN8+8lHafvWjHkJjw==} + '@wordpress/undo-manager@1.16.0': + resolution: {integrity: sha512-IE3u5Yk8QzUhiLAiGmYostsygxQExs9mVWlZ1BAXniEGCAcVdvDv7IB16dIgQxCYG3/idvmFdNbN8aQGX+nEIg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/undo-manager@1.13.0': - resolution: {integrity: sha512-X2v8TLejhTpXAtUUvfupQ16bre9zLL3XVRkVKnfhBlG+aFLwAy518JNS0tpfNNM2jvC3rxXz5urnDGAT8bgpAw==} + '@wordpress/upload-media@0.1.0': + resolution: {integrity: sha512-K0B9XlHrqOJ6YwwVchP6v6ohduD/mfJKNQxDauZiCqcWim8r8rcTrFp+nBUw3TujDCKas23aVMl09aQpA8zcMw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + '@babel/runtime': ^7 + react: ^18 - '@wordpress/url@4.14.0': - resolution: {integrity: sha512-9KkU5eMQoA8cwuJHVZtDJAhrjoFN02jDuWRJgilb7rx2g3zlTWLNSLEKXV3FNuVCmgapAlh3EbB9yyXNhzQ+jw==} + '@wordpress/url@4.16.0': + resolution: {integrity: sha512-A9kkw/ye2qL9ZHvm1Eew8bvGVnNMq4fW0t5dakdDuVXyXtSOvZVT268JhP9QaD0FYzOFrmxL5Ks8Z6ufP1yLwg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/viewport@6.14.0': - resolution: {integrity: sha512-QhVBqrS0cwljMzc/k4HHtgHK/RsJQnmE0s8UWlm4jzGtKS/ttxQYrCdzJcLjRAJ4d3GE9Gx2d9bdx3X/T4kHjQ==} + '@wordpress/viewport@6.16.0': + resolution: {integrity: sha512-OAvg2K0WXqAvfSAxcfewHFpKeN+oymR7f/q/PisAeBtktgFANnFcgNRWsHVrmLeiO5IFFKpc+YbHNT69GF1gfA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/warning@3.13.0': - resolution: {integrity: sha512-e35ab+D1aE2zFOLd/f1zmjlHtVjVL31ayOszwRgK+XXv7jnhjW5KUjquAykKQbYnFlVLHC20h6p8IiNuSyzfUQ==} + '@wordpress/warning@3.16.0': + resolution: {integrity: sha512-XsgqRPvB+VSecXnD3VfvJJxhcdTTX4EkgdzvWspmQnw0rNCV636KByZVgolzYhvr3La9EgqO+MqXzwvPHg/xfQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/widgets@4.14.0': - resolution: {integrity: sha512-qaufWtiPFkYeKnC81a/gdjwmWg1kBhzUQEzNwY7P8AG0ApxgbDfjho2469z7Rl0ijmfPTd50xQ+TTK8yahqNTg==} + '@wordpress/widgets@4.16.0': + resolution: {integrity: sha512-QwGDIj4fmHb6w9lL0VvVkFIUGpEwrg/MQQ7xbwzjTsn9PddqsejuB2CyJSdx80DwOOUN6r/UW7+UYYaW1nOv9A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/wordcount@4.14.0': - resolution: {integrity: sha512-oO+VfbaD2bNE1cFUlYKdkk7tNGPJTIcDo48rxZsvggxGqSEmXUBGrwPWewfH1gOCNf/B3/M024S1ZWeDGtmYwQ==} + '@wordpress/wordcount@4.16.0': + resolution: {integrity: sha512-6SDQRa1rKSZlTlpWh0wfxOUGFfeM2fgLRm7MPFK4/ORX1oOOYAWCN3nMd4zLXzoq2fSqcVem7rcLBm9kHqLhQg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@xmldom/xmldom@0.7.13': @@ -14949,8 +14971,8 @@ snapshots: '@automattic/calypso-config': 1.2.0 '@automattic/calypso-url': 1.1.0 '@automattic/languages': 1.0.0 - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/i18n': 5.14.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/i18n': 5.16.0 react: 18.3.1 tslib: 2.5.0 transitivePeerDependencies: @@ -14960,29 +14982,32 @@ snapshots: dependencies: tslib: 2.5.0 - '@automattic/page-pattern-modal@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@wordpress/data@10.14.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)': + '@automattic/page-pattern-modal@1.1.5(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)(webpack@5.94.0)': dependencies: '@automattic/color-studio': 2.6.0 '@automattic/typography': 1.0.0 '@wordpress/base-styles': 5.2.0 - '@wordpress/block-editor': 14.9.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 clsx: 2.1.1 debug: 4.4.0 lodash: 4.17.21 react: 18.3.1 redux: 4.2.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - react-dom - supports-color + - webpack + - webpack-virtual-modules '@automattic/popup-monitor@1.0.2': dependencies: @@ -14996,9 +15021,9 @@ snapshots: '@automattic/social-previews@2.1.0-beta.8(@babel/runtime@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 @@ -17014,6 +17039,8 @@ snapshots: '@remix-run/router@1.21.0': {} + '@remote-ui/rpc@1.4.5': {} + '@rollup/plugin-babel@6.0.4(@babel/core@7.26.0)(rollup@3.29.5)': dependencies: '@babel/core': 7.26.0 @@ -17177,6 +17204,23 @@ snapshots: dependencies: '@sentry/types': 8.33.0 + '@shopify/web-worker@6.4.0': + dependencies: + '@remote-ui/rpc': 1.4.5 + + '@shopify/web-worker@6.4.0(@babel/core@7.26.0)': + dependencies: + '@remote-ui/rpc': 1.4.5 + optionalDependencies: + '@babel/core': 7.26.0 + + '@shopify/web-worker@6.4.0(@babel/core@7.26.0)(webpack@5.94.0)': + dependencies: + '@remote-ui/rpc': 1.4.5 + optionalDependencies: + '@babel/core': 7.26.0 + webpack: 5.94.0(webpack-cli@4.9.1) + '@sideway/address@4.1.5': dependencies: '@hapi/hoek': 9.3.0 @@ -18131,10 +18175,10 @@ snapshots: dependencies: '@types/react': 18.3.18 '@types/wordpress__blocks': 12.5.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/keycodes': 4.14.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/keycodes': 4.16.0 react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@emotion/is-prop-valid' @@ -18145,10 +18189,10 @@ snapshots: '@types/wordpress__blocks@12.5.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@types/react': 18.3.18 - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/shortcode': 4.13.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/shortcode': 4.16.0 transitivePeerDependencies: - '@emotion/is-prop-valid' - react @@ -18615,37 +18659,37 @@ snapshots: webpack: 5.94.0(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.94.0) - '@wordpress/a11y@4.13.0': + '@wordpress/a11y@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/dom-ready': 4.14.0 - '@wordpress/i18n': 5.14.0 + '@wordpress/dom-ready': 4.16.0 + '@wordpress/i18n': 5.16.0 - '@wordpress/annotations@3.14.0(react@18.3.1)': + '@wordpress/annotations@3.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/hooks': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/hooks': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) react: 18.3.1 uuid: 9.0.1 - '@wordpress/api-fetch@7.14.0': + '@wordpress/api-fetch@7.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n': 5.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/url': 4.16.0 - '@wordpress/autop@4.13.0': + '@wordpress/autop@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/babel-plugin-import-jsx-pragma@5.14.0(@babel/core@7.26.0)': + '@wordpress/babel-plugin-import-jsx-pragma@5.16.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@wordpress/babel-preset-default@8.13.0': + '@wordpress/babel-preset-default@8.16.0': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) @@ -18653,59 +18697,60 @@ snapshots: '@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 - '@wordpress/browserslist-config': 6.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/browserslist-config': 6.16.0 + '@wordpress/warning': 3.16.0 browserslist: 4.24.3 core-js: 3.38.1 react: 18.3.1 transitivePeerDependencies: - supports-color - '@wordpress/base-styles@5.14.0': {} + '@wordpress/base-styles@5.16.0': {} '@wordpress/base-styles@5.2.0': {} - '@wordpress/blob@4.14.0': + '@wordpress/blob@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor@14.9.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/block-editor@14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-serialization-default-parser': 5.14.0 - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/commands': 1.13.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/escape-html': 3.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/preferences': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/priority-queue': 3.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/style-engine': 2.13.0 - '@wordpress/token-list': 3.14.0 - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 - '@wordpress/wordcount': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-serialization-default-parser': 5.16.0 + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/style-engine': 2.16.0 + '@wordpress/token-list': 3.16.0 + '@wordpress/upload-media': 0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -18723,48 +18768,52 @@ snapshots: react-easy-crop: 5.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remove-accents: 0.5.0 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - supports-color + - webpack + - webpack-virtual-modules - '@wordpress/block-editor@14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/block-editor@14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-serialization-default-parser': 5.14.0 - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/commands': 1.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/escape-html': 3.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/preferences': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/priority-queue': 3.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/style-engine': 2.13.0 - '@wordpress/token-list': 3.14.0 - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 - '@wordpress/wordcount': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-serialization-default-parser': 5.16.0 + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/style-engine': 2.16.0 + '@wordpress/token-list': 3.16.0 + '@wordpress/upload-media': 0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -18782,48 +18831,178 @@ snapshots: react-easy-crop: 5.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remove-accents: 0.5.0 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - supports-color + - webpack + - webpack-virtual-modules - '@wordpress/block-editor@14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/block-editor@14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-serialization-default-parser': 5.16.0 + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/style-engine': 2.16.0 + '@wordpress/token-list': 3.16.0 + '@wordpress/upload-media': 0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 + change-case: 4.1.2 + clsx: 2.1.1 + colord: 2.9.3 + deepmerge: 4.3.1 + diff: 4.0.2 + fast-deep-equal: 3.1.3 + memize: 2.1.0 + parsel-js: 1.2.1 + postcss: 8.4.47 + postcss-prefix-selector: 1.16.1(postcss@8.4.47) + postcss-urlrebase: 1.4.0(postcss@8.4.47) + react: 18.3.1 + react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-easy-crop: 5.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + remove-accents: 0.5.0 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - supports-color + - webpack + - webpack-virtual-modules + + '@wordpress/block-editor@14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.14.0(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-serialization-default-parser': 5.14.0 - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/commands': 1.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/escape-html': 3.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/preferences': 4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/priority-queue': 3.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/style-engine': 2.13.0 - '@wordpress/token-list': 3.14.0 - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 - '@wordpress/wordcount': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-serialization-default-parser': 5.16.0 + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/style-engine': 2.16.0 + '@wordpress/token-list': 3.16.0 + '@wordpress/upload-media': 0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 + change-case: 4.1.2 + clsx: 2.1.1 + colord: 2.9.3 + deepmerge: 4.3.1 + diff: 4.0.2 + fast-deep-equal: 3.1.3 + memize: 2.1.0 + parsel-js: 1.2.1 + postcss: 8.4.47 + postcss-prefix-selector: 1.16.1(postcss@8.4.47) + postcss-urlrebase: 1.4.0(postcss@8.4.47) + react: 18.3.1 + react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-easy-crop: 5.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + remove-accents: 0.5.0 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - supports-color + - webpack + - webpack-virtual-modules + + '@wordpress/block-editor@14.11.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-serialization-default-parser': 5.16.0 + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/style-engine': 2.16.0 + '@wordpress/token-list': 3.16.0 + '@wordpress/upload-media': 0.1.0(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -18841,47 +19020,50 @@ snapshots: react-easy-crop: 5.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remove-accents: 0.5.0 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - supports-color + - webpack + - webpack-virtual-modules - '@wordpress/block-library@9.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/block-library@9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/autop': 4.13.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/escape-html': 3.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/interactivity': 6.13.0 - '@wordpress/interactivity-router': 2.13.0 - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/patterns': 2.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/reusable-blocks': 5.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/server-side-render': 5.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.14.0 - '@wordpress/viewport': 6.14.0(react@18.3.1) - '@wordpress/wordcount': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/autop': 4.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/interactivity': 6.16.0 + '@wordpress/interactivity-router': 2.16.0 + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/viewport': 6.16.0(react@18.3.1) + '@wordpress/wordcount': 4.16.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -18894,49 +19076,52 @@ snapshots: remove-accents: 0.5.0 uuid: 9.0.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/block-library@9.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/block-library@9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/autop': 4.13.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-editor': 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/escape-html': 3.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/interactivity': 6.13.0 - '@wordpress/interactivity-router': 2.13.0 - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/patterns': 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/reusable-blocks': 5.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/server-side-render': 5.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.14.0 - '@wordpress/viewport': 6.14.0(react@18.3.1) - '@wordpress/wordcount': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/autop': 4.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/interactivity': 6.16.0 + '@wordpress/interactivity-router': 2.16.0 + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/viewport': 6.16.0(react@18.3.1) + '@wordpress/wordcount': 4.16.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -18949,35 +19134,96 @@ snapshots: remove-accents: 0.5.0 uuid: 9.0.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/block-serialization-default-parser@5.14.0': + '@wordpress/block-library@9.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/autop': 4.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/interactivity': 6.16.0 + '@wordpress/interactivity-router': 2.16.0 + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/server-side-render': 5.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/viewport': 6.16.0(react@18.3.1) + '@wordpress/wordcount': 4.16.0 + change-case: 4.1.2 + clsx: 2.1.1 + colord: 2.9.3 + escape-html: 1.0.3 + fast-average-color: 9.4.0 + fast-deep-equal: 3.1.3 + memize: 2.1.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + remove-accents: 0.5.0 + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/blocks@14.3.0(react@18.3.1)': + '@wordpress/block-serialization-default-parser@5.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/autop': 4.13.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-serialization-default-parser': 5.14.0 - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/shortcode': 4.13.0 - '@wordpress/warning': 3.13.0 + + '@wordpress/blocks@14.5.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/autop': 4.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-serialization-default-parser': 5.16.0 + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/shortcode': 4.16.0 + '@wordpress/warning': 3.16.0 change-case: 4.1.2 colord: 2.9.3 fast-deep-equal: 3.1.3 @@ -18991,18 +19237,18 @@ snapshots: simple-html-tokenizer: 0.5.11 uuid: 9.0.1 - '@wordpress/browserslist-config@6.14.0': {} + '@wordpress/browserslist-config@6.16.0': {} - '@wordpress/commands@1.13.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/commands@1.16.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 clsx: 2.1.1 cmdk: 1.0.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -19013,16 +19259,16 @@ snapshots: - '@types/react-dom' - supports-color - '@wordpress/commands@1.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/commands@1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 clsx: 2.1.1 cmdk: 1.0.4(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -19033,16 +19279,16 @@ snapshots: - '@types/react-dom' - supports-color - '@wordpress/commands@1.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/commands@1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 clsx: 2.1.1 cmdk: 1.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -19053,7 +19299,7 @@ snapshots: - '@types/react-dom' - supports-color - '@wordpress/components@29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/components@29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 @@ -19067,23 +19313,23 @@ snapshots: '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 '@use-gesture/react': 10.3.1(react@18.3.1) - '@wordpress/a11y': 4.13.0 - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/escape-html': 3.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/keycodes': 4.14.0 - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/warning': 3.13.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keycodes': 4.16.0 + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/warning': 3.16.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19107,7 +19353,7 @@ snapshots: - '@types/react' - supports-color - '@wordpress/components@29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/components@29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 @@ -19121,23 +19367,23 @@ snapshots: '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 '@use-gesture/react': 10.3.1(react@18.3.1) - '@wordpress/a11y': 4.13.0 - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/escape-html': 3.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/keycodes': 4.14.0 - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/warning': 3.13.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keycodes': 4.16.0 + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/warning': 3.16.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19161,111 +19407,183 @@ snapshots: - '@types/react' - supports-color - '@wordpress/compose@7.14.0(react@18.2.0)': + '@wordpress/compose@7.16.0(react@18.2.0)': dependencies: '@babel/runtime': 7.25.7 '@types/mousetrap': 1.6.15 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/keycodes': 4.14.0 - '@wordpress/priority-queue': 3.13.0 - '@wordpress/undo-manager': 1.13.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keycodes': 4.16.0 + '@wordpress/priority-queue': 3.16.0 + '@wordpress/undo-manager': 1.16.0 change-case: 4.1.2 clipboard: 2.0.11 mousetrap: 1.6.5 react: 18.2.0 use-memo-one: 1.1.3(react@18.2.0) - '@wordpress/compose@7.14.0(react@18.3.1)': + '@wordpress/compose@7.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@types/mousetrap': 1.6.15 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/keycodes': 4.14.0 - '@wordpress/priority-queue': 3.13.0 - '@wordpress/undo-manager': 1.13.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/keycodes': 4.16.0 + '@wordpress/priority-queue': 3.16.0 + '@wordpress/undo-manager': 1.16.0 change-case: 4.1.2 clipboard: 2.0.11 mousetrap: 1.6.5 react: 18.3.1 use-memo-one: 1.1.3(react@18.3.1) - '@wordpress/core-commands@1.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/core-commands@1.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/commands': 1.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/router': 1.14.0(react@18.3.1) - '@wordpress/url': 4.14.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/router': 1.16.0(react@18.3.1) + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/core-commands@1.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/core-commands@1.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/commands': 1.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/router': 1.14.0(react@18.3.1) - '@wordpress/url': 4.14.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/router': 1.16.0(react@18.3.1) + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules + + '@wordpress/core-commands@1.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/commands': 1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/router': 1.16.0(react@18.3.1) + '@wordpress/url': 4.16.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + + '@wordpress/core-data@7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/sync': 1.16.0 + '@wordpress/undo-manager': 1.16.0 + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + change-case: 4.1.2 + equivalent-key-map: 0.2.2 + fast-deep-equal: 3.1.3 + memize: 2.1.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/core-data@7.14.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/core-data@7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/block-editor': 14.9.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/sync': 1.13.0 - '@wordpress/undo-manager': 1.13.0 - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/sync': 1.16.0 + '@wordpress/undo-manager': 1.16.0 + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 change-case: 4.1.2 equivalent-key-map: 0.2.2 fast-deep-equal: 3.1.3 @@ -19274,32 +19592,35 @@ snapshots: react-dom: 18.3.1(react@18.3.1) uuid: 9.0.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/core-data@7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/core-data@7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/sync': 1.13.0 - '@wordpress/undo-manager': 1.13.0 - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/sync': 1.16.0 + '@wordpress/undo-manager': 1.16.0 + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 change-case: 4.1.2 equivalent-key-map: 0.2.2 fast-deep-equal: 3.1.3 @@ -19308,32 +19629,35 @@ snapshots: react-dom: 18.3.1(react@18.3.1) uuid: 9.0.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/core-data@7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/core-data@7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/block-editor': 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/sync': 1.13.0 - '@wordpress/undo-manager': 1.13.0 - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/sync': 1.16.0 + '@wordpress/undo-manager': 1.16.0 + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 change-case: 4.1.2 equivalent-key-map: 0.2.2 fast-deep-equal: 3.1.3 @@ -19342,23 +19666,26 @@ snapshots: react-dom: 18.3.1(react@18.3.1) uuid: 9.0.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/data@10.14.0(react@18.2.0)': + '@wordpress/data@10.16.0(react@18.2.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.14.0(react@18.2.0) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/priority-queue': 3.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/redux-routine': 5.13.0(redux@5.0.1) + '@wordpress/compose': 7.16.0(react@18.2.0) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/priority-queue': 3.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/redux-routine': 5.16.0(redux@5.0.1) deepmerge: 4.3.1 equivalent-key-map: 0.2.2 is-plain-object: 5.0.0 @@ -19368,16 +19695,16 @@ snapshots: rememo: 4.0.2 use-memo-one: 1.1.3(react@18.2.0) - '@wordpress/data@10.14.0(react@18.3.1)': + '@wordpress/data@10.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/priority-queue': 3.13.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/redux-routine': 5.13.0(redux@5.0.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/priority-queue': 3.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/redux-routine': 5.16.0(redux@5.0.1) deepmerge: 4.3.1 equivalent-key-map: 0.2.2 is-plain-object: 5.0.0 @@ -19387,19 +19714,19 @@ snapshots: rememo: 4.0.2 use-memo-one: 1.1.3(react@18.3.1) - '@wordpress/dataviews@4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/dataviews@4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/warning': 3.16.0 clsx: 2.1.1 react: 18.3.1 remove-accents: 0.5.0 @@ -19409,19 +19736,19 @@ snapshots: - react-dom - supports-color - '@wordpress/dataviews@4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/dataviews@4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/warning': 3.16.0 clsx: 2.1.1 react: 18.3.1 remove-accents: 0.5.0 @@ -19431,33 +19758,33 @@ snapshots: - react-dom - supports-color - '@wordpress/date@5.14.0': + '@wordpress/date@5.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/deprecated': 4.13.0 + '@wordpress/deprecated': 4.16.0 moment: 2.30.1 moment-timezone: 0.5.46 - '@wordpress/dependency-extraction-webpack-plugin@6.14.0(webpack@5.94.0)': + '@wordpress/dependency-extraction-webpack-plugin@6.16.0(webpack@5.94.0)': dependencies: json2php: 0.0.7 webpack: 5.94.0(webpack-cli@4.9.1) - '@wordpress/deprecated@4.13.0': + '@wordpress/deprecated@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/hooks': 4.14.0 + '@wordpress/hooks': 4.16.0 - '@wordpress/dom-ready@4.14.0': + '@wordpress/dom-ready@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/dom@4.13.0': + '@wordpress/dom@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/deprecated': 4.13.0 + '@wordpress/deprecated': 4.16.0 - '@wordpress/e2e-test-utils-playwright@1.14.0(@playwright/test@1.48.2)': + '@wordpress/e2e-test-utils-playwright@1.16.0(@playwright/test@1.48.2)': dependencies: '@playwright/test': 1.48.2 change-case: 4.1.2 @@ -19471,132 +19798,185 @@ snapshots: - supports-color - utf-8-validate - '@wordpress/edit-post@8.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/edit-post@8.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/block-library': 9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-commands': 1.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/editor': 14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + '@wordpress/viewport': 6.16.0(react@18.3.1) + '@wordpress/warning': 3.16.0 + '@wordpress/widgets': 4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + clsx: 2.1.1 + memize: 2.1.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + + '@wordpress/edit-post@8.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/block-library': 9.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/commands': 1.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-commands': 1.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/editor': 14.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/plugins': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 - '@wordpress/viewport': 6.14.0(react@18.3.1) - '@wordpress/warning': 3.13.0 - '@wordpress/widgets': 4.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/block-library': 9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-commands': 1.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/editor': 14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + '@wordpress/viewport': 6.16.0(react@18.3.1) + '@wordpress/warning': 3.16.0 + '@wordpress/widgets': 4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) clsx: 2.1.1 memize: 2.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/edit-post@8.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/edit-post@8.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/block-editor': 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/block-library': 9.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/commands': 1.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-commands': 1.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/editor': 14.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/plugins': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 - '@wordpress/viewport': 6.14.0(react@18.3.1) - '@wordpress/warning': 3.13.0 - '@wordpress/widgets': 4.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/block-library': 9.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-commands': 1.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/editor': 14.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/plugins': 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + '@wordpress/viewport': 6.16.0(react@18.3.1) + '@wordpress/warning': 3.16.0 + '@wordpress/widgets': 4.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) clsx: 2.1.1 memize: 2.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/editor@14.14.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/editor@14.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-editor': 14.9.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/commands': 1.13.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/dataviews': 4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/fields': 0.5.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/interface': 8.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/media-utils': 5.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/patterns': 2.13.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/plugins': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/reusable-blocks': 5.13.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/server-side-render': 5.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 - '@wordpress/wordcount': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/fields': 0.8.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/interface': 9.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/media-utils': 5.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -19611,51 +19991,54 @@ snapshots: remove-accents: 0.5.0 uuid: 9.0.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/editor@14.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/editor@14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/commands': 1.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/dataviews': 4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/fields': 0.5.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/interface': 8.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/media-utils': 5.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/patterns': 2.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/plugins': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/reusable-blocks': 5.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/server-side-render': 5.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 - '@wordpress/wordcount': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/fields': 0.8.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/interface': 9.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/media-utils': 5.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -19670,51 +20053,54 @@ snapshots: remove-accents: 0.5.0 uuid: 9.0.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/editor@14.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/editor@14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/block-editor': 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/commands': 1.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/dataviews': 4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/fields': 0.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/interface': 8.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.13.0(react@18.3.1) - '@wordpress/keycodes': 4.14.0 - '@wordpress/media-utils': 5.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/patterns': 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/plugins': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/reusable-blocks': 5.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/server-side-render': 5.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 - '@wordpress/wordcount': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/fields': 0.8.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/interface': 9.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/media-utils': 5.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -19729,34 +20115,99 @@ snapshots: remove-accents: 0.5.0 uuid: 9.0.1 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/element@6.14.0': + '@wordpress/editor@14.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/a11y': 4.16.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/commands': 1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/deprecated': 4.16.0 + '@wordpress/dom': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/fields': 0.8.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/interface': 9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) + '@wordpress/keycodes': 4.16.0 + '@wordpress/media-utils': 5.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/plugins': 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/server-side-render': 5.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + '@wordpress/wordcount': 4.16.0 + change-case: 4.1.2 + client-zip: 2.4.6 + clsx: 2.1.1 + date-fns: 3.6.0 + deepmerge: 4.3.1 + fast-deep-equal: 3.1.3 + is-plain-object: 5.0.0 + memize: 2.1.0 + react: 18.3.1 + react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + remove-accents: 0.5.0 + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + + '@wordpress/element@6.16.0': dependencies: '@babel/runtime': 7.25.7 '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@wordpress/escape-html': 3.14.0 + '@wordpress/escape-html': 3.16.0 change-case: 4.1.2 is-plain-object: 5.0.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@wordpress/escape-html@3.14.0': + '@wordpress/escape-html@3.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/eslint-plugin@22.0.0(@babel/core@7.26.0)(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint-plugin-import@2.31.0)(eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4))(eslint-plugin-jsdoc@50.6.0(eslint@9.16.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0))(eslint-plugin-playwright@2.1.0(eslint@9.16.0))(eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.1.0(eslint@9.16.0))(eslint-plugin-react@7.37.2(eslint@9.16.0))(eslint@9.16.0)(typescript@5.0.4)(wp-prettier@3.0.3)': + '@wordpress/eslint-plugin@22.2.0(@babel/core@7.26.0)(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint-plugin-import@2.31.0)(eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4))(eslint-plugin-jsdoc@50.6.0(eslint@9.16.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0))(eslint-plugin-playwright@2.1.0(eslint@9.16.0))(eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.1.0(eslint@9.16.0))(eslint-plugin-react@7.37.2(eslint@9.16.0))(eslint@9.16.0)(typescript@5.0.4)(wp-prettier@3.0.3)': dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@9.16.0) - '@wordpress/babel-preset-default': 8.13.0 - '@wordpress/prettier-config': 4.13.0(wp-prettier@3.0.3) + '@wordpress/babel-preset-default': 8.16.0 + '@wordpress/prettier-config': 4.16.0(wp-prettier@3.0.3) cosmiconfig: 7.1.0 eslint: 9.16.0 eslint-config-prettier: 9.1.0(eslint@9.16.0) @@ -19776,37 +20227,82 @@ snapshots: transitivePeerDependencies: - supports-color - '@wordpress/fields@0.5.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/fields@0.8.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/media-utils': 5.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/router': 1.16.0(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 + change-case: 4.1.2 + client-zip: 2.4.6 + clsx: 2.1.1 + react: 18.3.1 + remove-accents: 0.5.0 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - react-dom + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + + '@wordpress/fields@0.8.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/dataviews': 4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/element': 6.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/media-utils': 5.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/patterns': 2.13.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/router': 1.14.0(react@18.3.1) - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/media-utils': 5.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/router': 1.16.0(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 react: 18.3.1 remove-accents: 0.5.0 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' @@ -19814,38 +20310,42 @@ snapshots: - react-dom - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/fields@0.5.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/fields@0.8.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/dataviews': 4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/element': 6.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/media-utils': 5.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/patterns': 2.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/router': 1.14.0(react@18.3.1) - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/media-utils': 5.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/router': 1.16.0(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 react: 18.3.1 remove-accents: 0.5.0 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' @@ -19853,38 +20353,42 @@ snapshots: - react-dom - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/fields@0.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/fields@0.8.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/dataviews': 4.10.0(patch_hash=of6mtpeubmoicukrgy5ohupf6a)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.14.0 - '@wordpress/element': 6.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/media-utils': 5.14.0 - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/patterns': 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/primitives': 4.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/router': 1.14.0(react@18.3.1) - '@wordpress/url': 4.14.0 - '@wordpress/warning': 3.13.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/media-utils': 5.16.0 + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/router': 1.16.0(react@18.3.1) + '@wordpress/url': 4.16.0 + '@wordpress/warning': 3.16.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 react: 18.3.1 remove-accents: 0.5.0 transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' @@ -19892,78 +20396,83 @@ snapshots: - react-dom - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/format-library@5.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/format-library@5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.14.0(react@18.3.1) - '@wordpress/url': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - supports-color + - webpack + - webpack-virtual-modules - '@wordpress/hooks@4.14.0': + '@wordpress/hooks@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/html-entities@4.14.0': + '@wordpress/html-entities@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n@5.14.0': + '@wordpress/i18n@5.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/hooks': 4.14.0 + '@wordpress/hooks': 4.16.0 gettext-parser: 1.4.0 memize: 2.1.0 sprintf-js: 1.1.2 tannin: 1.2.0 - '@wordpress/icons@10.14.0(react@18.3.1)': + '@wordpress/icons@10.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/element': 6.14.0 - '@wordpress/primitives': 4.14.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/primitives': 4.16.0(react@18.3.1) react: 18.3.1 - '@wordpress/interactivity-router@2.13.0': + '@wordpress/interactivity-router@2.16.0': dependencies: - '@wordpress/a11y': 4.13.0 - '@wordpress/interactivity': 6.13.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/interactivity': 6.16.0 - '@wordpress/interactivity@6.13.0': + '@wordpress/interactivity@6.16.0': dependencies: '@preact/signals': 1.3.1(preact@10.25.4) preact: 10.25.4 - '@wordpress/interface@8.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/interface@9.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/plugins': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/viewport': 6.14.0(react@18.3.1) + '@wordpress/a11y': 4.16.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/viewport': 6.16.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19972,20 +20481,20 @@ snapshots: - '@types/react' - supports-color - '@wordpress/interface@8.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/interface@9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/plugins': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/viewport': 6.14.0(react@18.3.1) + '@wordpress/a11y': 4.16.0 + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/plugins': 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/viewport': 6.16.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19994,136 +20503,175 @@ snapshots: - '@types/react' - supports-color - '@wordpress/is-shallow-equal@5.13.0': + '@wordpress/is-shallow-equal@5.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/jest-console@8.14.0(jest@29.7.0)': + '@wordpress/jest-console@8.16.0(jest@29.7.0)': dependencies: '@babel/runtime': 7.25.7 jest: 29.7.0 jest-matcher-utils: 29.7.0 - '@wordpress/keyboard-shortcuts@5.13.0(react@18.3.1)': + '@wordpress/keyboard-shortcuts@5.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/keycodes': 4.14.0 + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/keycodes': 4.16.0 react: 18.3.1 - '@wordpress/keycodes@4.14.0': + '@wordpress/keycodes@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n': 5.14.0 + '@wordpress/i18n': 5.16.0 - '@wordpress/media-utils@5.14.0': + '@wordpress/media-utils@5.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blob': 4.14.0 - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/private-apis': 1.14.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/private-apis': 1.16.0 - '@wordpress/notices@5.14.0(react@18.3.1)': + '@wordpress/notices@5.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/data': 10.14.0(react@18.3.1) + '@wordpress/a11y': 4.16.0 + '@wordpress/data': 10.16.0(react@18.3.1) react: 18.3.1 - '@wordpress/patterns@2.13.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/patterns@2.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/block-editor': 14.9.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/patterns@2.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/patterns@2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules + + '@wordpress/patterns@2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/a11y': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/patterns@2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/patterns@2.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/block-editor': 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/html-entities': 4.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/html-entities': 4.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/plugins@7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/plugins@7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.13.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 memize: 2.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20132,16 +20680,16 @@ snapshots: - '@types/react' - supports-color - '@wordpress/plugins@7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/plugins@7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/hooks': 4.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.13.0 + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/hooks': 4.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.16.0 memize: 2.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20150,24 +20698,24 @@ snapshots: - '@types/react' - supports-color - '@wordpress/postcss-plugins-preset@5.14.0(postcss@8.4.47)': + '@wordpress/postcss-plugins-preset@5.16.0(postcss@8.4.47)': dependencies: - '@wordpress/base-styles': 5.14.0 + '@wordpress/base-styles': 5.16.0 autoprefixer: 10.4.20(postcss@8.4.47) postcss: 8.4.47 - '@wordpress/preferences@4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/preferences@4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20176,18 +20724,18 @@ snapshots: - '@types/react' - supports-color - '@wordpress/preferences@4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/preferences@4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20196,27 +20744,27 @@ snapshots: - '@types/react' - supports-color - '@wordpress/prettier-config@4.13.0(wp-prettier@3.0.3)': + '@wordpress/prettier-config@4.16.0(wp-prettier@3.0.3)': dependencies: prettier: wp-prettier@3.0.3 - '@wordpress/primitives@4.14.0(react@18.3.1)': + '@wordpress/primitives@4.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/element': 6.14.0 + '@wordpress/element': 6.16.0 clsx: 2.1.1 react: 18.3.1 - '@wordpress/priority-queue@3.13.0': + '@wordpress/priority-queue@3.16.0': dependencies: '@babel/runtime': 7.25.7 requestidlecallback: 0.3.0 - '@wordpress/private-apis@1.14.0': + '@wordpress/private-apis@1.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/redux-routine@5.13.0(redux@5.0.1)': + '@wordpress/redux-routine@5.16.0(redux@5.0.1)': dependencies: '@babel/runtime': 7.25.7 is-plain-object: 5.0.0 @@ -20224,115 +20772,151 @@ snapshots: redux: 5.0.1 rungen: 0.3.2 - '@wordpress/reusable-blocks@5.13.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/reusable-blocks@5.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + + '@wordpress/reusable-blocks@5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.9.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/reusable-blocks@5.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/reusable-blocks@5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/reusable-blocks@5.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/reusable-blocks@5.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/rich-text@7.14.0(react@18.3.1)': + '@wordpress/rich-text@7.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.13.0 - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/escape-html': 3.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/keycodes': 4.14.0 + '@wordpress/a11y': 4.16.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/escape-html': 3.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/keycodes': 4.16.0 memize: 2.1.0 react: 18.3.1 - '@wordpress/router@1.14.0(react@18.3.1)': + '@wordpress/router@1.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 history: 5.3.0 react: 18.3.1 route-recognizer: 0.3.4 - '@wordpress/server-side-render@5.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/server-side-render@5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/url': 4.16.0 fast-deep-equal: 3.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20341,18 +20925,18 @@ snapshots: - '@types/react' - supports-color - '@wordpress/server-side-render@5.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/server-side-render@5.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/url': 4.14.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/deprecated': 4.16.0 + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/url': 4.16.0 fast-deep-equal: 3.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20361,21 +20945,21 @@ snapshots: - '@types/react' - supports-color - '@wordpress/shortcode@4.13.0': + '@wordpress/shortcode@4.16.0': dependencies: '@babel/runtime': 7.25.7 memize: 2.1.0 - '@wordpress/style-engine@2.13.0': + '@wordpress/style-engine@2.16.0': dependencies: '@babel/runtime': 7.25.7 change-case: 4.1.2 - '@wordpress/sync@1.13.0': + '@wordpress/sync@1.16.0': dependencies: '@babel/runtime': 7.25.7 '@types/simple-peer': 9.11.8 - '@wordpress/url': 4.14.0 + '@wordpress/url': 4.16.0 import-locals: 2.0.0 lib0: 0.2.99 simple-peer: 9.11.1 @@ -20388,81 +20972,211 @@ snapshots: - supports-color - utf-8-validate - '@wordpress/token-list@3.14.0': + '@wordpress/token-list@3.16.0': + dependencies: + '@babel/runtime': 7.25.7 + + '@wordpress/undo-manager@1.16.0': dependencies: '@babel/runtime': 7.25.7 + '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/undo-manager@1.13.0': + '@wordpress/upload-media@0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/is-shallow-equal': 5.13.0 + '@shopify/web-worker': 6.4.0(@babel/core@7.26.0) + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + react: 18.3.1 + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - react-dom + - supports-color + - webpack + - webpack-virtual-modules + + '@wordpress/upload-media@0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@shopify/web-worker': 6.4.0(@babel/core@7.26.0)(webpack@5.94.0) + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + react: 18.3.1 + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - react-dom + - supports-color + - webpack + - webpack-virtual-modules - '@wordpress/url@4.14.0': + '@wordpress/upload-media@0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@shopify/web-worker': 6.4.0(@babel/core@7.26.0)(webpack@5.94.0) + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + react: 18.3.1 + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - react-dom + - supports-color + - webpack + - webpack-virtual-modules + + '@wordpress/upload-media@0.1.0(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@shopify/web-worker': 6.4.0 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/blob': 4.16.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.16.0 + '@wordpress/url': 4.16.0 + react: 18.3.1 + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - react-dom + - supports-color + - webpack + - webpack-virtual-modules + + '@wordpress/url@4.16.0': dependencies: '@babel/runtime': 7.25.7 remove-accents: 0.5.0 - '@wordpress/viewport@6.14.0(react@18.3.1)': + '@wordpress/viewport@6.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 react: 18.3.1 - '@wordpress/warning@3.13.0': {} + '@wordpress/warning@3.16.0': {} - '@wordpress/widgets@4.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/widgets@4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/block-editor': 14.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/widgets@4.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/widgets@4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.14.0 - '@wordpress/block-editor': 14.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.3.0(react@18.3.1) - '@wordpress/components': 29.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.14.0(react@18.3.1) - '@wordpress/core-data': 7.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.14.0(react@18.3.1) - '@wordpress/element': 6.14.0 - '@wordpress/i18n': 5.14.0 - '@wordpress/icons': 10.14.0(react@18.3.1) - '@wordpress/notices': 5.14.0(react@18.3.1) + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: + - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - '@types/react-dom' - bufferutil - supports-color - utf-8-validate + - webpack + - webpack-virtual-modules + + '@wordpress/widgets@4.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/api-fetch': 7.16.0 + '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.5.0(react@18.3.1) + '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/element': 6.16.0 + '@wordpress/i18n': 5.16.0 + '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/notices': 5.16.0(react@18.3.1) + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules - '@wordpress/wordcount@4.14.0': + '@wordpress/wordcount@4.16.0': dependencies: '@babel/runtime': 7.25.7 diff --git a/projects/js-packages/ai-client/changelog/renovate-wordpress-monorepo b/projects/js-packages/ai-client/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/ai-client/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/ai-client/package.json b/projects/js-packages/ai-client/package.json index 21266551a3d55..fd0bcb71deed3 100644 --- a/projects/js-packages/ai-client/package.json +++ b/projects/js-packages/ai-client/package.json @@ -51,16 +51,16 @@ "@microsoft/fetch-event-source": "2.0.1", "@types/react": "18.3.18", "@types/wordpress__block-editor": "11.5.16", - "@wordpress/api-fetch": "7.14.0", - "@wordpress/base-styles": "5.14.0", - "@wordpress/blob": "4.14.0", - "@wordpress/block-editor": "14.9.0", - "@wordpress/components": "29.0.0", - "@wordpress/compose": "7.14.0", - "@wordpress/data": "10.14.0", - "@wordpress/element": "6.14.0", - "@wordpress/i18n": "5.14.0", - "@wordpress/icons": "10.14.0", + "@wordpress/api-fetch": "7.16.0", + "@wordpress/base-styles": "5.16.0", + "@wordpress/blob": "4.16.0", + "@wordpress/block-editor": "14.11.0", + "@wordpress/components": "29.2.0", + "@wordpress/compose": "7.16.0", + "@wordpress/data": "10.16.0", + "@wordpress/element": "6.16.0", + "@wordpress/i18n": "5.16.0", + "@wordpress/icons": "10.16.0", "clsx": "2.1.1", "debug": "4.4.0", "markdown-it": "14.1.0", diff --git a/projects/js-packages/api/changelog/renovate-wordpress-monorepo b/projects/js-packages/api/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/api/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/api/package.json b/projects/js-packages/api/package.json index 96ec8fb3cad8a..40dedb2041ce8 100644 --- a/projects/js-packages/api/package.json +++ b/projects/js-packages/api/package.json @@ -15,7 +15,7 @@ "license": "GPL-2.0-or-later", "dependencies": { "@automattic/jetpack-config": "workspace:*", - "@wordpress/url": "4.14.0" + "@wordpress/url": "4.16.0" }, "devDependencies": { "jest": "29.7.0", diff --git a/projects/js-packages/base-styles/changelog/renovate-wordpress-monorepo b/projects/js-packages/base-styles/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/base-styles/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/base-styles/package.json b/projects/js-packages/base-styles/package.json index 05981d15021ab..888b4817423cf 100644 --- a/projects/js-packages/base-styles/package.json +++ b/projects/js-packages/base-styles/package.json @@ -20,6 +20,6 @@ "build-production-js": "echo 'Not implemented.'" }, "devDependencies": { - "@wordpress/base-styles": "5.14.0" + "@wordpress/base-styles": "5.16.0" } } diff --git a/projects/js-packages/boost-score-api/changelog/renovate-wordpress-monorepo b/projects/js-packages/boost-score-api/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/boost-score-api/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/boost-score-api/package.json b/projects/js-packages/boost-score-api/package.json index cc82d6a7d6331..4bb14f804f40b 100644 --- a/projects/js-packages/boost-score-api/package.json +++ b/projects/js-packages/boost-score-api/package.json @@ -21,7 +21,7 @@ "test-coverage": "pnpm run test --coverage" }, "dependencies": { - "@wordpress/i18n": "5.14.0", + "@wordpress/i18n": "5.16.0", "zod": "3.22.3" }, "devDependencies": { diff --git a/projects/js-packages/components/changelog/renovate-wordpress-monorepo b/projects/js-packages/components/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/components/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/components/components/number-slider/test/component.tsx b/projects/js-packages/components/components/number-slider/test/component.tsx index 7586ee43157ac..1ce6d538d3865 100644 --- a/projects/js-packages/components/components/number-slider/test/component.tsx +++ b/projects/js-packages/components/components/number-slider/test/component.tsx @@ -1,12 +1,7 @@ import { render, screen } from '@testing-library/react'; -import ResizeObserver from 'resize-observer-polyfill'; import NumberSlider from '../index'; describe( 'NumberSlider', () => { - beforeAll( () => { - global.ResizeObserver = ResizeObserver; - } ); - it( 'renders the number slider', () => { render( ); expect( screen.getByTestId( 'number-slider' ) ).toBeInTheDocument(); diff --git a/projects/js-packages/components/package.json b/projects/js-packages/components/package.json index 24b5a07a4f724..1120e46adad4f 100644 --- a/projects/js-packages/components/package.json +++ b/projects/js-packages/components/package.json @@ -19,16 +19,16 @@ "@automattic/jetpack-api": "workspace:*", "@automattic/jetpack-scan": "workspace:*", "@babel/runtime": "^7", - "@wordpress/browserslist-config": "6.14.0", - "@wordpress/components": "29.0.0", - "@wordpress/compose": "7.14.0", - "@wordpress/data": "10.14.0", - "@wordpress/dataviews": "4.10.0", - "@wordpress/date": "5.14.0", - "@wordpress/element": "6.14.0", - "@wordpress/i18n": "5.14.0", - "@wordpress/icons": "10.14.0", - "@wordpress/notices": "5.14.0", + "@wordpress/browserslist-config": "6.16.0", + "@wordpress/components": "29.2.0", + "@wordpress/compose": "7.16.0", + "@wordpress/data": "10.16.0", + "@wordpress/dataviews": "4.12.0", + "@wordpress/date": "5.16.0", + "@wordpress/element": "6.16.0", + "@wordpress/i18n": "5.16.0", + "@wordpress/icons": "10.16.0", + "@wordpress/notices": "5.16.0", "clsx": "2.1.1", "prop-types": "^15.7.2", "qrcode.react": "4.2.0", @@ -57,7 +57,6 @@ "react": "18.3.1", "react-dom": "18.3.1", "require-from-string": "2.0.2", - "resize-observer-polyfill": "1.5.1", "storybook": "8.4.7", "ts-dedent": "2.2.0", "typescript": "5.0.4", diff --git a/projects/js-packages/connection/changelog/renovate-wordpress-monorepo b/projects/js-packages/connection/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/connection/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/connection/package.json b/projects/js-packages/connection/package.json index c67af609bee0b..d708a9e93eb6d 100644 --- a/projects/js-packages/connection/package.json +++ b/projects/js-packages/connection/package.json @@ -19,13 +19,13 @@ "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-config": "workspace:*", "@automattic/jetpack-script-data": "workspace:*", - "@wordpress/base-styles": "5.14.0", - "@wordpress/browserslist-config": "6.14.0", - "@wordpress/components": "29.0.0", - "@wordpress/data": "10.14.0", - "@wordpress/element": "6.14.0", - "@wordpress/i18n": "5.14.0", - "@wordpress/icons": "10.14.0", + "@wordpress/base-styles": "5.16.0", + "@wordpress/browserslist-config": "6.16.0", + "@wordpress/components": "29.2.0", + "@wordpress/data": "10.16.0", + "@wordpress/element": "6.16.0", + "@wordpress/i18n": "5.16.0", + "@wordpress/icons": "10.16.0", "clsx": "2.1.1", "debug": "4.4.0", "prop-types": "^15.7.2" diff --git a/projects/js-packages/eslint-config-target-es/changelog/renovate-wordpress-monorepo#2 b/projects/js-packages/eslint-config-target-es/changelog/renovate-wordpress-monorepo#2 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/eslint-config-target-es/changelog/renovate-wordpress-monorepo#2 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/eslint-config-target-es/package.json b/projects/js-packages/eslint-config-target-es/package.json index c228977cca8b7..05ef7687e7fac 100644 --- a/projects/js-packages/eslint-config-target-es/package.json +++ b/projects/js-packages/eslint-config-target-es/package.json @@ -24,7 +24,7 @@ "semver": "^7.3.5" }, "devDependencies": { - "@wordpress/browserslist-config": "6.14.0", + "@wordpress/browserslist-config": "6.16.0", "eslint": "9.16.0", "eslint-plugin-es-x": "7.8.0", "globals": "15.4.0", diff --git a/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo b/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/i18n-loader-webpack-plugin/package.json b/projects/js-packages/i18n-loader-webpack-plugin/package.json index 969185172136b..bafe489bb0c1d 100644 --- a/projects/js-packages/i18n-loader-webpack-plugin/package.json +++ b/projects/js-packages/i18n-loader-webpack-plugin/package.json @@ -21,8 +21,8 @@ "debug": "^4.3.2" }, "devDependencies": { - "@wordpress/dependency-extraction-webpack-plugin": "6.14.0", - "@wordpress/i18n": "5.14.0", + "@wordpress/dependency-extraction-webpack-plugin": "6.16.0", + "@wordpress/i18n": "5.16.0", "jest": "29.7.0", "webpack": "5.94.0", "webpack-cli": "4.9.1" diff --git a/projects/js-packages/idc/changelog/renovate-wordpress-monorepo b/projects/js-packages/idc/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/idc/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/idc/package.json b/projects/js-packages/idc/package.json index 331e99ec733e1..c195f4e9e5144 100644 --- a/projects/js-packages/idc/package.json +++ b/projects/js-packages/idc/package.json @@ -9,13 +9,13 @@ "@automattic/jetpack-api": "workspace:*", "@automattic/jetpack-base-styles": "workspace:*", "@automattic/jetpack-components": "workspace:*", - "@wordpress/base-styles": "5.14.0", - "@wordpress/components": "29.0.0", - "@wordpress/compose": "7.14.0", - "@wordpress/data": "10.14.0", - "@wordpress/element": "6.14.0", - "@wordpress/i18n": "5.14.0", - "@wordpress/url": "4.14.0", + "@wordpress/base-styles": "5.16.0", + "@wordpress/components": "29.2.0", + "@wordpress/compose": "7.16.0", + "@wordpress/data": "10.16.0", + "@wordpress/element": "6.16.0", + "@wordpress/i18n": "5.16.0", + "@wordpress/url": "4.16.0", "prop-types": "^15.7.2" }, "devDependencies": { diff --git a/projects/js-packages/licensing/changelog/renovate-wordpress-monorepo b/projects/js-packages/licensing/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/licensing/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/licensing/components/activation-screen-controls/index.jsx b/projects/js-packages/licensing/components/activation-screen-controls/index.jsx index 51e764b27353e..2450fb2c21512 100644 --- a/projects/js-packages/licensing/components/activation-screen-controls/index.jsx +++ b/projects/js-packages/licensing/components/activation-screen-controls/index.jsx @@ -100,6 +100,7 @@ const SelectableLicenseKeyInput = props => { <> { - // @ts-expect-error `getUnstableBase` exists in the store but is not typed const { getUnstableBase } = select( coreStore ); - return decodeEntities( getUnstableBase()?.name ); + return decodeEntities( getUnstableBase( undefined )?.name ); }, [] ); const hasMedia = media?.some( diff --git a/projects/js-packages/publicize-components/src/components/social-previews/bluesky.tsx b/projects/js-packages/publicize-components/src/components/social-previews/bluesky.tsx index 73d25c8545e06..3c0ab7753de57 100644 --- a/projects/js-packages/publicize-components/src/components/social-previews/bluesky.tsx +++ b/projects/js-packages/publicize-components/src/components/social-previews/bluesky.tsx @@ -10,12 +10,11 @@ const BlueskyPreview = props => { const { message } = useSocialMediaMessage(); const { content, siteName } = useSelect( select => { const { getEditedPostAttribute } = select( editorStore ); - // @ts-expect-error -- It says, "Property 'getUnstableBase' does not exist..." but it does const { getUnstableBase } = select( coreStore ); return { content: getEditedPostAttribute( 'content' ).split( ' +- Code: Use function-style exit() and die() with a default status code of 0. [#41167] +- Embeds: Fix the Descript block variation icon SVG path. [#41017] +- Full Sync: Send context on initial sync action. [#40930] +- Hide related posts options for block themes. [#41075] +- Jetpack AI: Add message that displays when a post has no content. [#41161] +- Jetpack AI: Add PoC for SEO assistant (hardcoded and no actionables yet). [#40802] +- Jetpack AI: Buttons now have 100% width and are 40px tall. [#41161] +- Jetpack AI: Changed color of some text. [#41161] +- Jetpack AI: Updated text and spacing in various places. [#41161] +- Jetpack AI: Write Brief checkboxes are hidden by toggle now. [#41161] +- Move WPCOM_REST_API_Proxy_Request trait to the connection package. [#41023] +- Social Image Generator: Change description for toggle. [#40991] +- Update composer.lock files. [#41066] +- Updated package dependencies. [#40980] [#41099] +- Pexels: Update title of option to be sentence case. [#41024] + ## 14.3-a.1 - 2025-01-13 ### Improved compatibility - Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. [#40782] diff --git a/projects/plugins/jetpack/changelog/add-jetpack-seo-assistant-poc b/projects/plugins/jetpack/changelog/add-jetpack-seo-assistant-poc deleted file mode 100644 index 9bda40718c680..0000000000000 --- a/projects/plugins/jetpack/changelog/add-jetpack-seo-assistant-poc +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Jetpack AI: add PoC for SEO assistant, hardcoded and no actionables yet diff --git a/projects/plugins/jetpack/changelog/add-masterbar-watch b/projects/plugins/jetpack/changelog/add-masterbar-watch deleted file mode 100644 index bc6f12deb1ef9..0000000000000 --- a/projects/plugins/jetpack/changelog/add-masterbar-watch +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -update composer.lock files diff --git a/projects/plugins/jetpack/changelog/fix-broken-newsletter-toggle b/projects/plugins/jetpack/changelog/fix-broken-newsletter-toggle deleted file mode 100644 index d2a8a7e5893eb..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-broken-newsletter-toggle +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Fix: newsletter toggle in editor sidebar has a visually broken active state. diff --git a/projects/plugins/jetpack/changelog/fix-descript-icon-console-error b/projects/plugins/jetpack/changelog/fix-descript-icon-console-error deleted file mode 100644 index 518b4ed74da9b..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-descript-icon-console-error +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Embeds: fix the Descript block variation icon svg path. diff --git a/projects/plugins/jetpack/changelog/fix-forms-select-field-icon b/projects/plugins/jetpack/changelog/fix-forms-select-field-icon deleted file mode 100644 index 13abe7cc13bce..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-forms-select-field-icon +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Forms: Fix dropdown icon style diff --git a/projects/plugins/jetpack/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/jetpack/changelog/fix-functionify_and_statusify_exit_and_die deleted file mode 100644 index 701f0e3d1da69..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-functionify_and_statusify_exit_and_die +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/jetpack/changelog/fix-image-cdn-double-encoding b/projects/plugins/jetpack/changelog/fix-image-cdn-double-encoding deleted file mode 100644 index 101848bfb4810..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-image-cdn-double-encoding +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Photon: Fix double encoding image urls. diff --git a/projects/plugins/jetpack/changelog/fix-sharing-dialog-location b/projects/plugins/jetpack/changelog/fix-sharing-dialog-location deleted file mode 100644 index 305163f8beda8..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-sharing-dialog-location +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Sharing: Fix the location of the sharing dialog, so it is not always the first sharing element on the page diff --git a/projects/plugins/jetpack/changelog/renovate-lock-file-maintenance b/projects/plugins/jetpack/changelog/renovate-lock-file-maintenance deleted file mode 100644 index 1eaea6a769e84..0000000000000 --- a/projects/plugins/jetpack/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Updated package dependencies. diff --git a/projects/plugins/jetpack/changelog/renovate-wordpress-monorepo b/projects/plugins/jetpack/changelog/renovate-wordpress-monorepo deleted file mode 100644 index 1eaea6a769e84..0000000000000 --- a/projects/plugins/jetpack/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Updated package dependencies. diff --git a/projects/plugins/jetpack/changelog/update-forms-core-html-block b/projects/plugins/jetpack/changelog/update-forms-core-html-block deleted file mode 100644 index 5b0f034a356cf..0000000000000 --- a/projects/plugins/jetpack/changelog/update-forms-core-html-block +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: enhancement - -Forms: allow HTML block within forms diff --git a/projects/plugins/jetpack/changelog/update-handle-context-in-full-sync b/projects/plugins/jetpack/changelog/update-handle-context-in-full-sync deleted file mode 100644 index bad97dd651993..0000000000000 --- a/projects/plugins/jetpack/changelog/update-handle-context-in-full-sync +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Full Sync: Added context diff --git a/projects/plugins/jetpack/changelog/update-infinite-scroll-simple-classic b/projects/plugins/jetpack/changelog/update-infinite-scroll-simple-classic deleted file mode 100644 index 6942da1814fe8..0000000000000 --- a/projects/plugins/jetpack/changelog/update-infinite-scroll-simple-classic +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: enhancement - -Show Infinite Scroll options in Simple Classic diff --git a/projects/plugins/jetpack/changelog/update-jetpack-ai-sidebar-improvements b/projects/plugins/jetpack/changelog/update-jetpack-ai-sidebar-improvements deleted file mode 100644 index fc2fc21eaf0ff..0000000000000 --- a/projects/plugins/jetpack/changelog/update-jetpack-ai-sidebar-improvements +++ /dev/null @@ -1,10 +0,0 @@ -Significance: patch -Type: other - -Jetpack AI: Updates / clean up to Jetpack AI assistant sidebar -* Buttons now have 100% width and are 40px tall -* Updated text in various places -* Added message that displays when a post has no content -* Cleaned up spacing in a few places -* Changed color of some text -* Write Brief checkboxes are hidden by toggle now diff --git a/projects/plugins/jetpack/changelog/update-move-wpcom-rest-api-proxy-request-trait b/projects/plugins/jetpack/changelog/update-move-wpcom-rest-api-proxy-request-trait deleted file mode 100644 index bf22379f80342..0000000000000 --- a/projects/plugins/jetpack/changelog/update-move-wpcom-rest-api-proxy-request-trait +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Moved WPCOM_REST_API_Proxy_Request trait to the connection package diff --git a/projects/plugins/jetpack/changelog/update-related-posts-block-theme b/projects/plugins/jetpack/changelog/update-related-posts-block-theme deleted file mode 100644 index cf419bf98a4c7..0000000000000 --- a/projects/plugins/jetpack/changelog/update-related-posts-block-theme +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Hide related posts options for block themes diff --git a/projects/plugins/jetpack/changelog/update-sentence-case-pexels b/projects/plugins/jetpack/changelog/update-sentence-case-pexels deleted file mode 100644 index 36373b89b3090..0000000000000 --- a/projects/plugins/jetpack/changelog/update-sentence-case-pexels +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Update title of "Pexels Free Photos" to be sentence case to match adjacent options. diff --git a/projects/plugins/jetpack/changelog/update-social-disable-caching-for-publicize-services-list b/projects/plugins/jetpack/changelog/update-social-disable-caching-for-publicize-services-list deleted file mode 100644 index 5ea7d21f9281b..0000000000000 --- a/projects/plugins/jetpack/changelog/update-social-disable-caching-for-publicize-services-list +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Social | Fix wordpress.com log in error when connecting Social accounts diff --git a/projects/plugins/jetpack/changelog/update-social-sig-description-block-editor b/projects/plugins/jetpack/changelog/update-social-sig-description-block-editor deleted file mode 100644 index 621802e1c2a7a..0000000000000 --- a/projects/plugins/jetpack/changelog/update-social-sig-description-block-editor +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -SIG: Changed description for togle diff --git a/projects/plugins/jetpack/composer.json b/projects/plugins/jetpack/composer.json index 0d56f82d14f60..7092b747b3737 100644 --- a/projects/plugins/jetpack/composer.json +++ b/projects/plugins/jetpack/composer.json @@ -106,7 +106,7 @@ "platform": { "ext-intl": "0.0.0" }, - "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3_a_1", + "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3_a_3", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index 6a28de5b4b900..23014c28bf7f7 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -944,7 +944,7 @@ "dist": { "type": "path", "url": "../../packages/connection", - "reference": "3bc395ae56ccb54ec1d8b6cf543fd588ee6de7f2" + "reference": "3397d8e80c45a088744f7e912f0fc32a4b6bb372" }, "require": { "automattic/jetpack-a8c-mc-stats": "@dev", @@ -979,7 +979,7 @@ "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "6.2.x-dev" + "dev-trunk": "6.3.x-dev" }, "dependencies": { "test-only": [ @@ -1271,7 +1271,7 @@ "dist": { "type": "path", "url": "../../packages/forms", - "reference": "fd4c0bda2ac5982e1bbd59d6fbad3528b33f931d" + "reference": "3be8eaa0e5a671c57325e2b239a79e5c75e4af20" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1299,7 +1299,7 @@ "link-template": "https://github.com/automattic/jetpack-forms/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.34.x-dev" + "dev-trunk": "0.35.x-dev" }, "textdomain": "jetpack-forms", "version-constants": { @@ -1741,7 +1741,7 @@ "dist": { "type": "path", "url": "../../packages/masterbar", - "reference": "f26d6309fe2d4ef4298d616f25f4e4d815c388bd" + "reference": "9587aa811998a8a174ddae723de91faa7e179f93" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1770,7 +1770,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.10.x-dev" + "dev-trunk": "0.11.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-masterbar/compare/v${old}...v${new}" @@ -2816,7 +2816,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" + "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" }, "require": { "automattic/jetpack-connection": "@dev", @@ -2849,7 +2849,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.3.x-dev" + "dev-trunk": "4.4.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/jetpack/jetpack.php b/projects/plugins/jetpack/jetpack.php index b7b4b4d9580d5..095e97494f88a 100644 --- a/projects/plugins/jetpack/jetpack.php +++ b/projects/plugins/jetpack/jetpack.php @@ -4,7 +4,7 @@ * Plugin URI: https://jetpack.com * Description: Security, performance, and marketing tools made by WordPress experts. Jetpack keeps your site protected so you can focus on more important things. * Author: Automattic - * Version: 14.3-a.1 + * Version: 14.3-a.3 * Author URI: https://jetpack.com * License: GPL2+ * Text Domain: jetpack @@ -34,7 +34,7 @@ define( 'JETPACK__MINIMUM_WP_VERSION', '6.6' ); define( 'JETPACK__MINIMUM_PHP_VERSION', '7.2' ); -define( 'JETPACK__VERSION', '14.3-a.1' ); +define( 'JETPACK__VERSION', '14.3-a.3' ); /** * Constant used to fetch the connection owner token diff --git a/projects/plugins/jetpack/package.json b/projects/plugins/jetpack/package.json index 2f8c951aed8a9..ddfe931a97db9 100644 --- a/projects/plugins/jetpack/package.json +++ b/projects/plugins/jetpack/package.json @@ -1,6 +1,6 @@ { "name": "Jetpack", - "version": "14.3.0-a.1", + "version": "14.3.0-a.3", "private": true, "description": "[Jetpack](https://jetpack.com/) is a WordPress plugin that supercharges your self-hosted WordPress site with the awesome cloud power of [WordPress.com](https://wordpress.com).", "homepage": "https://jetpack.com", diff --git a/projects/plugins/jetpack/readme.txt b/projects/plugins/jetpack/readme.txt index 9c7b5b4aa5cde..705a43e725a2b 100644 --- a/projects/plugins/jetpack/readme.txt +++ b/projects/plugins/jetpack/readme.txt @@ -326,16 +326,17 @@ Jetpack Backup can do a full website migration to a new host, migrate theme file == Changelog == -### 14.3-a.1 - 2025-01-13 -#### Improved compatibility -- Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. +### 14.3-a.3 - 2025-01-20 +#### Enhancements +- Forms: Allow HTML block within forms. +- Show Infinite Scroll options in Simple Classic. #### Bug fixes -- Authors widget: Fix saving of unchecked "Display all authors" checkbox in the legacy widget editor. -- Stats: Fix saving of custom roles settings. -- Pages and Posts: Fix the layout on mobile when details are open. -- Testimonials: Fix shortcode-related bug. -- Tiled Gallery block: Ensure icons are visible when selecting image in editor. +- Fix: Newsletter toggle in editor sidebar has a visually broken active state. +- Forms: Fix dropdown icon style. +- Photon: Fix double encoding image urls. +- Sharing: Fix the location of the sharing dialog so it is not always the first sharing element on the page. +- Social: Fix wordpress.com login error when connecting Social accounts. -------- diff --git a/projects/plugins/mu-wpcom-plugin/changelog/prerelease#2 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#2 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#2 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index 662e6a1ca2e0e..d068eaf23eca2 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -515,7 +515,7 @@ "dist": { "type": "path", "url": "../../packages/connection", - "reference": "3bc395ae56ccb54ec1d8b6cf543fd588ee6de7f2" + "reference": "3397d8e80c45a088744f7e912f0fc32a4b6bb372" }, "require": { "automattic/jetpack-a8c-mc-stats": "@dev", @@ -550,7 +550,7 @@ "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "6.2.x-dev" + "dev-trunk": "6.3.x-dev" }, "dependencies": { "test-only": [ @@ -971,7 +971,7 @@ "dist": { "type": "path", "url": "../../packages/masterbar", - "reference": "f26d6309fe2d4ef4298d616f25f4e4d815c388bd" + "reference": "9587aa811998a8a174ddae723de91faa7e179f93" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1000,7 +1000,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.10.x-dev" + "dev-trunk": "0.11.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-masterbar/compare/v${old}...v${new}" @@ -1593,7 +1593,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" + "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1626,7 +1626,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.3.x-dev" + "dev-trunk": "4.4.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/protect/changelog/prerelease#14 b/projects/plugins/protect/changelog/prerelease#14 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/protect/changelog/prerelease#14 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/protect/composer.lock b/projects/plugins/protect/composer.lock index 0524ad3fe45be..44357efa8ca32 100644 --- a/projects/plugins/protect/composer.lock +++ b/projects/plugins/protect/composer.lock @@ -603,7 +603,7 @@ "dist": { "type": "path", "url": "../../packages/connection", - "reference": "3bc395ae56ccb54ec1d8b6cf543fd588ee6de7f2" + "reference": "3397d8e80c45a088744f7e912f0fc32a4b6bb372" }, "require": { "automattic/jetpack-a8c-mc-stats": "@dev", @@ -638,7 +638,7 @@ "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "6.2.x-dev" + "dev-trunk": "6.3.x-dev" }, "dependencies": { "test-only": [ @@ -1732,7 +1732,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" + "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1765,7 +1765,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.3.x-dev" + "dev-trunk": "4.4.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/search/changelog/prerelease b/projects/plugins/search/changelog/prerelease new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/search/changelog/prerelease @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/search/composer.lock b/projects/plugins/search/composer.lock index f32044e497c6b..24115a986c26a 100644 --- a/projects/plugins/search/composer.lock +++ b/projects/plugins/search/composer.lock @@ -543,7 +543,7 @@ "dist": { "type": "path", "url": "../../packages/connection", - "reference": "3bc395ae56ccb54ec1d8b6cf543fd588ee6de7f2" + "reference": "3397d8e80c45a088744f7e912f0fc32a4b6bb372" }, "require": { "automattic/jetpack-a8c-mc-stats": "@dev", @@ -578,7 +578,7 @@ "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "6.2.x-dev" + "dev-trunk": "6.3.x-dev" }, "dependencies": { "test-only": [ @@ -1827,7 +1827,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" + "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1860,7 +1860,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.3.x-dev" + "dev-trunk": "4.4.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/social/changelog/prerelease b/projects/plugins/social/changelog/prerelease new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/social/changelog/prerelease @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index fc6251abb2b38..cc986ae7528ee 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -543,7 +543,7 @@ "dist": { "type": "path", "url": "../../packages/connection", - "reference": "3bc395ae56ccb54ec1d8b6cf543fd588ee6de7f2" + "reference": "3397d8e80c45a088744f7e912f0fc32a4b6bb372" }, "require": { "automattic/jetpack-a8c-mc-stats": "@dev", @@ -578,7 +578,7 @@ "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "6.2.x-dev" + "dev-trunk": "6.3.x-dev" }, "dependencies": { "test-only": [ @@ -1819,7 +1819,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" + "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1852,7 +1852,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.3.x-dev" + "dev-trunk": "4.4.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/starter-plugin/changelog/prerelease#5 b/projects/plugins/starter-plugin/changelog/prerelease#5 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/prerelease#5 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/starter-plugin/composer.lock b/projects/plugins/starter-plugin/composer.lock index dbc3bce90162d..4d7cecc4bafe7 100644 --- a/projects/plugins/starter-plugin/composer.lock +++ b/projects/plugins/starter-plugin/composer.lock @@ -543,7 +543,7 @@ "dist": { "type": "path", "url": "../../packages/connection", - "reference": "3bc395ae56ccb54ec1d8b6cf543fd588ee6de7f2" + "reference": "3397d8e80c45a088744f7e912f0fc32a4b6bb372" }, "require": { "automattic/jetpack-a8c-mc-stats": "@dev", @@ -578,7 +578,7 @@ "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "6.2.x-dev" + "dev-trunk": "6.3.x-dev" }, "dependencies": { "test-only": [ @@ -1672,7 +1672,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" + "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1705,7 +1705,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.3.x-dev" + "dev-trunk": "4.4.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/videopress/changelog/prerelease b/projects/plugins/videopress/changelog/prerelease new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/videopress/changelog/prerelease @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/videopress/composer.lock b/projects/plugins/videopress/composer.lock index b3a4670190208..9d1523836ca58 100644 --- a/projects/plugins/videopress/composer.lock +++ b/projects/plugins/videopress/composer.lock @@ -543,7 +543,7 @@ "dist": { "type": "path", "url": "../../packages/connection", - "reference": "3bc395ae56ccb54ec1d8b6cf543fd588ee6de7f2" + "reference": "3397d8e80c45a088744f7e912f0fc32a4b6bb372" }, "require": { "automattic/jetpack-a8c-mc-stats": "@dev", @@ -578,7 +578,7 @@ "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "6.2.x-dev" + "dev-trunk": "6.3.x-dev" }, "dependencies": { "test-only": [ @@ -1672,7 +1672,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" + "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1705,7 +1705,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.3.x-dev" + "dev-trunk": "4.4.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/wpcomsh/changelog/prerelease#8 b/projects/plugins/wpcomsh/changelog/prerelease#8 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/prerelease#8 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index 8990f87d2d28b..7572cdeee03a2 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -652,7 +652,7 @@ "dist": { "type": "path", "url": "../../packages/connection", - "reference": "3bc395ae56ccb54ec1d8b6cf543fd588ee6de7f2" + "reference": "3397d8e80c45a088744f7e912f0fc32a4b6bb372" }, "require": { "automattic/jetpack-a8c-mc-stats": "@dev", @@ -687,7 +687,7 @@ "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "6.2.x-dev" + "dev-trunk": "6.3.x-dev" }, "dependencies": { "test-only": [ @@ -1108,7 +1108,7 @@ "dist": { "type": "path", "url": "../../packages/masterbar", - "reference": "f26d6309fe2d4ef4298d616f25f4e4d815c388bd" + "reference": "9587aa811998a8a174ddae723de91faa7e179f93" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1137,7 +1137,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.10.x-dev" + "dev-trunk": "0.11.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-masterbar/compare/v${old}...v${new}" @@ -1795,7 +1795,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "9f24b0cb0912e1e3f235e946b9f397ffd9e36ccf" + "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1828,7 +1828,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.3.x-dev" + "dev-trunk": "4.4.x-dev" }, "dependencies": { "test-only": [ From 0ed6e32cb2a5c4c0f7a34d76a8606fedf7ba8321 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Mon, 20 Jan 2025 13:15:01 -0500 Subject: [PATCH 130/420] Fix some missed `${var}` deprecations (#41188) Two in packages/analyzer, which disables all phpcompatibility sniffs. One in a file in jetpack-mu-wpcom which has `phpcs:disable` at the top. And one in a comment in plugins/beta, because why not. The rest I found while grepping seem to be inside single-quoted strings or in embedded JS code. --- projects/packages/analyzer/.phan/baseline.php | 3 --- .../analyzer/changelog/fix-php-dollar-brace-deprecations | 5 +++++ projects/packages/analyzer/scripts/jetpack-slurper.php | 2 +- projects/packages/analyzer/src/diff-generator.php | 2 +- .../changelog/fix-php-dollar-brace-deprecations | 5 +++++ .../custom-css/custom-css/preprocessors/lessc.inc.php | 4 ++-- .../plugins/beta/changelog/fix-php-dollar-brace-deprecations | 5 +++++ projects/plugins/beta/src/class-autoupdateself.php | 2 +- 8 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 projects/packages/analyzer/changelog/fix-php-dollar-brace-deprecations create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-php-dollar-brace-deprecations create mode 100644 projects/plugins/beta/changelog/fix-php-dollar-brace-deprecations diff --git a/projects/packages/analyzer/.phan/baseline.php b/projects/packages/analyzer/.phan/baseline.php index f72aac830da77..746e9d1f2e1f7 100644 --- a/projects/packages/analyzer/.phan/baseline.php +++ b/projects/packages/analyzer/.phan/baseline.php @@ -20,7 +20,6 @@ // PhanTypeArraySuspiciousNullable : 5 occurrences // PhanTypeMismatchArgumentNullable : 5 occurrences // PhanUndeclaredTypeParameter : 4 occurrences - // PhanDeprecatedEncapsVar : 2 occurrences // PhanNonClassMethodCall : 2 occurrences // PhanPluginDuplicateCatchStatementBody : 2 occurrences // PhanTypeMismatchDeclaredParam : 2 occurrences @@ -36,7 +35,6 @@ 'scripts/core-calls.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchDeclaredParam', 'PhanUndeclaredClassMethod', 'PhanUndeclaredTypeParameter'], 'scripts/core-definitions.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchDeclaredParam', 'PhanUndeclaredClassMethod', 'PhanUndeclaredTypeParameter'], 'scripts/example.php' => ['PhanTypeMismatchArgumentProbablyReal'], - 'scripts/jetpack-slurper.php' => ['PhanDeprecatedEncapsVar'], 'scripts/jetpack-svn.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeArraySuspiciousNullable'], 'src/Declarations/class-declaration.php' => ['PhanUndeclaredProperty'], 'src/Differences/class-class-const-missing.php' => ['PhanParamSignatureMismatch', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturnProbablyReal'], @@ -56,7 +54,6 @@ 'src/class-invocations.php' => ['PhanPluginDuplicateCatchStatementBody'], 'src/class-utils.php' => ['PhanTypeMismatchArgument', 'PhanUndeclaredMethod', 'PhanUndeclaredProperty', 'PhanUndeclaredTypeParameter'], 'src/class-warnings.php' => ['PhanUndeclaredMethod'], - 'src/diff-generator.php' => ['PhanDeprecatedEncapsVar'], ], // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases) diff --git a/projects/packages/analyzer/changelog/fix-php-dollar-brace-deprecations b/projects/packages/analyzer/changelog/fix-php-dollar-brace-deprecations new file mode 100644 index 0000000000000..edc08f9feda98 --- /dev/null +++ b/projects/packages/analyzer/changelog/fix-php-dollar-brace-deprecations @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Change `${var}` to `{$var}`, as the former is deprecated in php 8.4. + + diff --git a/projects/packages/analyzer/scripts/jetpack-slurper.php b/projects/packages/analyzer/scripts/jetpack-slurper.php index ccaf738e35d58..d2b0ae55f136b 100755 --- a/projects/packages/analyzer/scripts/jetpack-slurper.php +++ b/projects/packages/analyzer/scripts/jetpack-slurper.php @@ -51,7 +51,7 @@ $differences->find( $jetpack_new_declarations, $jetpack_old_declarations, $jetpack_new_path ); foreach ( glob( $slurper_path . '/*' ) as $folder_name ) { - echo "Looking for invocations in:\n${folder_name}\n\n"; + echo "Looking for invocations in:\n{$folder_name}\n\n"; $invocations = new Automattic\Jetpack\Analyzer\Invocations(); $invocations->scan( $folder_name ); diff --git a/projects/packages/analyzer/src/diff-generator.php b/projects/packages/analyzer/src/diff-generator.php index 6c0c653b6674f..71686ceafc324 100644 --- a/projects/packages/analyzer/src/diff-generator.php +++ b/projects/packages/analyzer/src/diff-generator.php @@ -54,7 +54,7 @@ static function get_warnings( $folder_name, $differences, $excludes ) { $warnings_folder = dirname( __DIR__ ) . '/output/warnings/'; $invocations_folder = dirname( __DIR__ ) . '/output/invocations/'; - echo "Looking for invocations in:\n${folder_name}\n\n"; + echo "Looking for invocations in:\n{$folder_name}\n\n"; $invocations = new Invocations(); $invocations->scan( $folder_name, $excludes ); $invocations->save( $invocations_folder . basename( $folder_name ) . '.json', false ); diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-php-dollar-brace-deprecations b/projects/packages/jetpack-mu-wpcom/changelog/fix-php-dollar-brace-deprecations new file mode 100644 index 0000000000000..edc08f9feda98 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-php-dollar-brace-deprecations @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Change `${var}` to `{$var}`, as the former is deprecated in php 8.4. + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/custom-css/custom-css/preprocessors/lessc.inc.php b/projects/packages/jetpack-mu-wpcom/src/features/custom-css/custom-css/preprocessors/lessc.inc.php index cd0bad9decaf4..644294af603f6 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/custom-css/custom-css/preprocessors/lessc.inc.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/custom-css/custom-css/preprocessors/lessc.inc.php @@ -1296,7 +1296,7 @@ public function assertArgs($value, $expectedArgs, $name="") { $name = $name . ": "; } - $this->throwError("${name}expecting $expectedArgs arguments, got $numValues"); + $this->throwError("{$name}expecting $expectedArgs arguments, got $numValues"); } return $values; @@ -1646,7 +1646,7 @@ protected function evaluate($exp) { } // type based operators - $fname = "op_${ltype}_${rtype}"; + $fname = "op_{$ltype}_{$rtype}"; if (is_callable(array($this, $fname))) { $out = $this->$fname($op, $left, $right); if (!is_null($out)) return $out; diff --git a/projects/plugins/beta/changelog/fix-php-dollar-brace-deprecations b/projects/plugins/beta/changelog/fix-php-dollar-brace-deprecations new file mode 100644 index 0000000000000..edc08f9feda98 --- /dev/null +++ b/projects/plugins/beta/changelog/fix-php-dollar-brace-deprecations @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Change `${var}` to `{$var}`, as the former is deprecated in php 8.4. + + diff --git a/projects/plugins/beta/src/class-autoupdateself.php b/projects/plugins/beta/src/class-autoupdateself.php index 24f9023dd94f1..6e9930519e95b 100644 --- a/projects/plugins/beta/src/class-autoupdateself.php +++ b/projects/plugins/beta/src/class-autoupdateself.php @@ -162,7 +162,7 @@ public function has_newer_version() { * when an update is available. This is the way: catch the setting of the relevant * transient and add ourself in. * - * @todo Consider switching to the `update_plugins_${hostmane}` hook introduced in WP 5.8. + * @todo Consider switching to the `update_plugins_{$hostname}` hook introduced in WP 5.8. * * @param object $transient The transient we're checking. * @return object $transient From 1b367b36d6305f5e5ded7f0db1199119b6772ee0 Mon Sep 17 00:00:00 2001 From: Grzegorz Chudzinski-Pawlowski <112354940+grzegorz-cp@users.noreply.github.com> Date: Tue, 21 Jan 2025 10:39:29 +1100 Subject: [PATCH 131/420] My Jetpack: Adding new modal interstitial (#40945) * My Jetpack: Adding new modal interstitial component * changelog --- .../product-interstitial-modal/index.tsx | 145 ++++++++++++++++++ .../stories/boost.png | Bin 0 -> 146014 bytes .../stories/index.stories.jsx | 60 ++++++++ .../style.module.scss | 52 +++++++ .../add-my-jetpack-modal-interstitial | 4 + 5 files changed, 261 insertions(+) create mode 100644 projects/packages/my-jetpack/_inc/components/product-interstitial-modal/index.tsx create mode 100644 projects/packages/my-jetpack/_inc/components/product-interstitial-modal/stories/boost.png create mode 100644 projects/packages/my-jetpack/_inc/components/product-interstitial-modal/stories/index.stories.jsx create mode 100644 projects/packages/my-jetpack/_inc/components/product-interstitial-modal/style.module.scss create mode 100644 projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/index.tsx b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/index.tsx new file mode 100644 index 0000000000000..dd8b799868a1c --- /dev/null +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/index.tsx @@ -0,0 +1,145 @@ +import { Text, Button, ThemeProvider, Col, Container } from '@automattic/jetpack-components'; +import { Modal } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import clsx from 'clsx'; +import { useCallback, useState, type FC } from 'react'; +import styles from './style.module.scss'; + +interface ProductInterstitialModalProps { + title: string; + hideCloseButton?: boolean; + triggerButton?: React.ReactNode; + className?: string; + children?: React.ReactNode; + secondaryColumn?: React.ReactNode; + additionalColumn?: React.ReactNode; + onOpen?: () => void; + onClose?: () => void; + onClick?: () => void; + secondaryButtonExternalLink?: boolean; + secondaryButtonHref?: string; + buttonDisabled?: boolean; + buttonExternalLink?: boolean; + buttonHref?: string; + buttonContent?: string; +} + +const ProductInterstitialModal: FC< ProductInterstitialModalProps > = props => { + const { + title, + className, + children, + triggerButton, + onOpen, + onClose, + onClick, + buttonDisabled, + buttonExternalLink, + buttonHref, + buttonContent, + secondaryButtonExternalLink, + secondaryButtonHref, + secondaryColumn, + additionalColumn = false, + } = props; + + const [ isOpen, setOpen ] = useState( false ); + const openModal = useCallback( () => { + onOpen?.(); + setOpen( true ); + }, [ onOpen ] ); + const closeModal = useCallback( () => { + onClose?.(); + setOpen( false ); + }, [ onClose ] ); + + if ( ! title || ! children || ! triggerButton ) { + return null; + } + + return ( + <> + + { + // TODO: use any component as a trigger + } + + { isOpen && ( + + + { + // left column - always takes 33% of the width or the full with for small breakpoint + } + +

    +
    + + { title } + +
    + { children } +
    +
    + + +
    + + { + // middle column for three columns layout and the right column for two columns layout + // small breakpoint: takes full width + // medium breakpoint: ~63% of the width without the additional column or 50% of the second row with the additional column + // large breakpoint: 66% of the width without the additional column or 33% with the additional column + } + + { secondaryColumn } + + { + // additional column for three columns layout + // small breakpoint (max 4 cols): takes full width + // medium breakpoint (max 8 cols): 50% of the second row width + // large breakpoint (max 12 cols): 33% of the width + additionalColumn && ( + + { additionalColumn } + + ) + } + + + ) } + + + ); +}; + +export default ProductInterstitialModal; diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/stories/boost.png b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/stories/boost.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7cb0cec7511dde82ee434bb247b66487f551b8 GIT binary patch literal 146014 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%0A?7}vp3RFtqt^@0ufRxqvcpe8aoJ|zqm?Y{!*^=< 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�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 z#{vKV004vht*5c0ngRd-0000000000000000000000000000000000000000fB**t VEHa@j$prua002ovPDHLkV1hiY>ofoW literal 0 HcmV?d00001 diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/stories/index.stories.jsx b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/stories/index.stories.jsx new file mode 100644 index 0000000000000..0020ce4aaf105 --- /dev/null +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/stories/index.stories.jsx @@ -0,0 +1,60 @@ +import { Text, ProductPrice } from '@automattic/jetpack-components'; +import React from 'react'; +import { HashRouter, Routes, Route } from 'react-router-dom'; +import ProductInterstitialModal from '..'; +import boostImage from './boost.png'; + +export default { + title: 'Packages/My Jetpack/Product Interstitial Modal', + component: ProductInterstitialModal, +}; + +const DefaultArgs = { + title: 'Product Interstitial Modal', + children: ( +

    + ), + triggerButton: 'Open Modal', + hideCloseButton: false, + buttonContent: 'Upgrade now', + secondaryColumn: Boost, + buttonExternalLink: 'https://jetpack.com', +}; + +const Template = args => ( + + + } /> + + +); + +export const Default = Template.bind( {} ); + +export const WithAdditionalColumn = Template.bind( {} ); +WithAdditionalColumn.args = { + ...DefaultArgs, + secondaryColumn:
    CTA Content
    , + additionalColumn:
    Additional Column
    , +}; + +Default.parameters = {}; +Default.args = DefaultArgs; diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/style.module.scss b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/style.module.scss new file mode 100644 index 0000000000000..11c74fa30787c --- /dev/null +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/style.module.scss @@ -0,0 +1,52 @@ +.component-product-interstitial-modal { + :global(.components-modal__header) + div { + height: 100%; + } +} + + +.wrapper { + height: 100%; +} + +.primary { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.primary-content { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.primary-footer { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.secondary { + max-width: 100%; + height: auto; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + + img { + max-width: 100%; + height: auto; + max-height: 100%; + object-fit: contain; + display: flex; + align-items: center; + overflow: hidden; + } +} + +.additional { + display: flex; + flex-direction: column; +} diff --git a/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial b/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial new file mode 100644 index 0000000000000..60d58656c8b82 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Adding new modal based interstitial component. From 18177d3f4b11ff378dd9b7d2104d93b202966f90 Mon Sep 17 00:00:00 2001 From: Miguel Lezama Date: Mon, 20 Jan 2025 21:09:59 -0300 Subject: [PATCH 132/420] Forms: Add unique IDs when multiple instances. (#40998) --- .../forms/changelog/update-forms-unique-id | 4 + .../src/contact-form/class-contact-form.php | 12 ++- .../contact-form/test-class.contact-form.php | 83 ++++++++++++++++++- .../jetpack/changelog/update-forms-unique-id | 5 ++ 4 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 projects/packages/forms/changelog/update-forms-unique-id create mode 100644 projects/plugins/jetpack/changelog/update-forms-unique-id diff --git a/projects/packages/forms/changelog/update-forms-unique-id b/projects/packages/forms/changelog/update-forms-unique-id new file mode 100644 index 0000000000000..a9fa70192e97b --- /dev/null +++ b/projects/packages/forms/changelog/update-forms-unique-id @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Add unique ids to each form diff --git a/projects/packages/forms/src/contact-form/class-contact-form.php b/projects/packages/forms/src/contact-form/class-contact-form.php index 889ad90d649cd..96bea7549ca73 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form.php +++ b/projects/packages/forms/src/contact-form/class-contact-form.php @@ -43,14 +43,14 @@ class Contact_Form extends Contact_Form_Shortcode { /** * The most recent (inclusive) contact-form shortcode processed. * - * @var Contact_Form + * @var Contact_Form|null */ public static $last; /** * Form we are currently looking at. If processed, will become $last * - * @var Contact_Form + * @var Contact_Form|null */ public static $current_form; @@ -118,6 +118,14 @@ public function __construct( $attributes, $content = null ) { $default_to .= $post_author->user_email; } + if ( ! empty( self::$forms ) ) { + // Ensure 'id' exists in $attributes before trying to modify it + if ( ! isset( $attributes['id'] ) ) { + $attributes['id'] = ''; + } + $attributes['id'] = $attributes['id'] . '-' . ( count( self::$forms ) + 1 ); + } + $this->hash = sha1( wp_json_encode( $attributes ) ); self::$forms[ $this->hash ] = $this; diff --git a/projects/packages/forms/tests/php/contact-form/test-class.contact-form.php b/projects/packages/forms/tests/php/contact-form/test-class.contact-form.php index 0148b98822261..ce3d5588c45a1 100644 --- a/projects/packages/forms/tests/php/contact-form/test-class.contact-form.php +++ b/projects/packages/forms/tests/php/contact-form/test-class.contact-form.php @@ -2,6 +2,8 @@ /** * Unit Tests for Automattic\Jetpack\Forms\Contact_Form. * + * To run the test visit the packages/forms directory and run composer test-php + * * @package automattic/jetpack-forms */ @@ -21,6 +23,8 @@ class WP_Test_Contact_Form extends BaseTestCase { private $post; + private $track_feedback_inserted; + private $plugin; /** @@ -54,7 +58,7 @@ private function set_globals() { public function set_up_test_case() { // Avoid actually trying to send any mail. add_filter( 'pre_wp_mail', '__return_true', PHP_INT_MAX ); - + $this->track_feedback_inserted = array(); $this->set_globals(); $author_id = wp_insert_user( @@ -98,16 +102,28 @@ public function tear_down() { remove_all_filters( 'wp_mail' ); remove_all_filters( 'grunion_still_email_spam' ); remove_all_filters( 'jetpack_contact_form_is_spam' ); + + // Reset the forms array + Contact_Form::$forms = array(); + Contact_Form::$last = null; + Contact_Form::$current_form = null; } /** * Adds the field values to the global $_POST value. * - * @param array $values Array of field key value pairs. + * @param array $values Array of form fields and values. + * @param string $form_id Optional form ID. If not provided, will use $this->post->ID. */ - private function add_field_values( $values ) { + private function add_field_values( $values, $form_id = null ) { + $prefix = $form_id ? $form_id : 'g' . $this->post->ID; + $_POST = array(); foreach ( $values as $key => $val ) { - $_POST[ 'g' . $this->post->ID . '-' . $key ] = $val; + if ( strpos( $key, 'contact-form' ) === 0 || strpos( $key, 'action' ) === 0 ) { + $_POST[ $key ] = $val; + } else { + $_POST[ $prefix . '-' . $key ] = $val; + } } } @@ -2067,4 +2083,63 @@ public function test_grunion_contact_form_apply_block_attribute() { Util::grunion_contact_form_apply_block_attribute( $original, array( 'foo' => 'bar' ) ) ); } + /** + * Helper function that tracks the ids of the feedbacks that got created. + */ + public function track_feedback_inserted( $post_id ) { + $this->track_feedback_inserted[] = $post_id; + } + /** + * Tests that multiple instances of the same form work correctly with unique IDs. + */ + public function test_multiple_form_instances_with_unique_ids() { + global $post; + + add_action( 'grunion_after_feedback_post_inserted', array( $this, 'track_feedback_inserted' ), 10, 1 ); + + $this->add_field_values( + array( + 'name' => 'First form name 1', + 'message' => 'First form message 1', + ), + 'g' . $post->ID + ); + + $form1 = new Contact_Form( array(), "[contact-field label='Name' type='name' required='1'/][contact-field label='Message' type='textarea' required='1'/]" ); + // Submit first form + $result1 = $form1->process_submission(); + + $this->assertTrue( is_string( $result1 ), 'First form submission should be successful' ); + + $this->add_field_values( + array( + 'name' => 'First form name 2', + 'message' => 'First form message 2', + ), + 'g' . $post->ID . '-2' + ); + + $form2 = new Contact_Form( array(), "[contact-field label='Name' type='name' required='1'/][contact-field label='Message' type='textarea' required='1'/]" ); + $result2 = $form2->process_submission(); + + $this->assertTrue( is_string( $result2 ), 'First form submission should be successful' ); + + // Verify that the forms have different IDs + $this->assertNotEquals( $form1->get_attribute( 'id' ), $form2->get_attribute( 'id' ), 'Forms should have unique IDs' ); + + remove_action( 'grunion_after_feedback_post_inserted', array( $this, 'track_feedback_inserted' ), 10 ); + + $this->assertCount( 2, $this->track_feedback_inserted, 'The number of feedback forms that were inserted does not match! Expected 2.' ); + + // Add assertion to ensure array is not empty + $this->assertNotEmpty( $this->track_feedback_inserted, 'No feedback forms were inserted' ); + + $count = 1; + foreach ( $this->track_feedback_inserted as $feedback_id ) { + $feedback = get_post( $feedback_id ); + $this->assertStringContainsString( 'First form name ' . $count, $feedback->post_content ); + $this->assertStringContainsString( 'First form message ' . $count, $feedback->post_content ); + ++$count; + } + } } // end class diff --git a/projects/plugins/jetpack/changelog/update-forms-unique-id b/projects/plugins/jetpack/changelog/update-forms-unique-id new file mode 100644 index 0000000000000..b9412e76b338b --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-forms-unique-id @@ -0,0 +1,5 @@ +Significance: patch +Type: bugfix +Comment: Forms: Add unique ids to each form + + From ca6c8b1026e483d9631aeb5ab5f45a5c825980b9 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Mon, 20 Jan 2025 18:55:35 -0800 Subject: [PATCH 133/420] Social: Unified connections management (#40679) * Social: Use connections REST endpoint for initial state (#40677) * Create connections class for caching * Update script data to use connections from the REST endpoint * changelog * Restore deprecated connection fields for time being * Disable caching for now * Fix display_name for Mastodon * Remove the unused caching logic * Social: Connections API schema front end changes (#40539) * Social: Use connections REST endpoint for initial state (#40677) * Create connections class for caching * Update script data to use connections from the REST endpoint * changelog * Restore deprecated connection fields for time being * Disable caching for now * Fix display_name for Mastodon * Remove the unused caching logic * Update connect-form.tsx * Create connections class for caching * Update types for connection object * Update connection actions to reflect new types * Mark 'id' as deprecated * Add changelog * Deprecated fields should be optional * Fix TS error * Update unit tests * Replace/remove deprecated props usage * Remove unused code * Fix connection selectors * Fix unit tests * Reduce the number of changes * Fix type * Oops! It should be negation * Restore class-connections.php * Social | Add site context for publicize endpoints (#40704) * Allow requests as blog in base controller * Add filters for connections controller * Add changelog * Update baseline.php * Rename the 'include' param to 'scope' for clarity * Return shared connections by default * Remove scope parameter in favour of request context * Only pass test_connections to WPCOM * Update baseline.php * Social: Implement connections caching with the updated endpoint (#40892) * Update connections class to implement caching * Add get_all_for_user method * Pass cached connections to initial state * Invalidate cache on XMLRPC request * Add changelog * Remove eager loading of connections following cache invalidation * Improve clear caching logic to handle race condition * Social: Replace can_disconnect with a store data selector (#40888) * Pass the connected users WPCOM data to the UI * Augment wpcom for user object * Create canUserManageConnection selector * Replace can_disconnect with the new selector * Fix unit tests * Add changelog * Fix user data for WPCOM sites * Fix unit tests * Add changelog * Social | Restore must_reauth as connection status (#40946) * Add "must_reauth" to status in REST schema * Restore the UI changes to consider must_reauth status * Add changelog * Don't disable connections with must_reauth status must_reauth means that the connection will break soon, but it still works. We'll display an appropriate notice. --------- Co-authored-by: Paul Bunkham * Social | Clean up connections controller to use connections class (#40982) * Create Proxy_Requests class for re-usability * Move is_wpcom utility to Publicize_Utils class * Move connections specific logic from REST controller to connections class * Add changelog * Update baseline.php * Move publicize permissions check to its own method * Social | Fix connect button for broken connections (#40995) * Social | Fix connected accounts not marked as such on confirmation screen (#40997) * Social | Fix connected accounts not marked as such on confirmation screen * Add a comment * Social | Update connections schema to change `user_id` to `wpcom_user_id` (#41025) * Social | Update connections schema to change user_id to wpcom_user_id * Fix wpcom_user_id for post connections field * Add changelog * Social | Implement the other CRUD operations for connections (#40928) * WIP * Pass the connection ID in the URL * Pass connection_id for delete proxy request * Allow overriding $request_options * Clean up debugging * Add changelog * Add changelog for js changes * Fix static analysis issues * Remove unused code * Update baseline.php --------- Co-authored-by: Paul Bunkham * Unify changelogs --------- Co-authored-by: Paul Bunkham --- .../social-unified-connections-management | 4 + .../connection-management/connection-info.tsx | 2 +- .../connection-management/connection-name.tsx | 6 +- .../connection-management/disconnect.tsx | 9 +- .../connection-management/reconnect.tsx | 11 +- .../tests/specs/disconnect.test.js | 1 - .../tests/specs/mark-as-shared.test.js | 1 - .../tests/specs/reconnect.test.js | 11 +- .../src/components/connection/index.js | 2 +- .../form/broken-connections-notice.tsx | 24 +- .../src/components/form/connections-list.tsx | 9 +- .../form/unsupported-connections-notice.tsx | 10 +- .../components/form/use-connection-state.ts | 9 +- .../confirmation-form/index.tsx | 2 +- .../src/components/services/connect-form.tsx | 2 +- .../src/components/services/custom-inputs.tsx | 2 +- .../services/service-connection-info.tsx | 11 +- .../src/components/services/service-item.tsx | 11 +- .../components/services/service-status.tsx | 9 +- .../tests/service-connection-info.test.js | 20 +- .../social-post-modal/post-preview.tsx | 4 +- .../social-post-modal/preview-section.tsx | 2 +- .../social-store/actions/connection-data.ts | 19 +- .../actions/test/connection-data.js | 26 +- .../social-store/reducer/connection-data.ts | 6 +- ...{connection-data.js => connection-data.ts} | 81 ++-- .../src/social-store/selectors/index.ts | 2 - .../selectors/test/connection-data.test.js | 17 +- .../src/social-store/types.ts | 65 ++- .../src/utils/connections.ts | 5 - .../src/utils/test-factory.js | 8 +- .../src/utils/test-utils.js | 12 +- .../changelog/add-wpcom-data-for-current-user | 4 + projects/js-packages/script-data/src/types.ts | 4 + .../packages/publicize/.phan/baseline.php | 10 +- projects/packages/publicize/.phan/config.php | 1 + .../fix-social-connections-list-feature-check | 4 + .../social-unified-connections-management | 4 + .../publicize/src/class-connections.php | 405 ++++++++++++++++++ .../publicize/src/class-publicize-base.php | 6 +- .../src/class-publicize-script-data.php | 49 ++- .../publicize/src/class-publicize-utils.php | 22 + .../publicize/src/class-publicize.php | 4 + .../packages/publicize/src/class-services.php | 2 - .../src/rest-api/class-base-controller.php | 36 +- .../rest-api/class-connections-controller.php | 377 +++++++++++----- .../rest-api/class-connections-post-field.php | 12 + .../src/rest-api/class-proxy-requests.php | 31 ++ .../fix-social-connections-list-feature-check | 4 + .../fix-social-connections-list-feature-check | 4 + 50 files changed, 1049 insertions(+), 333 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/social-unified-connections-management rename projects/js-packages/publicize-components/src/social-store/selectors/{connection-data.js => connection-data.ts} (77%) delete mode 100644 projects/js-packages/publicize-components/src/utils/connections.ts create mode 100644 projects/js-packages/script-data/changelog/add-wpcom-data-for-current-user create mode 100644 projects/packages/publicize/changelog/fix-social-connections-list-feature-check create mode 100644 projects/packages/publicize/changelog/social-unified-connections-management create mode 100644 projects/packages/publicize/src/class-connections.php create mode 100644 projects/packages/publicize/src/rest-api/class-proxy-requests.php create mode 100644 projects/plugins/jetpack/changelog/fix-social-connections-list-feature-check create mode 100644 projects/plugins/social/changelog/fix-social-connections-list-feature-check diff --git a/projects/js-packages/publicize-components/changelog/social-unified-connections-management b/projects/js-packages/publicize-components/changelog/social-unified-connections-management new file mode 100644 index 0000000000000..03f5d101125bf --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/social-unified-connections-management @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Social | Unify connections management API schema diff --git a/projects/js-packages/publicize-components/src/components/connection-management/connection-info.tsx b/projects/js-packages/publicize-components/src/components/connection-management/connection-info.tsx index ebd65c1ccea8a..8b4f1bf73b6f5 100644 --- a/projects/js-packages/publicize-components/src/components/connection-management/connection-info.tsx +++ b/projects/js-packages/publicize-components/src/components/connection-management/connection-info.tsx @@ -27,7 +27,7 @@ export function ConnectionInfo( { connection, service }: ConnectionInfoProps ) {
    diff --git a/projects/js-packages/publicize-components/src/components/connection-management/connection-name.tsx b/projects/js-packages/publicize-components/src/components/connection-management/connection-name.tsx index 7bdd740496e47..d28420646ea29 100644 --- a/projects/js-packages/publicize-components/src/components/connection-management/connection-name.tsx +++ b/projects/js-packages/publicize-components/src/components/connection-management/connection-name.tsx @@ -27,12 +27,10 @@ export function ConnectionName( { connection }: ConnectionNameProps ) { return (
    { ! connection.profile_link ? ( - - { connection.display_name || connection.external_name } - + { connection.display_name } ) : ( - { connection.display_name || connection.external_display || connection.external_name } + { connection.display_name } ) } { isUpdating ? ( diff --git a/projects/js-packages/publicize-components/src/components/connection-management/disconnect.tsx b/projects/js-packages/publicize-components/src/components/connection-management/disconnect.tsx index ccc50575a39d9..e804757301458 100644 --- a/projects/js-packages/publicize-components/src/components/connection-management/disconnect.tsx +++ b/projects/js-packages/publicize-components/src/components/connection-management/disconnect.tsx @@ -30,15 +30,16 @@ export function Disconnect( { const { deleteConnectionById } = useDispatch( socialStore ); - const { isDisconnecting } = useSelect( + const { isDisconnecting, canManageConnection } = useSelect( select => { - const { getDeletingConnections } = select( socialStore ); + const { getDeletingConnections, canUserManageConnection } = select( socialStore ); return { isDisconnecting: getDeletingConnections().includes( connection.connection_id ), + canManageConnection: canUserManageConnection( connection ), }; }, - [ connection.connection_id ] + [ connection ] ); const onClickDisconnect = useCallback( async () => { @@ -49,7 +50,7 @@ export function Disconnect( { } ); }, [ connection.connection_id, deleteConnectionById ] ); - if ( ! connection.can_disconnect ) { + if ( ! canManageConnection ) { return null; } diff --git a/projects/js-packages/publicize-components/src/components/connection-management/reconnect.tsx b/projects/js-packages/publicize-components/src/components/connection-management/reconnect.tsx index 22bf30e2e64d2..a3e50e1ef5200 100644 --- a/projects/js-packages/publicize-components/src/components/connection-management/reconnect.tsx +++ b/projects/js-packages/publicize-components/src/components/connection-management/reconnect.tsx @@ -24,15 +24,16 @@ export function Reconnect( { connection, service, variant = 'link' }: ReconnectP const { deleteConnectionById, setKeyringResult, openConnectionsModal, setReconnectingAccount } = useDispatch( socialStore ); - const { isDisconnecting } = useSelect( + const { isDisconnecting, canManageConnection } = useSelect( select => { - const { getDeletingConnections } = select( socialStore ); + const { getDeletingConnections, canUserManageConnection } = select( socialStore ); return { isDisconnecting: getDeletingConnections().includes( connection.connection_id ), + canManageConnection: canUserManageConnection( connection ), }; }, - [ connection.connection_id ] + [ connection ] ); const onConfirm = useCallback( @@ -63,7 +64,7 @@ export function Reconnect( { connection, service, variant = 'link' }: ReconnectP const formData = new FormData(); if ( service.ID === 'mastodon' ) { - formData.set( 'instance', connection.external_display ); + formData.set( 'instance', connection.external_handle ); } if ( service.ID === 'bluesky' ) { @@ -80,7 +81,7 @@ export function Reconnect( { connection, service, variant = 'link' }: ReconnectP setReconnectingAccount, ] ); - if ( ! connection.can_disconnect ) { + if ( ! canManageConnection ) { return null; } diff --git a/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/disconnect.test.js b/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/disconnect.test.js index 0bb54b87314ba..52a8dbc52a9cf 100644 --- a/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/disconnect.test.js +++ b/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/disconnect.test.js @@ -38,7 +38,6 @@ describe( 'Disconnecting a connection', () => { service_name: 'facebook', connection_id: '2', display_name: 'Facebook', - can_disconnect: true, } } /> ); diff --git a/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/mark-as-shared.test.js b/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/mark-as-shared.test.js index cb946d29b2ad5..111c88a4b1c37 100644 --- a/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/mark-as-shared.test.js +++ b/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/mark-as-shared.test.js @@ -27,7 +27,6 @@ describe( 'Marking a connection as shared', () => { service_name: 'facebook', connection_id: '2', display_name: 'Facebook', - can_disconnect: true, } } /> ); diff --git a/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/reconnect.test.js b/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/reconnect.test.js index ca471f52581ed..c6eb17f78f62d 100644 --- a/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/reconnect.test.js +++ b/projects/js-packages/publicize-components/src/components/connection-management/tests/specs/reconnect.test.js @@ -17,8 +17,7 @@ describe( 'Reconnect', () => { const mockConnection = { connection_id: '123', - can_disconnect: true, - external_display: 'mockDisplay', + display_name: 'mockDisplay', }; beforeEach( () => { @@ -58,12 +57,8 @@ describe( 'Reconnect', () => { } ); test( 'does not render the button if connection cannot be disconnected', () => { - const nonDisconnectableConnection = { - ...mockConnection, - can_disconnect: false, - }; - - render( ); + setup( { canUserManageConnection: false } ); + render( ); expect( screen.queryByRole( 'button' ) ).not.toBeInTheDocument(); } ); diff --git a/projects/js-packages/publicize-components/src/components/connection/index.js b/projects/js-packages/publicize-components/src/components/connection/index.js index b8601613d87b3..03d643a55d575 100644 --- a/projects/js-packages/publicize-components/src/components/connection/index.js +++ b/projects/js-packages/publicize-components/src/components/connection/index.js @@ -62,7 +62,7 @@ class PublicizeConnection extends Component { } isDisabled() { - return this.props.disabled || this.connectionIsFailing() || this.connectionNeedsReauth(); + return this.props.disabled || this.connectionIsFailing(); } render() { diff --git a/projects/js-packages/publicize-components/src/components/form/broken-connections-notice.tsx b/projects/js-packages/publicize-components/src/components/form/broken-connections-notice.tsx index ffb87494effae..fc142cfe131c3 100644 --- a/projects/js-packages/publicize-components/src/components/form/broken-connections-notice.tsx +++ b/projects/js-packages/publicize-components/src/components/form/broken-connections-notice.tsx @@ -1,30 +1,18 @@ import { Button } from '@automattic/jetpack-components'; import { ExternalLink } from '@wordpress/components'; -import { useDispatch } from '@wordpress/data'; +import { useDispatch, useSelect } from '@wordpress/data'; import { createInterpolateElement, Fragment } from '@wordpress/element'; import { __, _x } from '@wordpress/i18n'; import usePublicizeConfig from '../../hooks/use-publicize-config'; -import useSocialMediaConnections from '../../hooks/use-social-media-connections'; import { store } from '../../social-store'; import { Connection } from '../../social-store/types'; -import { checkConnectionCode } from '../../utils/connections'; import { getSocialScriptData } from '../../utils/script-data'; import Notice from '../notice'; import { useServiceLabel } from '../services/use-service-label'; import styles from './styles.module.scss'; export const BrokenConnectionsNotice: React.FC = () => { - const { connections } = useSocialMediaConnections(); - - const brokenConnections = connections.filter( connection => { - return ( - connection.status === 'broken' || - // This is a legacy check for connections that are not healthy. - // TODO remove this check when we are sure that all connections have - // the status property (same schema for connections endpoints), e.g. on Simple/Atomic sites - checkConnectionCode( connection, 'broken' ) - ); - } ); + const brokenConnections = useSelect( select => select( store ).getBrokenConnections(), [] ); const { connectionsPageUrl } = usePublicizeConfig(); @@ -87,11 +75,9 @@ export const BrokenConnectionsNotice: React.FC = () => { { // Since Intl.ListFormat is not allowed in Jetpack yet, // we join the connections with a comma and space - connectionsList.map( ( { display_name, external_display, id }, i ) => ( - - - { display_name || external_display } - + connectionsList.map( ( { display_name, connection_id }, i ) => ( + + { display_name } { i < connectionsList.length - 1 && _x( ',', diff --git a/projects/js-packages/publicize-components/src/components/form/connections-list.tsx b/projects/js-packages/publicize-components/src/components/form/connections-list.tsx index c2c5e5c51b4dc..e15950ad91771 100644 --- a/projects/js-packages/publicize-components/src/components/form/connections-list.tsx +++ b/projects/js-packages/publicize-components/src/components/form/connections-list.tsx @@ -35,18 +35,17 @@ export const ConnectionsList: React.FC = () => {
      { connections.map( conn => { - const { display_name, id, service_name, profile_picture, connection_id } = conn; - const currentId = connection_id ? connection_id : id; + const { display_name, service_name, profile_picture, connection_id } = conn; return ( ); diff --git a/projects/js-packages/publicize-components/src/components/form/unsupported-connections-notice.tsx b/projects/js-packages/publicize-components/src/components/form/unsupported-connections-notice.tsx index fd64817250ccc..778db75f9b53f 100644 --- a/projects/js-packages/publicize-components/src/components/form/unsupported-connections-notice.tsx +++ b/projects/js-packages/publicize-components/src/components/form/unsupported-connections-notice.tsx @@ -3,16 +3,20 @@ import { createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { usePublicizeConfig } from '../../..'; import useSocialMediaConnections from '../../hooks/use-social-media-connections'; -import { checkConnectionCode } from '../../utils/connections'; import Notice from '../notice'; +import { useService } from '../services/use-service'; export const UnsupportedConnectionsNotice: React.FC = () => { const { connections } = useSocialMediaConnections(); const { connectionsPageUrl } = usePublicizeConfig(); - const unsupportedConnections = connections.filter( connection => - checkConnectionCode( connection, 'unsupported' ) + const getServices = useService(); + + const unsupportedConnections = connections.filter( + connection => + // If getServices returns falsy, it means the service is unsupported. + ! getServices( connection.service_name ) ); return ( diff --git a/projects/js-packages/publicize-components/src/components/form/use-connection-state.ts b/projects/js-packages/publicize-components/src/components/form/use-connection-state.ts index e994363e19d4a..7f3a5bc4daaa6 100644 --- a/projects/js-packages/publicize-components/src/components/form/use-connection-state.ts +++ b/projects/js-packages/publicize-components/src/components/form/use-connection-state.ts @@ -31,17 +31,16 @@ export const useConnectionState = () => { */ const isInGoodShape = useCallback( ( connection: Connection ) => { - const { id, is_healthy, connection_id, status } = connection; - const currentId = connection_id ? connection_id : id; + const { connection_id: id, status } = connection; // 1. Be healthy - const isHealthy = false !== is_healthy && status !== 'broken'; + const isHealthy = status !== 'broken'; // 2. Have no validation errors - const hasValidationErrors = validationErrors[ currentId ] !== undefined && ! isConvertible; + const hasValidationErrors = validationErrors[ id ] !== undefined && ! isConvertible; // 3. Not have a NO_MEDIA_ERROR when media is required - const hasNoMediaError = validationErrors[ currentId ] === NO_MEDIA_ERROR; + const hasNoMediaError = validationErrors[ id ] === NO_MEDIA_ERROR; return isHealthy && ! hasValidationErrors && ! hasNoMediaError; }, diff --git a/projects/js-packages/publicize-components/src/components/manage-connections-modal/confirmation-form/index.tsx b/projects/js-packages/publicize-components/src/components/manage-connections-modal/confirmation-form/index.tsx index f99e92f74e942..a07f892d38a56 100644 --- a/projects/js-packages/publicize-components/src/components/manage-connections-modal/confirmation-form/index.tsx +++ b/projects/js-packages/publicize-components/src/components/manage-connections-modal/confirmation-form/index.tsx @@ -162,7 +162,7 @@ export function ConfirmationForm( { keyringResult, onComplete, isAdmin }: Confir display_name: accountInfo?.label, profile_picture: accountInfo?.profile_picture, service_name: service.ID, - external_id: external_user_ID, + external_id: external_user_ID.toString(), } ); onComplete(); diff --git a/projects/js-packages/publicize-components/src/components/services/connect-form.tsx b/projects/js-packages/publicize-components/src/components/services/connect-form.tsx index a700da6a8514a..a530834148449 100644 --- a/projects/js-packages/publicize-components/src/components/services/connect-form.tsx +++ b/projects/js-packages/publicize-components/src/components/services/connect-form.tsx @@ -24,7 +24,7 @@ type ConnectFormProps = { * * @param {ConnectFormProps} props - Component props * - * @return {import('react').ReactNode} Connect form component + * @return Connect form component */ export function ConnectForm( { service, diff --git a/projects/js-packages/publicize-components/src/components/services/custom-inputs.tsx b/projects/js-packages/publicize-components/src/components/services/custom-inputs.tsx index 90f61a1350056..e2f114f412ba4 100644 --- a/projects/js-packages/publicize-components/src/components/services/custom-inputs.tsx +++ b/projects/js-packages/publicize-components/src/components/services/custom-inputs.tsx @@ -73,7 +73,7 @@ export function CustomInputs( { service }: CustomInputsProps ) { name="handle" defaultValue={ reconnectingAccount?.service_name === 'bluesky' - ? reconnectingAccount?.external_name + ? reconnectingAccount?.external_handle : undefined } autoComplete="off" diff --git a/projects/js-packages/publicize-components/src/components/services/service-connection-info.tsx b/projects/js-packages/publicize-components/src/components/services/service-connection-info.tsx index ca3075a16f584..7e5bf2c806391 100644 --- a/projects/js-packages/publicize-components/src/components/services/service-connection-info.tsx +++ b/projects/js-packages/publicize-components/src/components/services/service-connection-info.tsx @@ -1,5 +1,7 @@ import { IconTooltip, Text } from '@automattic/jetpack-components'; +import { useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; +import { store as socialStore } from '../../social-store'; import { Connection } from '../../social-store/types'; import { ConnectionName } from '../connection-management/connection-name'; import { ConnectionStatus } from '../connection-management/connection-status'; @@ -19,6 +21,11 @@ export const ServiceConnectionInfo = ( { service, isAdmin, }: ServiceConnectionInfoProps ) => { + const canManageConnection = useSelect( + select => select( socialStore ).canUserManageConnection( connection ), + [ connection ] + ); + return (
      @@ -40,7 +47,7 @@ export const ServiceConnectionInfo = ( { * if the user can disconnect the connection. * Otherwise, non-admin authors will see only the status without any further context. */ - if ( conn.status === 'broken' && conn.can_disconnect ) { + if ( conn.status === 'broken' && canManageConnection ) { return ; } @@ -63,7 +70,7 @@ export const ServiceConnectionInfo = ( { * Now if the user is not an admin, we tell them that the connection * was added by an admin and show the connection status if it's broken. */ - return ! conn.can_disconnect ? ( + return ! canManageConnection ? ( <> { __( diff --git a/projects/js-packages/publicize-components/src/components/services/service-item.tsx b/projects/js-packages/publicize-components/src/components/services/service-item.tsx index 2ab25c5163801..56e2322786610 100644 --- a/projects/js-packages/publicize-components/src/components/services/service-item.tsx +++ b/projects/js-packages/publicize-components/src/components/services/service-item.tsx @@ -1,8 +1,10 @@ import { Button, useBreakpointMatch } from '@automattic/jetpack-components'; import { Panel, PanelBody } from '@wordpress/components'; +import { useSelect } from '@wordpress/data'; import { useEffect, useReducer, useRef } from '@wordpress/element'; import { __, _x } from '@wordpress/i18n'; import { Icon, chevronDown, chevronUp } from '@wordpress/icons'; +import { store as socialStore } from '../../social-store'; import { ConnectForm } from './connect-form'; import { ServiceItemDetails, ServicesItemDetailsProps } from './service-item-details'; import { ServiceStatus } from './service-status'; @@ -40,8 +42,13 @@ export function ServiceItem( { const brokenConnections = serviceConnections.filter( ( { status } ) => status === 'broken' ); - const hasOwnBrokenConnections = brokenConnections.some( - ( { can_disconnect } ) => can_disconnect + const hasOwnBrokenConnections = useSelect( + select => { + const { canUserManageConnection } = select( socialStore ); + + return brokenConnections.some( canUserManageConnection ); + }, + [ brokenConnections ] ); const hideInitialConnectForm = diff --git a/projects/js-packages/publicize-components/src/components/services/service-status.tsx b/projects/js-packages/publicize-components/src/components/services/service-status.tsx index 0620edc6231ba..f21a5f97b77e3 100644 --- a/projects/js-packages/publicize-components/src/components/services/service-status.tsx +++ b/projects/js-packages/publicize-components/src/components/services/service-status.tsx @@ -1,5 +1,7 @@ import { Alert } from '@automattic/jetpack-components'; +import { useSelect } from '@wordpress/data'; import { __, _n, sprintf } from '@wordpress/i18n'; +import { store as socialStore } from '../../social-store'; import { Connection } from '../../social-store/types'; import styles from './style.module.scss'; @@ -16,13 +18,16 @@ export type ServiceStatusProps = { * @return {import('react').ReactNode} Service status component */ export function ServiceStatus( { serviceConnections, brokenConnections }: ServiceStatusProps ) { + const canFix = useSelect( + select => brokenConnections.some( select( socialStore ).canUserManageConnection ), + [ brokenConnections ] + ); + if ( ! serviceConnections.length ) { return null; } if ( brokenConnections.length > 0 ) { - const canFix = brokenConnections.some( ( { can_disconnect } ) => can_disconnect ); - return ( ( { @@ -19,13 +20,22 @@ describe( 'ServiceConnectionInfo', () => { profile_picture: 'https://example.com/profile.jpg', display_name: 'Example User', status: 'connected', - can_disconnect: true, }; const service = { icon: () => , }; + beforeAll( () => { + global.JetpackScriptData = { + user: { + current_user: { + id: 123, + }, + }, + }; + } ); + const renderComponent = ( connOverrides = {}, serviceOverrides = {}, props = {} ) => { render( { ); }; + afterEach( () => { + jest.clearAllMocks(); + } ); + test( 'renders profile picture if available', () => { renderComponent(); const profilePic = screen.getByAltText( 'Example User' ); @@ -70,7 +84,9 @@ describe( 'ServiceConnectionInfo', () => { } ); test( 'displays description if connection cannot be disconnected', () => { - renderComponent( { can_disconnect: false } ); + setup( { canUserManageConnection: false } ); + renderComponent(); + expect( screen.getByText( 'This connection is added by a site administrator.' ) ).toBeInTheDocument(); diff --git a/projects/js-packages/publicize-components/src/components/social-post-modal/post-preview.tsx b/projects/js-packages/publicize-components/src/components/social-post-modal/post-preview.tsx index 55cb3717cf7e0..a89ddc5ad3f75 100644 --- a/projects/js-packages/publicize-components/src/components/social-post-modal/post-preview.tsx +++ b/projects/js-packages/publicize-components/src/components/social-post-modal/post-preview.tsx @@ -33,9 +33,9 @@ export type PostPreviewProps = { export function PostPreview( { connection }: PostPreviewProps ) { const user = useMemo( () => ( { - displayName: connection.display_name || connection.external_display, + displayName: connection.display_name, profileImage: connection.profile_picture, - externalName: connection.external_name, + externalName: connection.external_handle, } ), [ connection ] ); diff --git a/projects/js-packages/publicize-components/src/components/social-post-modal/preview-section.tsx b/projects/js-packages/publicize-components/src/components/social-post-modal/preview-section.tsx index 18e656f04082b..cbb0bef242bd5 100644 --- a/projects/js-packages/publicize-components/src/components/social-post-modal/preview-section.tsx +++ b/projects/js-packages/publicize-components/src/components/social-post-modal/preview-section.tsx @@ -33,7 +33,7 @@ export function PreviewSection() { // to avoid errors for old connections like Twitter .filter( ( { service_name } ) => getService( service_name ) ) .map( connection => { - const title = connection.display_name || connection.external_display; + const title = connection.display_name; const name = `${ connection.service_name }-${ connection.connection_id }`; const icon = ( - conn.connection_id - ? conn.connection_id === freshConnection.connection_id - : conn.id === freshConnection.id + const prevConnection = prevConnections.find( + conn => conn.connection_id === freshConnection.connection_id ); const connection = { ...defaults, ...prevConnection, ...freshConnection, - shared: prevConnection?.shared, - is_healthy: freshConnection.test_success, }; connections.push( connection ); } @@ -288,7 +282,7 @@ export function deleteConnectionById( { connectionId, showSuccessNotice = true } const { createErrorNotice, createSuccessNotice } = coreDispatch( globalNoticesStore ); try { - const path = `/jetpack/v4/social/connections/${ connectionId }`; + const path = `/wpcom/v2/publicize/connections/${ connectionId }`; // Abort the refresh connections request. dispatch( abortRefreshConnectionsRequest() ); @@ -347,7 +341,7 @@ export function createConnection( data, optimisticData = {} ) { const tempId = `new-${ ++uniqueId }`; try { - const path = `/jetpack/v4/social/connections/`; + const path = `/wpcom/v2/publicize/connections/`; dispatch( addConnection( { @@ -368,7 +362,6 @@ export function createConnection( data, optimisticData = {} ) { // Updating the connection will also override the connection_id. updateConnection( tempId, { ...connection, - can_disconnect: true, // For editor, we always enable the connection by default. enabled: true, } ) @@ -378,7 +371,7 @@ export function createConnection( data, optimisticData = {} ) { sprintf( /* translators: %s is the name of the social media platform e.g. "Facebook" */ __( '%s account connected successfully.', 'jetpack-publicize-components' ), - connection.label + connection.service_label ), { type: 'snackbar', @@ -467,7 +460,7 @@ export function updateConnectionById( connectionId, data ) { const prevConnection = select.getConnectionById( connectionId ); try { - const path = `/jetpack/v4/social/connections/${ connectionId }`; + const path = `/wpcom/v2/publicize/connections/${ connectionId }`; // Abort the refresh connections request. dispatch( abortRefreshConnectionsRequest() ); diff --git a/projects/js-packages/publicize-components/src/social-store/actions/test/connection-data.js b/projects/js-packages/publicize-components/src/social-store/actions/test/connection-data.js index 86b84bc27c9b3..2e6efa6235e99 100644 --- a/projects/js-packages/publicize-components/src/social-store/actions/test/connection-data.js +++ b/projects/js-packages/publicize-components/src/social-store/actions/test/connection-data.js @@ -119,22 +119,14 @@ describe( 'Social store actions: connectionData', () => { const freshConnections = connections.map( connection => ( { ...connection, - test_success: false, + status: 'broken', } ) ); registry.dispatch( socialStore ).mergeConnections( freshConnections ); const connectionsAfterMerge = registry.select( socialStore ).getConnections(); - expect( connectionsAfterMerge ).toEqual( - freshConnections.map( connection => ( { - ...connection, - // These 3 are added while merging - done: false, - toggleable: true, - is_healthy: false, - } ) ) - ); + expect( connectionsAfterMerge ).toEqual( freshConnections ); } ); } ); @@ -156,10 +148,7 @@ describe( 'Social store actions: connectionData', () => { if ( path.startsWith( refreshConnections ) ) { return connections.map( connection => ( { ...connection, - can_refresh: false, - refresh_url: '', - test_message: 'Some message', - test_success: true, + status: 'broken', } ) ); } @@ -184,14 +173,7 @@ describe( 'Social store actions: connectionData', () => { expect( connectionsAfterRefresh ).toEqual( connections.map( connection => ( { ...connection, - can_refresh: false, - refresh_url: '', - test_message: 'Some message', - test_success: true, - // These 3 are added while merging - done: false, - toggleable: true, - is_healthy: true, + status: 'broken', } ) ) ); diff --git a/projects/js-packages/publicize-components/src/social-store/reducer/connection-data.ts b/projects/js-packages/publicize-components/src/social-store/reducer/connection-data.ts index 29fd84f077177..237d93331c0ea 100644 --- a/projects/js-packages/publicize-components/src/social-store/reducer/connection-data.ts +++ b/projects/js-packages/publicize-components/src/social-store/reducer/connection-data.ts @@ -133,11 +133,7 @@ const connectionData = ( state: ConnectionData = { connections: [] }, action ) = return { ...state, connections: state.connections.map( connection => { - // If the connection has a connection_id, then give it priority. - // Otherwise, use the id. - const isTargetConnection = connection.connection_id - ? connection.connection_id === action.connectionId - : connection.id === action.connectionId; + const isTargetConnection = connection.connection_id === action.connectionId; if ( isTargetConnection ) { return { diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.js b/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts similarity index 77% rename from projects/js-packages/publicize-components/src/social-store/selectors/connection-data.js rename to projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts index 25b675d301c4d..ea1a0dc0f6795 100644 --- a/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.js +++ b/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts @@ -1,5 +1,8 @@ -import { checkConnectionCode } from '../../utils/connections'; +import { getScriptData } from '@automattic/jetpack-script-data'; +import { store as coreStore } from '@wordpress/core-data'; +import { createRegistrySelector } from '@wordpress/data'; import { REQUEST_TYPE_DEFAULT } from '../actions/constants'; +import { Connection, SocialStoreState } from '../types'; /** * Returns the connections list from the store. @@ -8,7 +11,7 @@ import { REQUEST_TYPE_DEFAULT } from '../actions/constants'; * * @return {Array} The connections list */ -export function getConnections( state ) { +export function getConnections( state: SocialStoreState ) { return state.connectionData?.connections ?? []; } @@ -32,13 +35,7 @@ export function getConnectionById( state, connectionId ) { */ export function getBrokenConnections( state ) { return getConnections( state ).filter( connection => { - return ( - connection.status === 'broken' || - // This is a legacy check for connections that are not healthy. - // TODO remove this check when we are sure that all connections have - // the status property (same schema for connections endpoints), e.g. on Simple/Atomic sites - checkConnectionCode( connection, 'broken' ) - ); + return connection.status === 'broken'; } ); } @@ -48,7 +45,7 @@ export function getBrokenConnections( state ) { * @param {import("../types").SocialStoreState} state - State object. * @param {string} serviceName - The service name. * - * @return {Array} The connections. + * @return {Array} The connections. */ export function getConnectionsByService( state, serviceName ) { return getConnections( state ).filter( ( { service_name } ) => service_name === serviceName ); @@ -72,12 +69,12 @@ export function hasConnections( state ) { export function getFailedConnections( state ) { const connections = getConnections( state ); - return connections.filter( connection => false === connection.test_success ); + return connections.filter( connection => 'broken' === connection.status ); } /** * Returns a list of Publicize connection service names that require reauthentication from users. - * iFor example, when LinkedIn switched its API from v1 to v2. + * For example, when LinkedIn switched its API from v1 to v2. * * @param {import("../types").SocialStoreState} state - State object. * @return {Array} List of service names that need reauthentication. @@ -85,7 +82,7 @@ export function getFailedConnections( state ) { export function getMustReauthConnections( state ) { const connections = getConnections( state ); return connections - .filter( connection => 'must_reauth' === connection.test_success ) + .filter( connection => 'must_reauth' === connection.status ) .map( connection => connection.service_name ); } @@ -132,22 +129,11 @@ export function getConnectionProfileDetails( state, service, { forceDefaults = f ); if ( connection ) { - const { - display_name, - profile_display_name, - profile_picture, - external_display, - external_name, - } = connection; - - displayName = 'twitter' === service ? profile_display_name : display_name || external_display; - username = 'twitter' === service ? display_name : connection.username; - profileImage = profile_picture; + const { display_name, profile_picture, external_handle } = connection; - // Connections schema is a mess - if ( 'bluesky' === service ) { - username = external_name; - } + displayName = display_name; + username = external_handle; + profileImage = profile_picture; } } @@ -199,14 +185,14 @@ export function getAbortControllers( state, requestType = REQUEST_TYPE_DEFAULT ) /** * Whether a mastodon account is already connected. * - * @param {import("../types").SocialStoreState} state - State object. - * @param {string} username - The mastodon username. + * @param {import("../types").SocialStoreState} state - State object. + * @param {string} handle - The mastodon handle. * * @return {boolean} Whether the mastodon account is already connected. */ -export function isMastodonAccountAlreadyConnected( state, username ) { +export function isMastodonAccountAlreadyConnected( state, handle ) { return getConnectionsByService( state, 'mastodon' ).some( connection => { - return connection.external_display === username; + return connection.external_handle === handle; } ); } @@ -220,7 +206,7 @@ export function isMastodonAccountAlreadyConnected( state, username ) { */ export function isBlueskyAccountAlreadyConnected( state, handle ) { return getConnectionsByService( state, 'bluesky' ).some( connection => { - return connection.external_name === handle; + return connection.external_handle === handle; } ); } @@ -244,3 +230,32 @@ export function getKeyringResult( state ) { export function isConnectionsModalOpen( state ) { return state.connectionData?.isConnectionsModalOpen ?? false; } + +/** + * Whether the current user can manage the connection. + */ +export const canUserManageConnection = createRegistrySelector( + select => + ( state: SocialStoreState, connectionOrId: Connection | string ): boolean => { + const connection = + typeof connectionOrId === 'string' + ? getConnectionById( state, connectionOrId ) + : connectionOrId; + + const { current_user } = getScriptData().user; + + // If the current user is the connection owner. + if ( current_user.wpcom?.ID === connection.wpcom_user_id ) { + return true; + } + + const { + // @ts-expect-error getUser exists but `core-data` entities are not typed properly. + // Should work fine after https://github.com/WordPress/gutenberg/pull/67668 is released to npm. + getUser, + } = select( coreStore ); + + // The user has to be at least an editor to manage the connection. + return getUser( current_user.id )?.capabilities?.edit_others_posts ?? false; + } +); diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/index.ts b/projects/js-packages/publicize-components/src/social-store/selectors/index.ts index b7d1c985dda21..4d2ca69c41288 100644 --- a/projects/js-packages/publicize-components/src/social-store/selectors/index.ts +++ b/projects/js-packages/publicize-components/src/social-store/selectors/index.ts @@ -8,8 +8,6 @@ import * as utmSelectors from './utm-settings'; /** * Returns whether the site settings are being saved. - * - * @type {() => boolean} Whether the site settings are being saved. */ export const isSavingSiteSettings = createRegistrySelector( select => () => { return select( coreStore ).isSavingEntityRecord( 'root', 'site', undefined ); diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/test/connection-data.test.js b/projects/js-packages/publicize-components/src/social-store/selectors/test/connection-data.test.js index b73f4d62f1c49..fdb3c21209930 100644 --- a/projects/js-packages/publicize-components/src/social-store/selectors/test/connection-data.test.js +++ b/projects/js-packages/publicize-components/src/social-store/selectors/test/connection-data.test.js @@ -12,34 +12,31 @@ const state = { connectionData: { connections: [ { - id: '123456789', service_name: 'facebook', display_name: 'Some name', profile_picture: 'https://wordpress.com/some-url-of-a-picture', - username: 'username', + external_handle: 'external_handle', enabled: false, connection_id: '987654321', - test_success: true, + status: 'ok', }, { - id: '234567891', service_name: 'tumblr', display_name: 'Some name', profile_picture: 'https://wordpress.com/some-url-of-another-picture', - username: 'username', + external_handle: 'external_handle', enabled: true, connection_id: '198765432', - test_success: false, + status: 'broken', }, { - id: '345678912', service_name: 'mastodon', display_name: 'somename', profile_picture: 'https://wordpress.com/some-url-of-one-more-picture', - username: '@somename@mastodon.social', + external_handle: '@somename@mastodon.social', enabled: false, connection_id: '219876543', - test_success: 'must_reauth', + status: 'must_reauth', }, ], }, @@ -140,7 +137,7 @@ describe( 'Social store selectors: connectionData', () => { expect( getConnectionProfileDetails( state, 'facebook' ) ).toEqual( { displayName: connection.display_name, profileImage: connection.profile_picture, - username: connection.username, + username: connection.external_handle, } ); } ); diff --git a/projects/js-packages/publicize-components/src/social-store/types.ts b/projects/js-packages/publicize-components/src/social-store/types.ts index fb5701967342a..2be401380fd57 100644 --- a/projects/js-packages/publicize-components/src/social-store/types.ts +++ b/projects/js-packages/publicize-components/src/social-store/types.ts @@ -1,25 +1,60 @@ -export type ConnectionStatus = 'ok' | 'broken'; +export type ConnectionStatus = 'ok' | 'broken' | 'must_reauth'; export type Connection = { - id: string; - service_name: string; - label?: string; + connection_id: string; display_name: string; - external_display?: string; - external_id: string; - external_name?: string; - username: string; enabled: boolean; - done: boolean; - toggleable: boolean; - connection_id: string; - is_healthy?: boolean; - error_code?: string; - can_disconnect: boolean; - profile_picture: string; + external_handle: string; + external_id: string; profile_link: string; + profile_picture: string; + service_label: string; + service_name: string; shared: boolean; status: ConnectionStatus; + wpcom_user_id: number; + + /* DEPRECATED FIELDS */ + /** + * @deprecated + */ + done?: boolean; + /** + * @deprecated Use `status` instead. + */ + error_code?: string; + /** + * @deprecated Use `display_name` instead. + */ + external_display?: string; + /** + * @deprecated Use `external_handle` instead. + */ + external_name?: string; + /** + * @deprecated Use `connection_id` instead. + */ + id?: string; + /** + * @deprecated Use `status` instead. + */ + is_healthy?: boolean; + /** + * @deprecated Use `service_label` instead. + */ + label?: string; + /** + * @deprecated Use `status` instead. + */ + test_success?: boolean; + /** + * @deprecated + */ + toggleable?: boolean; + /** + * @deprecated Use `external_handle` instead. + */ + username?: string; }; export type ConnectionData = { diff --git a/projects/js-packages/publicize-components/src/utils/connections.ts b/projects/js-packages/publicize-components/src/utils/connections.ts deleted file mode 100644 index 5ca5e3daf8266..0000000000000 --- a/projects/js-packages/publicize-components/src/utils/connections.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Connection } from '../social-store/types'; - -export const checkConnectionCode = ( connection: Connection, code: string ) => { - return false === connection.is_healthy && code === ( connection.error_code ?? 'broken' ); -}; diff --git a/projects/js-packages/publicize-components/src/utils/test-factory.js b/projects/js-packages/publicize-components/src/utils/test-factory.js index 7c2b310f63807..f65a22f6fe1d8 100644 --- a/projects/js-packages/publicize-components/src/utils/test-factory.js +++ b/projects/js-packages/publicize-components/src/utils/test-factory.js @@ -13,16 +13,16 @@ jest.mock( '../hooks/use-social-media-connections', () => ( { export const setup = ( { connections = [ - { service_name: 'twitter', connection_id: '1', display_name: 'Twitter', can_disconnect: true }, + { service_name: 'twitter', connection_id: '1', display_name: 'Twitter' }, { service_name: 'facebook', connection_id: '2', display_name: 'Facebook', - can_disconnect: true, }, ], getDeletingConnections = [], getUpdatingConnections = [], + canUserManageConnection = true, } = {} ) => { let storeSelect; renderHook( () => useSelect( select => ( storeSelect = select( store ) ) ) ); @@ -36,6 +36,10 @@ export const setup = ( { .mockReset() .mockReturnValue( getUpdatingConnections ); const stubGetKeyringResult = jest.spyOn( storeSelect, 'getKeyringResult' ).mockReset(); + jest + .spyOn( storeSelect, 'canUserManageConnection' ) + .mockReset() + .mockReturnValue( canUserManageConnection ); const { result: dispatch } = renderHook( () => useDispatch( store ) ); const stubDeleteConnectionById = jest diff --git a/projects/js-packages/publicize-components/src/utils/test-utils.js b/projects/js-packages/publicize-components/src/utils/test-utils.js index fa2f326be7bc6..b502817d8f05c 100644 --- a/projects/js-packages/publicize-components/src/utils/test-utils.js +++ b/projects/js-packages/publicize-components/src/utils/test-utils.js @@ -33,34 +33,28 @@ export const testPost = { export const connections = [ { - id: '123456789', service_name: 'facebook', display_name: 'Some name', profile_picture: 'https://wordpress.com/some-url-of-a-picture', - username: 'username', + external_handle: 'username', enabled: false, connection_id: '987654321', - test_success: true, }, { - id: '234567891', service_name: 'tumblr', display_name: 'Some name', profile_picture: 'https://wordpress.com/some-url-of-another-picture', - username: 'username', + external_handle: 'username', enabled: false, connection_id: '198765432', - test_success: false, }, { - id: '345678912', service_name: 'mastodon', display_name: 'somename', profile_picture: 'https://wordpress.com/some-url-of-one-more-picture', - username: '@somename@mastodon.social', + external_handle: '@somename@mastodon.social', enabled: false, connection_id: '219876543', - test_success: 'must_reauth', }, ]; diff --git a/projects/js-packages/script-data/changelog/add-wpcom-data-for-current-user b/projects/js-packages/script-data/changelog/add-wpcom-data-for-current-user new file mode 100644 index 0000000000000..1c4d1fd6232c3 --- /dev/null +++ b/projects/js-packages/script-data/changelog/add-wpcom-data-for-current-user @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Added wpcom data for current user diff --git a/projects/js-packages/script-data/src/types.ts b/projects/js-packages/script-data/src/types.ts index 03d420fdfe7cd..596cdc642eb97 100644 --- a/projects/js-packages/script-data/src/types.ts +++ b/projects/js-packages/script-data/src/types.ts @@ -33,6 +33,10 @@ export interface SiteData extends PublicSiteData, Partial< AdminSiteData > {} export interface CurrentUserData { id: number; display_name: string; + wpcom?: { + ID: number; + login: string; + }; } export interface UserData { diff --git a/projects/packages/publicize/.phan/baseline.php b/projects/packages/publicize/.phan/baseline.php index 73ac3608fa9a5..b819017a9a146 100644 --- a/projects/packages/publicize/.phan/baseline.php +++ b/projects/packages/publicize/.phan/baseline.php @@ -11,13 +11,13 @@ // # Issue statistics: // PhanPluginDuplicateConditionalNullCoalescing : 6 occurrences // PhanTypeMismatchArgument : 6 occurrences + // PhanPluginMixedKeyNoKey : 3 occurrences // PhanTypeMismatchArgumentNullable : 3 occurrences + // PhanUndeclaredClassMethod : 3 occurrences // PhanDeprecatedFunction : 2 occurrences - // PhanPluginMixedKeyNoKey : 2 occurrences // PhanPossiblyUndeclaredVariable : 2 occurrences // PhanTypeMismatchReturnProbablyReal : 2 occurrences // PhanTypeMissingReturn : 2 occurrences - // PhanUndeclaredClassMethod : 2 occurrences // PhanImpossibleCondition : 1 occurrence // PhanNoopNew : 1 occurrence // PhanParamSignatureMismatch : 1 occurrence @@ -29,19 +29,19 @@ // PhanTypeMismatchDefault : 1 occurrence // PhanTypeMismatchDimFetch : 1 occurrence // PhanTypeMismatchReturn : 1 occurrence - // PhanUndeclaredFunction : 1 occurrence + // PhanTypeSuspiciousNonTraversableForeach : 1 occurrence // PhanUndeclaredMethod : 1 occurrence // Currently, file_suppressions and directory_suppressions are the only supported suppressions 'file_suppressions' => [ + 'src/class-connections.php' => ['PhanUndeclaredClassMethod', 'PhanUndeclaredMethod'], 'src/class-keyring-helper.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault'], 'src/class-publicize-base.php' => ['PhanImpossibleCondition', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanSuspiciousMagicConstant', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturn'], 'src/class-publicize-setup.php' => ['PhanNoopNew', 'PhanTypeMismatchArgument'], 'src/class-publicize-ui.php' => ['PhanPluginDuplicateExpressionAssignmentOperation', 'PhanTypeMismatchReturnProbablyReal'], 'src/class-publicize.php' => ['PhanParamSignatureMismatch', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgument', 'PhanTypeMissingReturn'], 'src/class-rest-controller.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnProbablyReal'], - 'src/rest-api/class-base-controller.php' => ['PhanUndeclaredClassMethod', 'PhanUndeclaredFunction'], - 'src/rest-api/class-connections-controller.php' => ['PhanPluginMixedKeyNoKey', 'PhanUndeclaredMethod'], + 'src/rest-api/class-connections-controller.php' => ['PhanPluginMixedKeyNoKey', 'PhanTypeSuspiciousNonTraversableForeach'], 'src/rest-api/class-connections-post-field.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'src/social-image-generator/class-post-settings.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'src/social-image-generator/class-rest-settings-controller.php' => ['PhanPluginMixedKeyNoKey'], diff --git a/projects/packages/publicize/.phan/config.php b/projects/packages/publicize/.phan/config.php index 075dd16643b9e..d60576709a738 100644 --- a/projects/packages/publicize/.phan/config.php +++ b/projects/packages/publicize/.phan/config.php @@ -13,6 +13,7 @@ return make_phan_config( dirname( __DIR__ ), array( + '+stubs' => array( 'wpcom' ), 'parse_file_list' => array( // Reference files to handle code checking for stuff from Jetpack-the-plugin or other in-monorepo plugins. // Wherever feasible we should really clean up this sort of thing instead of adding stuff here. diff --git a/projects/packages/publicize/changelog/fix-social-connections-list-feature-check b/projects/packages/publicize/changelog/fix-social-connections-list-feature-check new file mode 100644 index 0000000000000..db871891de374 --- /dev/null +++ b/projects/packages/publicize/changelog/fix-social-connections-list-feature-check @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Social | Fix feature check for social connections list initial state diff --git a/projects/packages/publicize/changelog/social-unified-connections-management b/projects/packages/publicize/changelog/social-unified-connections-management new file mode 100644 index 0000000000000..03f5d101125bf --- /dev/null +++ b/projects/packages/publicize/changelog/social-unified-connections-management @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Social | Unify connections management API schema diff --git a/projects/packages/publicize/src/class-connections.php b/projects/packages/publicize/src/class-connections.php new file mode 100644 index 0000000000000..6d186ed0e09c0 --- /dev/null +++ b/projects/packages/publicize/src/class-connections.php @@ -0,0 +1,405 @@ + 'blog' ) ); + } else { + + $ignore_cache = $args['ignore_cache'] ?? false; + + $connections = get_transient( self::CONNECTIONS_TRANSIENT ); + + if ( $ignore_cache || false === $connections ) { + $connections = self::fetch_and_cache_connections(); + } + } + + // Let us add the deprecated fields for now. + // TODO: Remove this after https://github.com/Automattic/jetpack/pull/40539 is merged. + $connections = self::retain_deprecated_fields( $connections ); + + return $connections; + } + + /** + * Get a connection by connection_id. + * + * @param string $connection_id Connection ID. + * + * @return array|null + */ + public static function get_by_id( $connection_id ) { + + $connections = self::get_all(); + + foreach ( $connections as $connection ) { + if ( $connection['connection_id'] === $connection_id ) { + return $connection; + } + } + + return null; + } + + /** + * Get all connections for the current user. + * + * @param array $args Arguments. Same as self::get_all(). + * + * @see Automattic\Jetpack\Publicize\Connections::get_all() + * + * @return array + */ + public static function get_all_for_user( $args = array() ) { + $connections = self::get_all( $args ); + + $connections_for_user = array(); + + foreach ( $connections as $connection ) { + + if ( $connection['shared'] || self::user_owns_connection( $connection ) ) { + $connections_for_user[] = $connection; + } + } + + return $connections_for_user; + } + + /** + * Whether the current user owns a connection. + * + * @param array $connection The connection. + * @param int $user_id The user ID. Defaults to the current user. + * + * @return bool + */ + public static function user_owns_connection( $connection, $user_id = null ) { + if ( Publicize_Utils::is_wpcom() ) { + $wpcom_user_id = get_current_user_id(); + } else { + + $wpcom_user_data = ( new Connection\Manager() )->get_connected_user_data( $user_id ); + + $wpcom_user_id = ! empty( $wpcom_user_data['ID'] ) ? $wpcom_user_data['ID'] : null; + } + + return $wpcom_user_id && $connection['wpcom_user_id'] === $wpcom_user_id; + } + + /** + * Retain deprecated fields. + * + * @param array $connections Connections. + * @return array + */ + private static function retain_deprecated_fields( $connections ) { + return array_map( + function ( $connection ) { + + $owns_connection = self::user_owns_connection( $connection ); + + $connection = array_merge( + $connection, + array( + 'external_display' => $connection['display_name'], + 'can_disconnect' => current_user_can( 'edit_others_posts' ) || $owns_connection, + 'label' => $connection['service_label'], + ) + ); + + if ( 'bluesky' === $connection['service_name'] ) { + $connection['external_name'] = $connection['external_handle']; + } + + return $connection; + }, + $connections + ); + } + + /** + * Fetch connections from the REST API and cache them. + * + * @return array + */ + public static function fetch_and_cache_connections() { + $connections = self::fetch_site_connections(); + + if ( is_array( $connections ) ) { + if ( ! set_transient( self::CONNECTIONS_TRANSIENT, $connections, HOUR_IN_SECONDS * 4 ) ) { + // If the transient has beeen set in another request, the call to set_transient can fail. + // If so, we can delete the transient and try again. + self::clear_cache(); + + set_transient( self::CONNECTIONS_TRANSIENT, $connections, HOUR_IN_SECONDS * 4 ); + } + } + + return $connections; + } + + /** + * Fetch connections for the site from WPCOM REST API. + * + * @return array + */ + public static function fetch_site_connections() { + $proxy = new Proxy_Requests( 'publicize/connections' ); + + $request = new WP_REST_Request( 'GET', '/wpcom/v2/publicize/connections' ); + + $connections = $proxy->proxy_request_to_wpcom_as_blog( $request ); + + if ( is_wp_error( $connections ) ) { + // @todo log error. + return array(); + } + + return $connections; + } + + /** + * Get all connections. Meant to be called directly only on WPCOM. + * + * @param array $args Arguments + * - 'test_connections': bool Whether to run connection tests. + * - 'context': enum('blog', 'user') Whether to include connections for the current blog or user. + * + * @return array + */ + public static function wpcom_get_connections( $args = array() ) { + // Ensure that we are on WPCOM. + Publicize_Utils::assert_is_wpcom( __METHOD__ ); + + /** + * Publicize instance. + */ + global $publicize; + + $items = array(); + + $run_tests = $args['test_connections'] ?? false; + + $test_results = $run_tests ? self::get_test_status() : array(); + + $service_connections = $publicize->get_all_connections_for_blog_id( get_current_blog_id() ); + + $context = $args['context'] ?? 'user'; + + foreach ( $service_connections as $service_name => $connections ) { + foreach ( $connections as $connection ) { + $connection_id = $publicize->get_connection_id( $connection ); + + $item = self::wpcom_prepare_connection_data( $connection, $service_name ); + + $item['status'] = $test_results[ $connection_id ] ?? null; + + // For blog context, return all connections. + // Otherwise, return only connections owned by the user and the shared ones. + if ( 'blog' === $context || $item['shared'] || self::user_owns_connection( $item ) ) { + $items[] = $item; + } + } + } + + return $items; + } + + /** + * Filters out data based on ?_fields= request parameter + * + * @param mixed $connection Connection to prepare. + * @param string $service_name Service name. + * + * @return array + */ + public static function wpcom_prepare_connection_data( $connection, $service_name ) { + // Ensure that we are on WPCOM. + Publicize_Utils::assert_is_wpcom( __METHOD__ ); + + /** + * Publicize instance. + */ + global $publicize; + + $connection_id = $publicize->get_connection_id( $connection ); + + $connection_meta = $publicize->get_connection_meta( $connection ); + $connection_data = $connection_meta['connection_data']; + + return array( + 'connection_id' => (string) $connection_id, + 'display_name' => (string) $publicize->get_display_name( $service_name, $connection ), + 'external_handle' => (string) $publicize->get_external_handle( $service_name, $connection ), + 'external_id' => $connection_meta['external_id'] ?? '', + 'profile_link' => (string) $publicize->get_profile_link( $service_name, $connection ), + 'profile_picture' => (string) $publicize->get_profile_picture( $connection ), + 'service_label' => (string) Publicize::get_service_label( $service_name ), + 'service_name' => $service_name, + 'shared' => ! $connection_data['user_id'], + 'wpcom_user_id' => (int) $connection_data['user_id'], + + // Deprecated fields. + 'id' => (string) $publicize->get_connection_unique_id( $connection ), + 'username' => $publicize->get_username( $service_name, $connection ), + 'profile_display_name' => ! empty( $connection_meta['profile_display_name'] ) ? $connection_meta['profile_display_name'] : '', + // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual -- We expect an integer, but do loose comparison below in case some other type is stored. + 'global' => 0 == $connection_data['user_id'], + + ); + } + + /** + * Create a connection. Meant to be called directly only on WPCOM. + * + * @param mixed $input Input data. + * + * @return string|WP_Error Connection ID or WP_Error. + */ + public static function wpcom_create_connection( $input ) { + // Ensure that we are on WPCOM. + Publicize_Utils::assert_is_wpcom( __METHOD__ ); + + require_lib( 'social-connections-rest-helper' ); + + $connections_helper = \Social_Connections_Rest_Helper::init(); + + $result = $connections_helper->create_publicize_connection( $input ); + + if ( is_wp_error( $result ) ) { + return $result; + } + + if ( ! isset( $result['ID'] ) ) { + return new WP_Error( + 'wpcom_connection_creation_failed', + __( 'Something went wrong while creating a connection.', 'jetpack-publicize-pkg' ) + ); + } + + return (string) $result['ID']; + } + + /** + * Update a connection. Meant to be called directly only on WPCOM. + * + * @param string $connection_id Connection ID. + * @param mixed $input Input data. + * + * @return string|WP_Error Connection ID or WP_Error. + */ + public static function wpcom_update_connection( $connection_id, $input ) { + // Ensure that we are on WPCOM. + Publicize_Utils::assert_is_wpcom( __METHOD__ ); + + require_lib( 'social-connections-rest-helper' ); + $connections_helper = \Social_Connections_Rest_Helper::init(); + + $result = $connections_helper->update_connection( $connection_id, $input ); + + if ( is_wp_error( $result ) ) { + return $result; + } + + if ( ! $result ) { + return new WP_Error( + 'wpcom_connection_updation_failed', + __( 'Something went wrong while updating the connection.', 'jetpack-publicize-pkg' ) + ); + } + + return (string) $connection_id; + } + + /** + * Delete a connection. Meant to be called directly only on WPCOM. + * + * @param string $connection_id Connection ID. + * + * @return bool|WP_Error + */ + public static function wpcom_delete_connection( $connection_id ) { + // Ensure that we are on WPCOM. + Publicize_Utils::assert_is_wpcom( __METHOD__ ); + + require_lib( 'social-connections-rest-helper' ); + $connections_helper = \Social_Connections_Rest_Helper::init(); + + $result = $connections_helper->delete_publicize_connection( $connection_id ); + + if ( is_wp_error( $result ) ) { + return $result; + } + + if ( ! $result ) { + return new WP_Error( + 'wpcom_connection_deletion_failed', + __( 'Something went wrong while deleting the connection.', 'jetpack-publicize-pkg' ) + ); + } + + return true; + } + + /** + * Get the connections test status. + * + * @return array + */ + public static function get_test_status() { + /** + * Publicize instance. + * + * @var \Automattic\Jetpack\Publicize\Publicize $publicize + */ + global $publicize; + + $test_results = $publicize->get_publicize_conns_test_results(); + + $test_results_map = array(); + + foreach ( $test_results as $test_result ) { + $result = $test_result['connectionTestPassed']; + if ( 'must_reauth' !== $result ) { + $result = $test_result['connectionTestPassed'] ? 'ok' : 'broken'; + } + $test_results_map[ $test_result['connectionID'] ] = $result; + } + + return $test_results_map; + } + + /** + * Clear the connections cache. + */ + public static function clear_cache() { + delete_transient( self::CONNECTIONS_TRANSIENT ); + } +} diff --git a/projects/packages/publicize/src/class-publicize-base.php b/projects/packages/publicize/src/class-publicize-base.php index 076abd34acdc6..d707968be7b2f 100644 --- a/projects/packages/publicize/src/class-publicize-base.php +++ b/projects/packages/publicize/src/class-publicize-base.php @@ -556,8 +556,8 @@ public function get_profile_link( $service_name, $connection ) { public function get_display_name( $service_name, $connection ) { $cmeta = $this->get_connection_meta( $connection ); - if ( 'mastodon' === $service_name && isset( $cmeta['external_name'] ) ) { - return $cmeta['external_name']; + if ( 'mastodon' === $service_name && isset( $cmeta['external_display'] ) ) { + return $cmeta['external_display']; } if ( isset( $cmeta['connection_data']['meta']['display_name'] ) ) { @@ -1015,7 +1015,6 @@ public function get_filtered_connection_data( $selected_post_id = null ) { 'service_name' => $service_name, 'shared' => ! $connection_data['user_id'], 'status' => null, - 'user_id' => (int) $connection_data['user_id'], // Deprecated fields. 'id' => $connection_id, @@ -1024,6 +1023,7 @@ public function get_filtered_connection_data( $selected_post_id = null ) { 'done' => $done, 'toggleable' => $toggleable, 'global' => 0 == $connection_data['user_id'], // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual,WordPress.PHP.StrictComparisons.LooseComparison -- Other types can be used at times. + 'user_id' => (int) $connection_data['user_id'], ); } } diff --git a/projects/packages/publicize/src/class-publicize-script-data.php b/projects/packages/publicize/src/class-publicize-script-data.php index 3035e3e6b1d71..c40d5f51a31c9 100644 --- a/projects/packages/publicize/src/class-publicize-script-data.php +++ b/projects/packages/publicize/src/class-publicize-script-data.php @@ -21,8 +21,6 @@ */ class Publicize_Script_Data { - const SERVICES_TRANSIENT = 'jetpack_social_services_list'; - /** * Get the publicize instance - properly typed * @@ -75,9 +73,32 @@ public static function set_admin_script_data( $data ) { $data['site']['host'] = ( new Host() )->get_known_host_guess(); } + self::set_wpcom_user_data( $data['user']['current_user'] ); + return $data; } + /** + * Set wpcom user data. + * + * @param array $user_data The user data. + */ + private static function set_wpcom_user_data( &$user_data ) { + if ( ( new Host() )->is_wpcom_simple() ) { + $wpcom_user_data = array( + 'ID' => get_current_user_id(), + 'login' => wp_get_current_user()->user_login, + ); + } else { + $wpcom_user_data = ( new Manager() )->get_connected_user_data(); + } + + $user_data['wpcom'] = array_merge( + $user_data['wpcom'] ?? array(), + $wpcom_user_data ? $wpcom_user_data : array() + ); + } + /** * Get the script data for admin UI. * @@ -163,8 +184,7 @@ public static function get_store_initial_state() { return array( 'connectionData' => array( - // We do not have this method on WPCOM Publicize class yet. - 'connections' => ! $is_wpcom ? self::publicize()->get_all_connections_for_user() : array(), + 'connections' => self::has_feature_flag( 'connections-management' ) ? Connections::get_all_for_user() : array(), ), 'shareStatus' => $share_status, ); @@ -247,17 +267,24 @@ public static function get_api_paths() { $is_wpcom = ( new Host() )->is_wpcom_platform(); + $commom_paths = array( + 'refreshConnections' => '/wpcom/v2/publicize/connections?test_connections=1', + ); + + $specific_paths = array(); + if ( $is_wpcom ) { - return array( - 'refreshConnections' => '/wpcom/v2/publicize/connection-test-results', - 'resharePost' => '/wpcom/v2/posts/{postId}/publicize', + + $specific_paths = array( + 'resharePost' => '/wpcom/v2/posts/{postId}/publicize', + ); + } else { + $specific_paths = array( + 'resharePost' => '/jetpack/v4/publicize/{postId}', ); } - return array( - 'refreshConnections' => '/jetpack/v4/publicize/connections?test_connections=1', - 'resharePost' => '/jetpack/v4/publicize/{postId}', - ); + return array_merge( $commom_paths, $specific_paths ); } /** diff --git a/projects/packages/publicize/src/class-publicize-utils.php b/projects/packages/publicize/src/class-publicize-utils.php index 77f5272f0ba93..ef31f3c8ee24d 100644 --- a/projects/packages/publicize/src/class-publicize-utils.php +++ b/projects/packages/publicize/src/class-publicize-utils.php @@ -87,4 +87,26 @@ public static function is_connected() { public static function is_publicize_active() { return ( new Modules() )->is_active( 'publicize' ); } + + /** + * Check if we are on WPCOM. + * + * @return bool + */ + public static function is_wpcom() { + return ( new Host() )->is_wpcom_simple(); + } + + /** + * Assert that the method is only called on WPCOM. + * + * @param string $method The method name. + * + * @throws \Exception If the method is not called on WPCOM. + */ + public static function assert_is_wpcom( $method ) { + if ( ! self::is_wpcom() ) { + throw new \Exception( esc_html( "Method $method can only be called on WordPress.com." ) ); + } + } } diff --git a/projects/packages/publicize/src/class-publicize.php b/projects/packages/publicize/src/class-publicize.php index beb043db17f16..0a444a86bf5a8 100644 --- a/projects/packages/publicize/src/class-publicize.php +++ b/projects/packages/publicize/src/class-publicize.php @@ -145,6 +145,10 @@ public function disconnect( $service_name, $connection_id, $_blog_id = false, $_ * @return true */ public function receive_updated_publicize_connections( $publicize_connections ) { + + // Populate the cache with the new data. + Connections::get_all( array( 'ignore_cache' => true ) ); + $expiry = 3600 * 4; if ( ! set_transient( self::JETPACK_SOCIAL_CONNECTIONS_TRANSIENT, $publicize_connections, $expiry ) ) { // If the transient has beeen set in another request, the call to set_transient can fail. If so, diff --git a/projects/packages/publicize/src/class-services.php b/projects/packages/publicize/src/class-services.php index 26e49b096b40b..b43c6af0aae0a 100644 --- a/projects/packages/publicize/src/class-services.php +++ b/projects/packages/publicize/src/class-services.php @@ -26,11 +26,9 @@ class Services { public static function get_all( $force_refresh = false ) { if ( defined( 'IS_WPCOM' ) && constant( 'IS_WPCOM' ) ) { if ( function_exists( 'require_lib' ) ) { - // @phan-suppress-next-line PhanUndeclaredFunction - phan is dumb not to see the function_exists check. require_lib( 'external-connections' ); } - // @phan-suppress-next-line PhanUndeclaredClassMethod - We are here because we are on WPCOM. $external_connections = \WPCOM_External_Connections::init(); $services = array_values( $external_connections->get_external_services_list( 'publicize', get_current_blog_id() ) ); diff --git a/projects/packages/publicize/src/rest-api/class-base-controller.php b/projects/packages/publicize/src/rest-api/class-base-controller.php index 86ca5c8e40a52..fd0f7a870a759 100644 --- a/projects/packages/publicize/src/rest-api/class-base-controller.php +++ b/projects/packages/publicize/src/rest-api/class-base-controller.php @@ -7,7 +7,8 @@ namespace Automattic\Jetpack\Publicize\REST_API; -use Automattic\Jetpack\Status\Host; +use Automattic\Jetpack\Publicize\Connections; +use Automattic\Jetpack\Publicize\Publicize_Utils; use WP_Error; use WP_REST_Controller; use WP_REST_Request; @@ -32,22 +33,13 @@ public function __construct() { $this->wpcom_is_wpcom_only_endpoint = true; } - /** - * Check if we are on WPCOM. - * - * @return bool - */ - public static function is_wpcom() { - return ( new Host() )->is_wpcom_simple(); - } - /** * Check if the request is authorized for the blog. * * @return bool */ protected static function is_authorized_blog_request() { - if ( self::is_wpcom() && is_jetpack_site( get_current_blog_id() ) ) { + if ( Publicize_Utils::is_wpcom() && is_jetpack_site( get_current_blog_id() ) ) { $jp_auth_endpoint = new \WPCOM_REST_API_V2_Endpoint_Jetpack_Auth(); @@ -82,10 +74,9 @@ public function prepare_item_for_response( $item, $request ) { /** * Verify that user can access Publicize data * - * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error */ - public function get_items_permissions_check( $request ) {// phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + protected function publicize_permissions_check() { global $publicize; @@ -111,4 +102,23 @@ public function get_items_permissions_check( $request ) {// phpcs:ignore Variabl array( 'status' => rest_authorization_required_code() ) ); } + + /** + * Check whether the request is allowed to manage (update/delete) a connection. + * + * @param WP_REST_Request $request Full details about the request. + * @return bool True if the request can manage connection, false otherwise. + */ + protected function manage_connection_permission_check( $request ) { + // Editors and above can manage any connection. + if ( current_user_can( 'edit_others_posts' ) ) { + return true; + } + + $connection_id = $request->get_param( 'connection_id' ); + + $connection = Connections::get_by_id( $connection_id ); + + return Connections::user_owns_connection( $connection ); + } } diff --git a/projects/packages/publicize/src/rest-api/class-connections-controller.php b/projects/packages/publicize/src/rest-api/class-connections-controller.php index 23725b12a33a1..0e33f29499292 100644 --- a/projects/packages/publicize/src/rest-api/class-connections-controller.php +++ b/projects/packages/publicize/src/rest-api/class-connections-controller.php @@ -7,9 +7,10 @@ namespace Automattic\Jetpack\Publicize\REST_API; -use Automattic\Jetpack\Connection\Client; -use Automattic\Jetpack\Connection\Manager; -use Automattic\Jetpack\Publicize\Publicize; +use Automattic\Jetpack\Connection\Traits\WPCOM_REST_API_Proxy_Request; +use Automattic\Jetpack\Publicize\Connections; +use Automattic\Jetpack\Publicize\Publicize_Utils; +use WP_Error; use WP_REST_Request; use WP_REST_Response; use WP_REST_Server; @@ -19,12 +20,18 @@ */ class Connections_Controller extends Base_Controller { + use WPCOM_REST_API_Proxy_Request; + /** * Constructor. */ public function __construct() { parent::__construct(); - $this->namespace = 'wpcom/v2'; + + $this->base_api_path = 'wpcom'; + $this->version = 'v2'; + + $this->namespace = "{$this->base_api_path}/{$this->version}"; $this->rest_base = 'publicize/connections'; $this->allow_requests_as_blog = true; @@ -51,6 +58,58 @@ public function register_routes() { ), ), ), + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'create_item' ), + 'permission_callback' => array( $this, 'create_item_permissions_check' ), + 'args' => array( + 'keyring_connection_ID' => array( + 'description' => __( 'Keyring connection ID.', 'jetpack-publicize-pkg' ), + 'type' => 'integer', + 'required' => true, + ), + 'external_user_ID' => array( + 'description' => __( 'External User Id - in case of services like Facebook.', 'jetpack-publicize-pkg' ), + 'type' => 'string', + ), + 'shared' => array( + 'description' => __( 'Whether the connection is shared with other users.', 'jetpack-publicize-pkg' ), + 'type' => 'boolean', + ), + ), + ), + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + + register_rest_route( + $this->namespace, + '/' . $this->rest_base . '/(?P[0-9]+)', + array( + 'args' => array( + 'connection_id' => array( + 'description' => __( 'Unique identifier for the connection.', 'jetpack-publicize-pkg' ), + 'type' => 'string', + 'required' => true, + ), + ), + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'update_item' ), + 'permission_callback' => array( $this, 'update_item_permissions_check' ), + 'args' => array( + 'shared' => array( + 'description' => __( 'Whether the connection is shared with other users.', 'jetpack-publicize-pkg' ), + 'type' => 'boolean', + ), + ), + ), + array( + 'methods' => WP_REST_Server::DELETABLE, + 'callback' => array( $this, 'delete_item' ), + 'permission_callback' => array( $this, 'delete_item_permissions_check' ), + + ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); @@ -164,173 +223,267 @@ public static function get_the_item_schema() { 'enum' => array( 'ok', 'broken', + 'must_reauth', null, ), ), - 'user_id' => array( + 'wpcom_user_id' => array( 'type' => 'integer', - 'description' => __( 'ID of the user the connection belongs to. It is the user ID on wordpress.com', 'jetpack-publicize-pkg' ), + 'description' => __( 'wordpress.com ID of the user the connection belongs to.', 'jetpack-publicize-pkg' ), ), ); } /** - * Get all connections. Meant to be called directly only on WPCOM. + * Verify that the request has access to connectoins list. + * + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error + */ + public function get_items_permissions_check( $request ) {// phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + return $this->publicize_permissions_check(); + } + + /** + * Get list of connected Publicize connections. * - * @param array $args Arguments - * - 'test_connections': bool Whether to run connection tests. - * - 'scope': enum('site', 'user') Which connections to include. + * @param WP_REST_Request $request Full details about the request. * - * @return array + * @return WP_REST_Response suitable for 1-page collection */ - protected static function get_all_connections( $args = array() ) { - /** - * Publicize instance. - */ - global $publicize; + public function get_items( $request ) { + if ( Publicize_Utils::is_wpcom() ) { + $args = array( + 'context' => self::is_authorized_blog_request() ? 'blog' : 'user', + 'test_connections' => $request->get_param( 'test_connections' ), + ); - $items = array(); + $connections = Connections::wpcom_get_connections( $args ); + } else { + $connections = $this->proxy_request_to_wpcom_as_user( $request ); + } - $run_tests = $args['test_connections'] ?? false; + if ( is_wp_error( $connections ) ) { + return $connections; + } - $test_results = $run_tests ? self::get_connections_test_status() : array(); + $items = array(); - // If a (Jetpack) blog request, return all the connections for that site. - if ( self::is_authorized_blog_request() ) { - $service_connections = $publicize->get_all_connections_for_blog_id( get_current_blog_id() ); - } else { - $service_connections = (array) $publicize->get_services( 'connected' ); - } + foreach ( $connections as $item ) { + $data = $this->prepare_item_for_response( $item, $request ); - foreach ( $service_connections as $service_name => $connections ) { - foreach ( $connections as $connection ) { - - $connection_id = $publicize->get_connection_id( $connection ); - - $connection_meta = $publicize->get_connection_meta( $connection ); - $connection_data = $connection_meta['connection_data']; - - $items[] = array( - 'connection_id' => (string) $connection_id, - 'display_name' => (string) $publicize->get_display_name( $service_name, $connection ), - 'external_handle' => (string) $publicize->get_external_handle( $service_name, $connection ), - 'external_id' => $connection_meta['external_id'] ?? '', - 'profile_link' => (string) $publicize->get_profile_link( $service_name, $connection ), - 'profile_picture' => (string) $publicize->get_profile_picture( $connection ), - 'service_label' => (string) Publicize::get_service_label( $service_name ), - 'service_name' => $service_name, - 'shared' => ! $connection_data['user_id'], - 'status' => $test_results[ $connection_id ] ?? null, - 'user_id' => (int) $connection_data['user_id'], - - // Deprecated fields. - 'id' => (string) $publicize->get_connection_unique_id( $connection ), - 'username' => $publicize->get_username( $service_name, $connection ), - 'profile_display_name' => ! empty( $connection_meta['profile_display_name'] ) ? $connection_meta['profile_display_name'] : '', - // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual -- We expect an integer, but do loose comparison below in case some other type is stored. - 'global' => 0 == $connection_data['user_id'], - - ); - } + $items[] = $this->prepare_response_for_collection( $data ); } - return $items; + $response = rest_ensure_response( $items ); + $response->header( 'X-WP-Total', (string) count( $items ) ); + $response->header( 'X-WP-TotalPages', '1' ); + + return $response; } /** - * Get a list of publicize connections. - * - * @param array $args Arguments. + * Checks if a given request has access to create a connection. * - * @see Automattic\Jetpack\Publicize\REST_API\Connections_Controller::get_all_connections() + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise. + */ + public function create_item_permissions_check( $request ) {// phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + $permissions = parent::publicize_permissions_check(); + + if ( is_wp_error( $permissions ) ) { + return $permissions; + } + + return current_user_can( 'publish_posts' ); + } + + /** + * Creates a new connection. * - * @return array + * @param WP_REST_Request $request Full details about the request. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ - public static function get_connections( $args = array() ) { - if ( self::is_wpcom() ) { - return self::get_all_connections( $args ); + public function create_item( $request ) { + if ( Publicize_Utils::is_wpcom() ) { + + $input = array( + 'keyring_connection_ID' => $request->get_param( 'keyring_connection_ID' ), + 'shared' => $request->get_param( 'shared' ), + ); + + $external_user_id = $request->get_param( 'external_user_ID' ); + if ( ! empty( $external_user_id ) ) { + $input['external_user_ID'] = $external_user_id; + } + + $result = Connections::wpcom_create_connection( $input ); + + if ( is_wp_error( $result ) ) { + return $result; + } + + $connection = Connections::get_by_id( $result ); + + $response = $this->prepare_item_for_response( $connection, $request ); + $response = rest_ensure_response( $response ); + + $response->set_status( 201 ); + + return $response; + } - $site_id = Manager::get_site_id( true ); - if ( ! $site_id ) { - return array(); + $response = $this->proxy_request_to_wpcom_as_user( $request, '', array( 'timeout' => 120 ) ); + + if ( is_wp_error( $response ) ) { + return new WP_Error( + 'jp_connection_update_failed', + __( 'Something went wrong while creating a connection.', 'jetpack-publicize-pkg' ), + $response->get_error_message() + ); } - $path = add_query_arg( - array( - 'test_connections' => $args['test_connections'] ?? false, - ), - sprintf( '/sites/%d/publicize/connections', $site_id ) - ); + $response = rest_ensure_response( $response ); - $blog_or_user = ( $args['scope'] ?? '' ) === 'site' ? 'blog' : 'user'; + $response->set_status( 201 ); - $callback = array( Client::class, "wpcom_json_api_request_as_{$blog_or_user}" ); + return $response; + } - $response = call_user_func( $callback, $path, 'v2', array( 'method' => 'GET' ), null, 'wpcom' ); + /** + * Checks if a given request has access to update a connection. + * + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise. + */ + public function update_item_permissions_check( $request ) { + $permissions = parent::publicize_permissions_check(); - if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { - // TODO log error. - return array(); + if ( is_wp_error( $permissions ) ) { + return $permissions; } - $body = wp_remote_retrieve_body( $response ); + // If the user cannot manage the connection, they can't update it either. + if ( ! $this->manage_connection_permission_check( $request ) ) { + return new WP_Error( + 'rest_cannot_edit', + __( 'Sorry, you are not allowed to update this connection.', 'jetpack-publicize-pkg' ), + array( 'status' => rest_authorization_required_code() ) + ); + } - $items = json_decode( $body, true ); + // If the connection is being marked/unmarked as shared. + if ( $request->has_param( 'shared' ) ) { + // Only editors and above can mark a connection as shared. + return current_user_can( 'edit_others_posts' ); + } - return $items ? $items : array(); + return current_user_can( 'publish_posts' ); } /** - * Get list of connected Publicize connections. + * Update a connection. * * @param WP_REST_Request $request Full details about the request. - * - * @return WP_REST_Response suitable for 1-page collection + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ - public function get_items( $request ) { - $items = array(); + public function update_item( $request ) { + $connection_id = $request->get_param( 'connection_id' ); - // On Jetpack, we don't want to pass the 'scope' param to get_connections(). - $args = array( - 'test_connections' => $request->get_param( 'test_connections' ), - ); + if ( Publicize_Utils::is_wpcom() ) { - foreach ( self::get_connections( $args ) as $item ) { - $data = $this->prepare_item_for_response( $item, $request ); + $input = array( + 'shared' => $request->get_param( 'shared' ), + ); - $items[] = $this->prepare_response_for_collection( $data ); + $result = Connections::wpcom_update_connection( $connection_id, $input ); + + if ( is_wp_error( $result ) ) { + return $result; + } + + $connection = Connections::get_by_id( $connection_id ); + + $response = $this->prepare_item_for_response( $connection, $request ); + $response = rest_ensure_response( $response ); + + $response->set_status( 201 ); + + return $response; } - $response = rest_ensure_response( $items ); - $response->header( 'X-WP-Total', (string) count( $items ) ); - $response->header( 'X-WP-TotalPages', '1' ); + $response = $this->proxy_request_to_wpcom_as_user( $request, $connection_id, array( 'timeout' => 120 ) ); + + if ( is_wp_error( $response ) ) { + return new WP_Error( + 'jp_connection_updation_failed', + __( 'Something went wrong while updating the connection.', 'jetpack-publicize-pkg' ), + $response->get_error_message() + ); + } + + $response = rest_ensure_response( $response ); + + $response->set_status( 201 ); return $response; } /** - * Get the connections test status. + * Checks if a given request has access to delete a connection. * - * @return array + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise. + */ + public function delete_item_permissions_check( $request ) { + $permissions = parent::publicize_permissions_check(); + + if ( is_wp_error( $permissions ) ) { + return $permissions; + } + + return $this->manage_connection_permission_check( $request ); + } + + /** + * Delete a connection. + * + * @param WP_REST_Request $request Full details about the request. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ - protected static function get_connections_test_status() { - /** - * Publicize instance. - * - * @var \Automattic\Jetpack\Publicize\Publicize $publicize - */ - global $publicize; + public function delete_item( $request ) { + $connection_id = $request->get_param( 'connection_id' ); + + if ( Publicize_Utils::is_wpcom() ) { + + $result = Connections::wpcom_delete_connection( $connection_id ); - $test_results = $publicize->get_publicize_conns_test_results(); + if ( is_wp_error( $result ) ) { + return $result; + } + + $response = rest_ensure_response( $result ); + + $response->set_status( 201 ); + + return $response; + } - $test_results_map = array(); + $response = $this->proxy_request_to_wpcom_as_user( $request, $connection_id, array( 'timeout' => 120 ) ); - foreach ( $test_results as $test_result ) { - // Compare to `true` because the API returns a 'must_reauth' for LinkedIn. - $test_results_map[ $test_result['connectionID'] ] = true === $test_result['connectionTestPassed'] ? 'ok' : 'broken'; + if ( is_wp_error( $response ) ) { + return new WP_Error( + 'jp_connection_deletion_failed', + __( 'Something went wrong while deleting the connection.', 'jetpack-publicize-pkg' ), + $response->get_error_message() + ); } - return $test_results_map; + $response = rest_ensure_response( $response ); + + $response->set_status( 201 ); + + return $response; } } diff --git a/projects/packages/publicize/src/rest-api/class-connections-post-field.php b/projects/packages/publicize/src/rest-api/class-connections-post-field.php index a12047e30d912..647655b211d37 100644 --- a/projects/packages/publicize/src/rest-api/class-connections-post-field.php +++ b/projects/packages/publicize/src/rest-api/class-connections-post-field.php @@ -7,6 +7,7 @@ namespace Automattic\Jetpack\Publicize\REST_API; +use Automattic\Jetpack\Publicize\Connections; use WP_Error; use WP_Post; use WP_REST_Request; @@ -179,6 +180,16 @@ public function get( $post_array, $field_name, $request, $object_type ) { // php $properties = array_keys( $schema['properties'] ); $connections = $publicize->get_filtered_connection_data( $post_id ); + $connections_id_map = array_reduce( + Connections::get_all(), + function ( $map, $connection ) { + $map[ $connection['connection_id'] ] = $connection; + + return $map; + }, + array() + ); + $output_connections = array(); foreach ( $connections as $connection ) { $output_connection = array(); @@ -190,6 +201,7 @@ public function get( $post_array, $field_name, $request, $object_type ) { // php $output_connection['id'] = (string) $connection['unique_id']; $output_connection['can_disconnect'] = current_user_can( 'edit_others_posts' ) || get_current_user_id() === (int) $connection['user_id']; + $output_connection['wpcom_user_id'] = $connections_id_map[ $connection['connection_id'] ]['wpcom_user_id'] ?? 0; $output_connections[] = $output_connection; } diff --git a/projects/packages/publicize/src/rest-api/class-proxy-requests.php b/projects/packages/publicize/src/rest-api/class-proxy-requests.php new file mode 100644 index 0000000000000..58839e5010796 --- /dev/null +++ b/projects/packages/publicize/src/rest-api/class-proxy-requests.php @@ -0,0 +1,31 @@ +rest_base = $rest_base; + $this->base_api_path = $base_api_path; + $this->version = $version; + } +} diff --git a/projects/plugins/jetpack/changelog/fix-social-connections-list-feature-check b/projects/plugins/jetpack/changelog/fix-social-connections-list-feature-check new file mode 100644 index 0000000000000..76c3a4215d02f --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-social-connections-list-feature-check @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Social | Fix publicize error in the editor due to malformed connections data diff --git a/projects/plugins/social/changelog/fix-social-connections-list-feature-check b/projects/plugins/social/changelog/fix-social-connections-list-feature-check new file mode 100644 index 0000000000000..d4868fdf6e0a2 --- /dev/null +++ b/projects/plugins/social/changelog/fix-social-connections-list-feature-check @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix publicize error in the editor due to malformed connections data From 726137d488724cb066de4efdedb77854f910d49e Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Mon, 20 Jan 2025 19:39:18 -0800 Subject: [PATCH 134/420] Fix TS error (#41200) --- .../publicize-components/changelog/fix-ts-errors | 5 +++++ .../src/social-store/selectors/connection-data.ts | 8 +++----- 2 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/fix-ts-errors diff --git a/projects/js-packages/publicize-components/changelog/fix-ts-errors b/projects/js-packages/publicize-components/changelog/fix-ts-errors new file mode 100644 index 0000000000000..32e3ec35bb61d --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/fix-ts-errors @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Fixes a TS error in trunk following a PR merged + + diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts b/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts index ea1a0dc0f6795..9334a870677bb 100644 --- a/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts +++ b/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts @@ -249,13 +249,11 @@ export const canUserManageConnection = createRegistrySelector( return true; } - const { - // @ts-expect-error getUser exists but `core-data` entities are not typed properly. - // Should work fine after https://github.com/WordPress/gutenberg/pull/67668 is released to npm. - getUser, - } = select( coreStore ); + const { getUser } = select( coreStore ); // The user has to be at least an editor to manage the connection. + // @ts-expect-error User object types are wrong, capabilities are boolean, not string. + // See https://github.com/WordPress/gutenberg/pull/68045 return getUser( current_user.id )?.capabilities?.edit_others_posts ?? false; } ); From 914318d4be16531e9e0e69aec20fbadf75dd56ac Mon Sep 17 00:00:00 2001 From: Anna McPhee <30754158+annacmc@users.noreply.github.com> Date: Tue, 21 Jan 2025 16:21:39 +1100 Subject: [PATCH 135/420] Chart Library: Add initial testing infrastructure and PieChart component tests (#41148) * Add dependencies for testing * set up config for tests * create testing file for pie chart with a few edge case tests * mock the ResizeObserver * changelog * simplify pie chart tests for initial setup * update dir from __tests__ to test * add back in src/* for typeRoots in tsconfig --- pnpm-lock.yaml | 94 +++++++++++++++++++ .../charts/changelog/add-chart-library-tests | 4 + projects/js-packages/charts/global.d.ts | 14 +++ projects/js-packages/charts/package.json | 12 ++- .../pie-chart/test/pie-chart.test.tsx | 18 ++++ .../js-packages/charts/tests/jest.config.cjs | 12 +++ .../js-packages/charts/tests/jest.setup.js | 13 +++ 7 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 projects/js-packages/charts/changelog/add-chart-library-tests create mode 100644 projects/js-packages/charts/global.d.ts create mode 100644 projects/js-packages/charts/src/components/pie-chart/test/pie-chart.test.tsx create mode 100644 projects/js-packages/charts/tests/jest.setup.js diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ddebde75a528d..af85123fb0c06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -344,9 +344,15 @@ importers: specifier: 2.5.0 version: 2.5.0 devDependencies: + '@automattic/jetpack-webpack-config': + specifier: workspace:* + version: link:../webpack-config '@babel/core': specifier: 7.26.0 version: 7.26.0 + '@babel/plugin-transform-react-jsx': + specifier: 7.25.9 + version: 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-runtime': specifier: 7.25.9 version: 7.25.9(@babel/core@7.26.0) @@ -359,18 +365,42 @@ importers: '@babel/preset-typescript': specifier: 7.26.0 version: 7.26.0(@babel/core@7.26.0) + '@jest/globals': + specifier: ^29.0.0 + version: 29.7.0 '@storybook/blocks': specifier: 8.4.7 version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) '@storybook/react': specifier: 8.4.7 version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.7.2) + '@testing-library/jest-dom': + specifier: ^6.0.0 + version: 6.5.0 + '@testing-library/react': + specifier: ^14.0.0 + version: 14.3.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/jest': + specifier: ^29.0.0 + version: 29.5.12 '@types/react': specifier: 18.3.18 version: 18.3.18 '@types/react-dom': specifier: 18.3.5 version: 18.3.5(@types/react@18.3.18) + '@types/testing-library__jest-dom': + specifier: ^5.14.9 + version: 5.14.9 + '@wordpress/babel-plugin-import-jsx-pragma': + specifier: 5.14.0 + version: 5.14.0(@babel/core@7.26.0) + '@wordpress/element': + specifier: 6.14.0 + version: 6.14.0 + babel-jest: + specifier: ^29.7.0 + version: 29.7.0(@babel/core@7.26.0) babel-loader: specifier: 9.1.2 version: 9.1.2(@babel/core@7.26.0)(webpack@5.94.0) @@ -7383,6 +7413,10 @@ packages: resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} engines: {node: '>=12'} + '@testing-library/dom@9.3.4': + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} + '@testing-library/jest-dom@6.5.0': resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} @@ -7393,6 +7427,13 @@ packages: peerDependencies: preact: '>=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0' + '@testing-library/react@14.3.1': + resolution: {integrity: sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==} + engines: {node: '>=14'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + '@testing-library/react@16.0.1': resolution: {integrity: sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==} engines: {node: '>=18'} @@ -7637,6 +7678,9 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/testing-library__jest-dom@5.14.9': + resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} + '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} @@ -7976,6 +8020,12 @@ packages: resolution: {integrity: sha512-5/XBRZ7Y731moR/hzZ+/k9tavHMHvshi+IdsJAecgUcqYC45YMLmqOmA4DOzfzCjBkuVvoy+6itMHQ+Q87Gb9g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/babel-plugin-import-jsx-pragma@5.14.0': + resolution: {integrity: sha512-QqceThgNF+S1CPr6UUubaI4BRsd0HnMjeJdKESeO0SNWhVQJU0pYJR4F0qvgwVV3r5WISpktVCU6DV3qaKqPbg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + '@babel/core': ^7.25.7 + '@wordpress/babel-plugin-import-jsx-pragma@5.16.0': resolution: {integrity: sha512-3vRdagepfoIduDX25dzUbsCyE8eZsQGkVIRTrE2Kpi7YBzAzZz8nHPX1arDhIfEZn6QYGt5tIW5yNC8bbALsWQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -8114,6 +8164,10 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@wordpress/element@6.14.0': + resolution: {integrity: sha512-vZPm2ekv9B7fMcv/slyu/p8lV44EPa6RRHOk04ldNUpsrjC6ph6Q4wpuI5WzLEX7p1u71c8ZOuroEuRvdFxMcA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/element@6.16.0': resolution: {integrity: sha512-1Db9jeu7dxil/fJqAiLN5dA6gwoHWcgMSqZJ4dmZ0kMDMs40rtm6o60GFmAQGlrj+mmUvhOHTTwrBdpyfuv4bA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -17880,6 +17934,17 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 + '@testing-library/dom@9.3.4': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.0 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + '@testing-library/jest-dom@6.5.0': dependencies: '@adobe/css-tools': 4.4.1 @@ -17895,6 +17960,16 @@ snapshots: '@testing-library/dom': 8.20.1 preact: 10.22.1 + '@testing-library/react@14.3.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@testing-library/dom': 9.3.4 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 @@ -18157,6 +18232,10 @@ snapshots: '@types/stack-utils@2.0.3': {} + '@types/testing-library__jest-dom@5.14.9': + dependencies: + '@types/jest': 29.5.12 + '@types/tough-cookie@4.0.5': {} '@types/triple-beam@1.3.5': {} @@ -18685,6 +18764,10 @@ snapshots: dependencies: '@babel/runtime': 7.25.7 + '@wordpress/babel-plugin-import-jsx-pragma@5.14.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@wordpress/babel-plugin-import-jsx-pragma@5.16.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -20187,6 +20270,17 @@ snapshots: - webpack - webpack-virtual-modules + '@wordpress/element@6.14.0': + dependencies: + '@babel/runtime': 7.25.7 + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@wordpress/escape-html': 3.16.0 + change-case: 4.1.2 + is-plain-object: 5.0.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@wordpress/element@6.16.0': dependencies: '@babel/runtime': 7.25.7 diff --git a/projects/js-packages/charts/changelog/add-chart-library-tests b/projects/js-packages/charts/changelog/add-chart-library-tests new file mode 100644 index 0000000000000..b34924ff668ef --- /dev/null +++ b/projects/js-packages/charts/changelog/add-chart-library-tests @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Charts: adds dependencies and config for jest testing. Adds some initial tests to pie chart component diff --git a/projects/js-packages/charts/global.d.ts b/projects/js-packages/charts/global.d.ts new file mode 100644 index 0000000000000..7930501819925 --- /dev/null +++ b/projects/js-packages/charts/global.d.ts @@ -0,0 +1,14 @@ +/// + +declare global { + const describe: jest.Describe; + const test: jest.It; + const expect: jest.Expect; + const it: jest.It; + const beforeAll: jest.Lifecycle; + const afterAll: jest.Lifecycle; + const beforeEach: jest.Lifecycle; + const afterEach: jest.Lifecycle; +} + +export {}; diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 883c0dc30697f..a034f75e065c1 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -92,7 +92,17 @@ "tsconfig-paths-webpack-plugin": "4.2.0", "typescript": "5.7.2", "webpack": "^5.88.0", - "webpack-cli": "^5.1.0" + "webpack-cli": "^5.1.0", + "@testing-library/react": "^14.0.0", + "@testing-library/jest-dom": "^6.0.0", + "@types/jest": "^29.0.0", + "@types/testing-library__jest-dom": "^5.14.9", + "@jest/globals": "^29.0.0", + "babel-jest": "^29.7.0", + "@automattic/jetpack-webpack-config": "workspace:*", + "@wordpress/babel-plugin-import-jsx-pragma": "5.14.0", + "@wordpress/element": "6.14.0", + "@babel/plugin-transform-react-jsx": "7.25.9" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0", diff --git a/projects/js-packages/charts/src/components/pie-chart/test/pie-chart.test.tsx b/projects/js-packages/charts/src/components/pie-chart/test/pie-chart.test.tsx new file mode 100644 index 0000000000000..4cb1f0af0d8e4 --- /dev/null +++ b/projects/js-packages/charts/src/components/pie-chart/test/pie-chart.test.tsx @@ -0,0 +1,18 @@ +/** + * @jest-environment jsdom + */ + +import { render } from '@testing-library/react'; +import { ThemeProvider } from '../../../providers/theme'; +import PieChart from '../pie-chart'; + +describe( 'PieChart', () => { + it( 'renders', () => { + const { container } = render( + + + + ); + expect( container ).toBeTruthy(); + } ); +} ); diff --git a/projects/js-packages/charts/tests/jest.config.cjs b/projects/js-packages/charts/tests/jest.config.cjs index b5ceacda1f7e0..4b12ff6656e1f 100644 --- a/projects/js-packages/charts/tests/jest.config.cjs +++ b/projects/js-packages/charts/tests/jest.config.cjs @@ -4,4 +4,16 @@ const baseConfig = require( 'jetpack-js-tools/jest/config.base.js' ); module.exports = { ...baseConfig, rootDir: path.join( __dirname, '..' ), + testEnvironment: 'jsdom', + setupFilesAfterEnv: [ + ...baseConfig.setupFilesAfterEnv, + '@testing-library/jest-dom', + '/tests/jest.setup.js', + ], + transform: { + ...baseConfig.transform, + '\\.[jt]sx?$': require( 'jetpack-js-tools/jest/babel-jest-config-factory.js' )( + require.resolve + ), + }, }; diff --git a/projects/js-packages/charts/tests/jest.setup.js b/projects/js-packages/charts/tests/jest.setup.js new file mode 100644 index 0000000000000..cc13c09e81b58 --- /dev/null +++ b/projects/js-packages/charts/tests/jest.setup.js @@ -0,0 +1,13 @@ +class ResizeObserver { + observe() { + // do nothing + } + unobserve() { + // do nothing + } + disconnect() { + // do nothing + } +} + +global.ResizeObserver = ResizeObserver; From 818dafb1d7bef4b3186b9c8a6711c5d914953951 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Mon, 20 Jan 2025 23:24:38 -0800 Subject: [PATCH 136/420] Social | Improve types for connection actions and selectors (#41201) --- ...types-for-connection-actions-and-selectors | 5 + .../social-store/actions/connection-data.ts | 157 ++++++++++-------- .../social-store/selectors/connection-data.ts | 131 ++++++++------- .../src/social-store/types.ts | 1 + 4 files changed, 160 insertions(+), 134 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/update-social-improve-types-for-connection-actions-and-selectors diff --git a/projects/js-packages/publicize-components/changelog/update-social-improve-types-for-connection-actions-and-selectors b/projects/js-packages/publicize-components/changelog/update-social-improve-types-for-connection-actions-and-selectors new file mode 100644 index 0000000000000..a58cf3cf2e7fc --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/update-social-improve-types-for-connection-actions-and-selectors @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Improved TS types for connection actions and selectors + + diff --git a/projects/js-packages/publicize-components/src/social-store/actions/connection-data.ts b/projects/js-packages/publicize-components/src/social-store/actions/connection-data.ts index 6ec02e6dca2b7..74604ac44ea1d 100644 --- a/projects/js-packages/publicize-components/src/social-store/actions/connection-data.ts +++ b/projects/js-packages/publicize-components/src/social-store/actions/connection-data.ts @@ -4,7 +4,7 @@ import { dispatch as coreDispatch } from '@wordpress/data'; import { store as editorStore } from '@wordpress/editor'; import { __, sprintf } from '@wordpress/i18n'; import { getSocialScriptData } from '../../utils/script-data'; -import { Connection } from '../types'; +import { Connection, KeyringResult } from '../types'; import { ADD_CONNECTION, DELETE_CONNECTION, @@ -23,10 +23,10 @@ import { /** * Set connections list - * @param {Array} connections - list of connections - * @return {object} - an action object. + * @param connections - list of connections + * @return An action object. */ -export function setConnections( connections ) { +export function setConnections( connections: Array< Connection > ) { return { type: SET_CONNECTIONS, connections, @@ -36,11 +36,11 @@ export function setConnections( connections ) { /** * Set keyring result * - * @param {import('../types').KeyringResult} [keyringResult] - keyring result + * @param keyringResult - keyring result * - * @return {object} - an action object. + * @return An action object. */ -export function setKeyringResult( keyringResult ) { +export function setKeyringResult( keyringResult?: KeyringResult ) { return { type: SET_KEYRING_RESULT, keyringResult, @@ -49,10 +49,10 @@ export function setKeyringResult( keyringResult ) { /** * Add connection to the list - * @param {import('../types').Connection} connection - connection object - * @return {object} - an action object. + * @param connection - connection object + * @return An action object. */ -export function addConnection( connection ) { +export function addConnection( connection: Partial< Connection > ) { return { type: ADD_CONNECTION, connection, @@ -61,11 +61,11 @@ export function addConnection( connection ) { /** * Toggle connection enable status. - * @param {string} connectionId - Connection ID to switch. + * @param connectionId - Connection ID to switch. * - * @return {object} Switch connection enable-status action. + * @return Switch connection enable-status action. */ -export function toggleConnection( connectionId ) { +export function toggleConnection( connectionId: string ) { return { type: TOGGLE_CONNECTION, connectionId, @@ -74,13 +74,13 @@ export function toggleConnection( connectionId ) { /** * Merge connections with fresh connections. - * @param {Array} freshConnections - list of fresh connections - * @return {Function} - a function to merge connections. + * @param freshConnections - list of fresh connections + * @return A thunk to merge connections. */ -export function mergeConnections( freshConnections ) { +export function mergeConnections( freshConnections: Array< Connection > ) { return function ( { dispatch, select } ) { // Combine current connections with new connections. - const prevConnections = select.getConnections(); + const prevConnections: Array< Connection > = select.getConnections(); const connections = []; const defaults = { enabled: true, @@ -108,12 +108,12 @@ export function mergeConnections( freshConnections ) { /** * Create an abort controller. - * @param {AbortController} abortController - Abort controller. - * @param {string} requestType - Type of abort request. + * @param abortController - Abort controller. + * @param requestType - Type of abort request. * - * @return {object} - an action object. + * @return An action object. */ -export function createAbortController( abortController, requestType ) { +export function createAbortController( abortController: AbortController, requestType: string ) { return { type: ADD_ABORT_CONTROLLER, requestType, @@ -124,11 +124,11 @@ export function createAbortController( abortController, requestType ) { /** * Remove abort controllers. * - * @param {string} requestType - Type of abort request. + * @param requestType - Type of abort request. * - * @return {object} - an action object. + * @return An action object. */ -export function removeAbortControllers( requestType ) { +export function removeAbortControllers( requestType: string ) { return { type: REMOVE_ABORT_CONTROLLERS, requestType, @@ -138,11 +138,11 @@ export function removeAbortControllers( requestType ) { /** * Abort a request. * - * @param {string} requestType - Type of abort request. + * @param requestType - Type of abort request. * - * @return {Function} - a function to abort a request. + * @return A thunk to abort a request. */ -export function abortRequest( requestType ) { +export function abortRequest( requestType: string ) { return function ( { dispatch, select } ) { const abortControllers = select.getAbortControllers( requestType ); @@ -158,7 +158,7 @@ export function abortRequest( requestType ) { /** * Abort the refresh connections request. * - * @return {Function} - a function to abort a request. + * @return A thunk to abort a request. */ export function abortRefreshConnectionsRequest() { return abortRequest( REQUEST_TYPE_REFRESH_CONNECTIONS ); @@ -167,8 +167,8 @@ export function abortRefreshConnectionsRequest() { /** * Effect handler which will refresh the connection test results. * - * @param {boolean} syncToMeta - Whether to sync the connection state to the post meta. - * @return {Function} Refresh connection test results action. + * @param syncToMeta - Whether to sync the connection state to the post meta. + * @return A thunk to refresh connection test results. */ export function refreshConnectionTestResults( syncToMeta = false ) { return async function ( { dispatch, select } ) { @@ -188,7 +188,10 @@ export function refreshConnectionTestResults( syncToMeta = false ) { dispatch( createAbortController( abortController, REQUEST_TYPE_REFRESH_CONNECTIONS ) ); // Pass the abort controller signal to the fetch request. - const freshConnections = await apiFetch( { path, signal: abortController.signal } ); + const freshConnections = await apiFetch< Array< Connection > >( { + path, + signal: abortController.signal, + } ); dispatch( mergeConnections( freshConnections ) ); @@ -208,7 +211,7 @@ export function refreshConnectionTestResults( syncToMeta = false ) { /** * Syncs the connections to the post meta. * - * @return {Function} Sync connections to post meta action. + * @return A thunk to sync connections to post meta. */ export function syncConnectionsToPostMeta() { return function ( { registry, select } ) { @@ -224,11 +227,11 @@ export function syncConnectionsToPostMeta() { /** * Toggles the connection enable-status. * - * @param {string} connectionId - Connection ID to switch. - * @param {boolean} syncToMeta - Whether to sync the connection state to the post meta. - * @return {object} Switch connection enable-status action. + * @param connectionId - Connection ID to switch. + * @param syncToMeta - Whether to sync the connection state to the post meta. + * @return A think to switch connection enable-status. */ -export function toggleConnectionById( connectionId, syncToMeta = true ) { +export function toggleConnectionById( connectionId: string, syncToMeta = true ) { return function ( { dispatch } ) { dispatch( toggleConnection( connectionId ) ); @@ -241,11 +244,11 @@ export function toggleConnectionById( connectionId, syncToMeta = true ) { /** * Deletes a connection. * - * @param {string} connectionId - Connection ID to delete. + * @param connectionId - Connection ID to delete. * - * @return {object} Delete connection action. + * @return An action object. */ -export function deleteConnection( connectionId ) { +export function deleteConnection( connectionId: string ) { return { type: DELETE_CONNECTION, connectionId, @@ -255,12 +258,12 @@ export function deleteConnection( connectionId ) { /** * Marks a connection as being deleted. * - * @param {string} connectionId - Connection ID to delete. - * @param {boolean} deleting - Whether the connection is being deleted. + * @param connectionId - Connection ID to delete. + * @param deleting - Whether the connection is being deleted. * - * @return {object} Deleting connection action. + * @return An action object. */ -export function deletingConnection( connectionId, deleting = true ) { +export function deletingConnection( connectionId: string, deleting = true ) { return { type: DELETING_CONNECTION, connectionId, @@ -271,13 +274,19 @@ export function deletingConnection( connectionId, deleting = true ) { /** * Deletes a connection by disconnecting it. * - * @param {object} args - Arguments. - * @param {string | number} args.connectionId - Connection ID to delete. - * @param {boolean} [args.showSuccessNotice] - Whether to show a success notice. + * @param args - Arguments. + * @param args.connectionId - Connection ID to delete. + * @param args.showSuccessNotice - Whether to show a success notice. * - * @return {boolean} Whether the connection was deleted. + * @return A thunk that resolves to true if the connection was deleted, false otherwise. */ -export function deleteConnectionById( { connectionId, showSuccessNotice = true } ) { +export function deleteConnectionById( { + connectionId, + showSuccessNotice = true, +}: { + connectionId: string; + showSuccessNotice?: boolean; +} ) { return async function ( { registry, dispatch } ) { const { createErrorNotice, createSuccessNotice } = coreDispatch( globalNoticesStore ); @@ -330,11 +339,15 @@ let uniqueId = 1; /** * Creates a connection. * - * @param {Record} data - The data for API call. - * @param {Record} optimisticData - Optimistic data for the connection. - * @return {void} + * @param data - The data for API call. + * @param optimisticData - Optimistic data for the connection. + * + * @return A thunk to create a connection. */ -export function createConnection( data, optimisticData = {} ) { +export function createConnection( + data: Record< string, unknown >, + optimisticData: Partial< Connection > = {} +) { return async function ( { registry, dispatch } ) { const { createErrorNotice, createSuccessNotice } = coreDispatch( globalNoticesStore ); @@ -403,12 +416,12 @@ export function createConnection( data, optimisticData = {} ) { /** * Updates a connection. * - * @param {string} connectionId - Connection ID to update. - * @param {Record} data - The data. + * @param connectionId - Connection ID to update. + * @param data - The data. * - * @return {object} Delete connection action. + * @return An action object. */ -export function updateConnection( connectionId, data ) { +export function updateConnection( connectionId: string, data: Partial< Connection > ) { return { type: UPDATE_CONNECTION, connectionId, @@ -419,12 +432,12 @@ export function updateConnection( connectionId, data ) { /** * Marks a connection as being updating. * - * @param {string} connectionId - Connection ID being updated. - * @param {boolean} updating - Whether the connection is being updated. + * @param connectionId - Connection ID being updated. + * @param updating - Whether the connection is being updated. * - * @return {object} Deleting connection action. + * @return An action object. */ -export function updatingConnection( connectionId, updating = true ) { +export function updatingConnection( connectionId: string, updating = true ) { return { type: UPDATING_CONNECTION, connectionId, @@ -435,11 +448,11 @@ export function updatingConnection( connectionId, updating = true ) { /** * Sets the reconnecting account. * - * @param {import('../types').Connection} reconnectingAccount - Account being reconnected. + * @param reconnectingAccount - Account being reconnected. * - * @return {object} Reconnecting account action. + * @return An action object. */ -export function setReconnectingAccount( reconnectingAccount ) { +export function setReconnectingAccount( reconnectingAccount: Connection ) { return { type: SET_RECONNECTING_ACCOUNT, reconnectingAccount, @@ -449,11 +462,11 @@ export function setReconnectingAccount( reconnectingAccount ) { /** * Updates a connection. * - * @param {string} connectionId - Connection ID to update. - * @param {Record} data - The data for API call. - * @return {void} + * @param connectionId - Connection ID to update. + * @param data - The data for API call. + * @return A thunk to update a connection. */ -export function updateConnectionById( connectionId, data ) { +export function updateConnectionById( connectionId: string, data: Partial< Connection > ) { return async function ( { dispatch, select } ) { const { createErrorNotice, createSuccessNotice } = coreDispatch( globalNoticesStore ); @@ -501,11 +514,11 @@ export function updateConnectionById( connectionId, data ) { /** * Toggles the connections modal. * - * @param {boolean} isOpen - Whether the modal is open. + * @param isOpen - Whether the modal is open. * - * @return {object} - An action object. + * @return An action object. */ -export function toggleConnectionsModal( isOpen ) { +export function toggleConnectionsModal( isOpen: boolean ) { return { type: TOGGLE_CONNECTIONS_MODAL, isOpen, @@ -515,7 +528,7 @@ export function toggleConnectionsModal( isOpen ) { /** * Opens the connections modal. * - * @return {object} - An action object. + * @return An action object. */ export function openConnectionsModal() { return toggleConnectionsModal( true ); @@ -523,7 +536,7 @@ export function openConnectionsModal() { /** * Closes the connections modal. - * @return {object} - An action object. + * @return An action object. */ export function closeConnectionsModal() { return toggleConnectionsModal( false ); diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts b/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts index 9334a870677bb..64013e9779d84 100644 --- a/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts +++ b/projects/js-packages/publicize-components/src/social-store/selectors/connection-data.ts @@ -2,14 +2,14 @@ import { getScriptData } from '@automattic/jetpack-script-data'; import { store as coreStore } from '@wordpress/core-data'; import { createRegistrySelector } from '@wordpress/data'; import { REQUEST_TYPE_DEFAULT } from '../actions/constants'; -import { Connection, SocialStoreState } from '../types'; +import type { Connection, SocialStoreState } from '../types'; /** * Returns the connections list from the store. * - * @param {import("../types").SocialStoreState} state - State object. + * @param state - State object. * - * @return {Array} The connections list + * @return The connections list */ export function getConnections( state: SocialStoreState ) { return state.connectionData?.connections ?? []; @@ -18,22 +18,25 @@ export function getConnections( state: SocialStoreState ) { /** * Return a connection by its ID. * - * @param {import("../types").SocialStoreState} state - State object. - * @param {string} connectionId - The connection ID. + * @param state - State object. + * @param connectionId - The connection ID. * - * @return {import("../types").Connection | undefined} The connection. + * @return The connection. */ -export function getConnectionById( state, connectionId ) { +export function getConnectionById( + state: SocialStoreState, + connectionId: string +): Connection | undefined { return getConnections( state ).find( connection => connection.connection_id === connectionId ); } /** * Returns the broken connections. * - * @param {import("../types").SocialStoreState} state - State object. - * @return {Array} List of broken connections. + * @param state - State object. + * @return List of broken connections. */ -export function getBrokenConnections( state ) { +export function getBrokenConnections( state: SocialStoreState ) { return getConnections( state ).filter( connection => { return connection.status === 'broken'; } ); @@ -42,31 +45,31 @@ export function getBrokenConnections( state ) { /** * Returns connections by service name/ID. * - * @param {import("../types").SocialStoreState} state - State object. - * @param {string} serviceName - The service name. + * @param state - State object. + * @param serviceName - The service name. * - * @return {Array} The connections. + * @return The connections. */ -export function getConnectionsByService( state, serviceName ) { +export function getConnectionsByService( state: SocialStoreState, serviceName: string ) { return getConnections( state ).filter( ( { service_name } ) => service_name === serviceName ); } /** * Returns whether there are connections in the store. - * @param {import("../types").SocialStoreState} state - State object. - * @return {boolean} Whether there are connections. + * @param state - State object. + * @return Whether there are connections. */ -export function hasConnections( state ) { +export function hasConnections( state: SocialStoreState ) { return getConnections( state ).length > 0; } /** * Returns the failed Publicize connections. * - * @param {import("../types").SocialStoreState} state - State object. - * @return {Array} List of connections. + * @param state - State object. + * @return List of connections. */ -export function getFailedConnections( state ) { +export function getFailedConnections( state: SocialStoreState ) { const connections = getConnections( state ); return connections.filter( connection => 'broken' === connection.status ); @@ -76,10 +79,10 @@ export function getFailedConnections( state ) { * Returns a list of Publicize connection service names that require reauthentication from users. * For example, when LinkedIn switched its API from v1 to v2. * - * @param {import("../types").SocialStoreState} state - State object. - * @return {Array} List of service names that need reauthentication. + * @param state - State object. + * @return List of service names that need reauthentication. */ -export function getMustReauthConnections( state ) { +export function getMustReauthConnections( state: SocialStoreState ) { const connections = getConnections( state ); return connections .filter( connection => 'must_reauth' === connection.status ) @@ -89,36 +92,40 @@ export function getMustReauthConnections( state ) { /** * Returns the Publicize connections that are enabled. * - * @param {import("../types").SocialStoreState} state - State object. + * @param state - State object. * - * @return {Array} List of enabled connections. + * @return List of enabled connections. */ -export function getEnabledConnections( state ) { +export function getEnabledConnections( state: SocialStoreState ) { return getConnections( state ).filter( connection => connection.enabled ); } /** * Returns the Publicize connections that are disabled. * - * @param {import("../types").SocialStoreState} state - State object. + * @param state - State object. * - * @return {Array} List of disabled connections. + * @return List of disabled connections. */ -export function getDisabledConnections( state ) { +export function getDisabledConnections( state: SocialStoreState ) { return getConnections( state ).filter( connection => ! connection.enabled ); } /** * Get the profile details for a connection * - * @param {import("../types").SocialStoreState} state - State object. - * @param {string} service - The service name. - * @param {object} args - Arguments. - * @param {boolean} args.forceDefaults - Whether to use default values. + * @param state - State object. + * @param service - The service name. + * @param args - Arguments. + * @param args.forceDefaults - Whether to use default values. * - * @return {object} The profile details. + * @return The profile details. */ -export function getConnectionProfileDetails( state, service, { forceDefaults = false } = {} ) { +export function getConnectionProfileDetails( + state: SocialStoreState, + service: string, + { forceDefaults = false }: { forceDefaults?: boolean } = {} +) { let displayName = ''; let profileImage = ''; let username = ''; @@ -143,54 +150,54 @@ export function getConnectionProfileDetails( state, service, { forceDefaults = f /** * Get the connections being deleted. * - * @param {import("../types").SocialStoreState} state - State object. - * @return {import("../types").ConnectionData['deletingConnections']} The connection being deleted. + * @param state - State object. + * @return The connection being deleted. */ -export function getDeletingConnections( state ) { +export function getDeletingConnections( state: SocialStoreState ) { return state.connectionData?.deletingConnections ?? []; } /** * Get the connections being updated. * - * @param {import("../types").SocialStoreState} state - State object. - * @return {import("../types").ConnectionData['updatingConnections']} The connection being updated. + * @param state - State object. + * @return The connection being updated. */ -export function getUpdatingConnections( state ) { +export function getUpdatingConnections( state: SocialStoreState ) { return state.connectionData?.updatingConnections ?? []; } /** * Get the account being reconnected * - * @param {import("../types").SocialStoreState} state - State object. - * @return {import("../types").ConnectionData['reconnectingAccount']} The account being reconnected. + * @param state - State object. + * @return The account being reconnected. */ -export function getReconnectingAccount( state ) { +export function getReconnectingAccount( state: SocialStoreState ) { return state.connectionData?.reconnectingAccount; } /** * Get the abort controllers for a specific request type. * - * @param {import("../types").SocialStoreState} state - State object. - * @param {string} requestType - The request type. + * @param state - State object. + * @param requestType - The request type. * - * @return {Array} The abort controllers. + * @return The abort controllers. */ -export function getAbortControllers( state, requestType = REQUEST_TYPE_DEFAULT ) { +export function getAbortControllers( state: SocialStoreState, requestType = REQUEST_TYPE_DEFAULT ) { return state.connectionData?.abortControllers?.[ requestType ] ?? []; } /** * Whether a mastodon account is already connected. * - * @param {import("../types").SocialStoreState} state - State object. - * @param {string} handle - The mastodon handle. + * @param state - State object. + * @param handle - The mastodon handle. * - * @return {boolean} Whether the mastodon account is already connected. + * @return Whether the mastodon account is already connected. */ -export function isMastodonAccountAlreadyConnected( state, handle ) { +export function isMastodonAccountAlreadyConnected( state: SocialStoreState, handle: string ) { return getConnectionsByService( state, 'mastodon' ).some( connection => { return connection.external_handle === handle; } ); @@ -199,12 +206,12 @@ export function isMastodonAccountAlreadyConnected( state, handle ) { /** * Whether a Bluesky account is already connected. * - * @param {import("../types").SocialStoreState} state - State object. - * @param {string} handle - The Bluesky handle. + * @param state - State object. + * @param handle - The Bluesky handle. * - * @return {boolean} Whether the Bluesky account is already connected. + * @return Whether the Bluesky account is already connected. */ -export function isBlueskyAccountAlreadyConnected( state, handle ) { +export function isBlueskyAccountAlreadyConnected( state: SocialStoreState, handle: string ) { return getConnectionsByService( state, 'bluesky' ).some( connection => { return connection.external_handle === handle; } ); @@ -213,21 +220,21 @@ export function isBlueskyAccountAlreadyConnected( state, handle ) { /** * Returns the latest KeyringResult from the store. * - * @param {import("../types").SocialStoreState} state - State object. + * @param state - State object. * - * @return {import("../types").KeyringResult} The KeyringResult + * @return The KeyringResult */ -export function getKeyringResult( state ) { +export function getKeyringResult( state: SocialStoreState ) { return state.connectionData?.keyringResult; } /** * Whether the connections modal is open. - * @param {import("../types").SocialStoreState} state - State object. + * @param state - State object. * - * @return {boolean} Whether the connections modal is open. + * @return Whether the connections modal is open. */ -export function isConnectionsModalOpen( state ) { +export function isConnectionsModalOpen( state: SocialStoreState ) { return state.connectionData?.isConnectionsModalOpen ?? false; } diff --git a/projects/js-packages/publicize-components/src/social-store/types.ts b/projects/js-packages/publicize-components/src/social-store/types.ts index 2be401380fd57..cff9074e47df7 100644 --- a/projects/js-packages/publicize-components/src/social-store/types.ts +++ b/projects/js-packages/publicize-components/src/social-store/types.ts @@ -64,6 +64,7 @@ export type ConnectionData = { reconnectingAccount?: Connection; keyringResult?: KeyringResult; abortControllers?: Record< string, Array< AbortController > >; + isConnectionsModalOpen?: boolean; }; export type JetpackSettings = { From a50939c87167a4428df461c0a24271b607fe825c Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Tue, 21 Jan 2025 13:51:16 +0200 Subject: [PATCH 137/420] Forms: Create new default block when pressing Enter on text inputs (#41177) --- .../changelog/forms-add-default-block-on-input-enter | 4 ++++ .../forms/src/blocks/contact-form/child-blocks.js | 1 + .../contact-form/components/jetpack-field-datepicker.js | 9 ++++++++- .../src/blocks/contact-form/components/jetpack-field.js | 8 ++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 projects/packages/forms/changelog/forms-add-default-block-on-input-enter diff --git a/projects/packages/forms/changelog/forms-add-default-block-on-input-enter b/projects/packages/forms/changelog/forms-add-default-block-on-input-enter new file mode 100644 index 0000000000000..4290c7cc770eb --- /dev/null +++ b/projects/packages/forms/changelog/forms-add-default-block-on-input-enter @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Forms: Create new default block when pressing Enter on text inputs diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index 5fc34bc761cbc..3ecb0acc75e8b 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -274,6 +274,7 @@ const editField = type => props => { id={ props.attributes.id } width={ props.attributes.width } attributes={ props.attributes } + insertBlocksAfter={ props.insertBlocksAfter } /> ); }; diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-datepicker.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-datepicker.js index e77688714dd1e..4c114b12accf8 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-datepicker.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-datepicker.js @@ -1,4 +1,5 @@ import { useBlockProps } from '@wordpress/block-editor'; +import { createBlock, getDefaultBlockName } from '@wordpress/blocks'; import { SelectControl } from '@wordpress/components'; import { compose } from '@wordpress/compose'; import { __ } from '@wordpress/i18n'; @@ -34,7 +35,7 @@ const DATE_FORMATS = [ ]; const JetpackDatePicker = props => { - const { attributes, clientId, isSelected, name, setAttributes } = props; + const { attributes, clientId, isSelected, name, setAttributes, insertBlocksAfter } = props; const { id, label, required, requiredText, width, placeholder, dateFormat } = attributes; useFormWrapper( { attributes, clientId, name } ); @@ -67,6 +68,12 @@ const JetpackDatePicker = props => { style={ fieldStyle } type="text" value={ placeholder } + onKeyDown={ event => { + if ( event.defaultPrevented || event.key !== 'Enter' ) { + return; + } + insertBlocksAfter( createBlock( getDefaultBlockName() ) ); + } } />
      diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field.js index 6cbb67e6e6be3..c52bf0327e08c 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field.js @@ -1,4 +1,5 @@ import { useBlockProps } from '@wordpress/block-editor'; +import { createBlock, getDefaultBlockName } from '@wordpress/blocks'; import { createHigherOrderComponent, compose } from '@wordpress/compose'; import { addFilter } from '@wordpress/hooks'; import clsx from 'clsx'; @@ -21,6 +22,7 @@ const JetpackField = props => { setAttributes, placeholder, width, + insertBlocksAfter, } = props; const { blockStyle, fieldStyle } = useJetpackFieldStyles( attributes ); @@ -50,6 +52,12 @@ const JetpackField = props => { style={ fieldStyle } type="text" value={ placeholder } + onKeyDown={ event => { + if ( event.defaultPrevented || event.key !== 'Enter' ) { + return; + } + insertBlocksAfter( createBlock( getDefaultBlockName() ) ); + } } />
      From aa40ce3cd63102932a16a2d61b3af886b020a6af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20M=C3=A1rk=20Juh=C3=A1sz?= <36671565+gmjuhasz@users.noreply.github.com> Date: Tue, 21 Jan 2025 13:04:00 +0100 Subject: [PATCH 138/420] Social: Refactor Social Note settings to use core (#41153) * Register settings with core * Update store to use core settings api * changelog * Remove deprecated code * Fix some tests * Fix constant issue * Cast pricing_page option to int as before * Remove boolean castings * Remove casting * Fix TS errors * Address comments on function names --- .../refactor-social-note-settings-core | 4 + .../src/social-store/actions/index.ts | 4 + .../src/social-store/actions/pricing-page.ts | 16 +++ .../src/social-store/actions/social-notes.ts | 33 ++++++ .../src/social-store/constants.ts | 4 + .../src/social-store/selectors/index.ts | 4 + .../social-store/selectors/pricing-page.ts | 19 ++++ .../social-store/selectors/social-notes.ts | 37 +++++++ .../src/social-store/types.ts | 8 ++ .../refactor-social-note-settings-core | 4 + .../class-settings.php | 101 ++++++++++++++++++ .../refactor-social-note-settings-core | 4 + .../social/src/class-jetpack-social.php | 12 +-- projects/plugins/social/src/class-note.php | 45 -------- .../src/class-rest-settings-controller.php | 55 +--------- .../src/js/components/admin-page/index.jsx | 2 +- .../src/js/components/pricing-page/index.js | 6 +- .../components/social-notes-toggle/index.tsx | 45 ++++---- .../tests/php/test-class-jetpack-social.php | 20 ---- 19 files changed, 266 insertions(+), 157 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/refactor-social-note-settings-core create mode 100644 projects/js-packages/publicize-components/src/social-store/actions/pricing-page.ts create mode 100644 projects/js-packages/publicize-components/src/social-store/actions/social-notes.ts create mode 100644 projects/js-packages/publicize-components/src/social-store/selectors/pricing-page.ts create mode 100644 projects/js-packages/publicize-components/src/social-store/selectors/social-notes.ts create mode 100644 projects/packages/publicize/changelog/refactor-social-note-settings-core create mode 100644 projects/plugins/social/changelog/refactor-social-note-settings-core diff --git a/projects/js-packages/publicize-components/changelog/refactor-social-note-settings-core b/projects/js-packages/publicize-components/changelog/refactor-social-note-settings-core new file mode 100644 index 0000000000000..cb6e8105e2e53 --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/refactor-social-note-settings-core @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Refactored Social Note settings to use core diff --git a/projects/js-packages/publicize-components/src/social-store/actions/index.ts b/projects/js-packages/publicize-components/src/social-store/actions/index.ts index a4afab1b499db..40463ed09d6b2 100644 --- a/projects/js-packages/publicize-components/src/social-store/actions/index.ts +++ b/projects/js-packages/publicize-components/src/social-store/actions/index.ts @@ -1,6 +1,8 @@ import * as connectionData from './connection-data'; +import * as pricingPageSettings from './pricing-page'; import * as shareStatus from './share-status'; import * as sigActions from './social-image-generator'; +import * as socialNoteSettings from './social-notes'; import * as socialPluginSettings from './social-plugin-settings'; import * as utmActions from './utm-settings'; @@ -9,6 +11,8 @@ const actions = { ...connectionData, ...sigActions, ...utmActions, + ...socialNoteSettings, + ...pricingPageSettings, ...socialPluginSettings, }; diff --git a/projects/js-packages/publicize-components/src/social-store/actions/pricing-page.ts b/projects/js-packages/publicize-components/src/social-store/actions/pricing-page.ts new file mode 100644 index 0000000000000..e73c2b745d0fa --- /dev/null +++ b/projects/js-packages/publicize-components/src/social-store/actions/pricing-page.ts @@ -0,0 +1,16 @@ +import { store as coreStore } from '@wordpress/core-data'; +import { SHOW_PRICING_PAGE_KEY } from '../constants'; + +/** + * Sets the Show Pricing Page enabled status. + * + * @param isEnabled - The new enabled status. + * @return {Function} A thunk. + */ +export function setShowPricingPage( isEnabled: boolean ) { + return async function ( { registry } ) { + const { saveSite } = registry.dispatch( coreStore ); + + await saveSite( { [ SHOW_PRICING_PAGE_KEY ]: isEnabled } ); + }; +} diff --git a/projects/js-packages/publicize-components/src/social-store/actions/social-notes.ts b/projects/js-packages/publicize-components/src/social-store/actions/social-notes.ts new file mode 100644 index 0000000000000..b21fcdb660bd9 --- /dev/null +++ b/projects/js-packages/publicize-components/src/social-store/actions/social-notes.ts @@ -0,0 +1,33 @@ +import { store as coreStore } from '@wordpress/core-data'; +import { SOCIAL_NOTES_CONFIG_KEY, SOCIAL_NOTES_ENABLED_KEY } from '../constants'; +import { SocialNotesConfig } from '../types'; + +/** + * Sets the Social Notes enabled status. + * + * @param isEnabled - The new enabled status. + * + * @return {Function} A thunk. + */ +export function toggleSocialNotes( isEnabled: boolean ) { + return async function ( { registry } ) { + const { saveSite } = registry.dispatch( coreStore ); + + await saveSite( { [ SOCIAL_NOTES_ENABLED_KEY ]: isEnabled } ); + }; +} + +/** + * Updates the Social Notes Config + * + * @param {Partial< SocialNotesConfig >} data - The data to save. + * + * @return {Function} A thunk. + */ +export function updateSocialNotesConfig( data: Partial< SocialNotesConfig > ) { + return async function ( { registry } ) { + const { saveSite } = registry.dispatch( coreStore ); + + await saveSite( { [ SOCIAL_NOTES_CONFIG_KEY ]: data } ); + }; +} diff --git a/projects/js-packages/publicize-components/src/social-store/constants.ts b/projects/js-packages/publicize-components/src/social-store/constants.ts index 355c47d3e90f6..823740e7dc07e 100644 --- a/projects/js-packages/publicize-components/src/social-store/constants.ts +++ b/projects/js-packages/publicize-components/src/social-store/constants.ts @@ -1,2 +1,6 @@ +// See projects/packages/publicize/src/jetpack-social-settings/class-settings.php export const SIG_SETTINGS_KEY = 'jetpack_social_image_generator_settings'; export const UTM_ENABLED_KEY = 'jetpack_social_utm_settings'; +export const SOCIAL_NOTES_ENABLED_KEY = 'jetpack-social-note'; +export const SOCIAL_NOTES_CONFIG_KEY = 'jetpack_social_notes_config'; +export const SHOW_PRICING_PAGE_KEY = 'jetpack-social_show_pricing_page'; diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/index.ts b/projects/js-packages/publicize-components/src/social-store/selectors/index.ts index 4d2ca69c41288..058335e73e876 100644 --- a/projects/js-packages/publicize-components/src/social-store/selectors/index.ts +++ b/projects/js-packages/publicize-components/src/social-store/selectors/index.ts @@ -1,8 +1,10 @@ import { store as coreStore } from '@wordpress/core-data'; import { createRegistrySelector } from '@wordpress/data'; import * as connectionDataSelectors from './connection-data'; +import * as pricingPageSelectors from './pricing-page'; import * as shareStatusSelectors from './share-status'; import * as sigSelectors from './social-image-generator'; +import * as socialNoteSelectors from './social-notes'; import * as socialPluginSelectors from './social-plugin-settings'; import * as utmSelectors from './utm-settings'; @@ -19,6 +21,8 @@ const selectors = { isSavingSiteSettings, ...sigSelectors, ...utmSelectors, + ...socialNoteSelectors, + ...pricingPageSelectors, ...socialPluginSelectors, }; diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/pricing-page.ts b/projects/js-packages/publicize-components/src/social-store/selectors/pricing-page.ts new file mode 100644 index 0000000000000..6eb876bd8a649 --- /dev/null +++ b/projects/js-packages/publicize-components/src/social-store/selectors/pricing-page.ts @@ -0,0 +1,19 @@ +import { store as coreStore } from '@wordpress/core-data'; +import { createRegistrySelector } from '@wordpress/data'; +import { getSocialScriptData } from '../../utils'; +import { SHOW_PRICING_PAGE_KEY } from '../constants'; + +/** + * Returns the Show Pricing Page enabled status for the current site. + */ +export const shouldShowPricingPage = createRegistrySelector( select => () => { + const { getSite } = select( coreStore ); + + const settings = getSite( undefined, { _fields: SHOW_PRICING_PAGE_KEY } ); + + // If the settings are not available in the store yet, use the default settings. + return ( + settings?.[ SHOW_PRICING_PAGE_KEY ] ?? + getSocialScriptData().settings?.socialPlugin?.show_pricing_page + ); +} ); diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/social-notes.ts b/projects/js-packages/publicize-components/src/social-store/selectors/social-notes.ts new file mode 100644 index 0000000000000..c7efb4aebd6ec --- /dev/null +++ b/projects/js-packages/publicize-components/src/social-store/selectors/social-notes.ts @@ -0,0 +1,37 @@ +import { store as coreStore } from '@wordpress/core-data'; +import { createRegistrySelector } from '@wordpress/data'; +import { getSocialScriptData } from '../../utils'; +import { SOCIAL_NOTES_CONFIG_KEY, SOCIAL_NOTES_ENABLED_KEY } from '../constants'; + +/** + * Returns if Social Notes are enabled for the current site. + */ +export const isSocialNotesEnabled = createRegistrySelector( select => () => { + const { getSite } = select( coreStore ); + + const settings = getSite( undefined, { + _fields: SOCIAL_NOTES_ENABLED_KEY, + } ); + // If the settings are not available in the store yet, use the default settings. + return ( + settings?.[ SOCIAL_NOTES_ENABLED_KEY ] ?? + getSocialScriptData().settings?.socialPlugin?.social_notes_enabled + ); +} ); + +/** + * Returns the Social Notes Config for the current site. + */ +export const getSocialNotesConfig = createRegistrySelector( select => () => { + const { getSite } = select( coreStore ); + + const settings = getSite( undefined, { + _fields: SOCIAL_NOTES_CONFIG_KEY, + } ); + + // If the settings are not available in the store yet, use the default settings. + return ( + settings?.[ SOCIAL_NOTES_CONFIG_KEY ] ?? + getSocialScriptData().settings?.socialPlugin?.social_notes_config + ); +} ); diff --git a/projects/js-packages/publicize-components/src/social-store/types.ts b/projects/js-packages/publicize-components/src/social-store/types.ts index cff9074e47df7..22c8aff406487 100644 --- a/projects/js-packages/publicize-components/src/social-store/types.ts +++ b/projects/js-packages/publicize-components/src/social-store/types.ts @@ -132,6 +132,11 @@ export type UtmSettingsConfig = { enabled: boolean; }; +export type SocialNotesConfig = { + append_link: boolean; + link_format: 'full_url' | 'shortlink' | 'permashortcitation'; +}; + export type SocialPluginSettings = { publicize_active: boolean; show_pricing_page: boolean; @@ -145,4 +150,7 @@ export type SocialPluginSettings = { export type SocialSettingsFields = { jetpack_social_image_generator_settings: SocialImageGeneratorConfig; jetpack_social_utm_settings: UtmSettingsConfig; + [ 'jetpack-social-note' ]: boolean; + jetpack_social_notes_config: SocialNotesConfig; + [ 'jetpack-social_show_pricing_page' ]: boolean; }; diff --git a/projects/packages/publicize/changelog/refactor-social-note-settings-core b/projects/packages/publicize/changelog/refactor-social-note-settings-core new file mode 100644 index 0000000000000..cb6e8105e2e53 --- /dev/null +++ b/projects/packages/publicize/changelog/refactor-social-note-settings-core @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Refactored Social Note settings to use core diff --git a/projects/packages/publicize/src/jetpack-social-settings/class-settings.php b/projects/packages/publicize/src/jetpack-social-settings/class-settings.php index 85aa711d47a3b..4354e06ed08d4 100644 --- a/projects/packages/publicize/src/jetpack-social-settings/class-settings.php +++ b/projects/packages/publicize/src/jetpack-social-settings/class-settings.php @@ -16,6 +16,8 @@ * This class is used to get and update Jetpack_Social_Settings. * Currently supported features: * - Social Image Generator + * - UTM Settings + * - Social Notes */ class Settings { /** @@ -37,6 +39,17 @@ class Settings { 'enabled' => false, ); + const NOTES_CONFIG = 'notes_config'; + + const DEFAULT_NOTES_CONFIG = array( + 'append_link' => true, + ); + + // Legacy named options. + const JETPACK_SOCIAL_NOTE_CPT_ENABLED = 'jetpack-social-note'; + const JETPACK_SOCIAL_SHOW_PRICING_PAGE = 'jetpack-social_show_pricing_page'; + const NOTES_FLUSH_REWRITE_RULES_FLUSHED = 'jetpack_social_rewrite_rules_flushed'; + /** * Feature flags. Each item has 3 keys because of the naming conventions: * - flag_name: The name of the feature flag for the option check. @@ -154,6 +167,58 @@ public function register_settings() { ) ); + register_setting( + 'jetpack_social', + self::JETPACK_SOCIAL_SHOW_PRICING_PAGE, + array( + 'type' => 'boolean', + 'default' => true, + 'show_in_rest' => array( + 'schema' => array( + 'type' => 'boolean', + ), + ), + ) + ); + + register_setting( + 'jetpack_social', + self::JETPACK_SOCIAL_NOTE_CPT_ENABLED, + array( + 'type' => 'boolean', + 'default' => false, + 'show_in_rest' => array( + 'schema' => array( + 'type' => 'boolean', + ), + ), + ) + ); + + register_setting( + 'jetpack_social', + self::OPTION_PREFIX . self::NOTES_CONFIG, + array( + 'type' => 'object', + 'default' => self::DEFAULT_NOTES_CONFIG, + 'show_in_rest' => array( + 'schema' => array( + 'type' => 'object', + 'context' => array( 'view', 'edit' ), + 'properties' => array( + 'append_link' => array( + 'type' => 'boolean', + ), + 'link_format' => array( + 'type' => 'string', + 'enum' => array( 'full_url', 'shortlink', 'permashortcitation' ), + ), + ), + ), + ), + ) + ); + add_filter( 'rest_pre_update_setting', array( $this, 'update_settings' ), 10, 3 ); } @@ -175,6 +240,24 @@ public function get_utm_settings() { return get_option( self::OPTION_PREFIX . self::UTM_SETTINGS, self::DEFAULT_UTM_SETTINGS ); } + /** + * Get the social notes config. + * + * @return array The social notes config. + */ + public function get_social_notes_config() { + return get_option( self::OPTION_PREFIX . self::NOTES_CONFIG, self::DEFAULT_NOTES_CONFIG ); + } + + /** + * Get if the social notes feature is enabled. + * + * @return bool + */ + public function is_social_notes_enabled() { + return get_option( self::JETPACK_SOCIAL_NOTE_CPT_ENABLED, false ); + } + /** * Get the current settings. * @@ -253,10 +336,12 @@ public function get_initial_state() { */ public function update_settings( $updated, $name, $value ) { + // Social Image Generator. if ( self::OPTION_PREFIX . self::IMAGE_GENERATOR_SETTINGS === $name ) { return $this->update_social_image_generator_settings( $value ); } + // UTM Settings. if ( self::OPTION_PREFIX . self::UTM_SETTINGS === $name ) { $current_utm_settings = $this->get_utm_settings(); @@ -267,6 +352,22 @@ public function update_settings( $updated, $name, $value ) { return update_option( self::OPTION_PREFIX . self::UTM_SETTINGS, array_replace_recursive( $current_utm_settings, $value ) ); } + // Social Notes. + if ( self::JETPACK_SOCIAL_NOTE_CPT_ENABLED === $name ) { + // Delete this option, so the rules get flushed in maybe_flush_rewrite_rules when the CPT is registered. + delete_option( self::NOTES_FLUSH_REWRITE_RULES_FLUSHED ); + return update_option( self::JETPACK_SOCIAL_NOTE_CPT_ENABLED, (bool) $value ); + } + if ( self::OPTION_PREFIX . self::NOTES_CONFIG === $name ) { + $old_config = $this->get_social_notes_config(); + $new_config = array_merge( $old_config, $value ); + return update_option( self::OPTION_PREFIX . self::NOTES_CONFIG, $new_config ); + } + + if ( self::JETPACK_SOCIAL_SHOW_PRICING_PAGE === $name ) { + return update_option( self::JETPACK_SOCIAL_SHOW_PRICING_PAGE, (int) $value ); + } + return $updated; } diff --git a/projects/plugins/social/changelog/refactor-social-note-settings-core b/projects/plugins/social/changelog/refactor-social-note-settings-core new file mode 100644 index 0000000000000..cb6e8105e2e53 --- /dev/null +++ b/projects/plugins/social/changelog/refactor-social-note-settings-core @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Refactored Social Note settings to use core diff --git a/projects/plugins/social/src/class-jetpack-social.php b/projects/plugins/social/src/class-jetpack-social.php index 994b66beac08b..a22e76ee54980 100644 --- a/projects/plugins/social/src/class-jetpack-social.php +++ b/projects/plugins/social/src/class-jetpack-social.php @@ -245,14 +245,14 @@ public function set_social_admin_script_data( $data ) { if ( $this->is_connected() ) { - $note = new Automattic\Jetpack\Social\Note(); + $jetpack_social_settings = new Automattic\Jetpack\Publicize\Jetpack_Social_Settings\Settings(); $data['settings']['socialPlugin'] = array_merge( $data['settings']['socialPlugin'], array( 'show_pricing_page' => self::should_show_pricing_page(), - 'social_notes_enabled' => $note->enabled(), - 'social_notes_config' => $note->get_config(), + 'social_notes_enabled' => $jetpack_social_settings->is_social_notes_enabled(), + 'social_notes_config' => $jetpack_social_settings->get_social_notes_config(), ) ); } @@ -284,8 +284,6 @@ public function initial_state() { $jetpack_social_settings = new Automattic\Jetpack\Publicize\Jetpack_Social_Settings\Settings(); $initial_state = $jetpack_social_settings->get_initial_state(); - $note = new Automattic\Jetpack\Social\Note(); - $state = array_merge( $state, array( @@ -296,8 +294,8 @@ public function initial_state() { 'isEnhancedPublishingEnabled' => $publicize->has_enhanced_publishing_feature(), 'dismissedNotices' => Dismissed_Notices::get_dismissed_notices(), 'supportedAdditionalConnections' => $publicize->get_supported_additional_connections(), - 'social_notes_enabled' => $note->enabled(), - 'social_notes_config' => $note->get_config(), + 'social_notes_enabled' => $jetpack_social_settings->is_social_notes_enabled(), + 'social_notes_config' => $jetpack_social_settings->get_social_notes_config(), ), 'sharesData' => $publicize->get_publicize_shares_info( Jetpack_Options::get_option( 'id' ) ), ), diff --git a/projects/plugins/social/src/class-note.php b/projects/plugins/social/src/class-note.php index b03256fd62a83..c4a3e5c98bd44 100644 --- a/projects/plugins/social/src/class-note.php +++ b/projects/plugins/social/src/class-note.php @@ -189,51 +189,6 @@ public function maybe_flush_rewrite_rules( $force = false ) { } } - /** - * Set whether or not the Notes feature is enabled. - * - * @param boolean $enabled Whether or not the Notes feature is enabled. - */ - public function set_enabled( $enabled ) { - if ( $enabled === self::enabled() ) { - return; - } - - if ( $enabled ) { - update_option( self::JETPACK_SOCIAL_NOTE_CPT, true ); - } else { - delete_option( self::JETPACK_SOCIAL_NOTE_CPT ); - } - // Delete this option, so the rules get flushe in maybe_flush_rewrite_rules when the CPT is registered. - delete_option( self::FLUSH_REWRITE_RULES_FLUSHED ); - } - - /** - * Get the social notes config. - * - * @return array The social notes config. - */ - public function get_config() { - return get_option( - self::JETPACK_SOCIAL_NOTES_CONFIG, - // Append link by default. - array( - 'append_link' => true, - ) - ); - } - - /** - * Update social notes config - * - * @param array $config The config to update. - */ - public function update_config( $config ) { - $old_config = get_option( self::JETPACK_SOCIAL_NOTES_CONFIG, array() ); - $new_config = array_merge( $old_config, $config ); - update_option( self::JETPACK_SOCIAL_NOTES_CONFIG, $new_config ); - } - /** * Use the_title hook so we show the social note's exceprt in the post list view. * diff --git a/projects/plugins/social/src/class-rest-settings-controller.php b/projects/plugins/social/src/class-rest-settings-controller.php index c95918a08a269..9a265d9bcd8a3 100644 --- a/projects/plugins/social/src/class-rest-settings-controller.php +++ b/projects/plugins/social/src/class-rest-settings-controller.php @@ -106,20 +106,6 @@ public function get_item( $request ) { $data['publicize_active'] = Jetpack_Social::is_publicize_active(); } - if ( rest_is_field_included( 'show_pricing_page', $fields ) ) { - $data['show_pricing_page'] = Jetpack_Social::should_show_pricing_page(); - } - - $note = new Note(); - - if ( rest_is_field_included( 'social_notes_enabled', $fields ) ) { - $data['social_notes_enabled'] = $note->enabled(); - } - - if ( rest_is_field_included( 'social_notes_config', $fields ) ) { - $data['social_notes_config'] = $note->get_config(); - } - return $this->prepare_item_for_response( $data, $request ); } @@ -132,8 +118,6 @@ public function update_item( $request ) { $params = $request->get_params(); $settings = $this->get_endpoint_args_for_item_schema( $request->get_method() ); - $note = new Note(); - foreach ( array_keys( $settings ) as $name ) { if ( ! array_key_exists( $name, $params ) ) { continue; @@ -146,15 +130,6 @@ public function update_item( $request ) { return $updated; } break; - case 'show_pricing_page': - update_option( Jetpack_Social::JETPACK_SOCIAL_SHOW_PRICING_PAGE_OPTION, (int) $params[ $name ] ); - break; - case 'social_notes_enabled': - $note->set_enabled( (bool) $params[ $name ] ); - break; - case 'social_notes_config': - $note->update_config( $params[ $name ] ); - break; } } @@ -222,39 +197,11 @@ public function get_item_schema() { 'title' => 'system_status', 'type' => 'object', 'properties' => array( - 'publicize_active' => array( + 'publicize_active' => array( 'description' => __( 'Is the publicize module enabled?', 'jetpack-social' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), ), - 'show_pricing_page' => array( - 'description' => __( 'Should we show the pricing page?', 'jetpack-social' ), - 'type' => 'boolean', - 'context' => array( 'view', 'edit' ), - ), - 'social_notes_enabled' => array( - 'description' => __( 'Is the social notes feature enabled?', 'jetpack-social' ), - 'type' => 'boolean', - 'context' => array( 'view', 'edit' ), - ), - 'social_notes_config' => array( - 'description' => __( 'The social notes configuration', 'jetpack-social' ), - 'type' => 'object', - 'context' => array( 'view', 'edit' ), - 'properties' => array( - 'append_link' => array( - 'description' => __( 'Whether to append the post link when sharing the note.', 'jetpack-social' ), - 'type' => 'boolean', - 'context' => array( 'view', 'edit' ), - ), - 'link_format' => array( - 'description' => __( 'Link format', 'jetpack-social' ), - 'type' => 'string', - 'enum' => array( 'full_url', 'shortlink', 'permashortcitation' ), - 'context' => array( 'view', 'edit' ), - ), - ), - ), ), ); return $this->add_additional_fields_schema( $schema ); diff --git a/projects/plugins/social/src/js/components/admin-page/index.jsx b/projects/plugins/social/src/js/components/admin-page/index.jsx index 931f5eb6c8e77..0c074c6e874bf 100644 --- a/projects/plugins/social/src/js/components/admin-page/index.jsx +++ b/projects/plugins/social/src/js/components/admin-page/index.jsx @@ -42,7 +42,7 @@ const Admin = () => { return { isModuleEnabled: settings.publicize_active, - showPricingPage: settings.show_pricing_page, + showPricingPage: store.shouldShowPricingPage(), isUpdatingJetpackSettings: store.isSavingSocialPluginSettings(), }; } ); diff --git a/projects/plugins/social/src/js/components/pricing-page/index.js b/projects/plugins/social/src/js/components/pricing-page/index.js index 4a42142867b0d..4fad68da8843d 100644 --- a/projects/plugins/social/src/js/components/pricing-page/index.js +++ b/projects/plugins/social/src/js/components/pricing-page/index.js @@ -23,14 +23,14 @@ const PricingPage = ( { onDismiss = () => {} } = {} ) => { const blogID = getScriptData().site.wpcom.blog_id; const siteSuffix = getScriptData().site.suffix; - const { updateSocialPluginSettings } = useDispatch( socialStore ); + const { setShowPricingPage } = useDispatch( socialStore ); const [ isLarge ] = useBreakpointMatch( 'lg' ); const hidePricingPage = useCallback( () => { - updateSocialPluginSettings( { show_pricing_page: false } ); + setShowPricingPage( false ); onDismiss(); - }, [ updateSocialPluginSettings, onDismiss ] ); + }, [ setShowPricingPage, onDismiss ] ); return ( = ( { disabled } ) => { const { isEnabled, notesConfig, isUpdating } = useSelect( select => { const store = select( socialStore ); - const settings = store.getSocialPluginSettings(); return { - isEnabled: settings.social_notes_enabled, - notesConfig: settings.social_notes_config, - isUpdating: store.isSavingSocialPluginSettings(), + isEnabled: store.isSocialNotesEnabled(), + notesConfig: store.getSocialNotesConfig(), + isUpdating: store.isSavingSiteSettings(), }; }, [] ); @@ -49,46 +48,38 @@ const SocialNotesToggle: React.FC< SocialNotesToggleProps > = ( { disabled } ) = const [ isSmall ] = useBreakpointMatch( 'sm' ); - const { updateSocialPluginSettings } = useDispatch( socialStore ); + const { toggleSocialNotes, updateSocialNotesConfig } = useDispatch( socialStore ); const toggleStatus = useCallback( async () => { - handleStateUpdating( () => - updateSocialPluginSettings( { - social_notes_enabled: ! isEnabled, - } ) - ); - }, [ isEnabled, updateSocialPluginSettings ] ); + handleStateUpdating( () => toggleSocialNotes( ! isEnabled ) ); + }, [ isEnabled, toggleSocialNotes ] ); const onToggleAppendLink = useCallback( ( append_link: boolean ) => { handleStateUpdating( () => - updateSocialPluginSettings( { - social_notes_config: { - ...notesConfig, - append_link, - }, + updateSocialNotesConfig( { + ...notesConfig, + append_link, } ), setIsAppendLinkToggleUpdating ); }, - [ notesConfig, updateSocialPluginSettings ] + [ notesConfig, updateSocialNotesConfig ] ); const onChangeLinkFormat = useCallback( ( link_format: string ) => { handleStateUpdating( () => - updateSocialPluginSettings( { - social_notes_config: { - ...notesConfig, - link_format: link_format as ( typeof notesConfig )[ 'link_format' ], - }, + updateSocialNotesConfig( { + ...notesConfig, + link_format: link_format as ( typeof notesConfig )[ 'link_format' ], } ), setIsLinkFormatUpdating ); }, - [ notesConfig, updateSocialPluginSettings ] + [ notesConfig, updateSocialNotesConfig ] ); const appendLink = notesConfig.append_link ?? true; @@ -122,23 +113,23 @@ const SocialNotesToggle: React.FC< SocialNotesToggleProps > = ( { disabled } ) = { __( 'Create a note', 'jetpack-social' ) } - { isEnabled && ! isUpdating ? ( + { isEnabled ? (
      - { appendLink && ! isAppendLinkToggleUpdating ? ( + { appendLink ? ( assertSame( 0, did_action( 'jetpack_feature_publicize_enabled' ) ); } - - /** - * Test the social notes feature. - */ - public function test_social_notes() { - $note = new Note(); - $note->init(); - $this->assertEmpty( get_option( Note::FLUSH_REWRITE_RULES_FLUSHED ) ); - update_option( Note::JETPACK_SOCIAL_NOTE_CPT, true ); - $note->init(); - $this->assertTrue( get_option( Note::FLUSH_REWRITE_RULES_FLUSHED ) ); - $note->set_enabled( false ); - $this->assertFalse( $note->enabled() ); - $note->init(); - $this->assertEmpty( get_option( Note::FLUSH_REWRITE_RULES_FLUSHED ) ); - $note->set_enabled( true ); - $note->init(); - $this->assertTrue( get_option( Note::FLUSH_REWRITE_RULES_FLUSHED ) ); - } } From c8d8a958fc32043fd322fd7b479c9e15fa775536 Mon Sep 17 00:00:00 2001 From: Matias Benedetto Date: Tue, 21 Jan 2025 04:22:12 -0800 Subject: [PATCH 139/420] Fix Jetpack Google Fonts rendering in classic themes (#41190) * fix the loading th jetpack google fonts in classic themes * changelog --- .../changelog/fix-jetpack-google-fonts-in-classic-themes | 4 ++++ .../current/class-jetpack-google-font-face.php | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-google-fonts-in-classic-themes diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-google-fonts-in-classic-themes b/projects/plugins/jetpack/changelog/fix-jetpack-google-fonts-in-classic-themes new file mode 100644 index 0000000000000..0a2c259a241f1 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-jetpack-google-fonts-in-classic-themes @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Fix the rendering of jetpack google fonts font faces for classic themes. diff --git a/projects/plugins/jetpack/modules/google-fonts/current/class-jetpack-google-font-face.php b/projects/plugins/jetpack/modules/google-fonts/current/class-jetpack-google-font-face.php index b69a7b56d1bc8..1ee4aa322eb32 100644 --- a/projects/plugins/jetpack/modules/google-fonts/current/class-jetpack-google-font-face.php +++ b/projects/plugins/jetpack/modules/google-fonts/current/class-jetpack-google-font-face.php @@ -27,7 +27,12 @@ public function __construct() { add_action( 'current_screen', array( $this, 'current_screen' ), 10 ); // Collect and print fonts in use - add_action( 'wp_head', array( $this, 'print_font_faces' ), 50 ); + if ( wp_is_block_theme() ) { + add_action( 'wp_head', array( $this, 'print_font_faces' ), 50 ); + } else { + // In classic themes wp_head runs before the blocks are processed to collect the block fonts. + add_action( 'wp_footer', array( $this, 'print_font_faces' ), 50 ); + } add_filter( 'pre_render_block', array( $this, 'collect_block_fonts' ), 10, 2 ); } From a166b0702e0e930ed8a33d49c3da6b982078aed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20M=C3=A1rk=20Juh=C3=A1sz?= <36671565+gmjuhasz@users.noreply.github.com> Date: Tue, 21 Jan 2025 13:43:12 +0100 Subject: [PATCH 140/420] Social: Move admin page to publicize components (#41181) * Add the new components to the publicize-components folder * Use the new admin page in the social plugin * Remove deprecated code from the social plugin * changelog * Fix optimization build issue --- ...al-move-admin-page-to-publicize-components | 4 + .../js-packages/publicize-components/index.ts | 1 + .../connection-screen/background.svg | 0 .../connection-screen/illustration.png | Bin .../admin-page}/connection-screen/index.js | 16 ++-- .../connection-screen/styles.module.scss | 0 .../components/admin-page}/header/index.js | 23 +++--- .../admin-page/header}/stat-cards/index.js | 0 .../header}/stat-cards/styles.module.scss | 0 .../admin-page}/header/styles.module.scss | 0 .../src/components/admin-page/index.tsx} | 35 ++++---- .../admin-page}/info-section/index.js | 6 +- .../info-section/styles.module.scss | 0 .../admin-page/page-header}/index.jsx | 6 +- .../admin-page/page-header/logo.js} | 0 .../page-header}/styles.module.scss | 0 .../admin-page/pricing-page/index.tsx} | 55 +++++++------ .../pricing-page/styles.module.scss | 0 .../components/admin-page/styles.module.scss | 0 .../support-section}/icon-text/index.js | 0 .../icon-text/styles.module.scss | 0 .../admin-page}/support-section/index.js | 10 +-- .../support-section/styles.module.scss | 0 .../components/admin-page/test/index.test.jsx | 2 +- .../social-image-generator-toggle/index.tsx | 12 ++- .../styles.module.scss | 0 .../toggles}/social-module-toggle/index.tsx | 26 +++--- .../social-module-toggle/styles.module.scss | 0 .../toggles}/social-notes-toggle/index.tsx | 30 ++++--- .../social-notes-toggle/styles.module.scss | 0 .../admin-page/toggles}/styles.module.scss | 0 .../admin-page/toggles/toggle-section.tsx | 75 ++++++++++++++++++ .../admin-page/toggles}/utm-toggle/index.tsx | 6 +- .../toggles}/utm-toggle/styles.module.scss | 0 .../src}/hooks/use-product-info/index.js | 0 .../hooks/use-product-info/test/index.test.js | 0 ...al-move-admin-page-to-publicize-components | 4 + .../js/components/toggle-section/README.md | 28 ------- .../js/components/toggle-section/index.tsx | 35 -------- .../src/js/components/toggle-section/types.ts | 31 -------- projects/plugins/social/src/js/index.js | 4 +- 41 files changed, 199 insertions(+), 210 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/refactor-social-move-admin-page-to-publicize-components rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/connection-screen/background.svg (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/connection-screen/illustration.png (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/connection-screen/index.js (78%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/connection-screen/styles.module.scss (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/header/index.js (79%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/header}/stat-cards/index.js (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/header}/stat-cards/styles.module.scss (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/header/styles.module.scss (100%) rename projects/{plugins/social/src/js/components/admin-page/index.jsx => js-packages/publicize-components/src/components/admin-page/index.tsx} (77%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/info-section/index.js (90%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/info-section/styles.module.scss (100%) rename projects/{plugins/social/src/js/components/admin-page/header => js-packages/publicize-components/src/components/admin-page/page-header}/index.jsx (85%) rename projects/{plugins/social/src/js/components/logo/index.js => js-packages/publicize-components/src/components/admin-page/page-header/logo.js} (100%) rename projects/{plugins/social/src/js/components/admin-page/header => js-packages/publicize-components/src/components/admin-page/page-header}/styles.module.scss (100%) rename projects/{plugins/social/src/js/components/pricing-page/index.js => js-packages/publicize-components/src/components/admin-page/pricing-page/index.tsx} (67%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/pricing-page/styles.module.scss (100%) rename projects/{plugins/social/src/js => js-packages/publicize-components/src}/components/admin-page/styles.module.scss (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/support-section}/icon-text/index.js (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/support-section}/icon-text/styles.module.scss (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/support-section/index.js (80%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page}/support-section/styles.module.scss (100%) rename projects/{plugins/social/src/js => js-packages/publicize-components/src}/components/admin-page/test/index.test.jsx (90%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/toggles}/social-image-generator-toggle/index.tsx (86%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/toggles}/social-image-generator-toggle/styles.module.scss (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/toggles}/social-module-toggle/index.tsx (83%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/toggles}/social-module-toggle/styles.module.scss (100%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/toggles}/social-notes-toggle/index.tsx (82%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/toggles}/social-notes-toggle/styles.module.scss (100%) rename projects/{plugins/social/src/js/components/toggle-section => js-packages/publicize-components/src/components/admin-page/toggles}/styles.module.scss (100%) create mode 100644 projects/js-packages/publicize-components/src/components/admin-page/toggles/toggle-section.tsx rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/toggles}/utm-toggle/index.tsx (91%) rename projects/{plugins/social/src/js/components => js-packages/publicize-components/src/components/admin-page/toggles}/utm-toggle/styles.module.scss (100%) rename projects/{plugins/social/src/js => js-packages/publicize-components/src}/hooks/use-product-info/index.js (100%) rename projects/{plugins/social/src/js => js-packages/publicize-components/src}/hooks/use-product-info/test/index.test.js (100%) create mode 100644 projects/plugins/social/changelog/refactor-social-move-admin-page-to-publicize-components delete mode 100644 projects/plugins/social/src/js/components/toggle-section/README.md delete mode 100644 projects/plugins/social/src/js/components/toggle-section/index.tsx delete mode 100644 projects/plugins/social/src/js/components/toggle-section/types.ts diff --git a/projects/js-packages/publicize-components/changelog/refactor-social-move-admin-page-to-publicize-components b/projects/js-packages/publicize-components/changelog/refactor-social-move-admin-page-to-publicize-components new file mode 100644 index 0000000000000..c1fdb6d472afa --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/refactor-social-move-admin-page-to-publicize-components @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Moved the Social admin page to the publicize-components package diff --git a/projects/js-packages/publicize-components/index.ts b/projects/js-packages/publicize-components/index.ts index 7f79279c8d3d8..a18a2aded03fe 100644 --- a/projects/js-packages/publicize-components/index.ts +++ b/projects/js-packages/publicize-components/index.ts @@ -18,6 +18,7 @@ export { default as PublicizePanel } from './src/components/panel'; export { default as ReviewPrompt } from './src/components/review-prompt'; export { default as PostPublishPanels } from './src/components/post-publish-panels'; export { default as ConnectionManagement } from './src/components/connection-management'; +export { default as SocialAdminPage } from './src/components/admin-page'; export { default as UtmToggle } from './src/components/utm-toggle'; export { default as useSocialMediaConnections } from './src/hooks/use-social-media-connections'; diff --git a/projects/plugins/social/src/js/components/connection-screen/background.svg b/projects/js-packages/publicize-components/src/components/admin-page/connection-screen/background.svg similarity index 100% rename from projects/plugins/social/src/js/components/connection-screen/background.svg rename to projects/js-packages/publicize-components/src/components/admin-page/connection-screen/background.svg diff --git a/projects/plugins/social/src/js/components/connection-screen/illustration.png b/projects/js-packages/publicize-components/src/components/admin-page/connection-screen/illustration.png similarity index 100% rename from projects/plugins/social/src/js/components/connection-screen/illustration.png rename to projects/js-packages/publicize-components/src/components/admin-page/connection-screen/illustration.png diff --git a/projects/plugins/social/src/js/components/connection-screen/index.js b/projects/js-packages/publicize-components/src/components/admin-page/connection-screen/index.js similarity index 78% rename from projects/plugins/social/src/js/components/connection-screen/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/connection-screen/index.js index fb7a30dc68f31..dc025619001b3 100644 --- a/projects/plugins/social/src/js/components/connection-screen/index.js +++ b/projects/js-packages/publicize-components/src/components/admin-page/connection-screen/index.js @@ -1,6 +1,6 @@ import { Dialog, ProductOffer, TermsOfService } from '@automattic/jetpack-components'; import { useConnection } from '@automattic/jetpack-connection'; -import { __ } from '@wordpress/i18n'; +import { __, _x } from '@wordpress/i18n'; import React from 'react'; import background from './background.svg'; import illustration from './illustration.png'; @@ -13,7 +13,7 @@ const ConnectionScreen = () => { redirectUri: 'admin.php?page=jetpack-social', } ); - const buttonText = __( 'Get Started', 'jetpack-social' ); + const buttonText = __( 'Get Started', 'jetpack-publicize-components' ); return ( { { } error={ registrationError - ? __( 'An error occurred. Please try again.', 'jetpack-social' ) + ? __( 'An error occurred. Please try again.', 'jetpack-publicize-components' ) : null } /> diff --git a/projects/plugins/social/src/js/components/connection-screen/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/connection-screen/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/connection-screen/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/connection-screen/styles.module.scss diff --git a/projects/plugins/social/src/js/components/header/index.js b/projects/js-packages/publicize-components/src/components/admin-page/header/index.js similarity index 79% rename from projects/plugins/social/src/js/components/header/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/header/index.js index be31b4c0b62b8..edbaee4243cfa 100644 --- a/projects/plugins/social/src/js/components/header/index.js +++ b/projects/js-packages/publicize-components/src/components/admin-page/header/index.js @@ -7,17 +7,14 @@ import { getUserLocale, } from '@automattic/jetpack-components'; import { ConnectionError, useConnectionErrorNotice } from '@automattic/jetpack-connection'; -import { - getSocialScriptData, - getTotalSharesCount, - getSharedPostsCount, - store as socialStore, -} from '@automattic/jetpack-publicize-components'; import { getAdminUrl } from '@automattic/jetpack-script-data'; import { useDispatch, useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import { Icon, postList } from '@wordpress/icons'; -import StatCards from '../stat-cards'; +import { store as socialStore } from '../../../social-store'; +import { getSocialScriptData } from '../../../utils'; +import { getSharedPostsCount, getTotalSharesCount } from '../../../utils/shares-data'; +import StatCards from './stat-cards'; import styles from './styles.module.scss'; const Header = () => { @@ -56,17 +53,17 @@ const Header = () => { -

      { __( 'Write once, post everywhere', 'jetpack-social' ) }

      +

      { __( 'Write once, post everywhere', 'jetpack-publicize-components' ) }

      { isModuleEnabled && ! hasConnections && ( <> { useAdminUiV1 ? ( ) : ( ) } @@ -75,7 +72,7 @@ const Header = () => { href={ getAdminUrl( 'post-new.php' ) } variant={ hasConnections ? 'primary' : 'secondary' } > - { __( 'Write a post', 'jetpack-social' ) } + { __( 'Write a post', 'jetpack-publicize-components' ) }
      @@ -84,12 +81,12 @@ const Header = () => { stats={ [ { icon: , - label: __( 'Total shares past 30 days', 'jetpack-social' ), + label: __( 'Total shares past 30 days', 'jetpack-publicize-components' ), value: formatter.format( getTotalSharesCount() ), }, { icon: , - label: __( 'Posted this month', 'jetpack-social' ), + label: __( 'Posted this month', 'jetpack-publicize-components' ), value: formatter.format( getSharedPostsCount() ), }, ] } diff --git a/projects/plugins/social/src/js/components/stat-cards/index.js b/projects/js-packages/publicize-components/src/components/admin-page/header/stat-cards/index.js similarity index 100% rename from projects/plugins/social/src/js/components/stat-cards/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/header/stat-cards/index.js diff --git a/projects/plugins/social/src/js/components/stat-cards/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/header/stat-cards/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/stat-cards/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/header/stat-cards/styles.module.scss diff --git a/projects/plugins/social/src/js/components/header/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/header/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/header/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/header/styles.module.scss diff --git a/projects/plugins/social/src/js/components/admin-page/index.jsx b/projects/js-packages/publicize-components/src/components/admin-page/index.tsx similarity index 77% rename from projects/plugins/social/src/js/components/admin-page/index.jsx rename to projects/js-packages/publicize-components/src/components/admin-page/index.tsx index 0c074c6e874bf..40bd63fffc54a 100644 --- a/projects/plugins/social/src/js/components/admin-page/index.jsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/index.tsx @@ -7,29 +7,24 @@ import { GlobalNotices, } from '@automattic/jetpack-components'; import { useConnection } from '@automattic/jetpack-connection'; -import { - hasSocialPaidFeatures, - store as socialStore, - features, - getSocialScriptData, -} from '@automattic/jetpack-publicize-components'; import { siteHasFeature } from '@automattic/jetpack-script-data'; import { useSelect } from '@wordpress/data'; import { useState, useCallback } from '@wordpress/element'; -import React from 'react'; -import PricingPage from '../pricing-page'; -import SocialImageGeneratorToggle from '../social-image-generator-toggle'; -import SocialModuleToggle from '../social-module-toggle'; -import SocialNotesToggle from '../social-notes-toggle'; -import SupportSection from '../support-section'; -import UtmToggle from '../utm-toggle'; -import ConnectionScreen from './../connection-screen'; -import Header from './../header'; -import InfoSection from './../info-section'; -import AdminPageHeader from './header'; +import { store as socialStore } from '../../social-store'; +import { features, getSocialScriptData, hasSocialPaidFeatures } from '../../utils'; +import ConnectionScreen from './connection-screen'; +import Header from './header'; +import InfoSection from './info-section'; +import AdminPageHeader from './page-header'; import './styles.module.scss'; +import PricingPage from './pricing-page'; +import SupportSection from './support-section'; +import SocialImageGeneratorToggle from './toggles/social-image-generator-toggle'; +import SocialModuleToggle from './toggles/social-module-toggle'; +import SocialNotesToggle from './toggles/social-notes-toggle'; +import UtmToggle from './toggles/utm-toggle'; -const Admin = () => { +const SocialAdminPage = () => { const { isUserConnected, isRegistered } = useConnection(); const showConnectionCard = ! isRegistered || ! isUserConnected; const [ forceDisplayPricingPage, setForceDisplayPricingPage ] = useState( false ); @@ -45,7 +40,7 @@ const Admin = () => { showPricingPage: store.shouldShowPricingPage(), isUpdatingJetpackSettings: store.isSavingSocialPluginSettings(), }; - } ); + }, [] ); const pluginVersion = getSocialScriptData().plugin_info.social.version; @@ -99,4 +94,4 @@ const Admin = () => { ); }; -export default Admin; +export default SocialAdminPage; diff --git a/projects/plugins/social/src/js/components/info-section/index.js b/projects/js-packages/publicize-components/src/components/admin-page/info-section/index.js similarity index 90% rename from projects/plugins/social/src/js/components/info-section/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/info-section/index.js index 624c5fa132d78..69bf26ece75a4 100644 --- a/projects/plugins/social/src/js/components/info-section/index.js +++ b/projects/js-packages/publicize-components/src/components/admin-page/info-section/index.js @@ -16,7 +16,7 @@ const InfoSection = () => {
      - { __( 'Did you know?', 'jetpack-social' ) } + { __( 'Did you know?', 'jetpack-publicize-components' ) } 40x @@ -24,7 +24,7 @@ const InfoSection = () => { { __( 'Visual content is 40 times more likely to get shared on social media than any other type. Remember to include an image.', - 'jetpack-social' + 'jetpack-publicize-components' ) } @@ -33,7 +33,7 @@ const InfoSection = () => { { __( 'By publishing at least once per week, you’ll be ahead of 99% of all other sites. Promoting that weekly content on social media may grow your audience by 10x in a few short months.', - 'jetpack-social' + 'jetpack-publicize-components' ) }
      diff --git a/projects/plugins/social/src/js/components/info-section/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/info-section/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/info-section/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/info-section/styles.module.scss diff --git a/projects/plugins/social/src/js/components/admin-page/header/index.jsx b/projects/js-packages/publicize-components/src/components/admin-page/page-header/index.jsx similarity index 85% rename from projects/plugins/social/src/js/components/admin-page/header/index.jsx rename to projects/js-packages/publicize-components/src/components/admin-page/page-header/index.jsx index 2aa32878a9553..55a8c4b30f784 100644 --- a/projects/plugins/social/src/js/components/admin-page/header/index.jsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/page-header/index.jsx @@ -1,8 +1,8 @@ -import { hasSocialPaidFeatures } from '@automattic/jetpack-publicize-components'; import { getMyJetpackUrl, getScriptData } from '@automattic/jetpack-script-data'; import { createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import Logo from './../../logo'; +import { hasSocialPaidFeatures } from '../../../utils'; +import Logo from './logo'; import styles from './styles.module.scss'; const AdminPageHeader = () => { @@ -19,7 +19,7 @@ const AdminPageHeader = () => { { createInterpolateElement( __( 'Already have an existing plan or license key?
      Click here to get started', - 'jetpack-social' + 'jetpack-publicize-components' ), { a: , diff --git a/projects/plugins/social/src/js/components/logo/index.js b/projects/js-packages/publicize-components/src/components/admin-page/page-header/logo.js similarity index 100% rename from projects/plugins/social/src/js/components/logo/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/page-header/logo.js diff --git a/projects/plugins/social/src/js/components/admin-page/header/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/page-header/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/admin-page/header/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/page-header/styles.module.scss diff --git a/projects/plugins/social/src/js/components/pricing-page/index.js b/projects/js-packages/publicize-components/src/components/admin-page/pricing-page/index.tsx similarity index 67% rename from projects/plugins/social/src/js/components/pricing-page/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/pricing-page/index.tsx index 4fad68da8843d..f1c58f7279515 100644 --- a/projects/plugins/social/src/js/components/pricing-page/index.js +++ b/projects/js-packages/publicize-components/src/components/admin-page/pricing-page/index.tsx @@ -8,13 +8,13 @@ import { getRedirectUrl, useBreakpointMatch, } from '@automattic/jetpack-components'; -import { store as socialStore } from '@automattic/jetpack-publicize-components'; import { getScriptData } from '@automattic/jetpack-script-data'; import { Spinner } from '@wordpress/components'; import { useDispatch } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import { useCallback } from 'react'; -import useProductInfo from '../../hooks/use-product-info'; +import useProductInfo from '../../../hooks/use-product-info'; +import { store as socialStore } from '../../../social-store'; import styles from './styles.module.scss'; const PricingPage = ( { onDismiss = () => {} } = {} ) => { @@ -35,43 +35,43 @@ const PricingPage = ( { onDismiss = () => {} } = {} ) => { return ( {} } = {} ) => { @@ -91,12 +94,12 @@ const PricingPage = ( { onDismiss = () => {} } = {} ) => { ) } @@ -107,7 +110,7 @@ const PricingPage = ( { onDismiss = () => {} } = {} ) => { - + @@ -123,18 +126,18 @@ const PricingPage = ( { onDismiss = () => {} } = {} ) => { onClick={ hidePricingPage } className={ isLarge && styles.button } > - { __( 'Start for free', 'jetpack-social' ) } + { __( 'Start for free', 'jetpack-publicize-components' ) } - + - - - - + + + + ); diff --git a/projects/plugins/social/src/js/components/pricing-page/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/pricing-page/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/pricing-page/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/pricing-page/styles.module.scss diff --git a/projects/plugins/social/src/js/components/admin-page/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/admin-page/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/styles.module.scss diff --git a/projects/plugins/social/src/js/components/icon-text/index.js b/projects/js-packages/publicize-components/src/components/admin-page/support-section/icon-text/index.js similarity index 100% rename from projects/plugins/social/src/js/components/icon-text/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/support-section/icon-text/index.js diff --git a/projects/plugins/social/src/js/components/icon-text/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/support-section/icon-text/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/icon-text/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/support-section/icon-text/styles.module.scss diff --git a/projects/plugins/social/src/js/components/support-section/index.js b/projects/js-packages/publicize-components/src/components/admin-page/support-section/index.js similarity index 80% rename from projects/plugins/social/src/js/components/support-section/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/support-section/index.js index fc5b05dde9c86..f5d050a464c9f 100644 --- a/projects/plugins/social/src/js/components/support-section/index.js +++ b/projects/js-packages/publicize-components/src/components/admin-page/support-section/index.js @@ -4,12 +4,12 @@ import { getRedirectUrl, useBreakpointMatch, } from '@automattic/jetpack-components'; -import { hasSocialPaidFeatures } from '@automattic/jetpack-publicize-components'; import { ExternalLink } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { Icon, lifesaver } from '@wordpress/icons'; import clsx from 'clsx'; -import IconText from '../icon-text'; +import { hasSocialPaidFeatures } from '../../../utils'; +import IconText from './icon-text'; import styles from './styles.module.scss'; const SupportSection = () => { @@ -29,17 +29,17 @@ const SupportSection = () => { > } - title={ __( 'World-class support', 'jetpack-social' ) } + title={ __( 'World-class support', 'jetpack-publicize-components' ) } > { __( 'Do you need any help? Get in touch with our world-class support with a high-priority support ticket and get a solution faster.', - 'jetpack-social' + 'jetpack-publicize-components' ) } - { __( 'Contact Support', 'jetpack-social' ) } + { __( 'Contact Support', 'jetpack-publicize-components' ) } diff --git a/projects/plugins/social/src/js/components/support-section/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/support-section/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/support-section/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/support-section/styles.module.scss diff --git a/projects/plugins/social/src/js/components/admin-page/test/index.test.jsx b/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx similarity index 90% rename from projects/plugins/social/src/js/components/admin-page/test/index.test.jsx rename to projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx index b96ed30c82e3b..e959c6f18cfcd 100644 --- a/projects/plugins/social/src/js/components/admin-page/test/index.test.jsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx @@ -1,7 +1,7 @@ -import { SOCIAL_STORE_ID, SOCIAL_STORE_CONFIG } from '@automattic/jetpack-publicize-components'; import { render, renderHook, screen } from '@testing-library/react'; import { useSelect, createReduxStore, register } from '@wordpress/data'; import React from 'react'; +import { SOCIAL_STORE_CONFIG, SOCIAL_STORE_ID } from '../../../social-store'; import Admin from '../index'; const store = createReduxStore( SOCIAL_STORE_ID, SOCIAL_STORE_CONFIG ); diff --git a/projects/plugins/social/src/js/components/social-image-generator-toggle/index.tsx b/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-image-generator-toggle/index.tsx similarity index 86% rename from projects/plugins/social/src/js/components/social-image-generator-toggle/index.tsx rename to projects/js-packages/publicize-components/src/components/admin-page/toggles/social-image-generator-toggle/index.tsx index 112e27b3eba92..2177130bc94aa 100644 --- a/projects/plugins/social/src/js/components/social-image-generator-toggle/index.tsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-image-generator-toggle/index.tsx @@ -1,12 +1,10 @@ import { Button, Text, useBreakpointMatch } from '@automattic/jetpack-components'; -import { - SocialImageGeneratorTemplatePickerModal as TemplatePickerModal, - store as socialStore, -} from '@automattic/jetpack-publicize-components'; import { useDispatch, useSelect } from '@wordpress/data'; import { useCallback } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import React from 'react'; +import { store as socialStore } from '../../../../social-store'; +import TemplatePickerModal from '../../../social-image-generator/template-picker/modal'; import ToggleSection from '../toggle-section'; import styles from './styles.module.scss'; @@ -57,7 +55,7 @@ const SocialImageGeneratorToggle: React.FC< SocialImageGeneratorToggleProps > = disabled={ isUpdating || ! isEnabled } onClick={ open } > - { __( 'Change default template', 'jetpack-social' ) } + { __( 'Change default template', 'jetpack-publicize-components' ) } ), [ isEnabled, isSmall, isUpdating ] @@ -65,7 +63,7 @@ const SocialImageGeneratorToggle: React.FC< SocialImageGeneratorToggleProps > = return ( = { __( 'When enabled, Social Image Generator will automatically generate social images for your posts. You can use the button below to choose a default template for new posts. This feature is only supported in the block editor.', - 'jetpack-social' + 'jetpack-publicize-components' ) } { disabled={ isUpdating || ! isModuleEnabled } target="_blank" > - { __( 'Manage social media connections', 'jetpack-social' ) } + { __( 'Manage social media connections', 'jetpack-publicize-components' ) } ) : null; }; return ( { { __( 'When enabled, you’ll be able to connect your social media accounts and send a post’s featured image and content to the selected channels with a single click when the post is published.', - 'jetpack-social' + 'jetpack-publicize-components' ) }   - { __( 'Learn more', 'jetpack-social' ) } + { __( 'Learn more', 'jetpack-publicize-components' ) } { ! hasSocialPaidFeatures() ? ( ) : null } diff --git a/projects/plugins/social/src/js/components/social-module-toggle/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-module-toggle/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/social-module-toggle/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/toggles/social-module-toggle/styles.module.scss diff --git a/projects/plugins/social/src/js/components/social-notes-toggle/index.tsx b/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-notes-toggle/index.tsx similarity index 82% rename from projects/plugins/social/src/js/components/social-notes-toggle/index.tsx rename to projects/js-packages/publicize-components/src/components/admin-page/toggles/social-notes-toggle/index.tsx index 258476f3b2802..ca76ccd8df563 100644 --- a/projects/plugins/social/src/js/components/social-notes-toggle/index.tsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-notes-toggle/index.tsx @@ -1,11 +1,11 @@ import { Text, Button, useBreakpointMatch } from '@automattic/jetpack-components'; -import { store as socialStore } from '@automattic/jetpack-publicize-components'; import { getAdminUrl } from '@automattic/jetpack-script-data'; import { ExternalLink, SelectControl, ToggleControl } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; import { useCallback } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import React, { useState } from 'react'; +import { store as socialStore } from '../../../../social-store'; import ToggleSection from '../toggle-section'; import styles from './styles.module.scss'; @@ -86,7 +86,7 @@ const SocialNotesToggle: React.FC< SocialNotesToggleProps > = ( { disabled } ) = return ( = ( { disabled } ) = { __( "Do you want to quickly share what's on your mind? Turn on Social Notes to effortlessly jot down and share quick notes without the need for titles or formatting, enabling swift and spontaneous communication with your followers.", - 'jetpack-social' + 'jetpack-publicize-components' ) } @@ -110,40 +110,46 @@ const SocialNotesToggle: React.FC< SocialNotesToggleProps > = ( { disabled } ) = disabled={ isUpdating || ! isEnabled } href={ newNoteUrl } > - { __( 'Create a note', 'jetpack-social' ) } + { __( 'Create a note', 'jetpack-publicize-components' ) } { isEnabled ? (
      { appendLink ? ( - { __( 'Format of the link to use when sharing a note.', 'jetpack-social' ) } + { __( + 'Format of the link to use when sharing a note.', + 'jetpack-publicize-components' + ) }   - { __( 'Learn more', 'jetpack-social' ) } + { __( 'Learn more', 'jetpack-publicize-components' ) } } diff --git a/projects/plugins/social/src/js/components/social-notes-toggle/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-notes-toggle/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/social-notes-toggle/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/toggles/social-notes-toggle/styles.module.scss diff --git a/projects/plugins/social/src/js/components/toggle-section/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/toggles/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/toggle-section/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/toggles/styles.module.scss diff --git a/projects/js-packages/publicize-components/src/components/admin-page/toggles/toggle-section.tsx b/projects/js-packages/publicize-components/src/components/admin-page/toggles/toggle-section.tsx new file mode 100644 index 0000000000000..b1f797180820b --- /dev/null +++ b/projects/js-packages/publicize-components/src/components/admin-page/toggles/toggle-section.tsx @@ -0,0 +1,75 @@ +import { Container, Text } from '@automattic/jetpack-components'; +import { ToggleControl } from '@wordpress/components'; +import React from 'react'; +import styles from './styles.module.scss'; + +type ToggleSectionProps = { + /** + * Title of the Toggle. + */ + title: string; + + /** + * Whether the toggle is in beta. + */ + beta?: boolean; + + /** + * Callback to be called when the toggle is clicked. + */ + onChange: () => void; + + /** + * Whether the toggle is checked. + */ + checked: boolean; + + /** + * Whether the toggle is disabled. + */ + disabled: boolean; + + /** + * Children to be rendered inside the toggle. + */ + children: React.ReactNode; +}; + +/** + * ToggleSection Component + * + * This component is used on the Social Admin page. It wraps a Jetpack styled toggle, + * a title, and an optional description or additional content. + * + * @param {ToggleSectionProps} props - The properties that define the behavior and appearance of the component. + * @return {JSX.Element} The rendered ToggleSection component. + */ +const ToggleSection: React.FC< ToggleSectionProps > = ( { + title, + beta, + onChange, + checked, + disabled, + children, +} ) => ( + +
      + + + { title } + { beta &&
      Beta
      } +
      + + { children } +
      +
      +); + +export default ToggleSection; diff --git a/projects/plugins/social/src/js/components/utm-toggle/index.tsx b/projects/js-packages/publicize-components/src/components/admin-page/toggles/utm-toggle/index.tsx similarity index 91% rename from projects/plugins/social/src/js/components/utm-toggle/index.tsx rename to projects/js-packages/publicize-components/src/components/admin-page/toggles/utm-toggle/index.tsx index 5f4f5a682cd46..07f1fe7f0119a 100644 --- a/projects/plugins/social/src/js/components/utm-toggle/index.tsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/toggles/utm-toggle/index.tsx @@ -1,9 +1,9 @@ import { Text } from '@automattic/jetpack-components'; -import { store as socialStore } from '@automattic/jetpack-publicize-components'; import { useSelect, useDispatch } from '@wordpress/data'; import { useCallback } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import React from 'react'; +import { store as socialStore } from '../../../../social-store'; import ToggleSection from '../toggle-section'; import styles from './styles.module.scss'; @@ -30,7 +30,7 @@ const UtmToggle: React.FC< UtmToggleProps > = ( { disabled } ) => { return ( = ( { disabled } ) => { { __( "UTM parameters are tags added to links to help track where website visitors come from, improving our understanding of how content is shared. Don't worry, it doesn't change the experience or the link destination!", - 'jetpack-social' + 'jetpack-publicize-components' ) } diff --git a/projects/plugins/social/src/js/components/utm-toggle/styles.module.scss b/projects/js-packages/publicize-components/src/components/admin-page/toggles/utm-toggle/styles.module.scss similarity index 100% rename from projects/plugins/social/src/js/components/utm-toggle/styles.module.scss rename to projects/js-packages/publicize-components/src/components/admin-page/toggles/utm-toggle/styles.module.scss diff --git a/projects/plugins/social/src/js/hooks/use-product-info/index.js b/projects/js-packages/publicize-components/src/hooks/use-product-info/index.js similarity index 100% rename from projects/plugins/social/src/js/hooks/use-product-info/index.js rename to projects/js-packages/publicize-components/src/hooks/use-product-info/index.js diff --git a/projects/plugins/social/src/js/hooks/use-product-info/test/index.test.js b/projects/js-packages/publicize-components/src/hooks/use-product-info/test/index.test.js similarity index 100% rename from projects/plugins/social/src/js/hooks/use-product-info/test/index.test.js rename to projects/js-packages/publicize-components/src/hooks/use-product-info/test/index.test.js diff --git a/projects/plugins/social/changelog/refactor-social-move-admin-page-to-publicize-components b/projects/plugins/social/changelog/refactor-social-move-admin-page-to-publicize-components new file mode 100644 index 0000000000000..c1fdb6d472afa --- /dev/null +++ b/projects/plugins/social/changelog/refactor-social-move-admin-page-to-publicize-components @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Moved the Social admin page to the publicize-components package diff --git a/projects/plugins/social/src/js/components/toggle-section/README.md b/projects/plugins/social/src/js/components/toggle-section/README.md deleted file mode 100644 index b0f050311f264..0000000000000 --- a/projects/plugins/social/src/js/components/toggle-section/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# ToggleSection component - -This component is used on the Social Admin page. It wraps a Jetpack styled toggle, title, -and description. - -```es6 -import ToggleSection from '../toggle-section'; -import { useSelect } from '@wordpress/data'; - -function MyFunctionalComponent() { - const { isUpdating, isModuleEnabled, toggleModule } = useSelect( select => { - ... - }, [] ); - - return ( - -
      - {...} -
      -
      - ); -} -``` diff --git a/projects/plugins/social/src/js/components/toggle-section/index.tsx b/projects/plugins/social/src/js/components/toggle-section/index.tsx deleted file mode 100644 index a896c11450af3..0000000000000 --- a/projects/plugins/social/src/js/components/toggle-section/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Container, Text } from '@automattic/jetpack-components'; -import { ToggleControl } from '@wordpress/components'; -import React from 'react'; -import styles from './styles.module.scss'; -import { ToggleSectionProps } from './types'; - -const ToggleSection: React.FC< ToggleSectionProps > = ( { - title, - beta, - onChange, - checked, - disabled, - children, -} ) => ( - -
      - - - { title } - { beta &&
      Beta
      } -
      - - { children } -
      -
      -); - -export default ToggleSection; diff --git a/projects/plugins/social/src/js/components/toggle-section/types.ts b/projects/plugins/social/src/js/components/toggle-section/types.ts deleted file mode 100644 index bb3ad8259b4c7..0000000000000 --- a/projects/plugins/social/src/js/components/toggle-section/types.ts +++ /dev/null @@ -1,31 +0,0 @@ -export type ToggleSectionProps = { - /** - * Title of the Toggle. - */ - title: string; - - /** - * Whether the toggle is in beta. - */ - beta?: boolean; - - /** - * Callback to be called when the toggle is clicked. - */ - onChange: () => void; - - /** - * Whether the toggle is checked. - */ - checked: boolean; - - /** - * Whether the toggle is disabled. - */ - disabled: boolean; - - /** - * Children to be rendered inside the toggle. - */ - children: React.ReactNode; -}; diff --git a/projects/plugins/social/src/js/index.js b/projects/plugins/social/src/js/index.js index 4973f314750e3..1fecb1209bc3c 100644 --- a/projects/plugins/social/src/js/index.js +++ b/projects/plugins/social/src/js/index.js @@ -1,7 +1,7 @@ import { ThemeProvider } from '@automattic/jetpack-components'; +import { SocialAdminPage } from '@automattic/jetpack-publicize-components'; import * as WPElement from '@wordpress/element'; import React from 'react'; -import AdminPage from './components/admin-page'; /** * Initial render function. @@ -15,7 +15,7 @@ function render() { const component = ( - + ); WPElement.createRoot( container ).render( component ); From 47714dae5cff4362a9994827f872b5e1a0e75bee Mon Sep 17 00:00:00 2001 From: Kev Date: Tue, 21 Jan 2025 10:16:00 -0500 Subject: [PATCH 141/420] Deprecate geo location module (#41193) * Deprecate Jetpack geo location module * changelog * Prevent linting error * Fix linting error * Update projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php Co-authored-by: Karen Attfield --------- Co-authored-by: Karen Attfield --- projects/plugins/jetpack/.phan/baseline.php | 5 +- .../remove-remove-jetpack-geo-location-2 | 4 + .../plugins/jetpack/modules/geo-location.php | 94 +--- .../class.jetpack-geo-location.php | 371 +------------- projects/plugins/jetpack/phpunit.xml.dist | 3 - .../test_class.jetpack-geo-location.php | 454 ------------------ 6 files changed, 9 insertions(+), 922 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/remove-remove-jetpack-geo-location-2 delete mode 100644 projects/plugins/jetpack/tests/php/modules/geo-location/test_class.jetpack-geo-location.php diff --git a/projects/plugins/jetpack/.phan/baseline.php b/projects/plugins/jetpack/.phan/baseline.php index 60c2077e00526..f194e666f4e5a 100644 --- a/projects/plugins/jetpack/.phan/baseline.php +++ b/projects/plugins/jetpack/.phan/baseline.php @@ -25,8 +25,8 @@ // PhanParamTooMany : 40+ occurrences // PhanPluginDuplicateAdjacentStatement : 40+ occurrences // PhanTypeMismatchArgumentInternal : 40+ occurrences - // PhanUndeclaredProperty : 40+ occurrences // PhanTypeExpectedObjectPropAccess : 35+ occurrences + // PhanUndeclaredProperty : 35+ occurrences // PhanParamSignatureMismatch : 25+ occurrences // PhanTypeMismatchDefault : 25+ occurrences // PhanTypeMismatchPropertyProbablyReal : 25+ occurrences @@ -320,8 +320,6 @@ 'modules/comments/subscription-modal-on-comment/class-jetpack-subscription-modal-on-comment.php' => ['PhanTypeMismatchReturnNullable'], 'modules/copy-post.php' => ['PhanNoopNew'], 'modules/custom-content-types.php' => ['PhanRedefineFunction'], - 'modules/geo-location.php' => ['PhanTypeMismatchArgumentNullable'], - 'modules/geo-location/class.jetpack-geo-location.php' => ['PhanTypeMismatchArgument'], 'modules/google-fonts/current/class-jetpack-google-font-face.php' => ['PhanUndeclaredFunctionInCallable'], 'modules/google-fonts/current/load-google-fonts.php' => ['PhanNoopNew', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchReturnProbablyReal'], 'modules/gravatar-hovercards.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgumentProbablyReal'], @@ -506,7 +504,6 @@ 'tests/php/json-api/test_class.json-api-platform-jetpack.php' => ['PhanTypeMismatchArgument'], 'tests/php/media/test-class.jetpack-media-extractor.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/media/test-class.jetpack-post-images.php' => ['PhanTypeMismatchArgumentProbablyReal'], - 'tests/php/modules/geo-location/test_class.jetpack-geo-location.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'tests/php/modules/photon/test_class.jetpack-photon-static-asset-cdn.php' => ['PhanTypeMismatchProperty'], 'tests/php/modules/post-by-email/test-class.post-by-email-api.php' => ['PhanParamTooMany'], 'tests/php/modules/publicize/test_class.publicize.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], diff --git a/projects/plugins/jetpack/changelog/remove-remove-jetpack-geo-location-2 b/projects/plugins/jetpack/changelog/remove-remove-jetpack-geo-location-2 new file mode 100644 index 0000000000000..7ad726083cde6 --- /dev/null +++ b/projects/plugins/jetpack/changelog/remove-remove-jetpack-geo-location-2 @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Deprecate Jetpack geo location module diff --git a/projects/plugins/jetpack/modules/geo-location.php b/projects/plugins/jetpack/modules/geo-location.php index 59fb2c0db6b39..7bb85a0bce383 100644 --- a/projects/plugins/jetpack/modules/geo-location.php +++ b/projects/plugins/jetpack/modules/geo-location.php @@ -1,97 +1,9 @@ - null, - 'id' => null, - ), - $attributes - ); - return jetpack_geo_get_location( $attributes['post'] ? $attributes['post'] : $attributes['id'] ); -} -add_shortcode( 'geo-location', 'jetpack_geo_shortcode' ); - -/** - * Get the geo-location data associated with the supplied post ID, if it's available - * and marked as being available for public display. The returned array will contain - * "latitude", "longitude" and "label" keys. - * - * If you do not supply a value for $post_id, the global $post will be used, if - * available. - * - * @param integer|null $post_id Post ID. - * - * @return array|null - */ -function jetpack_geo_get_data( $post_id = null ) { - $geo = Jetpack_Geo_Location::init(); - - if ( ! $post_id ) { - $post_id = $geo->get_post_id(); - } - - $meta_values = $geo->get_meta_values( $post_id ); - - if ( ! $meta_values['is_public'] || ! $meta_values['is_populated'] ) { - return null; - } - - return array( - 'latitude' => $meta_values['latitude'], - 'longitude' => $meta_values['longitude'], - 'label' => $meta_values['label'], - ); -} - -/** - * Display the label HTML for the geo-location information associated with the supplied - * post ID. - * - * If you do not supply a value for $post_id, the global $post will be used, if - * available. - * - * @param integer|null $post_id Post ID. - * - * @return void - */ -function jetpack_geo_display_location( $post_id = null ) { - echo jetpack_geo_get_location( $post_id ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaped in `Jetpack_Geo_Location::get_location_label`. -} - -/** - * Return the label HTML for the geo-location information associated with the supplied - * post ID. - * - * If you do not supply a value for $post_id, the global $post will be used, if - * available. - * - * @param integer|null $post_id Post ID. - * - * @return string - */ -function jetpack_geo_get_location( $post_id = null ) { - return Jetpack_Geo_Location::init()->get_location_label( $post_id ); -} diff --git a/projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php b/projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php index 17f5643365a68..450edb92ee352 100644 --- a/projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php +++ b/projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php @@ -38,15 +38,6 @@ class Jetpack_Geo_Location { */ private static $instance; - /** - * Whether dashicons are enqueued. - * - * @since 6.6.0 - * - * @var bool - */ - private static $style_enqueued = false; - /** * Jetpack_Geo_Location instance init. */ @@ -58,22 +49,11 @@ public static function init() { return self::$instance; } - /** - * This is mostly just used for testing purposes. - */ - public static function reset_instance() { - self::$instance = null; - } - /** * Jetpack_Geo_Location class constructor. */ public function __construct() { add_action( 'init', array( $this, 'wordpress_init' ) ); - add_action( 'wp_head', array( $this, 'wp_head' ) ); - add_filter( 'the_content', array( $this, 'the_content_microformat' ) ); - - $this->register_rss_hooks(); } /** @@ -83,357 +63,8 @@ public function __construct() { public function wordpress_init() { // Only render location label after post content, if the theme claims to support "geo-location". if ( current_theme_supports( 'jetpack-geo-location' ) ) { - add_filter( 'the_content', array( $this, 'the_content_location_display' ), 15, 1 ); - } - - add_post_type_support( 'post', 'geo-location' ); - add_post_type_support( 'page', 'geo-location' ); - - register_meta( - 'post', - 'geo_public', - array( - 'sanitize_callback' => array( $this, 'sanitize_public' ), - 'type' => 'boolean', - 'single' => true, - ) - ); - - register_meta( - 'post', - 'geo_latitude', - array( - 'sanitize_callback' => array( $this, 'sanitize_coordinate' ), - 'type' => 'float', - 'single' => true, - ) - ); - - register_meta( - 'post', - 'geo_longitude', - array( - 'sanitize_callback' => array( $this, 'sanitize_coordinate' ), - 'type' => 'float', - 'single' => true, - ) - ); - - register_meta( - 'post', - 'geo_address', - array( - 'sanitize_callback' => 'sanitize_text_field', - 'type' => 'string', - 'single' => true, - ) - ); - } - - /** - * Filter "public" input to always be either 1 or 0. - * - * @param mixed $public Value to normalize. - * - * @return int - */ - public function sanitize_public( $public ) { - return absint( $public ) ? 1 : 0; - } - - /** - * Filter geo coordinates and normalize them to floats with 7 digits of precision. - * - * @param mixed $coordinate Latitude or longitude coordinate. - * - * @return float|null - */ - public function sanitize_coordinate( $coordinate ) { - if ( ! $coordinate ) { - return null; + _deprecated_class( 'Jetpack_Geo_Location', '$$next-version$$', '' ); } - - return round( (float) $coordinate, 7 ); - } - - /** - * Render geo.position and ICBM meta tags with public geo meta values when rendering - * a single post. - */ - public function wp_head() { - if ( ! is_single() ) { - return; - } - - $meta_values = $this->get_meta_values( $this->get_post_id() ); - - if ( ! $meta_values['is_public'] ) { - return; - } - - if ( ! self::$style_enqueued ) { - // only enqueue scripts and styles when needed. - self::enqueue_scripts(); - self::$style_enqueued = true; - } - - echo "\n\n"; - - if ( $meta_values['label'] ) { - printf( - '', - esc_attr( $meta_values['label'] ) - ); - } - - printf( - '' . PHP_EOL, - esc_attr( $meta_values['latitude'] ), - esc_attr( $meta_values['longitude'] ) - ); - - printf( - '' . PHP_EOL, - esc_attr( $meta_values['latitude'] ), - esc_attr( $meta_values['longitude'] ) - ); - - echo "\n\n"; - } - - /** - * Append public meta values in the Geo microformat (https://en.wikipedia.org/wiki/Geo_(microformat) - * to the supplied content. - * - * Note that we cannot render the microformat in the context of an excerpt because tags are stripped - * in that context, making our microformat data visible. - * - * @param string $content Current post content. - * - * @return string - */ - public function the_content_microformat( $content ) { - if ( is_feed() || $this->is_currently_excerpt_filter() ) { - return $content; - } - - $meta_values = $this->get_meta_values( $this->get_post_id() ); - - if ( ! $meta_values['is_public'] ) { - return $content; - } - - $microformat = sprintf( - ''; - - return $content . $microformat; - } - - /** - * Register a range of hooks for integrating geo data with various feeds. - */ - public function register_rss_hooks() { - add_action( 'rss2_ns', array( $this, 'rss_namespace' ) ); - add_action( 'atom_ns', array( $this, 'rss_namespace' ) ); - add_action( 'rdf_ns', array( $this, 'rss_namespace' ) ); - add_action( 'rss_item', array( $this, 'rss_item' ) ); - add_action( 'rss2_item', array( $this, 'rss_item' ) ); - add_action( 'atom_entry', array( $this, 'rss_item' ) ); - add_action( 'rdf_item', array( $this, 'rss_item' ) ); - } - - /** - * Add the georss namespace during RSS generation. - */ - public function rss_namespace() { - echo PHP_EOL . "\t" . 'xmlns:georss="http://www.georss.org/georss"'; - echo PHP_EOL . "\t" . 'xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"'; - echo PHP_EOL . "\t"; - } - - /** - * Output georss data for RSS items, assuming we have data for the currently rendered post and - * that data as marked as public. - */ - public function rss_item() { - $meta_values = $this->get_meta_values( $this->get_post_id() ); - - if ( ! $meta_values['is_public'] ) { - return; - } - - printf( - "\t%s %s\n", - ent2ncr( esc_html( $meta_values['latitude'] ) ), - ent2ncr( esc_html( $meta_values['longitude'] ) ) - ); - - printf( "\t\t%s\n", ent2ncr( esc_html( $meta_values['latitude'] ) ) ); - printf( "\t\t%s\n", ent2ncr( esc_html( $meta_values['longitude'] ) ) ); - } - - /** - * Enqueue CSS for rendering post flair with geo-location. - */ - private static function enqueue_scripts() { - wp_enqueue_style( 'dashicons' ); - } - - /** - * If we're rendering a single post and public geo-location data is available for it, - * include the human-friendly location label in the output. - * - * @param string $content Current post content. - * - * @return string - */ - public function the_content_location_display( $content ) { - if ( ! is_single() ) { - return $content; - } - - return $content . $this->get_location_label(); - } - - /** - * Get the HTML for displaying a label representing the location associated with the - * supplied post ID. If no post ID is given, we'll use the global $post variable, if - * it is available. - * - * @param integer|null $post_id Post ID. - * - * @return string - */ - public function get_location_label( $post_id = null ) { - $meta_values = $this->get_meta_values( $post_id ? $post_id : $this->get_post_id() ); - - if ( ! $meta_values['is_public'] ) { - return ''; - } - - // If the location has not been labeled, do not show the location. - if ( ! $meta_values['label'] ) { - return ''; - } - - $html = '
      '; - $html .= ' '; - $html .= esc_html( $meta_values['label'] ); - $html .= '
      '; - - /** - * Allow modification or replacement of the default geo-location display HTML. - * - * @module geo-location - * - * @param array $html The default HTML for displaying a geo-location label. - * @param array $geo_data An array containing "latitude", "longitude" and "label". - */ - $html = apply_filters( 'jetpack_geo_location_display', $html, $meta_values ); - - return $html; - } - - /** - * Get the ID of the current global post object, if available. Otherwise, return null. - * - * This isolates the access of the global scope to this single method, making it easier to - * safeguard against unexpected missing $post objects in other hook functions. - * - * @return int|null - */ - public function get_post_id() { - global $post; - - if ( ! isset( $post ) || ! $post || ! is_object( $post ) || ! isset( $post->ID ) ) { - return null; - } - - return $post->ID; - } - - /** - * Retrieve geo-location post_meta data for the specified post ID. - * - * This method always returns an array with the following structure: - * - * array(is_public => bool, latitude => float, longitude => float, label => string, is_populated => bool) - * - * So, regardless of whether your post actually has values in postmeta for the geo-location fields, - * you can be sure that you can reference those array keys in calling code without having to juggle - * isset(), array_key_exists(), etc. - * - * Mocking this method during testing can also be useful for testing output and logic in various - * hook functions. - * - * @param integer $post_id Post ID. - * - * @return array A predictably structured array representing the meta values for the supplied post ID. - */ - public function get_meta_values( $post_id ) { - $meta_values = array( - 'is_public' => (bool) $this->sanitize_public( $this->get_meta_value( $post_id, 'public' ) ), - 'latitude' => $this->sanitize_coordinate( $this->get_meta_value( $post_id, 'latitude' ) ), - 'longitude' => $this->sanitize_coordinate( $this->get_meta_value( $post_id, 'longitude' ) ), - 'label' => trim( (string) $this->get_meta_value( $post_id, 'address' ) ), - 'is_populated' => false, - ); - - if ( $meta_values['latitude'] && $meta_values['longitude'] && $meta_values['label'] ) { - $meta_values['is_populated'] = true; - } - - return $meta_values; - } - - /** - * This function wraps get_post_meta() to enable us to keep the "geo_" prefix isolated to a single - * location in the code and to assist in mocking during testing. - * - * @param integer $post_id Post ID. - * @param string $meta_field_name The meta field to retrieve. - * - * @return mixed - */ - public function get_meta_value( $post_id, $meta_field_name ) { - if ( ! $post_id ) { - return null; - } - - return get_post_meta( $post_id, 'geo_' . $meta_field_name, true ); - } - - /** - * Check to see if the current filter is the get_the_excerpt filter. - * - * Just checking current_filter() here is not adequate because current_filter() only looks - * at the last element in the $wp_current_filter array. In the context of rendering an - * excerpt, however, both get_the_excerpt and the_content are present in that array. - * - * @return bool - */ - public function is_currently_excerpt_filter() { - if ( ! isset( $GLOBALS['wp_current_filter'] ) ) { - return false; - } - - $current_filters = (array) $GLOBALS['wp_current_filter']; - - return in_array( 'get_the_excerpt', $current_filters, true ); } } diff --git a/projects/plugins/jetpack/phpunit.xml.dist b/projects/plugins/jetpack/phpunit.xml.dist index a0a8c38084781..58073536202dc 100644 --- a/projects/plugins/jetpack/phpunit.xml.dist +++ b/projects/plugins/jetpack/phpunit.xml.dist @@ -87,9 +87,6 @@ tests/php/modules/carousel - - tests/php/modules/geo-location - tests/php/test_deprecation.php diff --git a/projects/plugins/jetpack/tests/php/modules/geo-location/test_class.jetpack-geo-location.php b/projects/plugins/jetpack/tests/php/modules/geo-location/test_class.jetpack-geo-location.php deleted file mode 100644 index 397a5969143ee..0000000000000 --- a/projects/plugins/jetpack/tests/php/modules/geo-location/test_class.jetpack-geo-location.php +++ /dev/null @@ -1,454 +0,0 @@ -ID = 1; - $post->post_type = 'post'; - - $this->original_wp_query = $wp_query; - } - - /** - * Tear down. - */ - public function tear_down() { - global $wp_query; - - Jetpack_Geo_Location::reset_instance(); - - $wp_query = $this->original_wp_query; - - parent::tear_down(); - } - - public function test_location_display_filter_skipped_when_lacking_theme_support() { - $instance = $this->create_mock_instance( - array( 'the_content_location_display' ), - array( 'current_theme_supports' ), - self::ENABLE_CONSTRUCTOR - ); - - $instance->method( 'current_theme_supports' )->willReturn( false ); - - $instance->expects( $this->never() ) - ->method( 'the_content_location_display' ); - - $instance->wordpress_init(); - - apply_filters( 'the_content', 'Test' ); - } - - public function test_location_display_filter_called_when_theme_supports_geo_location() { - $theme_support = current_theme_supports( 'jetpack-geo-location' ); - - if ( ! $theme_support ) { - add_theme_support( 'jetpack-geo-location' ); - } - - $instance = $this->create_mock_instance( - array( 'the_content_location_display' ), - array(), - self::ENABLE_CONSTRUCTOR - ); - - $instance->expects( $this->atLeastOnce() ) - ->method( 'the_content_location_display' ); - - $instance->wordpress_init(); - - apply_filters( 'the_content', 'Test' ); - - // Remove theme support again if it was missing originally. - if ( ! $theme_support ) { - remove_theme_support( 'jetpack-geo-location' ); - } - } - - public function test_get_meta_values_returns_valid_array_for_nonexistent_post() { - $instance = $this->get_instance(); - $meta_values = $instance->get_meta_values( 100 ); - - $this->assertIsArray( $meta_values ); - - $this->assertArrayHasKey( 'is_public', $meta_values ); - $this->assertArrayHasKey( 'latitude', $meta_values ); - $this->assertArrayHasKey( 'longitude', $meta_values ); - $this->assertArrayHasKey( 'label', $meta_values ); - $this->assertArrayHasKey( 'is_populated', $meta_values ); - - $this->assertFalse( $meta_values['is_public'] ); - $this->assertNull( $meta_values['latitude'] ); - $this->assertNull( $meta_values['longitude'] ); - $this->assertSame( '', $meta_values['label'] ); - $this->assertFalse( $meta_values['is_populated'] ); - } - - public function test_get_meta_values_returns_valid_array_for_null_post() { - $instance = $this->get_instance(); - $meta_values = $instance->get_meta_values( null ); - - $this->assertIsArray( $meta_values ); - - $this->assertArrayHasKey( 'is_public', $meta_values ); - $this->assertArrayHasKey( 'latitude', $meta_values ); - $this->assertArrayHasKey( 'longitude', $meta_values ); - $this->assertArrayHasKey( 'label', $meta_values ); - $this->assertArrayHasKey( 'is_populated', $meta_values ); - - $this->assertFalse( $meta_values['is_public'] ); - $this->assertNull( $meta_values['latitude'] ); - $this->assertNull( $meta_values['longitude'] ); - $this->assertSame( '', $meta_values['label'] ); - $this->assertFalse( $meta_values['is_populated'] ); - } - - public function test_get_meta_values_with_existing_post_returns_expected_values() { - $instance = $this->get_instance_with_mock_public_post(); - $meta_values = $instance->get_meta_values( 1 ); - - $this->assertIsArray( $meta_values ); - - $this->assertArrayHasKey( 'is_public', $meta_values ); - $this->assertArrayHasKey( 'latitude', $meta_values ); - $this->assertArrayHasKey( 'longitude', $meta_values ); - $this->assertArrayHasKey( 'label', $meta_values ); - $this->assertArrayHasKey( 'is_populated', $meta_values ); - - $this->assertTrue( $meta_values['is_public'] ); - $this->assertEquals( (float) self::MOCK_LAT, $meta_values['latitude'] ); - $this->assertEquals( (float) self::MOCK_LONG, $meta_values['longitude'] ); - $this->assertEquals( self::MOCK_ADDRESS, $meta_values['label'] ); - $this->assertTrue( $meta_values['is_populated'] ); - } - - public function test_rss_namespace_method_renders_the_namespace() { - ob_start(); - $this->get_instance()->rss_namespace(); - $this->assertStringContainsString( 'georss.org', ob_get_clean() ); - } - - public function test_rss_item_does_not_render_private_post() { - $instance = $this->get_instance_with_mock_private_post(); - - ob_start(); - $instance->rss_item(); - $output = ob_get_clean(); - - $this->assertStringNotContainsString( self::MOCK_LAT, $output ); - $this->assertStringNotContainsString( self::MOCK_LONG, $output ); - } - - public function test_rss_item_does_render_public_post() { - $instance = $this->get_instance_with_mock_public_post(); - - ob_start(); - $instance->rss_item(); - $output = ob_get_clean(); - - $this->assertStringContainsString( self::MOCK_LAT, $output ); - $this->assertStringContainsString( self::MOCK_LONG, $output ); - } - - public function test_rss_item_does_escape_malicious_post() { - $instance = $this->get_instance_with_mock_malicious_post(); - - ob_start(); - $instance->rss_item(); - $output = ob_get_clean(); - - $this->assertStringNotContainsString( '', $output ); - $this->assertStringContainsString( '<', $output ); - $this->assertStringContainsString( '>', $output ); - } - - public function test_wp_head_aborts_when_not_a_single_post_response() { - $instance = $this->get_instance_with_mock_public_post(); - - $this->mock_is_not_single(); - - ob_start(); - $instance->wp_head(); - $output = ob_get_clean(); - - $this->assertSame( '', trim( $output ) ); - } - - public function test_wp_head_aborts_when_meta_values_are_private() { - $instance = $this->get_instance_with_mock_private_post(); - - $this->mock_is_single(); - - ob_start(); - $instance->wp_head(); - $output = ob_get_clean(); - - $this->assertSame( '', trim( $output ) ); - } - - public function test_wp_head_renders_public_meta_values() { - $instance = $this->get_instance_with_mock_public_post(); - - $this->mock_is_single(); - - ob_start(); - $instance->wp_head(); - $output = ob_get_clean(); - - $this->assertStringContainsString( self::MOCK_LAT, $output ); - $this->assertStringContainsString( self::MOCK_LONG, $output ); - } - - public function test_wp_head_escapes_malicious_meta_values() { - $instance = $this->get_instance_with_mock_malicious_post(); - - $this->mock_is_single(); - - ob_start(); - $instance->wp_head(); - $output = ob_get_clean(); - - $this->assertStringNotContainsString( '', $output ); - $this->assertStringContainsString( '<', $output ); - $this->assertStringContainsString( '>', $output ); - } - - public function test_the_content_microformat_aborts_when_is_feed() { - $instance = $this->get_instance_with_mock_public_post(); - - $this->mock_is_feed(); - - $this->assertEquals( 'Original content', $instance->the_content_microformat( 'Original content' ) ); - } - - public function test_the_content_microformat_aborts_when_meta_values_are_private() { - $instance = $this->get_instance_with_mock_private_post(); - - $this->mock_is_not_feed(); - - $this->assertEquals( 'Original content', $instance->the_content_microformat( 'Original content' ) ); - } - - public function test_the_content_microformat_appends_microformat_when_meta_values_are_public() { - $instance = $this->get_instance_with_mock_public_post(); - - $this->mock_is_not_feed(); - - $modified_content = $instance->the_content_microformat( 'Original content' ); - - $this->assertStringStartsWith( 'Original content', $modified_content ); - $this->assertStringContainsString( self::MOCK_LAT, $modified_content ); - $this->assertStringContainsString( self::MOCK_LONG, $modified_content ); - $this->assertStringContainsString( '', $modified_content ); - $this->assertStringContainsString( '', $modified_content ); - } - - public function test_the_content_microformat_escapes_malicious_meta_values() { - $instance = $this->get_instance_with_mock_malicious_post(); - - $this->mock_is_not_feed(); - - $modified_content = $instance->the_content_microformat( 'Original content' ); - - $this->assertStringStartsWith( 'Original content', $modified_content ); - $this->assertStringNotContainsString( '', $modified_content ); - $this->assertStringContainsString( '<', $modified_content ); - $this->assertStringContainsString( '>', $modified_content ); - } - - public function test_the_content_location_display_aborts_when_is_not_single() { - $instance = $this->get_instance_with_mock_public_post(); - - $this->mock_is_not_single(); - - $this->assertEquals( 'Original content', $instance->the_content_location_display( 'Original content' ) ); - } - - public function test_the_content_location_display_aborts_when_meta_values_are_private() { - $instance = $this->get_instance_with_mock_private_post(); - - $this->mock_is_single(); - - $this->assertEquals( 'Original content', $instance->the_content_location_display( 'Original content' ) ); - } - - public function test_the_content_location_display_appends_microformat_when_meta_values_are_public() { - $instance = $this->get_instance_with_mock_public_post(); - - $this->mock_is_single(); - - $modified_content = $instance->the_content_location_display( 'Original content' ); - - $this->assertStringStartsWith( 'Original content', $modified_content ); - $this->assertStringContainsString( self::MOCK_ADDRESS, $modified_content ); - } - - public function test_the_content_location_display_escapes_malicious_meta_values() { - $instance = $this->get_instance_with_mock_malicious_post(); - - $this->mock_is_single(); - - $modified_content = $instance->the_content_location_display( 'Original content' ); - - $this->assertStringStartsWith( 'Original content', $modified_content ); - $this->assertStringNotContainsString( '', $modified_content ); - $this->assertStringContainsString( '<', $modified_content ); - $this->assertStringContainsString( '>', $modified_content ); - } - - private function get_instance() { - return Jetpack_Geo_Location::init(); - } - - private function get_instance_with_mock_public_post() { - $instance = $this->create_mock_instance(); - - $instance->method( 'get_meta_value' ) - ->willReturnMap( - array( - array( 1, 'public', '1' ), - array( 1, 'latitude', self::MOCK_LAT ), - array( 1, 'longitude', self::MOCK_LONG ), - array( 1, 'address', self::MOCK_ADDRESS ), - ) - ); - - return $instance; - } - - private function get_instance_with_mock_malicious_post() { - $instance = $this->create_mock_instance( array( 'get_meta_values' ) ); - - $instance->method( 'get_meta_values' ) - ->willReturn( - array( - 'is_public' => true, - 'latitude' => '', - 'longitude' => '', - 'label' => '', - 'is_populated' => true, - ) - ); - - return $instance; - } - - private function get_instance_with_mock_private_post() { - $instance = $this->create_mock_instance(); - - $instance->method( 'get_meta_value' ) - ->willReturnMap( - array( - array( 1, 'public', '0' ), - array( 1, 'latitude', self::MOCK_LAT ), - array( 1, 'longitude', self::MOCK_LONG ), - array( 1, 'address', self::MOCK_ADDRESS ), - ) - ); - - return $instance; - } - - /** - * @param string[] $existing_methods_to_mock Methods to mock that exist on the class. - * @param string[] $new_methods_to_mock Methods to mock that do not on the class. - * @param boolean $disable_constructor - * @return Jetpack_Geo_Location&\PHPUnit\Framework\MockObject\MockObject - */ - private function create_mock_instance( - $existing_methods_to_mock = array(), - $new_methods_to_mock = array(), - $disable_constructor = self::DISABLE_CONSTRUCTOR - ) { - $existing_methods_to_mock = array_merge( - array( 'get_meta_value' ), - $existing_methods_to_mock - ); - - $builder = $this->getMockBuilder( Jetpack_Geo_Location::class ) - ->onlyMethods( $existing_methods_to_mock ); - // This throws an error if passed an empty array. - if ( ! empty( $new_methods_to_mock ) ) { - $builder->addMethods( $new_methods_to_mock ); - } - - if ( $disable_constructor ) { - $builder->disableOriginalConstructor(); - } - - return $builder->getMock(); - } - - private function mock_is_single() { - global $wp_query; - - $wp_query = $this->getMockBuilder( WP_Query::class ) - ->onlyMethods( array( 'is_feed', 'is_single' ) ) - ->getMock(); - - $wp_query->expects( $this->any() ) - ->method( 'is_single' ) - ->willReturn( true ); - } - - private function mock_is_not_single() { - global $wp_query; - - $wp_query = $this->getMockBuilder( WP_Query::class ) - ->onlyMethods( array( 'is_feed', 'is_single' ) ) - ->getMock(); - - $wp_query->expects( $this->any() ) - ->method( 'is_single' ) - ->willReturn( false ); - } - - private function mock_is_feed() { - global $wp_query; - - $wp_query = $this->getMockBuilder( WP_Query::class ) - ->onlyMethods( array( 'is_feed' ) ) - ->getMock(); - - $wp_query->expects( $this->any() ) - ->method( 'is_feed' ) - ->willReturn( true ); - } - - private function mock_is_not_feed() { - global $wp_query; - - $wp_query = $this->getMockBuilder( WP_Query::class ) - ->onlyMethods( array( 'is_feed' ) ) - ->getMock(); - - $wp_query->expects( $this->any() ) - ->method( 'is_feed' ) - ->willReturn( false ); - } -} From ad9b2bc18e27b81c7e08c637ec404da576ebcfa8 Mon Sep 17 00:00:00 2001 From: Dylan Munson <65001528+CodeyGuyDylan@users.noreply.github.com> Date: Tue, 21 Jan 2025 09:03:05 -0700 Subject: [PATCH 142/420] Fix/bug with critical error when main jetpack plugin not installed (#41192) * Fix critical error on standalones when Jetpack is not installed * changelog --- ...tical-error-when-main-jetpack-plugin-not-installed | 4 ++++ .../packages/my-jetpack/src/class-initializer.php | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 projects/packages/my-jetpack/changelog/fix-bug-with-critical-error-when-main-jetpack-plugin-not-installed diff --git a/projects/packages/my-jetpack/changelog/fix-bug-with-critical-error-when-main-jetpack-plugin-not-installed b/projects/packages/my-jetpack/changelog/fix-bug-with-critical-error-when-main-jetpack-plugin-not-installed new file mode 100644 index 0000000000000..95cae97b6fa73 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/fix-bug-with-critical-error-when-main-jetpack-plugin-not-installed @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix bug where My Jetpack would throw critical error if only a standalone plugin is not installed diff --git a/projects/packages/my-jetpack/src/class-initializer.php b/projects/packages/my-jetpack/src/class-initializer.php index fd45a24773b73..4c8a67220a520 100644 --- a/projects/packages/my-jetpack/src/class-initializer.php +++ b/projects/packages/my-jetpack/src/class-initializer.php @@ -240,6 +240,13 @@ public static function enqueue_scripts() { $waf_config = array(); $waf_supported = false; + $sandboxed_domain = ''; + $is_dev_version = false; + if ( class_exists( 'Jetpack' ) ) { + $is_dev_version = Jetpack::is_development_version(); + $sandboxed_domain = defined( 'JETPACK__SANDBOX_DOMAIN' ) ? JETPACK__SANDBOX_DOMAIN : ''; + } + if ( class_exists( 'Automattic\Jetpack\Waf\Waf_Runner' ) ) { $waf_config = Waf_Runner::get_config(); $waf_supported = Waf_Runner::is_supported_environment(); @@ -292,8 +299,8 @@ public static function enqueue_scripts() { 'isStatsModuleActive' => $modules->is_active( 'stats' ), 'isUserFromKnownHost' => self::is_user_from_known_host(), 'isCommercial' => self::is_commercial_site(), - 'sandboxedDomain' => JETPACK__SANDBOX_DOMAIN, - 'isDevVersion' => Jetpack::is_development_version(), + 'sandboxedDomain' => $sandboxed_domain, + 'isDevVersion' => $is_dev_version, 'isAtomic' => ( new Status_Host() )->is_woa_site(), 'jetpackManage' => array( 'isEnabled' => Jetpack_Manage::could_use_jp_manage(), From aa290bbc9392a40224d8c587513cf35d3882eaf0 Mon Sep 17 00:00:00 2001 From: Igor Zinovyev Date: Tue, 21 Jan 2025 21:03:27 +0300 Subject: [PATCH 143/420] Added a CI job for WPCloud testing of wpcomsh. (#39258) * Added a CI job for WPCloud testing of wpcomsh. * Add pnpm and install. * Testing WPCloud on a new test site for jetpackisbestpack. * Temporarily marking wpcomsh as always changed. * Added transferring of tests. * Added DB password slash escaping. * changelog * Added a mock for get_option_and_ensure_autoload. * Added a missing cache expulsion function. * Removed set -x from test installer. * Using pnpm to not bother with linking binaries. * Added a build step. * Created a separate job to avoid re-building on a re-run, h/t @anomiex. * Added cache saving and restoring, moved if to parent job. * Added the before file. * Trying with instead of . * Fixing var schema. * Fixed the user string in SSH connection. * Trying to create an SSH config file. * Fixed the SSH key file name. * Making sure to use the preset configured host. * Moved the polyfill load to after WordPress loading. * Removed polyfills. * Removed null coalescing and added a short ternary. * Removed the change detector prop. * Added concurrency settings to make sure there can be only one. * Added updating of source files and cleanup after that updating. * Update .github/workflows/wpcloud.yml Co-authored-by: Brad Jorsch * Update .github/workflows/wpcloud.yml Co-authored-by: Brad Jorsch --------- Co-authored-by: Brad Jorsch --- .github/workflows/wpcloud.yml | 144 ++++++++++++++++++ .../plugins/wpcomsh/bin/install-wp-tests.sh | 4 +- .../changelog/add-wpcomsh-wpcloud-testing | 4 + projects/plugins/wpcomsh/tests/bootstrap.php | 10 +- .../tests/lib/mocks/class-jetpack-options.php | 13 ++ 5 files changed, 169 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/wpcloud.yml create mode 100644 projects/plugins/wpcomsh/changelog/add-wpcomsh-wpcloud-testing diff --git a/.github/workflows/wpcloud.yml b/.github/workflows/wpcloud.yml new file mode 100644 index 0000000000000..7f4700742cd73 --- /dev/null +++ b/.github/workflows/wpcloud.yml @@ -0,0 +1,144 @@ +name: WPCloud Unit Testing for WPCOMSH + +on: + pull_request: + push: + branches: ['trunk', '*/branch-*'] +concurrency: + group: wpcloud-wpcomsh + cancel-in-progress: false + # Concurrency is set up to make sure we can only run one WPCloud testing job at the same time. + +jobs: + build: + name: Install the Monorepo and build wpcomsh + runs-on: ubuntu-latest + outputs: + wpcomsh: ${{ steps.changed.outputs.wpcomsh }} + steps: + - uses: actions/checkout@v4 + + # For pull requests, list-changed-projects.sh needs the merge base. + # But it doesn't have to be checked out. + - name: Deepen to merge base + if: github.event_name == 'pull_request' + uses: ./.github/actions/deepen-to-merge-base + with: + checkout: false + + - name: Setup tools + uses: ./.github/actions/tool-setup + - name: Monorepo install + run: | + echo "::group::Pnpm" + pnpm install + echo "::endgroup::" + - name: Detect if wpcomsh has changed + id: changed + run: | + CHANGED="$(EXTRA=test .github/files/list-changed-projects.sh)" + + WPCOMSH_CHANGED="$(jq --argjson changed "$CHANGED" -n '$changed | has( "plugins/wpcomsh" ) ')" + echo "wpcomsh=${WPCOMSH_CHANGED}" >> "$GITHUB_OUTPUT" + - name: Build wpcomsh + if: steps.changed.outputs.wpcomsh == 'true' + run: | + find . -path ./.github -prune -o -type f -print | sort > /tmp/before.txt + echo "::group::Installing and building wpcomsh" + pnpm jetpack build -v --deps plugins/wpcomsh + echo "::endgroup::" + + # We only want to save the files that were actually created or changed. + # But we can't just list them for actions/cache/save, "Argument list too long". + # So instead we delete all the unchanged files so we can tell actions/cache/save + # to save everything that's left. + git -c core.quotepath=off diff --name-only | sort > /tmp/changed.txt + if [[ -s /tmp/changed.txt ]]; then + grep -F -x -v -f /tmp/changed.txt /tmp/before.txt > /tmp/remove.txt + else + cp /tmp/before.txt /tmp/remove.txt + fi + xargs -d '\n' rm < /tmp/remove.txt + find . -type d -empty -delete + + - name: Save wpcomsh build cache + if: steps.changed.outputs.wpcomsh == 'true' + id: wpcomsh-build-cache-save + uses: actions/cache/save@v4 + with: + path: | + . + !./.github/ + key: ${{ github.sha }} + deploy: + name: Run PHPUnit on the WPCloud test site + runs-on: ubuntu-latest + needs: build + if: needs.build.outputs.wpcomsh == 'true' + steps: + - uses: actions/checkout@v4 + + - name: Restore wpcomsh build cache + id: wpcomsh-build-cache + uses: actions/cache/restore@v4 + with: + path: | + . + !./.github/ + key: ${{ github.sha }} + fail-on-cache-miss: true + + - name: Setup tools + uses: ./.github/actions/tool-setup + + - name: Install monorepo + run: | + pnpm install + + - name: Configure Github to be able to SSH to the Atomic site + run: | + echo "::group::Intializing" + + mkdir -vp ~/.ssh/ + chmod -v 700 ~/.ssh + + touch ~/.ssh/id_site + touch ~/.ssh/known_hosts + touch ~/.ssh/config + chmod 600 ~/.ssh/id_site + chmod 600 ~/.ssh/known_hosts + chmod 600 ~/.ssh/config + echo "$SSH_KEY" > ~/.ssh/id_site + echo "wrote ~/.ssh/id_site" + echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts + echo "wrote ~/.ssh/known_hosts" + echo "Host jpwpcomsh" > ~/.ssh/config + echo " Hostname sftp.wp.com" >> ~/.ssh/config + echo " User wpcom-jetpackisbestpack-default-237778992" >> ~/.ssh/config + echo " IdentityFile ~/.ssh/id_site" >> ~/.ssh/config + echo " IdentitiesOnly yes" >> ~/.ssh/config + + echo "::endgroup::" + + echo "::group::Transferring wpcomsh to the testing server" + ssh jpwpcomsh "wp dereferenced freshen > /dev/null 2>&1" + ssh jpwpcomsh "rm -rf /tmp/old-* > /dev/null 2>&1" + pnpm jetpack rsync wpcomsh jpwpcomsh:~/htdocs/wp-content/mu-plugins + scp -r projects/plugins/wpcomsh/bin jpwpcomsh:/srv/htdocs/wp-content/mu-plugins/wpcomsh + scp -r projects/plugins/wpcomsh/tests jpwpcomsh:/srv/htdocs/wp-content/mu-plugins/wpcomsh/ + scp projects/plugins/wpcomsh/phpunit.xml.dist jpwpcomsh:/srv/htdocs/wp-content/mu-plugins/wpcomsh/ + + echo "::engroup::" + + echo "::group::execution" + ssh jpwpcomsh "~/htdocs/github-action-handler.sh" || CODE=$? + echo "::endgroup::" + + echo "::group::teardown" + rm -rvf ~/.ssh/ + echo "::endgroup::" + echo "Exiting with exit code $CODE" + exit $CODE + env: + SSH_KEY: ${{ secrets.UPDATEJETPACKSTAGING_SSH_KEY }} + SSH_KNOWN_HOSTS: ${{ secrets.UPDATEJETPACKSTAGING_SSH_KNOWN_HOSTS }} diff --git a/projects/plugins/wpcomsh/bin/install-wp-tests.sh b/projects/plugins/wpcomsh/bin/install-wp-tests.sh index c401896c91322..3cedfabb261f5 100755 --- a/projects/plugins/wpcomsh/bin/install-wp-tests.sh +++ b/projects/plugins/wpcomsh/bin/install-wp-tests.sh @@ -51,7 +51,7 @@ else fi WP_TESTS_TAG="tags/$LATEST_VERSION" fi -set -ex +set -e install_wp() { @@ -118,7 +118,7 @@ install_test_suite() { sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php - sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourpasswordhere/${DB_PASS//\//\\/}/" "$WP_TESTS_DIR"/wp-tests-config.php sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php fi diff --git a/projects/plugins/wpcomsh/changelog/add-wpcomsh-wpcloud-testing b/projects/plugins/wpcomsh/changelog/add-wpcomsh-wpcloud-testing new file mode 100644 index 0000000000000..71d30adf105d7 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/add-wpcomsh-wpcloud-testing @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed a database password escaping issue when installing tests. diff --git a/projects/plugins/wpcomsh/tests/bootstrap.php b/projects/plugins/wpcomsh/tests/bootstrap.php index 5e8955b9eeac1..f626ac4fba738 100644 --- a/projects/plugins/wpcomsh/tests/bootstrap.php +++ b/projects/plugins/wpcomsh/tests/bootstrap.php @@ -5,9 +5,10 @@ * @package wpcomsh */ -$_tests_dir = getenv( 'WP_TESTS_DIR' ); -$_core_dir = getenv( 'WP_CORE_DIR' ); -$wp_branch = getenv( 'WP_BRANCH' ); +$_tests_dir = getenv( 'WP_TESTS_DIR' ); +$_core_dir = getenv( 'WP_CORE_DIR' ); +$_wp_content_dir = getenv( 'WP_CONTENT_DIR' ) ?: $_core_dir; // phpcs:ignore Universal.Operators +$wp_branch = getenv( 'WP_BRANCH' ); if ( ! $_tests_dir ) { if ( $wp_branch ) { @@ -26,7 +27,7 @@ } define( 'IS_ATOMIC', true ); -define( 'WPMU_PLUGIN_DIR', "{$_core_dir}wp-content/mu-plugins" ); +define( 'WPMU_PLUGIN_DIR', "{$_wp_content_dir}/mu-plugins" ); if ( ! file_exists( $_tests_dir . '/includes/functions.php' ) ) { echo "Could not find $_tests_dir/includes/functions.php, have you run bin/install-wp-tests.sh ?" . PHP_EOL; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped @@ -46,6 +47,7 @@ * Manually load the plugin being tested. */ function _manually_load_plugin() { + if ( file_exists( WPMU_PLUGIN_DIR . '/wpcomsh-loader.php' ) ) { return; } diff --git a/projects/plugins/wpcomsh/tests/lib/mocks/class-jetpack-options.php b/projects/plugins/wpcomsh/tests/lib/mocks/class-jetpack-options.php index 61d650cd6789e..c9aa896d3780c 100644 --- a/projects/plugins/wpcomsh/tests/lib/mocks/class-jetpack-options.php +++ b/projects/plugins/wpcomsh/tests/lib/mocks/class-jetpack-options.php @@ -24,5 +24,18 @@ class Jetpack_Options { public static function get_option( $option_name, $default = false ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.defaultFound return apply_filters( 'jetpack_options', get_option( $option_name, $default ), $option_name ); } + + /** + * Returns the requested option, and ensures it's autoloaded in the future. + * This does _not_ adjust the prefix in any way (does not prefix jetpack_%) + * + * @param string $name Option name. + * @param mixed $default (optional). + * + * @return mixed + */ + public static function get_option_and_ensure_autoload( $name, $default ) { + return self::get_option( $name, $default ); + } } } From ee8680a872f58c7e97ecf562cb4950c866d4d1b8 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Tue, 21 Jan 2025 12:51:28 -0800 Subject: [PATCH 144/420] Fix/form radio button missing div (#41198) * Forms: Fix older checkbox and radio buttons deprecations --- .../fix-form-radio-button-missing-div | 4 ++++ .../src/blocks/contact-form/child-blocks.js | 19 +++++++++++++++++-- .../fix-form-radio-button-missing-div | 5 +++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-form-radio-button-missing-div create mode 100644 projects/plugins/jetpack/changelog/fix-form-radio-button-missing-div diff --git a/projects/packages/forms/changelog/fix-form-radio-button-missing-div b/projects/packages/forms/changelog/fix-form-radio-button-missing-div new file mode 100644 index 0000000000000..0c87d0e433f94 --- /dev/null +++ b/projects/packages/forms/changelog/fix-form-radio-button-missing-div @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Adds missing deprecation for checkboxes and radio fields diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index 3ecb0acc75e8b..b84ea2da5ab83 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -1,3 +1,4 @@ +import { InnerBlocks } from '@wordpress/block-editor'; import { createBlock } from '@wordpress/blocks'; import { Path, Icon } from '@wordpress/components'; import { __, _x } from '@wordpress/i18n'; @@ -595,7 +596,14 @@ export const childBlocks = [ name: JetpackFieldSingleChoice.name, settings: mergeSettings( FieldDefaults, { ...JetpackFieldSingleChoice.settings, - deprecated: [ multiFieldV1( 'radio' ) ], + deprecated: [ + { + save() { + return ; + }, + }, + multiFieldV1( 'radio' ), + ], } ), }, JetpackFieldSingleChoiceItem, @@ -603,7 +611,14 @@ export const childBlocks = [ name: JetpackFieldMultipleChoice.name, settings: mergeSettings( FieldDefaults, { ...JetpackFieldMultipleChoice.settings, - deprecated: [ multiFieldV1( 'checkbox' ) ], + deprecated: [ + { + save() { + return ; + }, + }, + multiFieldV1( 'checkbox' ), + ], } ), }, JetpackFieldMultipleChoiceItem, diff --git a/projects/plugins/jetpack/changelog/fix-form-radio-button-missing-div b/projects/plugins/jetpack/changelog/fix-form-radio-button-missing-div new file mode 100644 index 0000000000000..e28a76958ead5 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-form-radio-button-missing-div @@ -0,0 +1,5 @@ +Significance: patch +Type: bugfix +Comment: Seems like a minor bug fix + + From 83c66ed92ff9d6a99d08bddf9c598955f0bc2257 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Tue, 21 Jan 2025 12:51:40 -0800 Subject: [PATCH 145/420] Fix/form textarea default border stylinig (#41229) * Forms: fix missing default border styling for text boxes --- .../changelog/fix-form-textarea-default-border-stylinig | 5 +++++ .../packages/forms/src/blocks/contact-form/editor.scss | 8 ++++---- .../changelog/fix-form-textarea-default-border-stylinig | 4 ++++ 3 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-form-textarea-default-border-stylinig create mode 100644 projects/plugins/jetpack/changelog/fix-form-textarea-default-border-stylinig diff --git a/projects/packages/forms/changelog/fix-form-textarea-default-border-stylinig b/projects/packages/forms/changelog/fix-form-textarea-default-border-stylinig new file mode 100644 index 0000000000000..2e25c1fd436b6 --- /dev/null +++ b/projects/packages/forms/changelog/fix-form-textarea-default-border-stylinig @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: THis seems like a minor fix + + diff --git a/projects/packages/forms/src/blocks/contact-form/editor.scss b/projects/packages/forms/src/blocks/contact-form/editor.scss index 753ddabb7dd42..9c6c49186d55e 100644 --- a/projects/packages/forms/src/blocks/contact-form/editor.scss +++ b/projects/packages/forms/src/blocks/contact-form/editor.scss @@ -318,10 +318,10 @@ } .jetpack-field__textarea { - border: var(--jetpack--contact-form--border); - border-color: var(--jetpack--contact-form--border-color); - border-style: var(--jetpack--contact-form--border-style); - border-width: var(--jetpack--contact-form--border-size); + border: var(--jetpack--contact-form--border, 1px solid #8c8f94); + border-color: var(--jetpack--contact-form--border-color, #8c8f94); + border-style: var(--jetpack--contact-form--border-style, solid ); + border-width: var(--jetpack--contact-form--border-size, 1px ); } .components-base-control__field { diff --git a/projects/plugins/jetpack/changelog/fix-form-textarea-default-border-stylinig b/projects/plugins/jetpack/changelog/fix-form-textarea-default-border-stylinig new file mode 100644 index 0000000000000..d7c3a3acbc3c5 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-form-textarea-default-border-stylinig @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Forms: fixed default editor stying for textarea From c153c7090af2630ce7004d235b6c5490a0cc92a5 Mon Sep 17 00:00:00 2001 From: Anna McPhee <30754158+annacmc@users.noreply.github.com> Date: Wed, 22 Jan 2025 12:33:06 +1100 Subject: [PATCH 146/420] Chart Library: Add PieChart component tests + resolve failing tests (#41175) * set up config for tests * create testing file for pie chart with a few edge case tests * add data validation to pie chart component * update storybook to include error states * changelog * tsconfig update --- ...-chart-library-fix-pie-chart-test-failures | 4 ++ .../pie-chart/__tests__/pie-chart.test.tsx | 59 +++++++++++++++++++ .../src/components/pie-chart/pie-chart.tsx | 36 +++++++++++ .../pie-chart/stories/index.stories.tsx | 48 ++++++++++++++- 4 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-chart-library-fix-pie-chart-test-failures create mode 100644 projects/js-packages/charts/src/components/pie-chart/__tests__/pie-chart.test.tsx diff --git a/projects/js-packages/charts/changelog/update-chart-library-fix-pie-chart-test-failures b/projects/js-packages/charts/changelog/update-chart-library-fix-pie-chart-test-failures new file mode 100644 index 0000000000000..64336ef41c629 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-chart-library-fix-pie-chart-test-failures @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Charts: adds more pie chart tests diff --git a/projects/js-packages/charts/src/components/pie-chart/__tests__/pie-chart.test.tsx b/projects/js-packages/charts/src/components/pie-chart/__tests__/pie-chart.test.tsx new file mode 100644 index 0000000000000..1958dbaa2f6f3 --- /dev/null +++ b/projects/js-packages/charts/src/components/pie-chart/__tests__/pie-chart.test.tsx @@ -0,0 +1,59 @@ +/** + * @jest-environment jsdom + */ + +import { render, screen } from '@testing-library/react'; +import { ThemeProvider } from '../../../providers/theme'; +import PieChart from '../pie-chart'; + +describe( 'PieChart', () => { + const defaultProps = { + size: 500, + data: [ + { label: 'A', percentage: 50, value: 50 }, + { label: 'B', percentage: 50, value: 50 }, + ], + }; + + const renderWithTheme = ( props = {} ) => { + return render( + + + + ); + }; + + describe( 'Data Validation', () => { + test( 'validates total percentage equals 100', () => { + renderWithTheme( { + data: [ + { label: 'A', percentage: 60, value: 60 }, + { label: 'B', percentage: 50, value: 50 }, + ], + } ); + expect( screen.getByText( /invalid percentage total/i ) ).toBeInTheDocument(); + } ); + + test( 'handles negative values', () => { + renderWithTheme( { + data: [ + { label: 'A', percentage: -30, value: -30 }, + { label: 'B', percentage: 130, value: 130 }, + ], + } ); + expect( screen.getByText( /invalid data/i ) ).toBeInTheDocument(); + } ); + + test( 'handles empty data array', () => { + renderWithTheme( { data: [] } ); + expect( screen.getByText( /no data available/i ) ).toBeInTheDocument(); + } ); + + test( 'handles single data point', () => { + renderWithTheme( { + data: [ { label: 'A', percentage: 100, value: 100 } ], + } ); + expect( screen.getByText( 'A' ) ).toBeInTheDocument(); + } ); + } ); +} ); diff --git a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx index 0fff77fc76494..6a56812c15ca3 100644 --- a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx @@ -50,6 +50,32 @@ interface PieChartProps extends OmitBaseChartProps { cornerScale?: number; } +/** + * Validates the pie chart data + * @param data - The data to validate + * @return Object containing validation result and error message + */ +const validateData = ( data: DataPointPercentage[] ) => { + if ( ! data.length ) { + return { isValid: false, message: 'No data available' }; + } + + // Check for negative values + const hasNegativeValues = data.some( item => item.percentage < 0 || item.value < 0 ); + if ( hasNegativeValues ) { + return { isValid: false, message: 'Invalid data: Negative values are not allowed' }; + } + + // Validate total percentage + const totalPercentage = data.reduce( ( sum, item ) => sum + item.percentage, 0 ); + if ( Math.abs( totalPercentage - 100 ) > 0.01 ) { + // Using small epsilon for floating point comparison + return { isValid: false, message: 'Invalid percentage total: Must equal 100' }; + } + + return { isValid: true, message: '' }; +}; + /** * Renders a pie or donut chart using the provided data. * @@ -74,6 +100,16 @@ const PieChart = ( { withTooltips, } ); + const { isValid, message } = validateData( data ); + + if ( ! isValid ) { + return ( +
      +
      { message }
      +
      + ); + } + const width = size; const height = size; diff --git a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx index 1e12d368f415b..0f2bcdf4d310d 100644 --- a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx @@ -7,19 +7,19 @@ const data = [ label: 'MacOS', value: 30000, valueDisplay: '30K', - percentage: 5, + percentage: 23, }, { label: 'Linux', value: 22000, valueDisplay: '22K', - percentage: 1, + percentage: 17, }, { label: 'Windows', value: 80000, valueDisplay: '80K', - percentage: 2, + percentage: 60, }, ]; @@ -207,3 +207,45 @@ export const FixedDimensions: Story = { }, }, }; + +export const ErrorStates: Story = { + render: () => ( +
      +
      +

      Empty Data

      + +
      +
      +

      Invalid Percentage Total

      + +
      +
      +

      Negative Values

      + +
      +
      +

      Single Data Point

      + +
      +
      + ), + parameters: { + docs: { + description: { + story: 'Examples of how the pie chart handles various error states and edge cases.', + }, + }, + }, +}; From 4ff799c1ede4a4195e7176895eb026cc58218812 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Wed, 22 Jan 2025 15:20:37 +1300 Subject: [PATCH 147/420] Charts: add back Rollup (#41234) * add back rollup for charts build * clean before build * changelog --- pnpm-lock.yaml | 60 ++++++++ .../charts/changelog/update-add-back-rollup | 4 + projects/js-packages/charts/package.json | 22 ++- projects/js-packages/charts/rollup.config.mjs | 142 ++++++++++++++++++ projects/js-packages/charts/tsconfig.json | 7 +- 5 files changed, 225 insertions(+), 10 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-add-back-rollup create mode 100644 projects/js-packages/charts/rollup.config.mjs diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af85123fb0c06..3778e69776d81 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -368,6 +368,21 @@ importers: '@jest/globals': specifier: ^29.0.0 version: 29.7.0 + '@rollup/plugin-commonjs': + specifier: 26.0.1 + version: 26.0.1(rollup@3.29.5) + '@rollup/plugin-json': + specifier: 6.1.0 + version: 6.1.0(rollup@3.29.5) + '@rollup/plugin-node-resolve': + specifier: 15.3.0 + version: 15.3.0(rollup@3.29.5) + '@rollup/plugin-terser': + specifier: 0.4.3 + version: 0.4.3(rollup@3.29.5) + '@rollup/plugin-typescript': + specifier: 12.1.0 + version: 12.1.0(rollup@3.29.5)(tslib@2.5.0)(typescript@5.7.2) '@storybook/blocks': specifier: 8.4.7 version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) @@ -440,6 +455,18 @@ importers: react-dom: specifier: 18.3.1 version: 18.3.1(react@18.3.1) + rollup: + specifier: 3.29.5 + version: 3.29.5 + rollup-plugin-dts: + specifier: 6.1.1 + version: 6.1.1(rollup@3.29.5)(typescript@5.7.2) + rollup-plugin-peer-deps-external: + specifier: 2.2.4 + version: 2.2.4(rollup@3.29.5) + rollup-plugin-postcss: + specifier: 4.0.2 + version: 4.0.2(postcss@8.4.47) sass: specifier: 1.64.1 version: 1.64.1 @@ -13285,10 +13312,22 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + rollup-plugin-dts@6.1.1: + resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} + engines: {node: '>=16'} + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 + rollup-plugin-livereload@2.0.5: resolution: {integrity: sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==} engines: {node: '>=8.3'} + rollup-plugin-peer-deps-external@2.2.4: + resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==} + peerDependencies: + rollup: '*' + rollup-plugin-postcss@4.0.2: resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} engines: {node: '>=10'} @@ -17156,6 +17195,15 @@ snapshots: rollup: 3.29.5 tslib: 2.5.0 + '@rollup/plugin-typescript@12.1.0(rollup@3.29.5)(tslib@2.5.0)(typescript@5.7.2)': + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) + resolve: 1.22.10 + typescript: 5.7.2 + optionalDependencies: + rollup: 3.29.5 + tslib: 2.5.0 + '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 @@ -27180,6 +27228,14 @@ snapshots: robust-predicates@3.0.2: {} + rollup-plugin-dts@6.1.1(rollup@3.29.5)(typescript@5.7.2): + dependencies: + magic-string: 0.30.17 + rollup: 3.29.5 + typescript: 5.7.2 + optionalDependencies: + '@babel/code-frame': 7.26.2 + rollup-plugin-livereload@2.0.5: dependencies: livereload: 0.9.3 @@ -27187,6 +27243,10 @@ snapshots: - bufferutil - utf-8-validate + rollup-plugin-peer-deps-external@2.2.4(rollup@3.29.5): + dependencies: + rollup: 3.29.5 + rollup-plugin-postcss@4.0.2(postcss@8.4.47): dependencies: chalk: 4.1.2 diff --git a/projects/js-packages/charts/changelog/update-add-back-rollup b/projects/js-packages/charts/changelog/update-add-back-rollup new file mode 100644 index 0000000000000..c1b21ebb12c4a --- /dev/null +++ b/projects/js-packages/charts/changelog/update-add-back-rollup @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Changed back to build with Rollup diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index a034f75e065c1..bdfaa38dcf35f 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -14,14 +14,16 @@ "license": "GPL-2.0-or-later", "author": "Automattic", "scripts": { - "clean": "rm -rf node_modules", + "clean": "rm -rf dist", "test": "jest --config=tests/jest.config.cjs", "test-coverage": "pnpm run test --coverage", "storybook": "cd ../storybook && pnpm run storybook:dev", "compile-ts": "tsc --pretty", "clean-build": "rm -rf dist/", "build": "pnpm run build:prod", - "build:prod": "pnpm run clean-build && webpack --config webpack.config.cjs --mode production && bash ./tools/fixup.sh && pnpm run build:types", + "build:prod": "pnpm run clean && rollup -c --environment NODE_ENV:production && bash ./tools/fixup.sh", + "build:dev": "rollup -c --environment NODE_ENV:development", + "build:webpack": "pnpm run clean-build && webpack --config webpack.config.cjs --mode production && bash ./tools/fixup.sh && pnpm run build:types", "build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types" }, "main": "./dist/cjs/index.js", @@ -35,14 +37,13 @@ ".": { "import": "./dist/mjs/index.js", "require": "./dist/cjs/index.js", - "types": "./dist/types/*.d.ts" + "types": "./dist/index.d.ts" }, "./components/*": { "import": "./dist/mjs/components/*/index.js", - "require": "./dist/cjs/components/*/index.js", - "types": "./dist/types/*.d.ts" + "require": "./dist/cjs/components/*/index.js" }, - "./style.css": "./dist/cjs/style.css" + "./style.css": "./dist/mjs/style.css" }, "dependencies": { "@babel/runtime": "7.26.0", @@ -68,6 +69,11 @@ "@babel/preset-env": "7.26.0", "@babel/preset-react": "7.26.3", "@babel/preset-typescript": "7.26.0", + "@rollup/plugin-commonjs": "26.0.1", + "@rollup/plugin-json": "6.1.0", + "@rollup/plugin-node-resolve": "15.3.0", + "@rollup/plugin-terser": "0.4.3", + "@rollup/plugin-typescript": "12.1.0", "@storybook/blocks": "8.4.7", "@storybook/react": "8.4.7", "@types/react": "18.3.18", @@ -85,6 +91,10 @@ "postcss-modules": "6.0.1", "react": "18.3.1", "react-dom": "18.3.1", + "rollup": "3.29.5", + "rollup-plugin-dts": "6.1.1", + "rollup-plugin-peer-deps-external": "2.2.4", + "rollup-plugin-postcss": "4.0.2", "sass": "1.64.1", "sass-embedded": "1.83.0", "sass-loader": "^13.0.0", diff --git a/projects/js-packages/charts/rollup.config.mjs b/projects/js-packages/charts/rollup.config.mjs new file mode 100644 index 0000000000000..10629b92429c2 --- /dev/null +++ b/projects/js-packages/charts/rollup.config.mjs @@ -0,0 +1,142 @@ +// Import necessary plugins for building the library +import commonjs from '@rollup/plugin-commonjs'; +import json from '@rollup/plugin-json'; +import resolve from '@rollup/plugin-node-resolve'; +import terser from '@rollup/plugin-terser'; +import typescript from '@rollup/plugin-typescript'; +import { defineConfig } from 'rollup'; +import dts from 'rollup-plugin-dts'; +import peerDepsExternal from 'rollup-plugin-peer-deps-external'; +import postcss from 'rollup-plugin-postcss'; + +// Common plugins used across all build configurations +const commonPlugins = [ + // Automatically externalize peer dependencies + peerDepsExternal( { + includeDependencies: true, + } ), + // Locate and bundle third-party dependencies from node_modules + resolve( { + preferBuiltins: true, + extensions: [ '.tsx', '.ts', '.js', '.jsx' ], + } ), + // Convert CommonJS modules to ES6 + commonjs(), + // Allow importing JSON files + json(), + // Process SCSS/CSS modules + postcss( { + // Configure CSS modules with scoped names + modules: { + generateScopedName: '[name]__[local]__[hash:base64:5]', + }, + extract: 'style.css', + autoModules: false, + use: [ 'sass' ], + } ), +]; + +// Main bundle configuration for the entire library +const mainConfig = { + // Entry point for the bundle + input: 'src/index.ts', + // Output configuration for different module formats + output: [ + { + file: './dist/cjs/index.js', + format: 'cjs', // CommonJS format for Node.js + sourcemap: true, + sourcemapPathTransform: relativeSourcePath => { + return `/@automattic/charts/${ relativeSourcePath }`; + }, + }, + { + file: './dist/mjs/index.js', + format: 'esm', // ES modules for modern bundlers + sourcemap: true, + }, + ], + // Mark all dependencies as external to avoid bundling them + external: [ 'react', 'react-dom', /^@visx\/.*/, '@react-spring/web', 'clsx', 'tslib' ], + plugins: [ + ...commonPlugins, + // TypeScript compilation + typescript( { + tsconfig: './tsconfig.json', + declaration: false, // Declarations handled by dts plugin + sourceMap: true, + compilerOptions: { + verbatimModuleSyntax: true, + }, + } ), + terser(), + ], + // Handle circular dependencies warning + onwarn( warning, warn ) { + if ( warning.code === 'CIRCULAR_DEPENDENCY' ) { + return; + } + warn( warning ); + }, +}; + +// List of components to build individually +const components = [ + 'components/bar-chart', + 'components/line-chart', + 'components/pie-chart', + 'components/pie-semi-circle-chart', + 'components/tooltip', + 'components/legend', + 'components/grid-control', + 'providers/theme', +]; + +// Generate individual bundles for each component +const componentConfigs = components.map( component => ( { + // Component entry point - try both .tsx and .ts extensions + input: `src/${ component }/index`, + // Output both ESM and CJS formats + output: [ + { + file: `dist/mjs/${ component }/index.js`, + format: 'esm', + sourcemap: true, + }, + { + file: `dist/cjs/${ component }/index.js`, + format: 'cjs', + sourcemap: true, + }, + ], + // Same external config as main bundle + external: [ 'react', 'react-dom', /^@visx\/.*/, '@react-spring/web', 'clsx', 'tslib' ], + plugins: [ + ...commonPlugins, + typescript( { + tsconfig: './tsconfig.json', + declaration: false, + sourceMap: true, + compilerOptions: { + verbatimModuleSyntax: true, + }, + } ), + terser(), + ], +} ) ); + +// Configuration for generating TypeScript declaration files +const typesConfig = { + input: 'src/index.ts', + output: [ { file: 'dist/index.d.ts', format: 'es' } ], + plugins: [ + dts( { + respectExternal: true, + } ), + ], + // Don't include style imports in type definitions + external: [ /\.scss$/, /\.css$/, 'react', /@types\/.*/, /^@visx\/.*/, 'react/jsx-runtime' ], +}; + +// Export all configurations to be built in parallel +export default defineConfig( [ mainConfig, ...componentConfigs, typesConfig ] ); diff --git a/projects/js-packages/charts/tsconfig.json b/projects/js-packages/charts/tsconfig.json index 8a484178527cc..dd287e3eb69d9 100644 --- a/projects/js-packages/charts/tsconfig.json +++ b/projects/js-packages/charts/tsconfig.json @@ -1,10 +1,9 @@ { - "extends": "jetpack-js-tools/tsconfig.tsc-declaration-only.json", + "extends": "jetpack-js-tools/tsconfig.base.json", "compilerOptions": { - "typeRoots": [ "./node_modules/@types/", "src/*" ], - "outDir": "./dist/types" + "typeRoots": [ "./node_modules/@types/", "src/*" ] }, // List all sources and source-containing subdirs. - "include": [ "./src/index.ts" ], + "include": [ "./src" ], "exclude": [ "node_modules", "dist", "**/stories/**" ] } From bdeebefbdc77b7cf5097e52af8d962bd51389b7b Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Wed, 22 Jan 2025 15:52:20 +1300 Subject: [PATCH 148/420] generate changelog (#41235) --- projects/js-packages/charts/CHANGELOG.md | 14 ++++++++++++++ .../charts/changelog/add-chart-library-tests | 4 ---- .../changelog/add-support-gradient-line-chart | 4 ---- .../charts/changelog/add-x-y-axis-orientation | 4 ---- .../charts/changelog/update-add-back-rollup | 4 ---- ...pdate-chart-library-fix-pie-chart-test-failures | 4 ---- .../update-chart-library-responsive-stories | 4 ---- .../update-introduce-slide-gap-prop-to-pie-charts | 4 ---- .../update-iterate-over-pie-chart-component | 4 ---- projects/js-packages/charts/package.json | 2 +- 10 files changed, 15 insertions(+), 33 deletions(-) delete mode 100644 projects/js-packages/charts/changelog/add-chart-library-tests delete mode 100644 projects/js-packages/charts/changelog/add-support-gradient-line-chart delete mode 100644 projects/js-packages/charts/changelog/add-x-y-axis-orientation delete mode 100644 projects/js-packages/charts/changelog/update-add-back-rollup delete mode 100644 projects/js-packages/charts/changelog/update-chart-library-fix-pie-chart-test-failures delete mode 100644 projects/js-packages/charts/changelog/update-chart-library-responsive-stories delete mode 100644 projects/js-packages/charts/changelog/update-introduce-slide-gap-prop-to-pie-charts delete mode 100644 projects/js-packages/charts/changelog/update-iterate-over-pie-chart-component diff --git a/projects/js-packages/charts/CHANGELOG.md b/projects/js-packages/charts/CHANGELOG.md index 2263c6db45c48..0c18fc7f60980 100644 --- a/projects/js-packages/charts/CHANGELOG.md +++ b/projects/js-packages/charts/CHANGELOG.md @@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.0] - 2025-01-22 +### Added +- Added passing through options for X, Y axis [#41109] +- Add gradient fill for line chart [#41143] +- Charts: add responsive chart stories [#41018] +- Charts: adds dependencies and config for jest testing. Adds some initial tests to pie chart component [#41148] +- Charts: adds more pie chart tests [#41175] + +### Changed +- Changed back to build with Rollup [#41234] +- Introduce gapScale and cornerScale properties [#41033] +- PieChart: iterate a bit over component API [#40993] + ## [0.3.0] - 2025-01-12 ### Changed - make charts responsive [#40922] @@ -54,6 +67,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed lints following ESLint rule changes for TS [#40584] - Fixing a bug in Chart storybook data. [#40640] +[0.4.0]: https://github.com/Automattic/charts/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/Automattic/charts/compare/v0.2.3...v0.3.0 [0.2.3]: https://github.com/Automattic/charts/compare/v0.2.2...v0.2.3 [0.2.2]: https://github.com/Automattic/charts/compare/v0.2.1...v0.2.2 diff --git a/projects/js-packages/charts/changelog/add-chart-library-tests b/projects/js-packages/charts/changelog/add-chart-library-tests deleted file mode 100644 index b34924ff668ef..0000000000000 --- a/projects/js-packages/charts/changelog/add-chart-library-tests +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Charts: adds dependencies and config for jest testing. Adds some initial tests to pie chart component diff --git a/projects/js-packages/charts/changelog/add-support-gradient-line-chart b/projects/js-packages/charts/changelog/add-support-gradient-line-chart deleted file mode 100644 index 202e4443f42d1..0000000000000 --- a/projects/js-packages/charts/changelog/add-support-gradient-line-chart +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Add gradient fill for line chart diff --git a/projects/js-packages/charts/changelog/add-x-y-axis-orientation b/projects/js-packages/charts/changelog/add-x-y-axis-orientation deleted file mode 100644 index 1cba564f78b87..0000000000000 --- a/projects/js-packages/charts/changelog/add-x-y-axis-orientation +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Added passing through options for X, Y axis diff --git a/projects/js-packages/charts/changelog/update-add-back-rollup b/projects/js-packages/charts/changelog/update-add-back-rollup deleted file mode 100644 index c1b21ebb12c4a..0000000000000 --- a/projects/js-packages/charts/changelog/update-add-back-rollup +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Changed back to build with Rollup diff --git a/projects/js-packages/charts/changelog/update-chart-library-fix-pie-chart-test-failures b/projects/js-packages/charts/changelog/update-chart-library-fix-pie-chart-test-failures deleted file mode 100644 index 64336ef41c629..0000000000000 --- a/projects/js-packages/charts/changelog/update-chart-library-fix-pie-chart-test-failures +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Charts: adds more pie chart tests diff --git a/projects/js-packages/charts/changelog/update-chart-library-responsive-stories b/projects/js-packages/charts/changelog/update-chart-library-responsive-stories deleted file mode 100644 index 61811c2d5b2d0..0000000000000 --- a/projects/js-packages/charts/changelog/update-chart-library-responsive-stories +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Charts: add responsive chart stories diff --git a/projects/js-packages/charts/changelog/update-introduce-slide-gap-prop-to-pie-charts b/projects/js-packages/charts/changelog/update-introduce-slide-gap-prop-to-pie-charts deleted file mode 100644 index 66558f519e4b5..0000000000000 --- a/projects/js-packages/charts/changelog/update-introduce-slide-gap-prop-to-pie-charts +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Introduce gapScale and cornerScale properties diff --git a/projects/js-packages/charts/changelog/update-iterate-over-pie-chart-component b/projects/js-packages/charts/changelog/update-iterate-over-pie-chart-component deleted file mode 100644 index 7d9c19c45f44c..0000000000000 --- a/projects/js-packages/charts/changelog/update-iterate-over-pie-chart-component +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -PieChart: iterate a bit over component API diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index bdfaa38dcf35f..79a322a24d230 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/charts", - "version": "0.3.0", + "version": "0.4.0", "description": "Display charts within Automattic products.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/charts/#readme", "bugs": { From 74b728fa32bc2ea7d24a73516fc0e551c21245b8 Mon Sep 17 00:00:00 2001 From: Louis Laugesen Date: Wed, 22 Jan 2025 15:13:28 +1100 Subject: [PATCH 149/420] Revert "Related Posts: Hide settings in block themes" (#41203) * Revert "Related Posts: Hide settings in block themes (#41075)" This reverts commit dd375d82c97dc7ff4ce1c488b779337fd9e5c503. * changelog --------- Co-authored-by: okmttdhr --- .../_inc/client/traffic/related-posts.jsx | 89 +++++++++---------- ...ert-41075-update-related-posts-block-theme | 4 + .../related-posts/jetpack-related-posts.php | 23 ----- 3 files changed, 48 insertions(+), 68 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/revert-41075-update-related-posts-block-theme diff --git a/projects/plugins/jetpack/_inc/client/traffic/related-posts.jsx b/projects/plugins/jetpack/_inc/client/traffic/related-posts.jsx index 51e50201bdf45..f2ad413f5998e 100644 --- a/projects/plugins/jetpack/_inc/client/traffic/related-posts.jsx +++ b/projects/plugins/jetpack/_inc/client/traffic/related-posts.jsx @@ -1,4 +1,5 @@ import { ToggleControl, getRedirectUrl } from '@automattic/jetpack-components'; +import { createInterpolateElement } from '@wordpress/element'; import { __, _x } from '@wordpress/i18n'; import React from 'react'; import Card from 'components/card'; @@ -88,31 +89,51 @@ class RelatedPostsComponent extends React.Component { ); } - renderSettings() { - const isRelatedPostsActive = this.props.getOptionValue( 'related-posts' ); - const unavailableInOfflineMode = this.props.isUnavailableInOfflineMode( 'related-posts' ); - const { isBlockThemeActive } = this.props; - + render() { + const isRelatedPostsActive = this.props.getOptionValue( 'related-posts' ), + unavailableInOfflineMode = this.props.isUnavailableInOfflineMode( 'related-posts' ); return ( - <> -

      - { __( - 'Keep your visitors engaged with related content at the bottom of each post.', - 'jetpack' - ) } -

      - + - - { __( 'Show related content after posts', 'jetpack' ) } - - - { ! isBlockThemeActive && ( +

      + { createInterpolateElement( + __( + 'Keep your visitors engaged with related content at the bottom of each post. These settings won’t apply to related posts added using the block editor.', + 'jetpack' + ), + { + a: ( + + ), + } + ) } +

      + + + { __( 'Show related content after posts', 'jetpack' ) } + + ) } - ) } - - ); - } - - render() { - const isRelatedPostsActive = this.props.getOptionValue( 'related-posts' ); - return ( - - - { this.renderSettings() } { ! this.props.isUnavailableInOfflineMode( 'related-posts' ) && isRelatedPostsActive && diff --git a/projects/plugins/jetpack/changelog/revert-41075-update-related-posts-block-theme b/projects/plugins/jetpack/changelog/revert-41075-update-related-posts-block-theme new file mode 100644 index 0000000000000..842a45c767d72 --- /dev/null +++ b/projects/plugins/jetpack/changelog/revert-41075-update-related-posts-block-theme @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Revert "Related Posts: Hide settings in block themes" diff --git a/projects/plugins/jetpack/modules/related-posts/jetpack-related-posts.php b/projects/plugins/jetpack/modules/related-posts/jetpack-related-posts.php index a17f7ba4c03e9..e88e92225f09b 100644 --- a/projects/plugins/jetpack/modules/related-posts/jetpack-related-posts.php +++ b/projects/plugins/jetpack/modules/related-posts/jetpack-related-posts.php @@ -7,7 +7,6 @@ use Automattic\Jetpack\Assets; use Automattic\Jetpack\Blocks; -use Automattic\Jetpack\Redirect; use Automattic\Jetpack\Sync\Settings; /** @@ -737,28 +736,6 @@ public function print_setting_html() { $ui_settings // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- data is escaped when variable is set. ); } else { - // Hide settings that does not take effect on block themes. - if ( wp_is_block_theme() ) { - $ui_settings = sprintf( - '

      %s %s

      ', - esc_url( - Redirect::get_url( - 'jetpack-support-related-posts', - array( - 'anchor' => 'adding-related-posts-block-theme', - 'site' => $this->get_blog_id(), - ) - ) - ), - esc_html__( 'Add a Related Posts Block to your site’s template in the site editor', 'jetpack' ), - esc_html__( 'to keep your visitors engaged with related content at the bottom of each post.', 'jetpack' ) - ); - printf( - $ui_settings // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- data is escaped when variable is set. - ); - return; - } - $template = <<
    • From 9bdc90a683588fb1c08b1dbc922a442b0bdc7e98 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Tue, 21 Jan 2025 21:12:21 -0800 Subject: [PATCH 150/420] Social | Enable connections management for WPCOM sites (#41019) * Social: Use connections REST endpoint for initial state (#40677) * Create connections class for caching * Update script data to use connections from the REST endpoint * changelog * Restore deprecated connection fields for time being * Disable caching for now * Fix display_name for Mastodon * Remove the unused caching logic * Social: Connections API schema front end changes (#40539) * Social: Use connections REST endpoint for initial state (#40677) * Create connections class for caching * Update script data to use connections from the REST endpoint * changelog * Restore deprecated connection fields for time being * Disable caching for now * Fix display_name for Mastodon * Remove the unused caching logic * Update connect-form.tsx * Create connections class for caching * Update types for connection object * Update connection actions to reflect new types * Mark 'id' as deprecated * Add changelog * Deprecated fields should be optional * Fix TS error * Update unit tests * Replace/remove deprecated props usage * Remove unused code * Fix connection selectors * Fix unit tests * Reduce the number of changes * Fix type * Oops! It should be negation * Restore class-connections.php * Social | Add site context for publicize endpoints (#40704) * Allow requests as blog in base controller * Add filters for connections controller * Add changelog * Update baseline.php * Rename the 'include' param to 'scope' for clarity * Return shared connections by default * Remove scope parameter in favour of request context * Only pass test_connections to WPCOM * Update baseline.php * Social: Implement connections caching with the updated endpoint (#40892) * Update connections class to implement caching * Add get_all_for_user method * Pass cached connections to initial state * Invalidate cache on XMLRPC request * Add changelog * Remove eager loading of connections following cache invalidation * Improve clear caching logic to handle race condition * Social: Replace can_disconnect with a store data selector (#40888) * Pass the connected users WPCOM data to the UI * Augment wpcom for user object * Create canUserManageConnection selector * Replace can_disconnect with the new selector * Fix unit tests * Add changelog * Fix user data for WPCOM sites * Fix unit tests * Add changelog * Social | Restore must_reauth as connection status (#40946) * Add "must_reauth" to status in REST schema * Restore the UI changes to consider must_reauth status * Add changelog * Don't disable connections with must_reauth status must_reauth means that the connection will break soon, but it still works. We'll display an appropriate notice. --------- Co-authored-by: Paul Bunkham * Social | Clean up connections controller to use connections class (#40982) * Create Proxy_Requests class for re-usability * Move is_wpcom utility to Publicize_Utils class * Move connections specific logic from REST controller to connections class * Add changelog * Update baseline.php * Move publicize permissions check to its own method * Social | Fix connect button for broken connections (#40995) * Social | Fix connected accounts not marked as such on confirmation screen (#40997) * Social | Fix connected accounts not marked as such on confirmation screen * Add a comment * Social | Update connections schema to change `user_id` to `wpcom_user_id` (#41025) * Social | Update connections schema to change user_id to wpcom_user_id * Fix wpcom_user_id for post connections field * Add changelog * Social | Implement the other CRUD operations for connections (#40928) * WIP * Pass the connection ID in the URL * Pass connection_id for delete proxy request * Allow overriding $request_options * Clean up debugging * Add changelog * Add changelog for js changes * Fix static analysis issues * Remove unused code * Update baseline.php --------- Co-authored-by: Paul Bunkham * Unify changelogs * Unify js changelog * It should be 'blog' not 'site' * Social | Use the proxy trait from connection package (#41087) * Update baseline.php * Update phan * Social | Fix social connections list initial state feature check (#41151) * Social | Enable connections management for WPCOM sites --------- Co-authored-by: Paul Bunkham --- .../update-social-enable-connections-management-for-wpcom | 4 ++++ .../wpcomsh/wpcom-features/class-wpcom-features.php | 7 +------ 2 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 projects/plugins/wpcomsh/changelog/update-social-enable-connections-management-for-wpcom diff --git a/projects/plugins/wpcomsh/changelog/update-social-enable-connections-management-for-wpcom b/projects/plugins/wpcomsh/changelog/update-social-enable-connections-management-for-wpcom new file mode 100644 index 0000000000000..af1aeecd27692 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/update-social-enable-connections-management-for-wpcom @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Social | Enable connections management for WPCOM sites diff --git a/projects/plugins/wpcomsh/wpcom-features/class-wpcom-features.php b/projects/plugins/wpcomsh/wpcom-features/class-wpcom-features.php index be909531fa98b..98af37a637d87 100644 --- a/projects/plugins/wpcomsh/wpcom-features/class-wpcom-features.php +++ b/projects/plugins/wpcomsh/wpcom-features/class-wpcom-features.php @@ -1093,12 +1093,7 @@ class WPCOM_Features { ), ), self::SOCIAL_CONNECTIONS_MANAGEMENT => array( - array( - // This feature isn't launched yet, so we're ensuring that it's not available on any plans. - 'before' => '1900-01-01', - self::WPCOM_ALL_SITES, - self::JETPACK_ALL_SITES, - ), + self::WPCOM_ALL_SITES, ), self::SOCIAL_EDITOR_PREVIEW => array( array( From f8f52ab2edc9d231f20ee65e0e5062242dc576bc Mon Sep 17 00:00:00 2001 From: Madhu Dollu Date: Wed, 22 Jan 2025 11:11:30 +0530 Subject: [PATCH 151/420] Remove classic view notice from general settings (#41155) * remove calypso notice from general settings * changelog --- .../changelog/remove-classic-view-notice | 4 ++ .../admin-menu/class-atomic-admin-menu.php | 56 ------------------- 2 files changed, 4 insertions(+), 56 deletions(-) create mode 100644 projects/packages/masterbar/changelog/remove-classic-view-notice diff --git a/projects/packages/masterbar/changelog/remove-classic-view-notice b/projects/packages/masterbar/changelog/remove-classic-view-notice new file mode 100644 index 0000000000000..c67067aa466a4 --- /dev/null +++ b/projects/packages/masterbar/changelog/remove-classic-view-notice @@ -0,0 +1,4 @@ +Significance: minor +Type: removed + +removed classic view admin notice from general settings (for atomic sites) diff --git a/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php b/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php index 2a723cc124ac2..0bcafb72c30b7 100644 --- a/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php +++ b/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php @@ -45,11 +45,6 @@ function () { }, 0 ); - - // Add notices to the settings pages when there is a Calypso page available. - if ( $this->use_wp_admin_interface() ) { - add_action( 'current_screen', array( $this, 'add_settings_page_notice' ) ); - } } /** @@ -530,55 +525,4 @@ public function wp_ajax_jitm_dismiss() { } wp_die(); } - - /** - * Adds a notice above each settings page while using the Classic view to indicate - * that the Default view offers more features. Links to the default view. - * - * @return void - */ - public function add_settings_page_notice() { - if ( ! is_admin() ) { - return; - } - - $current_screen = get_current_screen(); - - if ( ! $current_screen instanceof \WP_Screen ) { - return; - } - - // Show the notice for the following screens and map them to the Calypso page. - $screen_map = array( - 'options-general' => 'general', - 'options-reading' => 'reading', - ); - - $mapped_screen = $screen_map[ $current_screen->id ] ?? false; - - if ( ! $mapped_screen ) { - return; - } - - $switch_url = sprintf( 'https://wordpress.com/settings/%s/%s', $mapped_screen, $this->domain ); - - // Close over the $switch_url variable. - $admin_notices = function () use ( $switch_url ) { - wp_admin_notice( - wp_kses( - sprintf( - // translators: %s is a link to the Calypso settings page. - __( 'You are currently using the Classic view, which doesn’t offer the same set of features as the Default view. To access additional settings and features, switch to the Default view. ', 'jetpack-masterbar' ), - esc_url( $switch_url ) - ), - array( 'a' => array( 'href' => array() ) ) - ), - array( - 'type' => 'warning', - ) - ); - }; - - add_action( 'admin_notices', $admin_notices ); - } } From d523d5c63ffbf6da6c452c75b19ad3a462e86a9b Mon Sep 17 00:00:00 2001 From: "okmttdhr, tada" Date: Wed, 22 Jan 2025 16:04:23 +0900 Subject: [PATCH 152/420] Show `Site Address` & `WordPress Address` on Simple Classic (#41208) * Show Site Address & WordPress Address on Simple * changelog * Add missing translations --- .../changelog/add-siteurl-on-simple | 4 + .../src/class-jetpack-mu-wpcom.php | 1 + .../src/features/wpcom-siteurl/siteurl.php | 42 ++++++++++ .../src/features/wpcom-siteurl/siteurl.ts | 84 +++++++++++++++++++ .../src/features/wpcom-siteurl/types.d.ts | 12 +++ .../jetpack-mu-wpcom/webpack.config.js | 1 + 6 files changed, 144 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-siteurl-on-simple create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/siteurl.php create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/siteurl.ts create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/types.d.ts diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-siteurl-on-simple b/projects/packages/jetpack-mu-wpcom/changelog/add-siteurl-on-simple new file mode 100644 index 0000000000000..36452b52f51b9 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-siteurl-on-simple @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Show Site Address & WordPress Address on Simple diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index ec3435b3fbc18..ea1c568ae5a8d 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -156,6 +156,7 @@ public static function load_wpcom_user_features() { require_once __DIR__ . '/features/wpcom-profile-settings/profile-settings-link-to-wpcom.php'; require_once __DIR__ . '/features/wpcom-profile-settings/profile-settings-notices.php'; require_once __DIR__ . '/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php'; + require_once __DIR__ . '/features/wpcom-siteurl/siteurl.php'; require_once __DIR__ . '/features/wpcom-themes/wpcom-themes.php'; // Only load the Calypsoify and Masterbar features on WoA sites. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/siteurl.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/siteurl.php new file mode 100644 index 0000000000000..66980a101d1d3 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/siteurl.php @@ -0,0 +1,42 @@ + get_option( 'siteurl' ), + 'homeUrl' => get_option( 'home' ), + 'siteSlug' => $site_slug, + 'optionsGeneralUrl' => $options_general_url, + ) + ) . ';', + 'before' + ); +} +add_action( 'load-options-general.php', 'wpcom_add_siteurl_to_general_settings' ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/siteurl.ts b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/siteurl.ts new file mode 100644 index 0000000000000..23ba8412a01b8 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/siteurl.ts @@ -0,0 +1,84 @@ +import { __, sprintf } from '@wordpress/i18n'; + +/** + * Adds the Site Address (URL) and WordPress Address (URL) input fields to the General Settings page on Simple sites. + */ +const wpcomAddSiteUrl = () => { + if ( typeof window.wpcomSiteUrl === 'undefined' ) { + return; + } + + const settingsTable = document.querySelector( 'table.form-table tbody' ); + if ( ! settingsTable ) { + return; + } + + const previousSibling = + settingsTable.querySelector( '.site-icon-section' ) || + settingsTable.querySelectorAll( 'tr' )[ 1 ]; + if ( ! previousSibling ) { + return; + } + + // Create the Site Address (URL) row + if ( ! document.getElementById( 'home' ) ) { + const homeUrlLabel = __( 'Site Address (URL)', 'jetpack-mu-wpcom' ); + const homeUrlRow = document.createElement( 'tr' ); + homeUrlRow.innerHTML = ` + + + `; + // On UI, `Site Address (URL)` is rendered after `WordPress Address (URL)` + settingsTable.insertBefore( homeUrlRow, previousSibling.nextSibling ); + } + + // Create the WordPress Address (URL) row + if ( ! document.getElementById( 'siteurl' ) ) { + const siteUrlLabel = __( 'WordPress Address (URL)', 'jetpack-mu-wpcom' ); + const siteUrlRow = document.createElement( 'tr' ); + siteUrlRow.innerHTML = ` + + + `; + settingsTable.insertBefore( siteUrlRow, previousSibling.nextSibling ); + } +}; + +/** + * Adds domain settings links under the site URL input fields both on Simple and Atomic sites. + */ +function wpcomAddDomainSettingsLinks() { + const settingsTable = document.querySelector( 'table.form-table tbody' ); + if ( ! settingsTable ) { + return; + } + + const previousSibling = + ( document.getElementById( 'home' ) as HTMLInputElement ) || + ( document.getElementById( 'siteurl' ) as HTMLInputElement ); + if ( ! previousSibling ) { + return; + } + + const domainSettingsLink = document.createElement( 'p' ); + domainSettingsLink.className = 'description'; + domainSettingsLink.innerHTML = sprintf( + // translators: %1$s is the site slug, %2$s is the URL to the General Settings page. + __( + 'Buy a custom domain, ' + + 'map a domain you already own, ' + + 'or redirect this site.' + + ' You can change your site address in Domain Settings.', + 'jetpack-mu-wpcom' + ), + window.wpcomSiteUrl.siteSlug, + window.wpcomSiteUrl.optionsGeneralUrl + ); + + previousSibling.parentElement?.appendChild( domainSettingsLink ); +} + +document.addEventListener( 'DOMContentLoaded', function () { + wpcomAddSiteUrl(); + wpcomAddDomainSettingsLinks(); +} ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/types.d.ts b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/types.d.ts new file mode 100644 index 0000000000000..8648ba970760b --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-siteurl/types.d.ts @@ -0,0 +1,12 @@ +declare global { + interface Window { + wpcomSiteUrl: { + siteUrl: string; + homeUrl: string; + siteSlug: string; + optionsGeneralUrl: string; + }; + } +} + +export {}; diff --git a/projects/packages/jetpack-mu-wpcom/webpack.config.js b/projects/packages/jetpack-mu-wpcom/webpack.config.js index 1329b074d4b9d..965e3bb66f22b 100644 --- a/projects/packages/jetpack-mu-wpcom/webpack.config.js +++ b/projects/packages/jetpack-mu-wpcom/webpack.config.js @@ -52,6 +52,7 @@ module.exports = [ 'wpcom-profile-settings-link-to-wpcom': './src/features/wpcom-profile-settings/profile-settings-link-to-wpcom.ts', 'wpcom-sidebar-notice': './src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.js', + 'wpcom-siteurl': './src/features/wpcom-siteurl/siteurl.js', 'starter-page-templates': './src/features/starter-page-templates/index.tsx', 'removed-calypso-screen-notice': './src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx', From e7069bd739e396d6b414ee5ba8ca125b92bac8bc Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Tue, 21 Jan 2025 23:28:05 -0800 Subject: [PATCH 153/420] Publicize | Fix PHP unit tests (#41237) * Publicize | Fix PHP unit tests * Add changelog * Enforce admin UI v1 in tests --- .../changelog/fix-publicize-php-unit-tests | 5 +++ .../publicize/test_class.publicize.php | 36 +++++++++++++++---- 2 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-publicize-php-unit-tests diff --git a/projects/plugins/jetpack/changelog/fix-publicize-php-unit-tests b/projects/plugins/jetpack/changelog/fix-publicize-php-unit-tests new file mode 100644 index 0000000000000..62ae61fa5fb9f --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-publicize-php-unit-tests @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Fixed Publicize unit tests + + diff --git a/projects/plugins/jetpack/tests/php/modules/publicize/test_class.publicize.php b/projects/plugins/jetpack/tests/php/modules/publicize/test_class.publicize.php index 5c89e913f5466..e54d31516363c 100644 --- a/projects/plugins/jetpack/tests/php/modules/publicize/test_class.publicize.php +++ b/projects/plugins/jetpack/tests/php/modules/publicize/test_class.publicize.php @@ -251,18 +251,37 @@ public function test_publicize_post_type_is_publicizeable_cpt() { } public function test_publicize_get_all_connections_for_user() { + if ( ! defined( 'JETPACK_SOCIAL_USE_ADMIN_UI_V1' ) ) { + define( 'JETPACK_SOCIAL_USE_ADMIN_UI_V1', true ); + } $facebook_connection = array( 'id_number' => array( - 'connection_data' => array( + 'connection_data' => array( + 'id' => 123, 'user_id' => 0, ), + 'external_display' => 'Test', + 'service_name' => 'facebook', + 'connection_id' => 123, + 'can_disconnect' => true, + 'profile_link' => false, + 'shared' => false, + 'status' => 'ok', ), ); $twitter_connection = array( 'id_number_2' => array( - 'connection_data' => array( + 'connection_data' => array( + 'id' => 456, 'user_id' => 1, ), + 'external_display' => '@test', + 'service_name' => 'twitter', + 'connection_id' => 456, + 'can_disconnect' => true, + 'profile_link' => 'https://twitter.com/test', + 'shared' => false, + 'status' => 'ok', ), ); @@ -277,21 +296,26 @@ public function test_publicize_get_all_connections_for_user() { // When logged out, assert that blog-level connections are returned. wp_set_current_user( 0 ); - $this->assertSame( array( 'facebook' => $facebook_connection ), $publicize->get_all_connections_for_user() ); + $this->assertSame( + array( + $facebook_connection['id_number'], + ), + $publicize->get_all_connections_for_user() + ); // When logged in, assert that blog-level connections AND any connections for the current user are returned. wp_set_current_user( 1 ); $this->assertSame( array( - 'facebook' => $facebook_connection, - 'twitter' => $twitter_connection, + $facebook_connection['id_number'], + $twitter_connection['id_number_2'], ), $publicize->get_all_connections_for_user() ); // There are no connections for user 2, so we should only get blog-level connections. wp_set_current_user( 2 ); - $this->assertSame( array( 'facebook' => $facebook_connection ), $publicize->get_all_connections_for_user() ); + $this->assertSame( array( $facebook_connection['id_number'] ), $publicize->get_all_connections_for_user() ); } /** From 04d8b625a900864aae3e1f42f3f431d487938884 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Wed, 22 Jan 2025 00:13:29 -0800 Subject: [PATCH 154/420] Social | Fix jetpack/v4 endpoint profile link field (#41199) --- .../fix-social-jetpack-v4-endpoint-profile-link-field | 4 ++++ projects/packages/publicize/src/class-publicize.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 projects/packages/publicize/changelog/fix-social-jetpack-v4-endpoint-profile-link-field diff --git a/projects/packages/publicize/changelog/fix-social-jetpack-v4-endpoint-profile-link-field b/projects/packages/publicize/changelog/fix-social-jetpack-v4-endpoint-profile-link-field new file mode 100644 index 0000000000000..db5148732cb59 --- /dev/null +++ b/projects/packages/publicize/changelog/fix-social-jetpack-v4-endpoint-profile-link-field @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Social | Fix editor invalid parameters error for old Jetpack versions. diff --git a/projects/packages/publicize/src/class-publicize.php b/projects/packages/publicize/src/class-publicize.php index 0a444a86bf5a8..f216ede0bd467 100644 --- a/projects/packages/publicize/src/class-publicize.php +++ b/projects/packages/publicize/src/class-publicize.php @@ -257,7 +257,7 @@ public function get_all_connections_for_user( $args = array() ) { 'service_name' => $service_name, 'connection_id' => $connection['connection_data']['id'], 'can_disconnect' => self::can_manage_connection( $connection['connection_data'] ), - 'profile_link' => $this->get_profile_link( $service_name, $connection ), + 'profile_link' => (string) $this->get_profile_link( $service_name, $connection ), 'shared' => '0' === $connection['connection_data']['user_id'], 'status' => 'ok', ) From 95fa35bdc730ebaa678147dd237d15f51625fffa Mon Sep 17 00:00:00 2001 From: Foteini Giannaropoulou Date: Wed, 22 Jan 2025 10:22:12 +0200 Subject: [PATCH 155/420] Jetpack Sync: Use static vs self for calling 'get_setting' within 'Settings' class (#41238) * Jetpack Sync Settings: Use static vs self for calling 'get_setting' within class --- .../update-jetpack-sync-settings-static-usage | 5 +++ projects/packages/sync/src/class-settings.php | 32 +++++++++---------- 2 files changed, 21 insertions(+), 16 deletions(-) create mode 100644 projects/packages/sync/changelog/update-jetpack-sync-settings-static-usage diff --git a/projects/packages/sync/changelog/update-jetpack-sync-settings-static-usage b/projects/packages/sync/changelog/update-jetpack-sync-settings-static-usage new file mode 100644 index 0000000000000..11d0d11bd2981 --- /dev/null +++ b/projects/packages/sync/changelog/update-jetpack-sync-settings-static-usage @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Jetpack Sync Settings: Use static vs self for calling 'get_setting' within class + + diff --git a/projects/packages/sync/src/class-settings.php b/projects/packages/sync/src/class-settings.php index 862e71e69c199..a01f5a29bca6e 100644 --- a/projects/packages/sync/src/class-settings.php +++ b/projects/packages/sync/src/class-settings.php @@ -115,7 +115,7 @@ class Settings { public static function get_settings() { $settings = array(); foreach ( array_keys( self::$valid_settings ) as $setting ) { - $settings[ $setting ] = self::get_setting( $setting ); + $settings[ $setting ] = static::get_setting( $setting ); } return $settings; @@ -350,7 +350,7 @@ public static function is_network_setting( $setting ) { * @return string SQL WHERE clause. */ public static function get_blacklisted_post_types_sql() { - return 'post_type NOT IN (\'' . implode( '\', \'', array_map( 'esc_sql', self::get_setting( 'post_types_blacklist' ) ) ) . '\')'; + return 'post_type NOT IN (\'' . implode( '\', \'', array_map( 'esc_sql', static::get_setting( 'post_types_blacklist' ) ) ) . '\')'; } /** @@ -365,7 +365,7 @@ public static function get_disallowed_post_types_structured() { return array( 'post_type' => array( 'operator' => 'NOT IN', - 'values' => array_map( 'esc_sql', self::get_setting( 'post_types_blacklist' ) ), + 'values' => array_map( 'esc_sql', static::get_setting( 'post_types_blacklist' ) ), ), ); } @@ -380,7 +380,7 @@ public static function get_disallowed_post_types_structured() { * @return string SQL WHERE clause. */ public static function get_blacklisted_taxonomies_sql() { - return "taxonomy NOT IN ('" . implode( "', '", array_map( 'esc_sql', self::get_setting( 'taxonomies_blacklist' ) ) ) . "')"; + return "taxonomy NOT IN ('" . implode( "', '", array_map( 'esc_sql', static::get_setting( 'taxonomies_blacklist' ) ) ) . "')"; } /** @@ -393,7 +393,7 @@ public static function get_blacklisted_taxonomies_sql() { * @return string SQL WHERE clause. */ public static function get_whitelisted_post_meta_sql() { - return 'meta_key IN (\'' . implode( '\', \'', array_map( 'esc_sql', self::get_setting( 'post_meta_whitelist' ) ) ) . '\')'; + return 'meta_key IN (\'' . implode( '\', \'', array_map( 'esc_sql', static::get_setting( 'post_meta_whitelist' ) ) ) . '\')'; } /** @@ -408,7 +408,7 @@ public static function get_allowed_post_meta_structured() { return array( 'meta_key' => array( 'operator' => 'IN', - 'values' => array_map( 'esc_sql', self::get_setting( 'post_meta_whitelist' ) ), + 'values' => array_map( 'esc_sql', static::get_setting( 'post_meta_whitelist' ) ), ), ); } @@ -425,7 +425,7 @@ public static function get_blacklisted_taxonomies_structured() { return array( 'taxonomy' => array( 'operator' => 'NOT IN', - 'values' => array_map( 'esc_sql', self::get_setting( 'taxonomies_blacklist' ) ), + 'values' => array_map( 'esc_sql', static::get_setting( 'taxonomies_blacklist' ) ), ), ); } @@ -442,7 +442,7 @@ public static function get_allowed_taxonomies_structured() { global $wp_taxonomies; $allowed_taxonomies = array_keys( $wp_taxonomies ); - $allowed_taxonomies = array_diff( $allowed_taxonomies, self::get_setting( 'taxonomies_blacklist' ) ); + $allowed_taxonomies = array_diff( $allowed_taxonomies, static::get_setting( 'taxonomies_blacklist' ) ); return array( 'taxonomy' => array( 'operator' => 'IN', @@ -461,7 +461,7 @@ public static function get_allowed_taxonomies_structured() { * @return string SQL WHERE clause. */ public static function get_whitelisted_comment_meta_sql() { - return 'meta_key IN (\'' . implode( '\', \'', array_map( 'esc_sql', self::get_setting( 'comment_meta_whitelist' ) ) ) . '\')'; + return 'meta_key IN (\'' . implode( '\', \'', array_map( 'esc_sql', static::get_setting( 'comment_meta_whitelist' ) ) ) . '\')'; } /** @@ -476,7 +476,7 @@ public static function get_allowed_comment_meta_structured() { return array( 'meta_key' => array( 'operator' => 'IN', - 'values' => array_map( 'esc_sql', self::get_setting( 'comment_meta_whitelist' ) ), + 'values' => array_map( 'esc_sql', static::get_setting( 'comment_meta_whitelist' ) ), ), ); } @@ -573,7 +573,7 @@ public static function is_importing() { * @return boolean Whether sync is enabled. */ public static function is_sync_enabled() { - return ! ( self::get_setting( 'disable' ) || self::get_setting( 'network_disable' ) ); + return ! ( static::get_setting( 'disable' ) || static::get_setting( 'network_disable' ) ); } /** @@ -664,7 +664,7 @@ public static function set_is_sending( $is_sending ) { * @return boolean Whether sync is enabled. */ public static function is_sender_enabled( $queue_id ) { - return (bool) self::get_setting( $queue_id . '_sender_enabled' ); + return (bool) static::get_setting( $queue_id . '_sender_enabled' ); } /** @@ -676,7 +676,7 @@ public static function is_sender_enabled( $queue_id ) { * @return boolean Whether sync is enabled. */ public static function is_checksum_enabled() { - return ! (bool) self::get_setting( 'checksum_disable' ); + return ! (bool) static::get_setting( 'checksum_disable' ); } /** @@ -688,7 +688,7 @@ public static function is_checksum_enabled() { * @return boolean Whether dedicated Sync flow is enabled. */ public static function is_dedicated_sync_enabled() { - return (bool) self::get_setting( 'dedicated_sync_enabled' ); + return (bool) static::get_setting( 'dedicated_sync_enabled' ); } /** @@ -700,7 +700,7 @@ public static function is_dedicated_sync_enabled() { * @return boolean Whether custom queue table is enabled. */ public static function is_custom_queue_table_enabled() { - return (bool) self::get_setting( 'custom_queue_table_enabled' ); + return (bool) static::get_setting( 'custom_queue_table_enabled' ); } /** @@ -712,6 +712,6 @@ public static function is_custom_queue_table_enabled() { * @return boolean Whether wpcom rest api is enabled. */ public static function is_wpcom_rest_api_enabled() { - return (bool) self::get_setting( 'wpcom_rest_api_enabled' ); + return (bool) static::get_setting( 'wpcom_rest_api_enabled' ); } } From 267713f0daae7f24e3399920818600c70f754cd2 Mon Sep 17 00:00:00 2001 From: Liam Sarsfield <43409125+LiamSarsfield@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:30:52 +0000 Subject: [PATCH 156/420] Boost: Clear Page Cache when Image CDN Auto Resize Lazy Images is toggled (#41226) * Add cache invalidation for Image CDN LIAR status updates * changelog --- .../boost/app/modules/optimizations/page-cache/Page_Cache.php | 2 ++ .../plugins/boost/changelog/fix-boost-liar-toggle-clear-cache | 4 ++++ 2 files changed, 6 insertions(+) create mode 100644 projects/plugins/boost/changelog/fix-boost-liar-toggle-clear-cache diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/Page_Cache.php b/projects/plugins/boost/app/modules/optimizations/page-cache/Page_Cache.php index 166164e63c870..ea43167ff45a8 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/Page_Cache.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/Page_Cache.php @@ -8,6 +8,7 @@ use Automattic\Jetpack_Boost\Contracts\Optimization; use Automattic\Jetpack_Boost\Contracts\Pluggable; use Automattic\Jetpack_Boost\Modules\Modules_Index; +use Automattic\Jetpack_Boost\Modules\Optimizations\Image_CDN\Liar; use Automattic\Jetpack_Boost\Modules\Optimizations\Page_Cache\Pre_WordPress\Boost_Cache; use Automattic\Jetpack_Boost\Modules\Optimizations\Page_Cache\Pre_WordPress\Boost_Cache_Settings; use Automattic\Jetpack_Boost\Modules\Optimizations\Page_Cache\Pre_WordPress\Filesystem_Utils; @@ -47,6 +48,7 @@ public function setup() { add_action( 'update_option_' . JETPACK_BOOST_DATASYNC_NAMESPACE . '_minify_js_excludes', array( $this, 'invalidate_cache' ) ); add_action( 'update_option_' . JETPACK_BOOST_DATASYNC_NAMESPACE . '_minify_css_excludes', array( $this, 'invalidate_cache' ) ); add_action( 'update_option_' . JETPACK_BOOST_DATASYNC_NAMESPACE . '_image_cdn_quality', array( $this, 'invalidate_cache' ) ); + add_action( 'update_option_jetpack_boost_status_' . Liar::get_slug(), array( $this, 'invalidate_cache' ) ); } /** diff --git a/projects/plugins/boost/changelog/fix-boost-liar-toggle-clear-cache b/projects/plugins/boost/changelog/fix-boost-liar-toggle-clear-cache new file mode 100644 index 0000000000000..e211a91b6f907 --- /dev/null +++ b/projects/plugins/boost/changelog/fix-boost-liar-toggle-clear-cache @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Page Cache: Clear Page Cache when Image CDN Auto Resize Lazy Images is toggled. From dbbc08544ed124181e4b8a7eaf87dd76525ee258 Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Wed, 22 Jan 2025 11:00:47 +0100 Subject: [PATCH 157/420] Repo gardening: don't send slack notifs for closed issues (#41165) --- ...e-repo-gardening-no-slack-customer-warnings-closed-issues | 5 +++++ .../src/tasks/gather-support-references/index.js | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 projects/github-actions/repo-gardening/changelog/update-repo-gardening-no-slack-customer-warnings-closed-issues diff --git a/projects/github-actions/repo-gardening/changelog/update-repo-gardening-no-slack-customer-warnings-closed-issues b/projects/github-actions/repo-gardening/changelog/update-repo-gardening-no-slack-customer-warnings-closed-issues new file mode 100644 index 0000000000000..d3f916844efa8 --- /dev/null +++ b/projects/github-actions/repo-gardening/changelog/update-repo-gardening-no-slack-customer-warnings-closed-issues @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Issue Triage: do not send Slack notifications for closed issues + + diff --git a/projects/github-actions/repo-gardening/src/tasks/gather-support-references/index.js b/projects/github-actions/repo-gardening/src/tasks/gather-support-references/index.js index 4ec7836ab1ea5..59aaa874607df 100644 --- a/projects/github-actions/repo-gardening/src/tasks/gather-support-references/index.js +++ b/projects/github-actions/repo-gardening/src/tasks/gather-support-references/index.js @@ -414,7 +414,7 @@ async function createOrUpdateComment( payload, octokit, issueReferences, issueCo */ async function addHappinessLabel( payload, octokit ) { const { - issue: { number }, + issue: { number, state }, repository: { name: repo, owner: { login: ownerLogin }, @@ -441,9 +441,10 @@ async function addHappinessLabel( payload, octokit ) { // Send Slack notification, if we have the necessary tokens. // No Slack tokens, we won't be able to escalate. Bail. + // If the issue is already closed, do not send any Slack reminder. const slackToken = getInput( 'slack_token' ); const channel = getInput( 'slack_quality_channel' ); - if ( ! slackToken || ! channel ) { + if ( ! slackToken || ! channel || state === 'closed' ) { return false; } From 506413569de60b30b43dbab8eec9b648a7423c61 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Wed, 22 Jan 2025 02:38:34 -0800 Subject: [PATCH 158/420] Social | Fix publicize unit tests once more (#41241) * Fix publicize unit tests once more * changelog --- .../plugins/jetpack/changelog/fix-publicize-unit-tests-again | 5 +++++ .../tests/php/modules/publicize/test_class.publicize.php | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/fix-publicize-unit-tests-again diff --git a/projects/plugins/jetpack/changelog/fix-publicize-unit-tests-again b/projects/plugins/jetpack/changelog/fix-publicize-unit-tests-again new file mode 100644 index 0000000000000..c8f7896ae00a9 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-publicize-unit-tests-again @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Fixed publicize unit test + + diff --git a/projects/plugins/jetpack/tests/php/modules/publicize/test_class.publicize.php b/projects/plugins/jetpack/tests/php/modules/publicize/test_class.publicize.php index e54d31516363c..46948254d18b0 100644 --- a/projects/plugins/jetpack/tests/php/modules/publicize/test_class.publicize.php +++ b/projects/plugins/jetpack/tests/php/modules/publicize/test_class.publicize.php @@ -264,7 +264,7 @@ public function test_publicize_get_all_connections_for_user() { 'service_name' => 'facebook', 'connection_id' => 123, 'can_disconnect' => true, - 'profile_link' => false, + 'profile_link' => '', 'shared' => false, 'status' => 'ok', ), From c5d3ef3c63417484b4bfc99626556b89ceb9bcde Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Wed, 22 Jan 2025 07:12:43 -0700 Subject: [PATCH 159/420] CRM: Remove legacy Groove code (#41247) * Remove legacy Groove code * Add changelog * Update Phan baseline --- projects/plugins/crm/.phan/baseline.php | 3 +-- projects/plugins/crm/api/customer_search.php | 27 +------------------ .../changelog/remove-crm-legacy_groove_code | 4 +++ .../plugins/crm/includes/ZeroBSCRM.API.php | 14 ---------- 4 files changed, 6 insertions(+), 42 deletions(-) create mode 100644 projects/plugins/crm/changelog/remove-crm-legacy_groove_code diff --git a/projects/plugins/crm/.phan/baseline.php b/projects/plugins/crm/.phan/baseline.php index 59e95987f340b..514e9af179200 100644 --- a/projects/plugins/crm/.phan/baseline.php +++ b/projects/plugins/crm/.phan/baseline.php @@ -103,7 +103,6 @@ // PhanUnextractableAnnotation : 2 occurrences // PhanImpossibleTypeComparisonInLoop : 1 occurrence // PhanNoopVariable : 1 occurrence - // PhanParamTooFewInternal : 1 occurrence // PhanPluginDuplicateArrayKey : 1 occurrence // PhanPluginDuplicateCatchStatementBody : 1 occurrence // PhanPluginUseReturnValueInternalKnown : 1 occurrence @@ -172,7 +171,7 @@ 'api/customers.php' => ['PhanPluginSimplifyExpressionBool'], 'api/status.php' => ['PhanTypePossiblyInvalidDimOffset'], 'includes/ZeroBSCRM.AJAX.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanParamTooMany', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateExpressionAssignment', 'PhanPluginNeverReturnFunction', 'PhanPluginRedundantAssignment', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNullable', 'PhanTypeInvalidDimOffset', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDimFetch', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeVoidAssignment', 'PhanUndeclaredConstant', 'PhanUndeclaredVariableDim'], - 'includes/ZeroBSCRM.API.php' => ['PhanCommentParamWithoutRealParam', 'PhanParamTooFewInternal', 'PhanParamTooMany', 'PhanRedefineFunctionInternal', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgumentInternal'], + 'includes/ZeroBSCRM.API.php' => ['PhanCommentParamWithoutRealParam', 'PhanRedefineFunctionInternal', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgumentInternal'], 'includes/ZeroBSCRM.AdminPages.Checks.php' => ['PhanPluginUnreachableCode'], 'includes/ZeroBSCRM.AdminPages.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginRedundantAssignment', 'PhanPossiblyUndeclaredVariable', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeSuspiciousEcho', 'PhanUndeclaredVariableDim'], 'includes/ZeroBSCRM.AdminStyling.php' => ['PhanDeprecatedFunction', 'PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchArgument'], diff --git a/projects/plugins/crm/api/customer_search.php b/projects/plugins/crm/api/customer_search.php index 158e13a109c40..4d273a2496b36 100644 --- a/projects/plugins/crm/api/customer_search.php +++ b/projects/plugins/crm/api/customer_search.php @@ -52,35 +52,10 @@ ) ); + // Send an empty array if no matches. if ( ! $customer_matches ) { wp_send_json( array() ); } - - // Groove Sidebar has extra information, will do this way, for file compatibility - if ( isset( $_GET['api_token'] ) && defined( 'ZBSGROOVECHECKED' ) ) { - // then it's coming from Groove, so send back total value and last purchased information - $customerID = $customer_matches['id']; - $total_value = zeroBS_customerTotalValue( $customerID, $customer_matches['invoices'], $customer_matches['transactions'] ); - $customer_matches['total_value'] = $total_value; - - // also needs - /** - * purchase_item - * purchase_value - * purchase_date - */ - - if ( isset( $customer_matches['transactions'] ) && is_array( $customer_matches['transactions'] ) && count( $customer_matches['transactions'] ) > 0 ) { - - $customer_matches['purchase_item'] = $customer_matches['transactions'][0]['meta']['item']; - $customer_matches['purchase_value'] = $customer_matches['transactions'][0]['meta']['total']; - $customer_matches['purchase_date'] = $customer_matches['transactions'][0]['created']; - - } - - /* should also format the bl00dy dates */ - - } } else { // could be more matches (don't return financial data - unperformant) $customer_matches = zeroBS_integrations_searchCustomers( $args ); diff --git a/projects/plugins/crm/changelog/remove-crm-legacy_groove_code b/projects/plugins/crm/changelog/remove-crm-legacy_groove_code new file mode 100644 index 0000000000000..08a9168a0e6cd --- /dev/null +++ b/projects/plugins/crm/changelog/remove-crm-legacy_groove_code @@ -0,0 +1,4 @@ +Significance: patch +Type: removed + +Remove legacy Groove code. diff --git a/projects/plugins/crm/includes/ZeroBSCRM.API.php b/projects/plugins/crm/includes/ZeroBSCRM.API.php index 428315c5fd195..1522c4d7e8e81 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.API.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.API.php @@ -245,22 +245,8 @@ function zeroBSCRM_API_get_api_endpoint( $template_name, $args = array(), $tempa // function similar to is_user_logged_in() function jpcrm_is_api_request_authorised() { - - // WH - I've added api_secret here to bolster security, // We should switch authentication method to "headers" not parameters - will be cleaner :) - // unclear if we're still needing this... - // we are coming from GROOVE HQ - define in wp-config.php - if ( defined( 'GROOVE_API_TOKEN' ) && ! empty( $_GET['api_token'] ) ) { - if ( hash_equals( sanitize_text_field( $_GET['api_token'], GROOVE_API_TOKEN ) ) ) { - // and define that we've checked - if ( ! defined( 'ZBSGROOVECHECKED' ) ) { - define( 'ZBSGROOVECHECKED', time() ); - } - return true; - } - } - // the the API key/secret are currently in the URL $possible_api_key = isset( $_GET['api_key'] ) ? sanitize_text_field( $_GET['api_key'] ) : ''; $possible_api_secret = isset( $_GET['api_secret'] ) ? sanitize_text_field( $_GET['api_secret'] ) : ''; From 92cd80bda476cd6f3f63eae1b81aca60fa68a40c Mon Sep 17 00:00:00 2001 From: Omar Alshaker Date: Wed, 22 Jan 2025 16:25:25 +0100 Subject: [PATCH 160/420] Help Center: Persist the Help Center open state and clean up Odie endpoints (#41126) --- .../changelog/fix-help-center-open-state | 4 + .../help-center/class-help-center.php | 4 + .../class-wp-rest-help-center-odie.php | 88 -------------- ...-rest-help-center-persisted-open-state.php | 110 ++++++++++++++++++ 4 files changed, 118 insertions(+), 88 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-help-center-open-state create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/help-center/class-wp-rest-help-center-persisted-open-state.php diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-help-center-open-state b/projects/packages/jetpack-mu-wpcom/changelog/fix-help-center-open-state new file mode 100644 index 0000000000000..bc0e74f1a5db3 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-help-center-open-state @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Endpoint to persist the Help Center open state. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-help-center.php b/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-help-center.php index 858cf91fab796..918690fee7265 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-help-center.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-help-center.php @@ -297,6 +297,10 @@ public function register_rest_api() { $controller = new WP_REST_Help_Center_Odie(); $controller->register_rest_route(); + require_once __DIR__ . '/class-wp-rest-help-center-persisted-open-state.php'; + $controller = new WP_REST_Help_Center_Persisted_Open_State(); + $controller->register_rest_route(); + require_once __DIR__ . '/class-wp-rest-help-center-email-support-enabled.php'; $controller = new WP_REST_Help_Center_Email_Support_Enabled(); $controller->register_rest_route(); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-wp-rest-help-center-odie.php b/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-wp-rest-help-center-odie.php index 77ab16f6c032b..6c0c9dd199669 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-wp-rest-help-center-odie.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-wp-rest-help-center-odie.php @@ -97,25 +97,6 @@ public function register_rest_route() { ) ); - register_rest_route( - $this->namespace, - $this->rest_base . '/history/last-chat-id', - // Get last chat ID. - array( - array( - 'methods' => \WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_last_chat_id' ), - 'permission_callback' => 'is_user_logged_in', - ), - // Set last chat ID. - array( - 'methods' => \WP_REST_Server::CREATABLE, - 'callback' => array( $this, 'set_last_chat_id' ), - 'permission_callback' => 'is_user_logged_in', - ), - ) - ); - register_rest_route( $this->namespace, $this->rest_base . '/chat/(?P[a-zA-Z0-9-]+)/(?P\d+)/(?P\d+)/feedback', @@ -185,75 +166,6 @@ public function register_rest_route() { ); } - /** - * Get chat_id and last_chat_id from user preferences. - */ - public function get_last_chat_id() { - // Forward the request body to the support chat endpoint. - $body = Client::wpcom_json_api_request_as_user( - '/me/preferences', - '2', - array( 'method' => 'GET' ) - ); - - if ( is_wp_error( $body ) ) { - return $body; - } - - $response = json_decode( wp_remote_retrieve_body( $body ) ); - - $projected_response = array( - 'odie_chat_id' => $response->odie_chat_id, - 'odie_last_chat_id' => $response->odie_last_chat_id ?? null, - ); - - return rest_ensure_response( $projected_response ); - } - - /** - * Set chat_id or last_chat_id from user preferences. - * - * @param \WP_REST_Request $request The request sent to the API. - */ - public function set_last_chat_id( \WP_REST_Request $request ) { - $chat_id = $request['odie_chat_id']; - $last_chat_id = $request['odie_last_chat_id']; - - $data = array( - 'calypso_preferences' => array(), - ); - - if ( $request->has_param( 'odie_chat_id' ) ) { - $data['calypso_preferences']['odie_chat_id'] = $chat_id; - } - - if ( $request->has_param( 'odie_last_chat_id' ) ) { - $data['calypso_preferences']['odie_last_chat_id'] = $last_chat_id; - } - - $body = Client::wpcom_json_api_request_as_user( - '/me/preferences', - '2', - array( 'method' => 'POST' ), - $data - ); - - if ( is_wp_error( $body ) ) { - return $body; - } - - $response = json_decode( wp_remote_retrieve_body( $body ) ); - - $projected_response = array( - 'calypso_preferences' => array( - 'odie_chat_id' => $response->calypso_preferences->odie_chat_id, - 'odie_last_chat_id' => $response->calypso_preferences->odie_last_chat_id, - ), - ); - - return rest_ensure_response( $projected_response ); - } - /** * Send a message to the support chat. * diff --git a/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-wp-rest-help-center-persisted-open-state.php b/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-wp-rest-help-center-persisted-open-state.php new file mode 100644 index 0000000000000..b2abb2af9ea65 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/help-center/class-wp-rest-help-center-persisted-open-state.php @@ -0,0 +1,110 @@ +namespace = 'help-center'; + $this->rest_base = '/open-state'; + } + + /** + * Register available routes. + */ + public function register_rest_route() { + register_rest_route( + $this->namespace, + $this->rest_base, + array( + // Get the open state. + array( + 'methods' => \WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_state' ), + 'permission_callback' => 'is_user_logged_in', + ), + // Set the open state + array( + 'methods' => \WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'set_state' ), + 'permission_callback' => 'is_user_logged_in', + ), + ) + ); + } + + /** + * Get chat_id and last_chat_id from user preferences. + */ + public function get_state() { + // Forward the request body to the support chat endpoint. + $body = Client::wpcom_json_api_request_as_user( + '/me/preferences', + '2', + array( 'method' => 'GET' ) + ); + + if ( is_wp_error( $body ) ) { + return $body; + } + + $response = json_decode( wp_remote_retrieve_body( $body ) ); + + $projected_response = array( + 'help_center_open' => (bool) $response->help_center_open, + ); + + return rest_ensure_response( $projected_response ); + } + + /** + * Set chat_id or last_chat_id from user preferences. + * + * @param \WP_REST_Request $request The request sent to the API. + */ + public function set_state( \WP_REST_Request $request ) { + $state = $request['help_center_open']; + + $data = array( + 'calypso_preferences' => array(), + ); + + if ( $request->has_param( 'help_center_open' ) ) { + $data['calypso_preferences']['help_center_open'] = $state; + } + + $body = Client::wpcom_json_api_request_as_user( + '/me/preferences', + '2', + array( 'method' => 'POST' ), + $data + ); + + if ( is_wp_error( $body ) ) { + return $body; + } + + $response = json_decode( wp_remote_retrieve_body( $body ) ); + + $projected_response = array( + 'calypso_preferences' => array( + 'help_center_open' => $response->calypso_preferences->help_center_open, + ), + ); + + return rest_ensure_response( $projected_response ); + } +} From eb4c6a2ac399b580f3a6942885a2c65185306fa9 Mon Sep 17 00:00:00 2001 From: Bogdan Ungureanu Date: Wed, 22 Jan 2025 17:39:55 +0200 Subject: [PATCH 161/420] RDV: Remove the switcher on post filter pages (#41249) --- .../changelog/fix-remove-quick-switcher-on-post-filter | 5 +++++ .../features/wpcom-admin-interface/wpcom-admin-interface.php | 1 + 2 files changed, 6 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-remove-quick-switcher-on-post-filter diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-remove-quick-switcher-on-post-filter b/projects/packages/jetpack-mu-wpcom/changelog/fix-remove-quick-switcher-on-post-filter new file mode 100644 index 0000000000000..206a434d125a9 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-remove-quick-switcher-on-post-filter @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Remove the quick switcher for post filter pages (Posts > drafts) + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index b1d54f05d3fed..4f725a05da8af 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -120,6 +120,7 @@ function ( $location ) { const WPCOM_DUPLICATED_VIEW = array( 'edit.php', 'edit.php?post_type=page', + 'edit.php?post_type=post', // Alias for posts. It's used for the post filters (published, draft, sticky, etc). 'edit.php?post_type=jetpack-portfolio', 'edit.php?post_type=jetpack-testimonial', 'edit-comments.php', From 60336bdc8ae5358f4777ab3f0549b779a0415568 Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Wed, 22 Jan 2025 13:51:37 -0300 Subject: [PATCH 162/420] Jetpack AI: fix AI excerpt panel to work for pages in site editor (#41251) * change import to support site-editor sidebar for pages * add changelog * typecase to ReactElement as PostTypeSupportCheck strictly admits that but not ReactNode * typecase with a better approach (one that works actually) --- .../fix-jetpack-ai-excerpt-site-editor | 4 ++++ .../extend/ai-post-excerpt/index.tsx | 22 +++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-ai-excerpt-site-editor diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-ai-excerpt-site-editor b/projects/plugins/jetpack/changelog/fix-jetpack-ai-excerpt-site-editor new file mode 100644 index 0000000000000..923bc46e99287 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-jetpack-ai-excerpt-site-editor @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack AI: excerpt panel now uses PluginDocumentSettingPanel slotfill for compatibility with site and post editor diff --git a/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx index f10f65add917a..df077b9a74dbd 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx @@ -9,8 +9,11 @@ import { } from '@automattic/jetpack-shared-extension-utils'; import { TextareaControl, ExternalLink, Button, Notice, BaseControl } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; -import { PluginDocumentSettingPanel } from '@wordpress/edit-post'; -import { store as editorStore, PostTypeSupportCheck } from '@wordpress/editor'; +import { + store as editorStore, + PostTypeSupportCheck, + PluginDocumentSettingPanel, +} from '@wordpress/editor'; import { useState, useEffect, useCallback } from '@wordpress/element'; import { __, sprintf, _n } from '@wordpress/i18n'; import { count } from '@wordpress/wordcount'; @@ -27,6 +30,7 @@ import { AiExcerptControl } from '../../components/ai-excerpt-control'; import type { LanguageProp } from '../../../../blocks/ai-assistant/components/i18n-dropdown-control'; import type { ToneProp } from '../../../../blocks/ai-assistant/components/tone-dropdown-control'; import type { AiModelTypeProp, PromptProp } from '@automattic/jetpack-ai-client'; +import type { ReactElement } from 'react'; import './style.scss'; @@ -304,15 +308,25 @@ export const PluginDocumentSettingPanelAiExcerpt = () => { if ( isExcerptUsedAsDescription ) { return null; } + + const SettingPanel = props => { + const Panel = PluginDocumentSettingPanel as unknown as React.ComponentType< { + className?: string; + name?: string; + title?: string; + } >; + return ( ) as ReactElement; + }; + return ( - - + ); }; From 89271e041bc765e5b9b70e84311a6f88010f9a1a Mon Sep 17 00:00:00 2001 From: Mehmood Ahmad <31419912+mehmoodak@users.noreply.github.com> Date: Wed, 22 Jan 2025 21:53:20 +0500 Subject: [PATCH 163/420] Reader: Remove daily prompt modal from editor screen (#41121) In https://github.com/Automattic/wp-calypso/pull/98473 PR we have stopped displaying `BloggingPromptsModal` so removing this from the codebase. --- .../changelog/remove-daily-prompt-modal | 4 + .../launchpad/launchpad-task-definitions.php | 5 - .../src/block-editor-nux.js | 2 - .../src/blogging-prompts-modal/icons.js | 13 --- .../src/blogging-prompts-modal/index.js | 106 ------------------ .../src/blogging-prompts-modal/style.scss | 53 --------- 6 files changed, 4 insertions(+), 179 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/remove-daily-prompt-modal delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/icons.js delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/index.js delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/style.scss diff --git a/projects/packages/jetpack-mu-wpcom/changelog/remove-daily-prompt-modal b/projects/packages/jetpack-mu-wpcom/changelog/remove-daily-prompt-modal new file mode 100644 index 0000000000000..29fed613c8319 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/remove-daily-prompt-modal @@ -0,0 +1,4 @@ +Significance: minor +Type: removed + +Reader: Removed daily prompt modal from editor screen. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php index c6fc9808339bf..afe883411aeda 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php @@ -114,11 +114,6 @@ function wpcom_launchpad_get_task_definitions() { ? admin_url( 'post-new.php' ) : '/post/' . $data['site_slug_encoded']; - // Add a new_prompt query param for Write sites. - if ( 'write' === get_option( 'site_intent' ) ) { - return add_query_arg( 'new_prompt', 'true', $base_path ); - } - return $base_path; }, ), diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/block-editor-nux.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/block-editor-nux.js index 862a8fe088887..1dd45c58ac09a 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/block-editor-nux.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/block-editor-nux.js @@ -11,7 +11,6 @@ import { HasSeenVideoCelebrationModalProvider, ShouldShowFirstPostPublishedModalProvider, } from '../../../common/tour-kit'; -import { BloggingPromptsModal } from './blogging-prompts-modal'; import DraftPostModal from './draft-post-modal'; import FirstPostPublishedModal from './first-post-published-modal'; import PurchaseNotice from './purchase-notice'; @@ -106,7 +105,6 @@ registerPlugin( 'wpcom-block-editor-nux', { - diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/icons.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/icons.js deleted file mode 100644 index 1b968dbc81d19..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/icons.js +++ /dev/null @@ -1,13 +0,0 @@ -import { Path, SVG } from '@wordpress/components'; - -export const ArrowRightIcon = () => ( - - - -); - -export const ArrowLeftIcon = () => ( - - - -); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/index.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/index.js deleted file mode 100644 index 74ff6b5be19c2..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/index.js +++ /dev/null @@ -1,106 +0,0 @@ -import apiFetch from '@wordpress/api-fetch'; -import { createBlock } from '@wordpress/blocks'; -import { Button, Modal } from '@wordpress/components'; -import { dispatch, select } from '@wordpress/data'; -import { __ } from '@wordpress/i18n'; -import { addQueryArgs, getQueryArg } from '@wordpress/url'; -import moment from 'moment'; -import { useEffect, useState } from 'react'; -import { wpcomTrackEvent } from '../../../../common/tracks'; -import { ArrowLeftIcon, ArrowRightIcon } from './icons'; - -import './style.scss'; - -export const BloggingPromptsModalInner = () => { - const [ isOpen, setIsOpen ] = useState( true ); - const [ prompts, setPrompts ] = useState( [] ); - const [ promptIndex, setPromptIndex ] = useState( 0 ); - - useEffect( () => { - const path = addQueryArgs( `/wpcom/v3/blogging-prompts`, { - per_page: 10, - after: moment().format( '--MM-DD' ), - order: 'desc', - force_year: new Date().getFullYear(), - } ); - apiFetch( { - path, - } ) - .then( result => { - wpcomTrackEvent( 'calypso_editor_writing_prompts_modal_viewed' ); - return setPrompts( result ); - } ) - // eslint-disable-next-line no-console - .catch( () => console.error( 'Unable to fetch writing prompts' ) ); - }, [] ); - - if ( ! isOpen || ! prompts.length ) { - return null; - } - - const selectPrompt = () => { - const promptId = prompts[ promptIndex ]?.id; - dispatch( 'core/editor' ).resetEditorBlocks( [ - createBlock( 'jetpack/blogging-prompt', { promptId } ), - ] ); - wpcomTrackEvent( 'calypso_editor_writing_prompts_modal_prompt_selected', { - prompt_id: promptId, - } ); - setIsOpen( false ); - }; - - const closeModal = () => { - wpcomTrackEvent( 'calypso_editor_writing_prompts_modal_closed' ); - setIsOpen( false ); - }; - - return ( - -
      -
      - -

      { prompts[ promptIndex ]?.text }

      - -
      - -
      -
      - ); -}; - -export const BloggingPromptsModal = () => { - const hasQueryArg = getQueryArg( window.location.href, 'new_prompt' ); - const editorType = select( 'core/editor' ).getCurrentPostType(); - - const shouldOpen = hasQueryArg && editorType === 'post'; - - if ( ! shouldOpen ) { - return null; - } - return ; -}; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/style.scss deleted file mode 100644 index 67969ac4d706b..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/blogging-prompts-modal/style.scss +++ /dev/null @@ -1,53 +0,0 @@ -@import "@automattic/typography/styles/variables"; -@import "@wordpress/base-styles/breakpoints"; -@import "@wordpress/base-styles/mixins"; - -.blogging-prompts-modal { - @include break-small { - width: 80%; - } - @include break-large { - width: 60%; - } - max-width: 800px; - margin: auto; - - .components-modal__header-heading { - font-size: $font-body; - font-weight: 400; - } -} - -.blogging-prompts-modal__prompt { - display: flex; - flex-direction: column; - align-items: flex-end; - - .blogging-prompts-modal__prompt-navigation { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 24px; - gap: 24px; - width: 100%; - } - - .blogging-prompts-modal__prompt-navigation-button { - border-radius: 50%; - width: 44px; - height: 44px; - &.components-button:hover:not(:disabled,[aria-disabled="true"]) { - box-shadow: 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)); - } - } - - .blogging-prompts-modal__prompt-text { - font-size: 1.25rem; - font-weight: 500; - line-height: 26px; - text-align: left; - width: 100%; - text-wrap: pretty; - } -} - From 66686dbb8bf4a934f6645f894153d72e92edd128 Mon Sep 17 00:00:00 2001 From: Calypso Bot Date: Wed, 22 Jan 2025 20:39:23 +0100 Subject: [PATCH 164/420] Update dependency undici to v5.28.5 [SECURITY] (#41233) Co-authored-by: Renovate Bot --- pnpm-lock.yaml | 14 +++++++------- .../changelog/renovate-npm-undici-vulnerability | 4 ++++ .../test-results-to-slack/package.json | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 projects/github-actions/test-results-to-slack/changelog/renovate-npm-undici-vulnerability diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3778e69776d81..c87a94c4a18e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,8 +112,8 @@ importers: specifier: 29.7.0 version: 29.7.0 undici: - specifier: 5.28.4 - version: 5.28.4 + specifier: 5.28.5 + version: 5.28.5 projects/js-packages/ai-client: dependencies: @@ -14446,8 +14446,8 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + undici@5.28.5: + resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} engines: {node: '>=14.0'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -14999,12 +14999,12 @@ snapshots: '@octokit/core': 5.2.0 '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.2.0) '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.0) - undici: 5.28.4 + undici: 5.28.5 '@actions/http-client@2.2.3': dependencies: tunnel: 0.0.6 - undici: 5.28.4 + undici: 5.28.5 '@adobe/css-tools@4.4.1': {} @@ -28387,7 +28387,7 @@ snapshots: undici-types@6.20.0: {} - undici@5.28.4: + undici@5.28.5: dependencies: '@fastify/busboy': 2.1.1 diff --git a/projects/github-actions/test-results-to-slack/changelog/renovate-npm-undici-vulnerability b/projects/github-actions/test-results-to-slack/changelog/renovate-npm-undici-vulnerability new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/github-actions/test-results-to-slack/changelog/renovate-npm-undici-vulnerability @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/github-actions/test-results-to-slack/package.json b/projects/github-actions/test-results-to-slack/package.json index 9151411489b69..4abcd422a153f 100644 --- a/projects/github-actions/test-results-to-slack/package.json +++ b/projects/github-actions/test-results-to-slack/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@vercel/ncc": "0.36.1", "jest": "29.7.0", - "undici": "5.28.4" + "undici": "5.28.5" }, "scripts": { "build": "ncc build src/index.js -o dist --source-map --license licenses.txt", From fbe6c1afe4b1721eeb095dc12b60b8a4868f22e0 Mon Sep 17 00:00:00 2001 From: gogdzl <37049295+gogdzl@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:54:42 -0300 Subject: [PATCH 165/420] Backport crm 6.5.1 Changes (#41262) * Changelog and readme.txt edits. * Update projects/js-packages/script-data/CHANGELOG.md Co-authored-by: tbradsha <32492176+tbradsha@users.noreply.github.com> --------- Co-authored-by: tbradsha <32492176+tbradsha@users.noreply.github.com> --- projects/js-packages/script-data/CHANGELOG.md | 5 +++++ .../changelog/add-wpcom-data-for-current-user | 4 ---- projects/js-packages/script-data/package.json | 2 +- projects/plugins/crm/CHANGELOG.md | 12 +++++++++++- projects/plugins/crm/ZeroBSCRM.php | 2 +- .../fix-crm-3523-email-invoices-not-sending | 4 ---- ...fix-functionify_and_statusify_exit_and_die | 4 ---- .../changelog/remove-crm-legacy_groove_code | 4 ---- .../changelog/renovate-lock-file-maintenance | 4 ---- .../crm/changelog/renovate-wordpress-monorepo | 4 ---- projects/plugins/crm/composer.json | 2 +- .../plugins/crm/includes/ZeroBSCRM.Core.php | 2 +- projects/plugins/crm/package.json | 2 +- projects/plugins/crm/readme.txt | 19 ++++++------------- 14 files changed, 27 insertions(+), 43 deletions(-) delete mode 100644 projects/js-packages/script-data/changelog/add-wpcom-data-for-current-user delete mode 100644 projects/plugins/crm/changelog/fix-crm-3523-email-invoices-not-sending delete mode 100644 projects/plugins/crm/changelog/fix-functionify_and_statusify_exit_and_die delete mode 100644 projects/plugins/crm/changelog/remove-crm-legacy_groove_code delete mode 100644 projects/plugins/crm/changelog/renovate-lock-file-maintenance delete mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo diff --git a/projects/js-packages/script-data/CHANGELOG.md b/projects/js-packages/script-data/CHANGELOG.md index d52fc221a52a4..a9d4703edcf93 100644 --- a/projects/js-packages/script-data/CHANGELOG.md +++ b/projects/js-packages/script-data/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.8] - 2025-01-22 +### Added +- Add wpcom data for current user. [#40679] + ## [0.1.7] - 2025-01-20 ### Changed - License: Social admin page header hides license link on WoA sites. [#41076] @@ -37,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added jetpack-script-data package to consolidate the logic for Jetpack Initial state [#38430] +[0.1.8]: https://github.com/Automattic/jetpack-script-data/compare/v0.1.7...v0.1.8 [0.1.7]: https://github.com/Automattic/jetpack-script-data/compare/v0.1.6...v0.1.7 [0.1.6]: https://github.com/Automattic/jetpack-script-data/compare/v0.1.5...v0.1.6 [0.1.5]: https://github.com/Automattic/jetpack-script-data/compare/v0.1.4...v0.1.5 diff --git a/projects/js-packages/script-data/changelog/add-wpcom-data-for-current-user b/projects/js-packages/script-data/changelog/add-wpcom-data-for-current-user deleted file mode 100644 index 1c4d1fd6232c3..0000000000000 --- a/projects/js-packages/script-data/changelog/add-wpcom-data-for-current-user +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Added wpcom data for current user diff --git a/projects/js-packages/script-data/package.json b/projects/js-packages/script-data/package.json index 9538e5df10461..59550040f7db0 100644 --- a/projects/js-packages/script-data/package.json +++ b/projects/js-packages/script-data/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-script-data", - "version": "0.1.7", + "version": "0.1.8", "description": "A library to provide data for script handles and the corresponding utility functions for Jetpack.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/script-data/#readme", "bugs": { diff --git a/projects/plugins/crm/CHANGELOG.md b/projects/plugins/crm/CHANGELOG.md index ab454bb1027c1..d24cc6d992644 100644 --- a/projects/plugins/crm/CHANGELOG.md +++ b/projects/plugins/crm/CHANGELOG.md @@ -5,8 +5,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [6.5.0] - 2025-01-10 +## [6.5.1] - 2025-01-22 +### Changed +- Code: Use function-style exit() and die() with a default status code of 0. [#41167] + +### Removed +- Remove legacy Groove code. [#41247] +### Fixed +- Invoices: Fix bug introduced in 6.5.0 that prevented email invoices from being sent. [#41172] + +## [6.5.0] - 2025-01-10 ### Removed - General: Remove unused legacy code. [#40267] @@ -3617,6 +3626,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Tested across 4 common web hosts - Tested with extensions: WooCommerce CRM Sync, PayPal CRM Sync, CSV Importer, ZBS CRM Mail Campaigns, and CRM Sales Dashboard +[6.5.1]: https://github.com/Automattic/jetpack-crm/compare/6.5.0...6.5.1 [6.5.0]: https://github.com/Automattic/jetpack-crm/compare/6.4.4...6.5.0 [6.4.4]: https://github.com/Automattic/jetpack-crm/compare/6.4.3...6.4.4 [6.4.3]: https://github.com/Automattic/jetpack-crm/compare/6.4.2...6.4.3 diff --git a/projects/plugins/crm/ZeroBSCRM.php b/projects/plugins/crm/ZeroBSCRM.php index 797425894ace7..3e2fc743887ed 100644 --- a/projects/plugins/crm/ZeroBSCRM.php +++ b/projects/plugins/crm/ZeroBSCRM.php @@ -3,7 +3,7 @@ * Plugin Name: Jetpack CRM * Plugin URI: https://jetpackcrm.com * Description: Jetpack CRM is the simplest CRM for WordPress. Self host your own Customer Relationship Manager using WP. - * Version: 6.5.0 + * Version: 6.5.1 * Author: Automattic - Jetpack CRM team * Author URI: https://jetpackcrm.com * Text Domain: zero-bs-crm diff --git a/projects/plugins/crm/changelog/fix-crm-3523-email-invoices-not-sending b/projects/plugins/crm/changelog/fix-crm-3523-email-invoices-not-sending deleted file mode 100644 index 870cd956beaed..0000000000000 --- a/projects/plugins/crm/changelog/fix-crm-3523-email-invoices-not-sending +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Invoices: Fix bug introduced in 6.5.0 that prevented email invoices from being sent. diff --git a/projects/plugins/crm/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/crm/changelog/fix-functionify_and_statusify_exit_and_die deleted file mode 100644 index 5f323ddb3e478..0000000000000 --- a/projects/plugins/crm/changelog/fix-functionify_and_statusify_exit_and_die +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/crm/changelog/remove-crm-legacy_groove_code b/projects/plugins/crm/changelog/remove-crm-legacy_groove_code deleted file mode 100644 index 08a9168a0e6cd..0000000000000 --- a/projects/plugins/crm/changelog/remove-crm-legacy_groove_code +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -Remove legacy Groove code. diff --git a/projects/plugins/crm/changelog/renovate-lock-file-maintenance b/projects/plugins/crm/changelog/renovate-lock-file-maintenance deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-lock-file-maintenance +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo b/projects/plugins/crm/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/crm/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/crm/composer.json b/projects/plugins/crm/composer.json index 9b764e3c0e24b..32d791f02e343 100644 --- a/projects/plugins/crm/composer.json +++ b/projects/plugins/crm/composer.json @@ -45,7 +45,7 @@ ] }, "config": { - "autoloader-suffix": "06c775433a83ed276f0a1d8ac25f93ba_crmⓥ6_5_0", + "autoloader-suffix": "06c775433a83ed276f0a1d8ac25f93ba_crmⓥ6_5_1", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true, diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.php index b8481ff4ab84d..79c216c28a6a6 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.php @@ -24,7 +24,7 @@ final class ZeroBSCRM { * * @var string */ - public $version = '6.4.4'; + public $version = '6.5.1'; /** * WordPress version tested with. diff --git a/projects/plugins/crm/package.json b/projects/plugins/crm/package.json index 88bfb96cc3334..ec514bd05dfe7 100644 --- a/projects/plugins/crm/package.json +++ b/projects/plugins/crm/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-crm", - "version": "6.5.0", + "version": "6.5.1", "description": "The CRM for WordPress", "author": "Automattic", "license": "GPL-2.0", diff --git a/projects/plugins/crm/readme.txt b/projects/plugins/crm/readme.txt index c0187822be163..8dc3321a72794 100644 --- a/projects/plugins/crm/readme.txt +++ b/projects/plugins/crm/readme.txt @@ -362,20 +362,13 @@ We offer a full, no-hassle refund within 14 days. You can read more about that, == Changelog == -### [6.5.0] - 2025-01-10 +### 6.5.1 - 2025-01-22 +#### Changed +- Code: Use function-style exit() and die() with a default status code of 0. #### Removed -- General: Remove unused legacy code. - -#### Changed -- General: Update minimum WordPress version to 6.6. -- API: Allow sort order in endpoints. +- Remove legacy Groove code. #### Fixed -- CRM: Fix bug which caused duplicated queries to run. -- CRM: Fix a fatal error that occurred when exporting contacts with a custom field that had the same name as a linked field (e.g., 'company'). -- Dashboard: Fix an issue where the CRM contacts graph displayed incorrect values in some instances. -- Dashboard: Show correct avatar for recent activity. -- Invoices: Fix bugs in the default PDF template and other fixes. Created a new template to maintain backwards compatibility. -- Code: Ensure we use Jetpack Autoloader throughout the codebase. -- Migrations: Improve WP Playground compatibility. +- Invoices: Fix bug introduced in 6.5.0 that prevented email invoices from being sent. + From 4bc18e455d627187bfd2f450bb4bd818cf49b0d6 Mon Sep 17 00:00:00 2001 From: Brandon Kraft Date: Wed, 22 Jan 2025 14:21:40 -0600 Subject: [PATCH 166/420] Remove unused development packages/scripts/files (#41260) --- .../changelog/clean-extra-composer-things | 5 + projects/js-packages/ai-client/composer.json | 6 - .../changelog/clean-extra-composer-things | 5 + projects/js-packages/analytics/composer.json | 1 - .../changelog/clean-extra-composer-things | 5 + .../js-packages/base-styles/composer.json | 6 - projects/js-packages/base-styles/src/.gitkeep | 0 .../changelog/clean-extra-composer-things | 5 + .../js-packages/boost-score-api/composer.json | 6 - .../changelog/clean-extra-composer-things | 5 + projects/js-packages/charts/composer.json | 5 - .../changelog/clean-extra-composer-things | 5 + projects/js-packages/config/composer.json | 5 - .../changelog/clean-extra-composer-things | 5 + .../critical-css-gen/composer.json | 5 - .../changelog/clean-extra-composer-things | 5 + .../js-packages/image-guide/composer.json | 6 - .../changelog/clean-extra-composer-things | 5 + projects/js-packages/licensing/composer.json | 1 - .../changelog/clean-extra-composer-things | 5 + .../publicize-components/composer.json | 6 - .../changelog/clean-extra-composer-things | 5 + .../react-data-sync-client/composer.json | 6 - .../changelog/clean-extra-composer-things | 5 + projects/js-packages/scan/composer.json | 6 - .../changelog/clean-extra-composer-things | 5 + .../js-packages/script-data/composer.json | 5 - .../changelog/clean-extra-composer-things | 5 + .../shared-extension-utils/composer.json | 1 - .../changelog/clean-extra-composer-things | 5 + projects/js-packages/storybook/composer.json | 6 - projects/js-packages/storybook/src/.gitkeep | 0 .../changelog/clean-extra-composer-things | 5 + .../svelte-data-sync-client/composer.json | 6 - .../changelog/clean-extra-composer-things | 5 + .../js-packages/videopress-core/composer.json | 6 - .../changelog/clean-extra-composer-things | 5 + projects/packages/boost-core/composer.json | 14 +- .../changelog/clean-extra-composer-things | 5 + .../packages/boost-speed-score/composer.json | 11 +- .../changelog/clean-extra-composer-things | 5 + projects/packages/chatbot/composer.json | 12 +- .../changelog/clean-extra-composer-things | 5 + .../classic-theme-helper/composer.json | 10 +- .../changelog/clean-extra-composer-things | 5 + projects/packages/import/composer.json | 9 +- .../changelog/clean-extra-composer-things | 5 + .../packages/wp-js-data-sync/composer.json | 9 +- .../wp-js-data-sync/tests/php/bootstrap.php | 1 - .../changelog/clean-extra-composer-things | 5 + projects/plugins/backup/composer.lock | 29 +- .../changelog/clean-extra-composer-things | 5 + projects/plugins/boost/composer.json | 6 +- projects/plugins/boost/composer.lock | 275 +- .../changelog/clean-extra-composer-things | 5 + .../classic-theme-helper-plugin/composer.json | 17 +- .../classic-theme-helper-plugin/composer.lock | 2574 +---------------- .../tests/php/bootstrap.php | 17 - .../changelog/clean-extra-composer-things | 5 + projects/plugins/jetpack/composer.lock | 53 +- .../changelog/clean-extra-composer-things | 5 + .../plugins/mu-wpcom-plugin/composer.lock | 9 +- .../changelog/clean-extra-composer-things | 5 + projects/plugins/protect/composer.json | 7 +- projects/plugins/protect/composer.lock | 260 +- .../changelog/clean-extra-composer-things | 5 + projects/plugins/search/composer.lock | 29 +- .../changelog/clean-extra-composer-things | 5 + projects/plugins/social/composer.lock | 29 +- .../changelog/clean-extra-composer-things | 5 + projects/plugins/starter-plugin/composer.lock | 29 +- .../changelog/clean-extra-composer-things | 5 + projects/plugins/videopress/composer.json | 8 +- projects/plugins/videopress/composer.lock | 2474 ++-------------- projects/plugins/videopress/phpunit.xml.dist | 14 - .../videopress/tests/php/bootstrap.php | 11 - .../changelog/clean-extra-composer-things | 5 + projects/plugins/wpcomsh/composer.json | 8 +- projects/plugins/wpcomsh/composer.lock | 240 +- .../plugins/wpcomsh/tests/php/bootstrap.php | 11 - 80 files changed, 561 insertions(+), 5858 deletions(-) create mode 100644 projects/js-packages/ai-client/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/analytics/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/base-styles/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/base-styles/src/.gitkeep create mode 100644 projects/js-packages/boost-score-api/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/charts/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/config/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/critical-css-gen/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/image-guide/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/licensing/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/publicize-components/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/react-data-sync-client/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/scan/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/script-data/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/shared-extension-utils/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/storybook/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/storybook/src/.gitkeep create mode 100644 projects/js-packages/svelte-data-sync-client/changelog/clean-extra-composer-things create mode 100644 projects/js-packages/videopress-core/changelog/clean-extra-composer-things create mode 100644 projects/packages/boost-core/changelog/clean-extra-composer-things create mode 100644 projects/packages/boost-speed-score/changelog/clean-extra-composer-things create mode 100644 projects/packages/chatbot/changelog/clean-extra-composer-things create mode 100644 projects/packages/classic-theme-helper/changelog/clean-extra-composer-things create mode 100644 projects/packages/import/changelog/clean-extra-composer-things create mode 100644 projects/packages/wp-js-data-sync/changelog/clean-extra-composer-things create mode 100644 projects/plugins/backup/changelog/clean-extra-composer-things create mode 100644 projects/plugins/boost/changelog/clean-extra-composer-things create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/clean-extra-composer-things delete mode 100644 projects/plugins/classic-theme-helper-plugin/tests/php/bootstrap.php create mode 100644 projects/plugins/jetpack/changelog/clean-extra-composer-things create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/clean-extra-composer-things create mode 100644 projects/plugins/protect/changelog/clean-extra-composer-things create mode 100644 projects/plugins/search/changelog/clean-extra-composer-things create mode 100644 projects/plugins/social/changelog/clean-extra-composer-things create mode 100644 projects/plugins/starter-plugin/changelog/clean-extra-composer-things create mode 100644 projects/plugins/videopress/changelog/clean-extra-composer-things delete mode 100644 projects/plugins/videopress/phpunit.xml.dist delete mode 100644 projects/plugins/videopress/tests/php/bootstrap.php create mode 100644 projects/plugins/wpcomsh/changelog/clean-extra-composer-things delete mode 100644 projects/plugins/wpcomsh/tests/php/bootstrap.php diff --git a/projects/js-packages/ai-client/changelog/clean-extra-composer-things b/projects/js-packages/ai-client/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/ai-client/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/ai-client/composer.json b/projects/js-packages/ai-client/composer.json index 10018bb5e48c0..0b1ef7d852fd0 100644 --- a/projects/js-packages/ai-client/composer.json +++ b/projects/js-packages/ai-client/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": [ "pnpm run build" diff --git a/projects/js-packages/analytics/changelog/clean-extra-composer-things b/projects/js-packages/analytics/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/analytics/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/analytics/composer.json b/projects/js-packages/analytics/composer.json index 53f6fc990b448..f073324ef6ead 100644 --- a/projects/js-packages/analytics/composer.json +++ b/projects/js-packages/analytics/composer.json @@ -5,7 +5,6 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, "scripts": { diff --git a/projects/js-packages/base-styles/changelog/clean-extra-composer-things b/projects/js-packages/base-styles/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/base-styles/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/base-styles/composer.json b/projects/js-packages/base-styles/composer.json index 22d7559a60ad3..9f26e8d742366 100644 --- a/projects/js-packages/base-styles/composer.json +++ b/projects/js-packages/base-styles/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "repositories": [ { "type": "path", diff --git a/projects/js-packages/base-styles/src/.gitkeep b/projects/js-packages/base-styles/src/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/projects/js-packages/boost-score-api/changelog/clean-extra-composer-things b/projects/js-packages/boost-score-api/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/boost-score-api/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/boost-score-api/composer.json b/projects/js-packages/boost-score-api/composer.json index fca2f5ecf9e9e..3584cecde8fa9 100644 --- a/projects/js-packages/boost-score-api/composer.json +++ b/projects/js-packages/boost-score-api/composer.json @@ -5,7 +5,6 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, "scripts": { @@ -26,11 +25,6 @@ "pnpm run test" ] }, - "autoload": { - "classmap": [ - "src/" - ] - }, "repositories": [ { "type": "path", diff --git a/projects/js-packages/charts/changelog/clean-extra-composer-things b/projects/js-packages/charts/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/charts/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/charts/composer.json b/projects/js-packages/charts/composer.json index d674dee522f57..a1a8504969a4a 100644 --- a/projects/js-packages/charts/composer.json +++ b/projects/js-packages/charts/composer.json @@ -7,11 +7,6 @@ "require-dev": { "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": [ "pnpm run build" diff --git a/projects/js-packages/config/changelog/clean-extra-composer-things b/projects/js-packages/config/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/config/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/config/composer.json b/projects/js-packages/config/composer.json index bc4000154002a..4fd28e0ce4506 100644 --- a/projects/js-packages/config/composer.json +++ b/projects/js-packages/config/composer.json @@ -7,11 +7,6 @@ "require-dev": { "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "test-js": [ "pnpm run test" diff --git a/projects/js-packages/critical-css-gen/changelog/clean-extra-composer-things b/projects/js-packages/critical-css-gen/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/critical-css-gen/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/critical-css-gen/composer.json b/projects/js-packages/critical-css-gen/composer.json index 86e35d0984b2b..cd0ec61aba6f6 100644 --- a/projects/js-packages/critical-css-gen/composer.json +++ b/projects/js-packages/critical-css-gen/composer.json @@ -7,11 +7,6 @@ "require-dev": { "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": [ "pnpm run build" diff --git a/projects/js-packages/image-guide/changelog/clean-extra-composer-things b/projects/js-packages/image-guide/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/image-guide/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/image-guide/composer.json b/projects/js-packages/image-guide/composer.json index 55d80f8d70d64..c4922f1175394 100644 --- a/projects/js-packages/image-guide/composer.json +++ b/projects/js-packages/image-guide/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": [ "pnpm run build" diff --git a/projects/js-packages/licensing/changelog/clean-extra-composer-things b/projects/js-packages/licensing/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/licensing/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/licensing/composer.json b/projects/js-packages/licensing/composer.json index f07e190ee19a2..e35b772b273ce 100644 --- a/projects/js-packages/licensing/composer.json +++ b/projects/js-packages/licensing/composer.json @@ -5,7 +5,6 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, "scripts": { diff --git a/projects/js-packages/publicize-components/changelog/clean-extra-composer-things b/projects/js-packages/publicize-components/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/publicize-components/composer.json b/projects/js-packages/publicize-components/composer.json index e5a2097e4a320..be37088e54fd9 100644 --- a/projects/js-packages/publicize-components/composer.json +++ b/projects/js-packages/publicize-components/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "test-js": [ "pnpm run test" diff --git a/projects/js-packages/react-data-sync-client/changelog/clean-extra-composer-things b/projects/js-packages/react-data-sync-client/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/react-data-sync-client/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/react-data-sync-client/composer.json b/projects/js-packages/react-data-sync-client/composer.json index d697b6a5e8b41..02dd214b3a260 100644 --- a/projects/js-packages/react-data-sync-client/composer.json +++ b/projects/js-packages/react-data-sync-client/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": [ "pnpm run build" diff --git a/projects/js-packages/scan/changelog/clean-extra-composer-things b/projects/js-packages/scan/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/scan/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/scan/composer.json b/projects/js-packages/scan/composer.json index f87719ddac537..c4ea677320fa9 100644 --- a/projects/js-packages/scan/composer.json +++ b/projects/js-packages/scan/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": [ "pnpm run build" diff --git a/projects/js-packages/script-data/changelog/clean-extra-composer-things b/projects/js-packages/script-data/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/script-data/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/script-data/composer.json b/projects/js-packages/script-data/composer.json index 0d398bb1a6ad5..0da69efba7329 100644 --- a/projects/js-packages/script-data/composer.json +++ b/projects/js-packages/script-data/composer.json @@ -7,11 +7,6 @@ "require-dev": { "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": {}, "repositories": [ { diff --git a/projects/js-packages/shared-extension-utils/changelog/clean-extra-composer-things b/projects/js-packages/shared-extension-utils/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/shared-extension-utils/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/shared-extension-utils/composer.json b/projects/js-packages/shared-extension-utils/composer.json index d4d86da3fffd9..2fd28fdb9d537 100644 --- a/projects/js-packages/shared-extension-utils/composer.json +++ b/projects/js-packages/shared-extension-utils/composer.json @@ -5,7 +5,6 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, "scripts": { diff --git a/projects/js-packages/storybook/changelog/clean-extra-composer-things b/projects/js-packages/storybook/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/storybook/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/storybook/composer.json b/projects/js-packages/storybook/composer.json index 5d39fec633912..111a851b0abde 100644 --- a/projects/js-packages/storybook/composer.json +++ b/projects/js-packages/storybook/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": "NODE_ENV=development pnpm run storybook:build", "build-production": "NODE_ENV=production pnpm run storybook:build" diff --git a/projects/js-packages/storybook/src/.gitkeep b/projects/js-packages/storybook/src/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/projects/js-packages/svelte-data-sync-client/changelog/clean-extra-composer-things b/projects/js-packages/svelte-data-sync-client/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/svelte-data-sync-client/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/svelte-data-sync-client/composer.json b/projects/js-packages/svelte-data-sync-client/composer.json index f91ab9f434170..abc016cdffd6e 100644 --- a/projects/js-packages/svelte-data-sync-client/composer.json +++ b/projects/js-packages/svelte-data-sync-client/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": [ "pnpm run build" diff --git a/projects/js-packages/videopress-core/changelog/clean-extra-composer-things b/projects/js-packages/videopress-core/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/js-packages/videopress-core/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/js-packages/videopress-core/composer.json b/projects/js-packages/videopress-core/composer.json index 084d6b72afaf4..0de39b7cd6e3f 100644 --- a/projects/js-packages/videopress-core/composer.json +++ b/projects/js-packages/videopress-core/composer.json @@ -5,14 +5,8 @@ "license": "GPL-2.0-or-later", "require": {}, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", "automattic/jetpack-changelogger": "@dev" }, - "autoload": { - "classmap": [ - "src/" - ] - }, "scripts": { "build-development": [ "Composer\\Config::disableProcessTimeout", diff --git a/projects/packages/boost-core/changelog/clean-extra-composer-things b/projects/packages/boost-core/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/packages/boost-core/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/packages/boost-core/composer.json b/projects/packages/boost-core/composer.json index e50f5bb5b0b03..d97c6f32ff153 100644 --- a/projects/packages/boost-core/composer.json +++ b/projects/packages/boost-core/composer.json @@ -9,8 +9,7 @@ }, "require-dev": { "yoast/phpunit-polyfills": "^1.1.1", - "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2" + "automattic/jetpack-changelogger": "@dev" }, "autoload": { "classmap": [ @@ -26,11 +25,7 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": "echo 'Add your build step to composer.json, please!'", - "build-development": "echo 'Add your build step to composer.json, please!'", - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + ] }, "repositories": [ { @@ -43,11 +38,6 @@ ], "minimum-stability": "dev", "prefer-stable": true, - "config": { - "allow-plugins": { - "roots/wordpress-core-installer": true - } - }, "extra": { "mirror-repo": "Automattic/jetpack-boost-core", "changelogger": { diff --git a/projects/packages/boost-speed-score/changelog/clean-extra-composer-things b/projects/packages/boost-speed-score/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/packages/boost-speed-score/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/packages/boost-speed-score/composer.json b/projects/packages/boost-speed-score/composer.json index 82478a206633e..1589ed025f63b 100644 --- a/projects/packages/boost-speed-score/composer.json +++ b/projects/packages/boost-speed-score/composer.json @@ -31,11 +31,7 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": "echo 'Add your build step to composer.json, please!'", - "build-development": "echo 'Add your build step to composer.json, please!'", - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + ] }, "repositories": [ { @@ -48,11 +44,6 @@ ], "minimum-stability": "dev", "prefer-stable": true, - "config": { - "allow-plugins": { - "roots/wordpress-core-installer": true - } - }, "extra": { "mirror-repo": "Automattic/jetpack-boost-speed-score", "changelogger": { diff --git a/projects/packages/chatbot/changelog/clean-extra-composer-things b/projects/packages/chatbot/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/packages/chatbot/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/packages/chatbot/composer.json b/projects/packages/chatbot/composer.json index 63fe06d9817e7..b701994e5d8bd 100644 --- a/projects/packages/chatbot/composer.json +++ b/projects/packages/chatbot/composer.json @@ -8,8 +8,7 @@ }, "require-dev": { "yoast/phpunit-polyfills": "^1.1.1", - "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2" + "automattic/jetpack-changelogger": "@dev" }, "autoload": { "classmap": [ @@ -35,9 +34,7 @@ "watch": [ "Composer\\Config::disableProcessTimeout", "pnpm run watch" - ], - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + ] }, "repositories": [ { @@ -50,11 +47,6 @@ ], "minimum-stability": "dev", "prefer-stable": true, - "config": { - "allow-plugins": { - "roots/wordpress-core-installer": true - } - }, "extra": { "mirror-repo": "Automattic/jetpack-chatbot", "changelogger": { diff --git a/projects/packages/classic-theme-helper/changelog/clean-extra-composer-things b/projects/packages/classic-theme-helper/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/packages/classic-theme-helper/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/packages/classic-theme-helper/composer.json b/projects/packages/classic-theme-helper/composer.json index 3d0e69494887b..ceb7b1e1c61d8 100644 --- a/projects/packages/classic-theme-helper/composer.json +++ b/projects/packages/classic-theme-helper/composer.json @@ -9,8 +9,7 @@ }, "require-dev": { "yoast/phpunit-polyfills": "^1.1.1", - "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2" + "automattic/jetpack-changelogger": "@dev" }, "autoload": { "classmap": [ @@ -27,8 +26,6 @@ "phpunit": [ "./vendor/phpunit/phpunit/phpunit --colors=always" ], - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy", "test-coverage": [ "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" ], @@ -47,11 +44,6 @@ ], "minimum-stability": "dev", "prefer-stable": true, - "config": { - "allow-plugins": { - "roots/wordpress-core-installer": true - } - }, "extra": { "autotagger": true, "branch-alias": { diff --git a/projects/packages/import/changelog/clean-extra-composer-things b/projects/packages/import/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/packages/import/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/packages/import/composer.json b/projects/packages/import/composer.json index 1078a69cb70d2..751b909fac2b4 100644 --- a/projects/packages/import/composer.json +++ b/projects/packages/import/composer.json @@ -10,8 +10,7 @@ }, "require-dev": { "yoast/phpunit-polyfills": "^1.1.1", - "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2" + "automattic/jetpack-changelogger": "@dev" }, "suggest": { "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." @@ -30,11 +29,7 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": "echo 'Add your build step to composer.json, please!'", - "build-development": "echo 'Add your build step to composer.json, please!'", - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + ] }, "repositories": [ { diff --git a/projects/packages/wp-js-data-sync/changelog/clean-extra-composer-things b/projects/packages/wp-js-data-sync/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/packages/wp-js-data-sync/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/packages/wp-js-data-sync/composer.json b/projects/packages/wp-js-data-sync/composer.json index 73b07803c1130..913f06345d65e 100644 --- a/projects/packages/wp-js-data-sync/composer.json +++ b/projects/packages/wp-js-data-sync/composer.json @@ -9,8 +9,7 @@ }, "require-dev": { "yoast/phpunit-polyfills": "^1.1.1", - "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2" + "automattic/jetpack-changelogger": "@dev" }, "suggest": { "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." @@ -29,11 +28,7 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": "echo 'Add your build step to composer.json, please!'", - "build-development": "echo 'Add your build step to composer.json, please!'", - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + ] }, "repositories": [ { diff --git a/projects/packages/wp-js-data-sync/tests/php/bootstrap.php b/projects/packages/wp-js-data-sync/tests/php/bootstrap.php index 0703ee28354a5..46763b04a2cdb 100644 --- a/projects/packages/wp-js-data-sync/tests/php/bootstrap.php +++ b/projects/packages/wp-js-data-sync/tests/php/bootstrap.php @@ -9,4 +9,3 @@ * Include the composer autoloader. */ require_once __DIR__ . '/../../vendor/autoload.php'; -\WorDBless\Load::load(); diff --git a/projects/plugins/backup/changelog/clean-extra-composer-things b/projects/plugins/backup/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d6f81cf571b7 --- /dev/null +++ b/projects/plugins/backup/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removed dev packages, no functional changes + + diff --git a/projects/plugins/backup/composer.lock b/projects/plugins/backup/composer.lock index 895b16f1f19d2..df613cf2c2928 100644 --- a/projects/plugins/backup/composer.lock +++ b/projects/plugins/backup/composer.lock @@ -417,7 +417,7 @@ "dist": { "type": "path", "url": "../../packages/boost-core", - "reference": "d39cf9555e3edd6cd71349c9e828a9006f41b6fc" + "reference": "f29fb32cba33427db5d3930bf6e0d7206b44d3c3" }, "require": { "automattic/jetpack-connection": "@dev", @@ -425,7 +425,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2", "yoast/phpunit-polyfills": "^1.1.1" }, "suggest": { @@ -457,18 +456,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -485,7 +472,7 @@ "dist": { "type": "path", "url": "../../packages/boost-speed-score", - "reference": "0eb6e9f50de070ab933fe0f12992ad2389e351a5" + "reference": "6c5f2fce242a09a6cec0d26328026664046dd17a" }, "require": { "automattic/jetpack-boost-core": "@dev", @@ -533,18 +520,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ diff --git a/projects/plugins/boost/changelog/clean-extra-composer-things b/projects/plugins/boost/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/plugins/boost/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/plugins/boost/composer.json b/projects/plugins/boost/composer.json index ec30d7a91d786..b802dd4ec736c 100644 --- a/projects/plugins/boost/composer.json +++ b/projects/plugins/boost/composer.json @@ -34,7 +34,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "0.4.2", "brain/monkey": "^2.6.2", "yoast/phpunit-polyfills": "^1.1.1" }, @@ -58,9 +57,7 @@ "watch": [ "Composer\\Config::disableProcessTimeout", "pnpm run watch" - ], - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + ] }, "autoload-dev": { "psr-4": { @@ -79,7 +76,6 @@ }, "autoloader-suffix": "b1e77e6231d50e7663f84529b6a3dfda_jetpack_boostⓥ3_7_0", "allow-plugins": { - "roots/wordpress-core-installer": true, "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true } diff --git a/projects/plugins/boost/composer.lock b/projects/plugins/boost/composer.lock index 1aaa4f2b9152f..417b664cf1548 100644 --- a/projects/plugins/boost/composer.lock +++ b/projects/plugins/boost/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0ad50993accd8a26f9fd344099d8a588", + "content-hash": "aae9e21aecb09d6ee5d133abe80295e0", "packages": [ { "name": "automattic/jetpack-a8c-mc-stats", @@ -267,7 +267,7 @@ "dist": { "type": "path", "url": "../../packages/boost-core", - "reference": "d39cf9555e3edd6cd71349c9e828a9006f41b6fc" + "reference": "f29fb32cba33427db5d3930bf6e0d7206b44d3c3" }, "require": { "automattic/jetpack-connection": "@dev", @@ -275,7 +275,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2", "yoast/phpunit-polyfills": "^1.1.1" }, "suggest": { @@ -307,18 +306,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -335,7 +322,7 @@ "dist": { "type": "path", "url": "../../packages/boost-speed-score", - "reference": "0eb6e9f50de070ab933fe0f12992ad2389e351a5" + "reference": "6c5f2fce242a09a6cec0d26328026664046dd17a" }, "require": { "automattic/jetpack-boost-core": "@dev", @@ -383,18 +370,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -1954,7 +1929,7 @@ "dist": { "type": "path", "url": "../../packages/wp-js-data-sync", - "reference": "2c87b5a5487cd9e4370b8f4fce0c3d3cb61b787f" + "reference": "17e6c045e094d23981083584fd5120babd07c8d8" }, "require": { "automattic/jetpack-schema": "@dev", @@ -1962,7 +1937,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2", "yoast/phpunit-polyfills": "^1.1.1" }, "suggest": { @@ -1997,18 +1971,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -2270,51 +2232,6 @@ "relative": true } }, - { - "name": "automattic/wordbless", - "version": "0.4.2", - "source": { - "type": "git", - "url": "https://github.com/Automattic/wordbless.git", - "reference": "a1fe6376b81e6d037190aa1a5dc684d51eb674cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Automattic/wordbless/zipball/a1fe6376b81e6d037190aa1a5dc684d51eb674cd", - "reference": "a1fe6376b81e6d037190aa1a5dc684d51eb674cd", - "shasum": "" - }, - "require": { - "php": ">=5.6.20", - "roots/wordpress": "^6.0.2", - "yoast/phpunit-polyfills": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^9.5" - }, - "type": "wordpress-dropin", - "autoload": { - "psr-4": { - "WorDBless\\": "src/", - "WorDBless\\Composer\\": "src/Composer/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Automattic Inc." - } - ], - "description": "WorDBless allows you to use WordPress core functions in your PHPUnit tests without having to set up a database and the whole WordPress environment", - "support": { - "issues": "https://github.com/Automattic/wordbless/issues", - "source": "https://github.com/Automattic/wordbless/tree/0.4.2" - }, - "time": "2023-03-15T12:16:20+00:00" - }, { "name": "brain/monkey", "version": "2.6.2", @@ -3300,190 +3217,6 @@ }, "time": "2021-11-05T16:47:00+00:00" }, - { - "name": "roots/wordpress", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress.git", - "reference": "9451af491af7124c12186398c56ab87a6e145123" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress/zipball/9451af491af7124c12186398c56ab87a6e145123", - "reference": "9451af491af7124c12186398c56ab87a6e145123", - "shasum": "" - }, - "require": { - "roots/wordpress-core-installer": "^1.0.0", - "roots/wordpress-no-content": "self.version" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "GPL-2.0-or-later" - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress/issues", - "source": "https://github.com/roots/wordpress/tree/6.7.1" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - } - ], - "time": "2024-11-13T09:56:09+00:00" - }, - { - "name": "roots/wordpress-core-installer", - "version": "1.100.0", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress-core-installer.git", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/73f8488e5178c5d54234b919f823a9095e2b1847", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "conflict": { - "composer/installers": "<1.0.6" - }, - "replace": { - "johnpbloch/wordpress-core-installer": "*" - }, - "require-dev": { - "composer/composer": "^1.0 || ^2.0", - "phpunit/phpunit": ">=5.7.27" - }, - "type": "composer-plugin", - "extra": { - "class": "Roots\\Composer\\WordPressCorePlugin" - }, - "autoload": { - "psr-4": { - "Roots\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "John P. Bloch", - "email": "me@johnpbloch.com" - }, - { - "name": "Roots", - "email": "team@roots.io" - } - ], - "description": "A custom installer to handle deploying WordPress with composer", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress-core-installer/issues", - "source": "https://github.com/roots/wordpress-core-installer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - }, - { - "url": "https://www.patreon.com/rootsdev", - "type": "patreon" - } - ], - "time": "2020-08-20T00:27:30+00:00" - }, - { - "name": "roots/wordpress-no-content", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/WordPress/WordPress.git", - "reference": "6.7.1" - }, - "dist": { - "type": "zip", - "url": "https://downloads.wordpress.org/release/wordpress-6.7.1-no-content.zip", - "shasum": "321a5b819369e772ce606fbc12b1e264fb73da5b" - }, - "require": { - "php": ">= 7.2.24" - }, - "provide": { - "wordpress/core-implementation": "6.7.1" - }, - "suggest": { - "ext-curl": "Performs remote request operations.", - "ext-dom": "Used to validate Text Widget content and to automatically configuring IIS7+.", - "ext-exif": "Works with metadata stored in images.", - "ext-fileinfo": "Used to detect mimetype of file uploads.", - "ext-hash": "Used for hashing, including passwords and update packages.", - "ext-imagick": "Provides better image quality for media uploads.", - "ext-json": "Used for communications with other servers.", - "ext-libsodium": "Validates Signatures and provides securely random bytes.", - "ext-mbstring": "Used to properly handle UTF8 text.", - "ext-mysqli": "Connects to MySQL for database interactions.", - "ext-openssl": "Permits SSL-based connections to other hosts.", - "ext-pcre": "Increases performance of pattern matching in code searches.", - "ext-xml": "Used for XML parsing, such as from a third-party site.", - "ext-zip": "Used for decompressing Plugins, Themes, and WordPress update packages." - }, - "type": "wordpress-core", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "docs": "https://developer.wordpress.org/", - "forum": "https://wordpress.org/support/", - "irc": "irc://irc.freenode.net/wordpress", - "issues": "https://core.trac.wordpress.org/", - "rss": "https://wordpress.org/news/feed/", - "source": "https://core.trac.wordpress.org/browser", - "wiki": "https://codex.wordpress.org/" - }, - "funding": [ - { - "url": "https://wordpressfoundation.org/donate/", - "type": "other" - } - ], - "time": "2024-11-21T14:15:19+00:00" - }, { "name": "sebastian/cli-parser", "version": "1.0.2", diff --git a/projects/plugins/classic-theme-helper-plugin/changelog/clean-extra-composer-things b/projects/plugins/classic-theme-helper-plugin/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/plugins/classic-theme-helper-plugin/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/plugins/classic-theme-helper-plugin/composer.json b/projects/plugins/classic-theme-helper-plugin/composer.json index 768cb46f89105..073210049c360 100644 --- a/projects/plugins/classic-theme-helper-plugin/composer.json +++ b/projects/plugins/classic-theme-helper-plugin/composer.json @@ -12,10 +12,7 @@ "automattic/jetpack-plugins-installer": "@dev" }, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", - "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "0.4.2", - "brain/monkey": "^2.6.2" + "automattic/jetpack-changelogger": "@dev" }, "autoload": { "classmap": [ @@ -23,16 +20,10 @@ ] }, "scripts": { - "phpunit": [ - "./vendor/phpunit/phpunit/phpunit --colors=always" - ], - "test-coverage": "pnpm concurrently --names php,js 'php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"' 'pnpm:test-coverage'", + "test-coverage": "pnpm concurrently --names js 'pnpm:test-coverage'", "test-js": [ "pnpm run test" ], - "test-php": [ - "@composer phpunit" - ], "build-development": [ "pnpm run build" ], @@ -42,9 +33,7 @@ "watch": [ "Composer\\Config::disableProcessTimeout", "pnpm run watch" - ], - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + ] }, "repositories": [ { diff --git a/projects/plugins/classic-theme-helper-plugin/composer.lock b/projects/plugins/classic-theme-helper-plugin/composer.lock index 28fa01c5376aa..d26bf20ca6c2c 100644 --- a/projects/plugins/classic-theme-helper-plugin/composer.lock +++ b/projects/plugins/classic-theme-helper-plugin/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "40740bb85f1f040d55dd83ec4814501e", + "content-hash": "2061c0b4785c464691d7518f1ad4313f", "packages": [ { "name": "automattic/jetpack-a8c-mc-stats", @@ -202,7 +202,7 @@ "dist": { "type": "path", "url": "../../packages/classic-theme-helper", - "reference": "97a68997e5f3dc805df942c53586bab3f2137427" + "reference": "e2ac519d2776f60636505adb1f5b8e3df0f53b8d" }, "require": { "automattic/jetpack-assets": "@dev", @@ -210,7 +210,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2", "yoast/phpunit-polyfills": "^1.1.1" }, "suggest": { @@ -246,12 +245,6 @@ "phpunit": [ "./vendor/phpunit/phpunit/phpunit --colors=always" ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], "test-coverage": [ "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" ], @@ -501,2243 +494,52 @@ "@composer phpunit" ] }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "Handle installation of plugins from WP.org", - "transport-options": { - "relative": true - } - }, - { - "name": "automattic/jetpack-status", - "version": "dev-trunk", - "dist": { - "type": "path", - "url": "../../packages/status", - "reference": "347a36e47e47f389682efc2a6d77b1f6ecfe2136" - }, - "require": { - "automattic/jetpack-constants": "@dev", - "php": ">=7.2" - }, - "require-dev": { - "automattic/jetpack-changelogger": "@dev", - "automattic/jetpack-connection": "@dev", - "automattic/jetpack-ip": "@dev", - "automattic/jetpack-plans": "@dev", - "brain/monkey": "^2.6.2", - "yoast/phpunit-polyfills": "^1.1.1" - }, - "suggest": { - "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." - }, - "type": "jetpack-library", - "extra": { - "autotagger": true, - "mirror-repo": "Automattic/jetpack-status", - "changelogger": { - "link-template": "https://github.com/Automattic/jetpack-status/compare/v${old}...v${new}" - }, - "branch-alias": { - "dev-trunk": "5.0.x-dev" - }, - "dependencies": { - "test-only": [ - "packages/connection", - "packages/plans" - ] - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "scripts": { - "phpunit": [ - "./vendor/phpunit/phpunit/phpunit --colors=always" - ], - "test-coverage": [ - "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" - ], - "test-php": [ - "@composer phpunit" - ] - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "Used to retrieve information about the current status of Jetpack and the site overall.", - "transport-options": { - "relative": true - } - } - ], - "packages-dev": [ - { - "name": "antecedent/patchwork", - "version": "2.2.1", - "source": { - "type": "git", - "url": "https://github.com/antecedent/patchwork.git", - "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245", - "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245", - "shasum": "" - }, - "require": { - "php": ">=7.1.0" - }, - "require-dev": { - "phpunit/phpunit": ">=4" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignas Rudaitis", - "email": "ignas.rudaitis@gmail.com" - } - ], - "description": "Method redefinition (monkey-patching) functionality for PHP.", - "homepage": "https://antecedent.github.io/patchwork/", - "keywords": [ - "aop", - "aspect", - "interception", - "monkeypatching", - "redefinition", - "runkit", - "testing" - ], - "support": { - "issues": "https://github.com/antecedent/patchwork/issues", - "source": "https://github.com/antecedent/patchwork/tree/2.2.1" - }, - "time": "2024-12-11T10:19:54+00:00" - }, - { - "name": "automattic/jetpack-changelogger", - "version": "dev-trunk", - "dist": { - "type": "path", - "url": "../../packages/changelogger", - "reference": "60af893cdd71ba76d13b5b93427d3c042745e7bb" - }, - "require": { - "php": ">=7.2.5", - "symfony/console": "^5.4 || ^6.4 || ^7.1", - "symfony/process": "^5.4 || ^6.4 || ^7.1" - }, - "require-dev": { - "wikimedia/testing-access-wrapper": "^1.0 || ^2.0 || ^3.0", - "yoast/phpunit-polyfills": "^1.1.1" - }, - "bin": [ - "bin/changelogger" - ], - "type": "project", - "extra": { - "autotagger": true, - "branch-alias": { - "dev-trunk": "5.1.x-dev" - }, - "mirror-repo": "Automattic/jetpack-changelogger", - "version-constants": { - "::VERSION": "src/Application.php" - }, - "changelogger": { - "link-template": "https://github.com/Automattic/jetpack-changelogger/compare/${old}...${new}" - } - }, - "autoload": { - "psr-4": { - "Automattic\\Jetpack\\Changelogger\\": "src", - "Automattic\\Jetpack\\Changelog\\": "lib" - } - }, - "autoload-dev": { - "psr-4": { - "Automattic\\Jetpack\\Changelogger\\Tests\\": "tests/php/includes/src", - "Automattic\\Jetpack\\Changelog\\Tests\\": "tests/php/includes/lib" - } - }, - "scripts": { - "phpunit": [ - "./vendor/phpunit/phpunit/phpunit --colors=always" - ], - "test-coverage": [ - "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" - ], - "test-php": [ - "@composer phpunit" - ], - "post-install-cmd": [ - "[ -e vendor/bin/changelogger ] || { cd vendor/bin && ln -s ../../bin/changelogger; }" - ], - "post-update-cmd": [ - "[ -e vendor/bin/changelogger ] || { cd vendor/bin && ln -s ../../bin/changelogger; }" - ] - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "Jetpack Changelogger tool. Allows for managing changelogs by dropping change files into a changelog directory with each PR.", - "keywords": [ - "changelog", - "cli", - "dev", - "keepachangelog" - ], - "transport-options": { - "relative": true - } - }, - { - "name": "automattic/wordbless", - "version": "0.4.2", - "source": { - "type": "git", - "url": "https://github.com/Automattic/wordbless.git", - "reference": "a1fe6376b81e6d037190aa1a5dc684d51eb674cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Automattic/wordbless/zipball/a1fe6376b81e6d037190aa1a5dc684d51eb674cd", - "reference": "a1fe6376b81e6d037190aa1a5dc684d51eb674cd", - "shasum": "" - }, - "require": { - "php": ">=5.6.20", - "roots/wordpress": "^6.0.2", - "yoast/phpunit-polyfills": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^9.5" - }, - "type": "wordpress-dropin", - "autoload": { - "psr-4": { - "WorDBless\\": "src/", - "WorDBless\\Composer\\": "src/Composer/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Automattic Inc." - } - ], - "description": "WorDBless allows you to use WordPress core functions in your PHPUnit tests without having to set up a database and the whole WordPress environment", - "support": { - "issues": "https://github.com/Automattic/wordbless/issues", - "source": "https://github.com/Automattic/wordbless/tree/0.4.2" - }, - "time": "2023-03-15T12:16:20+00:00" - }, - { - "name": "brain/monkey", - "version": "2.6.2", - "source": { - "type": "git", - "url": "https://github.com/Brain-WP/BrainMonkey.git", - "reference": "d95a9d895352c30f47604ad1b825ab8fa9d1a373" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Brain-WP/BrainMonkey/zipball/d95a9d895352c30f47604ad1b825ab8fa9d1a373", - "reference": "d95a9d895352c30f47604ad1b825ab8fa9d1a373", - "shasum": "" - }, - "require": { - "antecedent/patchwork": "^2.1.17", - "mockery/mockery": "^1.3.5 || ^1.4.4", - "php": ">=5.6.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", - "phpcompatibility/php-compatibility": "^9.3.0", - "phpunit/phpunit": "^5.7.26 || ^6.0 || ^7.0 || >=8.0 <8.5.12 || ^8.5.14 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev", - "dev-version/1": "1.x-dev" - } - }, - "autoload": { - "files": [ - "inc/api.php" - ], - "psr-4": { - "Brain\\Monkey\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Giuseppe Mazzapica", - "email": "giuseppe.mazzapica@gmail.com", - "homepage": "https://gmazzap.me", - "role": "Developer" - } - ], - "description": "Mocking utility for PHP functions and WordPress plugin API", - "keywords": [ - "Monkey Patching", - "interception", - "mock", - "mock functions", - "mockery", - "patchwork", - "redefinition", - "runkit", - "test", - "testing" - ], - "support": { - "issues": "https://github.com/Brain-WP/BrainMonkey/issues", - "source": "https://github.com/Brain-WP/BrainMonkey" - }, - "time": "2024-08-29T20:15:04+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.6.12", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2024-05-16T03:13:13+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.12.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2024-11-08T17:47:46+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" - }, - "time": "2024-12-30T11:07:19+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.32", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-text-template": "^2.0.4", - "sebastian/code-unit-reverse-lookup": "^2.0.3", - "sebastian/complexity": "^2.0.3", - "sebastian/environment": "^5.1.5", - "sebastian/lines-of-code": "^1.0.4", - "sebastian/version": "^3.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-22T04:23:01+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.22", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c", - "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.5.0 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.32", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.4", - "phpunit/php-timer": "^5.0.3", - "sebastian/cli-parser": "^1.0.2", - "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.6", - "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.6", - "sebastian/global-state": "^5.0.7", - "sebastian/object-enumerator": "^4.0.4", - "sebastian/resource-operations": "^3.0.4", - "sebastian/type": "^3.2.1", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-12-05T13:48:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "roots/wordpress", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress.git", - "reference": "9451af491af7124c12186398c56ab87a6e145123" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress/zipball/9451af491af7124c12186398c56ab87a6e145123", - "reference": "9451af491af7124c12186398c56ab87a6e145123", - "shasum": "" - }, - "require": { - "roots/wordpress-core-installer": "^1.0.0", - "roots/wordpress-no-content": "self.version" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "GPL-2.0-or-later" - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress/issues", - "source": "https://github.com/roots/wordpress/tree/6.7.1" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - } - ], - "time": "2024-11-13T09:56:09+00:00" - }, - { - "name": "roots/wordpress-core-installer", - "version": "1.100.0", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress-core-installer.git", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/73f8488e5178c5d54234b919f823a9095e2b1847", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "conflict": { - "composer/installers": "<1.0.6" - }, - "replace": { - "johnpbloch/wordpress-core-installer": "*" - }, - "require-dev": { - "composer/composer": "^1.0 || ^2.0", - "phpunit/phpunit": ">=5.7.27" - }, - "type": "composer-plugin", - "extra": { - "class": "Roots\\Composer\\WordPressCorePlugin" - }, - "autoload": { - "psr-4": { - "Roots\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "John P. Bloch", - "email": "me@johnpbloch.com" - }, - { - "name": "Roots", - "email": "team@roots.io" - } - ], - "description": "A custom installer to handle deploying WordPress with composer", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress-core-installer/issues", - "source": "https://github.com/roots/wordpress-core-installer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - }, - { - "url": "https://www.patreon.com/rootsdev", - "type": "patreon" - } - ], - "time": "2020-08-20T00:27:30+00:00" - }, - { - "name": "roots/wordpress-no-content", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/WordPress/WordPress.git", - "reference": "6.7.1" - }, - "dist": { - "type": "zip", - "url": "https://downloads.wordpress.org/release/wordpress-6.7.1-no-content.zip", - "shasum": "321a5b819369e772ce606fbc12b1e264fb73da5b" - }, - "require": { - "php": ">= 7.2.24" - }, - "provide": { - "wordpress/core-implementation": "6.7.1" - }, - "suggest": { - "ext-curl": "Performs remote request operations.", - "ext-dom": "Used to validate Text Widget content and to automatically configuring IIS7+.", - "ext-exif": "Works with metadata stored in images.", - "ext-fileinfo": "Used to detect mimetype of file uploads.", - "ext-hash": "Used for hashing, including passwords and update packages.", - "ext-imagick": "Provides better image quality for media uploads.", - "ext-json": "Used for communications with other servers.", - "ext-libsodium": "Validates Signatures and provides securely random bytes.", - "ext-mbstring": "Used to properly handle UTF8 text.", - "ext-mysqli": "Connects to MySQL for database interactions.", - "ext-openssl": "Permits SSL-based connections to other hosts.", - "ext-pcre": "Increases performance of pattern matching in code searches.", - "ext-xml": "Used for XML parsing, such as from a third-party site.", - "ext-zip": "Used for decompressing Plugins, Themes, and WordPress update packages." - }, - "type": "wordpress-core", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "docs": "https://developer.wordpress.org/", - "forum": "https://wordpress.org/support/", - "irc": "irc://irc.freenode.net/wordpress", - "issues": "https://core.trac.wordpress.org/", - "rss": "https://wordpress.org/news/feed/", - "source": "https://core.trac.wordpress.org/browser", - "wiki": "https://codex.wordpress.org/" - }, - "funding": [ - { - "url": "https://wordpressfoundation.org/donate/", - "type": "other" - } - ], - "time": "2024-11-21T14:15:19+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:27:43+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:19:30+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:30:58+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:33:00+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:35:11+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:20:34+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } + "license": [ + "GPL-2.0-or-later" ], - "time": "2023-02-03T06:07:39+00:00" + "description": "Handle installation of plugins from WP.org", + "transport-options": { + "relative": true + } }, { - "name": "sebastian/resource-operations", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" - }, + "name": "automattic/jetpack-status", + "version": "dev-trunk", "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "shasum": "" + "type": "path", + "url": "../../packages/status", + "reference": "347a36e47e47f389682efc2a6d77b1f6ecfe2136" }, "require": { - "php": ">=7.3" + "automattic/jetpack-constants": "@dev", + "php": ">=7.2" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "automattic/jetpack-changelogger": "@dev", + "automattic/jetpack-connection": "@dev", + "automattic/jetpack-ip": "@dev", + "automattic/jetpack-plans": "@dev", + "brain/monkey": "^2.6.2", + "yoast/phpunit-polyfills": "^1.1.1" }, - "type": "library", + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-status", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-status/compare/v${old}...v${new}" + }, "branch-alias": { - "dev-main": "3.0-dev" + "dev-trunk": "5.0.x-dev" + }, + "dependencies": { + "test-only": [ + "packages/connection", + "packages/plans" + ] } }, "autoload": { @@ -2745,137 +547,156 @@ "src/" ] }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-coverage": [ + "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" + ], + "test-php": [ + "@composer phpunit" + ] }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } + "license": [ + "GPL-2.0-or-later" ], - "time": "2024-03-14T16:00:52+00:00" - }, + "description": "Used to retrieve information about the current status of Jetpack and the site overall.", + "transport-options": { + "relative": true + } + } + ], + "packages-dev": [ { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, + "name": "automattic/jetpack-changelogger", + "version": "dev-trunk", "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" + "type": "path", + "url": "../../packages/changelogger", + "reference": "60af893cdd71ba76d13b5b93427d3c042745e7bb" }, "require": { - "php": ">=7.3" + "php": ">=7.2.5", + "symfony/console": "^5.4 || ^6.4 || ^7.1", + "symfony/process": "^5.4 || ^6.4 || ^7.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "wikimedia/testing-access-wrapper": "^1.0 || ^2.0 || ^3.0", + "yoast/phpunit-polyfills": "^1.1.1" }, - "type": "library", + "bin": [ + "bin/changelogger" + ], + "type": "project", "extra": { + "autotagger": true, "branch-alias": { - "dev-master": "3.2-dev" + "dev-trunk": "5.1.x-dev" + }, + "mirror-repo": "Automattic/jetpack-changelogger", + "version-constants": { + "::VERSION": "src/Application.php" + }, + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-changelogger/compare/${old}...${new}" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Automattic\\Jetpack\\Changelogger\\": "src", + "Automattic\\Jetpack\\Changelog\\": "lib" + } + }, + "autoload-dev": { + "psr-4": { + "Automattic\\Jetpack\\Changelogger\\Tests\\": "tests/php/includes/src", + "Automattic\\Jetpack\\Changelog\\Tests\\": "tests/php/includes/lib" + } + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-coverage": [ + "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" + ], + "test-php": [ + "@composer phpunit" + ], + "post-install-cmd": [ + "[ -e vendor/bin/changelogger ] || { cd vendor/bin && ln -s ../../bin/changelogger; }" + ], + "post-update-cmd": [ + "[ -e vendor/bin/changelogger ] || { cd vendor/bin && ln -s ../../bin/changelogger; }" ] }, - "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "GPL-2.0-or-later" ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } + "description": "Jetpack Changelogger tool. Allows for managing changelogs by dropping change files into a changelog directory with each PR.", + "keywords": [ + "changelog", + "cli", + "dev", + "keepachangelog" ], - "time": "2023-02-03T06:13:03+00:00" + "transport-options": { + "relative": true + } }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "symfony/console", @@ -3585,119 +1406,6 @@ } ], "time": "2024-11-13T13:31:26+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - }, - { - "name": "yoast/phpunit-polyfills", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", - "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "require-dev": { - "php-parallel-lint/php-console-highlighter": "^1.0.0", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "yoast/yoastcs": "^3.1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "files": [ - "phpunitpolyfills-autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Team Yoast", - "email": "support@yoast.com", - "homepage": "https://yoast.com" - }, - { - "name": "Contributors", - "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors" - } - ], - "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests", - "homepage": "https://github.com/Yoast/PHPUnit-Polyfills", - "keywords": [ - "phpunit", - "polyfill", - "testing" - ], - "support": { - "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", - "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", - "source": "https://github.com/Yoast/PHPUnit-Polyfills" - }, - "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/classic-theme-helper-plugin/tests/php/bootstrap.php b/projects/plugins/classic-theme-helper-plugin/tests/php/bootstrap.php deleted file mode 100644 index 66cfbb582eae1..0000000000000 --- a/projects/plugins/classic-theme-helper-plugin/tests/php/bootstrap.php +++ /dev/null @@ -1,17 +0,0 @@ -=5.6.20", - "roots/wordpress": "^6.0.2", - "yoast/phpunit-polyfills": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^9.5" - }, - "type": "wordpress-dropin", - "autoload": { - "psr-4": { - "WorDBless\\": "src/", - "WorDBless\\Composer\\": "src/Composer/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Automattic Inc." - } - ], - "description": "WorDBless allows you to use WordPress core functions in your PHPUnit tests without having to set up a database and the whole WordPress environment", - "support": { - "issues": "https://github.com/Automattic/wordbless/issues", - "source": "https://github.com/Automattic/wordbless/tree/0.4.2" - }, - "time": "2023-03-15T12:16:20+00:00" - }, { "name": "doctrine/instantiator", "version": "2.0.0", @@ -2909,190 +2839,6 @@ }, "time": "2021-11-05T16:47:00+00:00" }, - { - "name": "roots/wordpress", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress.git", - "reference": "9451af491af7124c12186398c56ab87a6e145123" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress/zipball/9451af491af7124c12186398c56ab87a6e145123", - "reference": "9451af491af7124c12186398c56ab87a6e145123", - "shasum": "" - }, - "require": { - "roots/wordpress-core-installer": "^1.0.0", - "roots/wordpress-no-content": "self.version" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "GPL-2.0-or-later" - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress/issues", - "source": "https://github.com/roots/wordpress/tree/6.7.1" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - } - ], - "time": "2024-11-13T09:56:09+00:00" - }, - { - "name": "roots/wordpress-core-installer", - "version": "1.100.0", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress-core-installer.git", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/73f8488e5178c5d54234b919f823a9095e2b1847", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "conflict": { - "composer/installers": "<1.0.6" - }, - "replace": { - "johnpbloch/wordpress-core-installer": "*" - }, - "require-dev": { - "composer/composer": "^1.0 || ^2.0", - "phpunit/phpunit": ">=5.7.27" - }, - "type": "composer-plugin", - "extra": { - "class": "Roots\\Composer\\WordPressCorePlugin" - }, - "autoload": { - "psr-4": { - "Roots\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "John P. Bloch", - "email": "me@johnpbloch.com" - }, - { - "name": "Roots", - "email": "team@roots.io" - } - ], - "description": "A custom installer to handle deploying WordPress with composer", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress-core-installer/issues", - "source": "https://github.com/roots/wordpress-core-installer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - }, - { - "url": "https://www.patreon.com/rootsdev", - "type": "patreon" - } - ], - "time": "2020-08-20T00:27:30+00:00" - }, - { - "name": "roots/wordpress-no-content", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/WordPress/WordPress.git", - "reference": "6.7.1" - }, - "dist": { - "type": "zip", - "url": "https://downloads.wordpress.org/release/wordpress-6.7.1-no-content.zip", - "shasum": "321a5b819369e772ce606fbc12b1e264fb73da5b" - }, - "require": { - "php": ">= 7.2.24" - }, - "provide": { - "wordpress/core-implementation": "6.7.1" - }, - "suggest": { - "ext-curl": "Performs remote request operations.", - "ext-dom": "Used to validate Text Widget content and to automatically configuring IIS7+.", - "ext-exif": "Works with metadata stored in images.", - "ext-fileinfo": "Used to detect mimetype of file uploads.", - "ext-hash": "Used for hashing, including passwords and update packages.", - "ext-imagick": "Provides better image quality for media uploads.", - "ext-json": "Used for communications with other servers.", - "ext-libsodium": "Validates Signatures and provides securely random bytes.", - "ext-mbstring": "Used to properly handle UTF8 text.", - "ext-mysqli": "Connects to MySQL for database interactions.", - "ext-openssl": "Permits SSL-based connections to other hosts.", - "ext-pcre": "Increases performance of pattern matching in code searches.", - "ext-xml": "Used for XML parsing, such as from a third-party site.", - "ext-zip": "Used for decompressing Plugins, Themes, and WordPress update packages." - }, - "type": "wordpress-core", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "docs": "https://developer.wordpress.org/", - "forum": "https://wordpress.org/support/", - "irc": "irc://irc.freenode.net/wordpress", - "issues": "https://core.trac.wordpress.org/", - "rss": "https://wordpress.org/news/feed/", - "source": "https://core.trac.wordpress.org/browser", - "wiki": "https://codex.wordpress.org/" - }, - "funding": [ - { - "url": "https://wordpressfoundation.org/donate/", - "type": "other" - } - ], - "time": "2024-11-21T14:15:19+00:00" - }, { "name": "sebastian/cli-parser", "version": "1.0.2", diff --git a/projects/plugins/search/changelog/clean-extra-composer-things b/projects/plugins/search/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d6f81cf571b7 --- /dev/null +++ b/projects/plugins/search/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removed dev packages, no functional changes + + diff --git a/projects/plugins/search/composer.lock b/projects/plugins/search/composer.lock index 24115a986c26a..10e2e1a7526d8 100644 --- a/projects/plugins/search/composer.lock +++ b/projects/plugins/search/composer.lock @@ -267,7 +267,7 @@ "dist": { "type": "path", "url": "../../packages/boost-core", - "reference": "d39cf9555e3edd6cd71349c9e828a9006f41b6fc" + "reference": "f29fb32cba33427db5d3930bf6e0d7206b44d3c3" }, "require": { "automattic/jetpack-connection": "@dev", @@ -275,7 +275,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2", "yoast/phpunit-polyfills": "^1.1.1" }, "suggest": { @@ -307,18 +306,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -335,7 +322,7 @@ "dist": { "type": "path", "url": "../../packages/boost-speed-score", - "reference": "0eb6e9f50de070ab933fe0f12992ad2389e351a5" + "reference": "6c5f2fce242a09a6cec0d26328026664046dd17a" }, "require": { "automattic/jetpack-boost-core": "@dev", @@ -383,18 +370,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ diff --git a/projects/plugins/social/changelog/clean-extra-composer-things b/projects/plugins/social/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d6f81cf571b7 --- /dev/null +++ b/projects/plugins/social/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removed dev packages, no functional changes + + diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index cc986ae7528ee..0879139bdd826 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -267,7 +267,7 @@ "dist": { "type": "path", "url": "../../packages/boost-core", - "reference": "d39cf9555e3edd6cd71349c9e828a9006f41b6fc" + "reference": "f29fb32cba33427db5d3930bf6e0d7206b44d3c3" }, "require": { "automattic/jetpack-connection": "@dev", @@ -275,7 +275,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2", "yoast/phpunit-polyfills": "^1.1.1" }, "suggest": { @@ -307,18 +306,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -335,7 +322,7 @@ "dist": { "type": "path", "url": "../../packages/boost-speed-score", - "reference": "0eb6e9f50de070ab933fe0f12992ad2389e351a5" + "reference": "6c5f2fce242a09a6cec0d26328026664046dd17a" }, "require": { "automattic/jetpack-boost-core": "@dev", @@ -383,18 +370,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ diff --git a/projects/plugins/starter-plugin/changelog/clean-extra-composer-things b/projects/plugins/starter-plugin/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d6f81cf571b7 --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removed dev packages, no functional changes + + diff --git a/projects/plugins/starter-plugin/composer.lock b/projects/plugins/starter-plugin/composer.lock index 4d7cecc4bafe7..39fc5bbc33c4f 100644 --- a/projects/plugins/starter-plugin/composer.lock +++ b/projects/plugins/starter-plugin/composer.lock @@ -267,7 +267,7 @@ "dist": { "type": "path", "url": "../../packages/boost-core", - "reference": "d39cf9555e3edd6cd71349c9e828a9006f41b6fc" + "reference": "f29fb32cba33427db5d3930bf6e0d7206b44d3c3" }, "require": { "automattic/jetpack-connection": "@dev", @@ -275,7 +275,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2", "yoast/phpunit-polyfills": "^1.1.1" }, "suggest": { @@ -307,18 +306,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -335,7 +322,7 @@ "dist": { "type": "path", "url": "../../packages/boost-speed-score", - "reference": "0eb6e9f50de070ab933fe0f12992ad2389e351a5" + "reference": "6c5f2fce242a09a6cec0d26328026664046dd17a" }, "require": { "automattic/jetpack-boost-core": "@dev", @@ -383,18 +370,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ diff --git a/projects/plugins/videopress/changelog/clean-extra-composer-things b/projects/plugins/videopress/changelog/clean-extra-composer-things new file mode 100644 index 0000000000000..3d662316f955f --- /dev/null +++ b/projects/plugins/videopress/changelog/clean-extra-composer-things @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Removing development packages, nothing with production code + + diff --git a/projects/plugins/videopress/composer.json b/projects/plugins/videopress/composer.json index cf9be999c39f9..5a0e12e8246ed 100644 --- a/projects/plugins/videopress/composer.json +++ b/projects/plugins/videopress/composer.json @@ -15,9 +15,7 @@ "automattic/jetpack-status": "@dev" }, "require-dev": { - "yoast/phpunit-polyfills": "^1.1.1", - "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "0.4.2" + "automattic/jetpack-changelogger": "@dev" }, "autoload": { "classmap": [ @@ -25,9 +23,7 @@ ] }, "scripts": { - "watch": "echo 'This script is actually watching the Jetpack VideoPress package' && jetpack watch packages/videopress", - "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", - "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + "watch": "echo 'This script is actually watching the Jetpack VideoPress package' && jetpack watch packages/videopress" }, "repositories": [ { diff --git a/projects/plugins/videopress/composer.lock b/projects/plugins/videopress/composer.lock index 9d1523836ca58..569bd5ce6b9d5 100644 --- a/projects/plugins/videopress/composer.lock +++ b/projects/plugins/videopress/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bd3d563ba17aa500a8e0682ae183b400", + "content-hash": "c137d3d2f7ef6ae28a72fcc687226553", "packages": [ { "name": "automattic/jetpack-a8c-mc-stats", @@ -267,7 +267,7 @@ "dist": { "type": "path", "url": "../../packages/boost-core", - "reference": "d39cf9555e3edd6cd71349c9e828a9006f41b6fc" + "reference": "f29fb32cba33427db5d3930bf6e0d7206b44d3c3" }, "require": { "automattic/jetpack-connection": "@dev", @@ -275,7 +275,6 @@ }, "require-dev": { "automattic/jetpack-changelogger": "@dev", - "automattic/wordbless": "^0.4.2", "yoast/phpunit-polyfills": "^1.1.1" }, "suggest": { @@ -307,18 +306,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -335,7 +322,7 @@ "dist": { "type": "path", "url": "../../packages/boost-speed-score", - "reference": "0eb6e9f50de070ab933fe0f12992ad2389e351a5" + "reference": "6c5f2fce242a09a6cec0d26328026664046dd17a" }, "require": { "automattic/jetpack-boost-core": "@dev", @@ -383,18 +370,6 @@ ], "test-php": [ "@composer phpunit" - ], - "build-production": [ - "echo 'Add your build step to composer.json, please!'" - ], - "build-development": [ - "echo 'Add your build step to composer.json, please!'" - ], - "post-install-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" - ], - "post-update-cmd": [ - "WorDBless\\Composer\\InstallDropin::copy" ] }, "license": [ @@ -1907,82 +1882,109 @@ } }, { - "name": "automattic/wordbless", - "version": "0.4.2", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/Automattic/wordbless.git", - "reference": "a1fe6376b81e6d037190aa1a5dc684d51eb674cd" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Automattic/wordbless/zipball/a1fe6376b81e6d037190aa1a5dc684d51eb674cd", - "reference": "a1fe6376b81e6d037190aa1a5dc684d51eb674cd", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "php": ">=5.6.20", - "roots/wordpress": "^6.0.2", - "yoast/phpunit-polyfills": "^1.0" + "php": ">=7.4.0" }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^9.5" + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } }, - "type": "wordpress-dropin", "autoload": { "psr-4": { - "WorDBless\\": "src/", - "WorDBless\\Composer\\": "src/Composer/" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-2.0-or-later" + "MIT" ], "authors": [ { - "name": "Automattic Inc." + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "WorDBless allows you to use WordPress core functions in your PHPUnit tests without having to set up a database and the whole WordPress environment", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], "support": { - "issues": "https://github.com/Automattic/wordbless/issues", - "source": "https://github.com/Automattic/wordbless/tree/0.4.2" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2023-03-15T12:16:20+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { - "name": "doctrine/instantiator", - "version": "2.0.0", + "name": "symfony/console", + "version": "v7.2.1", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + "url": "https://github.com/symfony/console.git", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { - "php": "^8.1" + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1990,2195 +1992,248 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", "keywords": [ - "constructor", - "instantiate" + "cli", + "command-line", + "console", + "terminal" ], "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" + "url": "https://github.com/fabpot", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-12-30T00:23:10+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.12.1", + "name": "symfony/deprecation-contracts", + "version": "v3.5.1", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + "php": ">=8.1" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, "autoload": { "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-08T17:47:46+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { - "name": "nikic/php-parser", - "version": "v5.4.0", + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" + "php": ">=7.2" }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "5.0-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "PhpParser\\": "lib/PhpParser" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A PHP parser written in PHP", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", "keywords": [ - "parser", - "php" + "compatibility", + "ctype", + "polyfill", + "portable" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, - "time": "2024-12-30T11:07:19+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.4", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.32", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-text-template": "^2.0.4", - "sebastian/code-unit-reverse-lookup": "^2.0.3", - "sebastian/complexity": "^2.0.3", - "sebastian/environment": "^5.1.5", - "sebastian/lines-of-code": "^1.0.4", - "sebastian/version": "^3.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-22T04:23:01+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.22", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c", - "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.5.0 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.32", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.4", - "phpunit/php-timer": "^5.0.3", - "sebastian/cli-parser": "^1.0.2", - "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.6", - "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.6", - "sebastian/global-state": "^5.0.7", - "sebastian/object-enumerator": "^4.0.4", - "sebastian/resource-operations": "^3.0.4", - "sebastian/type": "^3.2.1", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-12-05T13:48:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "roots/wordpress", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress.git", - "reference": "9451af491af7124c12186398c56ab87a6e145123" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress/zipball/9451af491af7124c12186398c56ab87a6e145123", - "reference": "9451af491af7124c12186398c56ab87a6e145123", - "shasum": "" - }, - "require": { - "roots/wordpress-core-installer": "^1.0.0", - "roots/wordpress-no-content": "self.version" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "GPL-2.0-or-later" - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress/issues", - "source": "https://github.com/roots/wordpress/tree/6.7.1" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - } - ], - "time": "2024-11-13T09:56:09+00:00" - }, - { - "name": "roots/wordpress-core-installer", - "version": "1.100.0", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress-core-installer.git", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/73f8488e5178c5d54234b919f823a9095e2b1847", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "conflict": { - "composer/installers": "<1.0.6" - }, - "replace": { - "johnpbloch/wordpress-core-installer": "*" - }, - "require-dev": { - "composer/composer": "^1.0 || ^2.0", - "phpunit/phpunit": ">=5.7.27" - }, - "type": "composer-plugin", - "extra": { - "class": "Roots\\Composer\\WordPressCorePlugin" - }, - "autoload": { - "psr-4": { - "Roots\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "John P. Bloch", - "email": "me@johnpbloch.com" - }, - { - "name": "Roots", - "email": "team@roots.io" - } - ], - "description": "A custom installer to handle deploying WordPress with composer", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress-core-installer/issues", - "source": "https://github.com/roots/wordpress-core-installer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - }, - { - "url": "https://www.patreon.com/rootsdev", - "type": "patreon" - } - ], - "time": "2020-08-20T00:27:30+00:00" - }, - { - "name": "roots/wordpress-no-content", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/WordPress/WordPress.git", - "reference": "6.7.1" - }, - "dist": { - "type": "zip", - "url": "https://downloads.wordpress.org/release/wordpress-6.7.1-no-content.zip", - "shasum": "321a5b819369e772ce606fbc12b1e264fb73da5b" - }, - "require": { - "php": ">= 7.2.24" - }, - "provide": { - "wordpress/core-implementation": "6.7.1" - }, - "suggest": { - "ext-curl": "Performs remote request operations.", - "ext-dom": "Used to validate Text Widget content and to automatically configuring IIS7+.", - "ext-exif": "Works with metadata stored in images.", - "ext-fileinfo": "Used to detect mimetype of file uploads.", - "ext-hash": "Used for hashing, including passwords and update packages.", - "ext-imagick": "Provides better image quality for media uploads.", - "ext-json": "Used for communications with other servers.", - "ext-libsodium": "Validates Signatures and provides securely random bytes.", - "ext-mbstring": "Used to properly handle UTF8 text.", - "ext-mysqli": "Connects to MySQL for database interactions.", - "ext-openssl": "Permits SSL-based connections to other hosts.", - "ext-pcre": "Increases performance of pattern matching in code searches.", - "ext-xml": "Used for XML parsing, such as from a third-party site.", - "ext-zip": "Used for decompressing Plugins, Themes, and WordPress update packages." - }, - "type": "wordpress-core", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "docs": "https://developer.wordpress.org/", - "forum": "https://wordpress.org/support/", - "irc": "irc://irc.freenode.net/wordpress", - "issues": "https://core.trac.wordpress.org/", - "rss": "https://wordpress.org/news/feed/", - "source": "https://core.trac.wordpress.org/browser", - "wiki": "https://codex.wordpress.org/" - }, - "funding": [ - { - "url": "https://wordpressfoundation.org/donate/", - "type": "other" - } - ], - "time": "2024-11-21T14:15:19+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:27:43+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:19:30+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:30:58+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:33:00+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:35:11+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:20:34+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-14T16:00:52+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "symfony/console", - "version": "v7.2.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v7.2.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-12-11T03:49:26+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.5.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.5-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:20:29+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -4587,119 +2642,6 @@ } ], "time": "2024-11-13T13:31:26+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - }, - { - "name": "yoast/phpunit-polyfills", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", - "reference": "0b31ce834facf03b8b44b6587e65b3cf1d7cfb94", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "require-dev": { - "php-parallel-lint/php-console-highlighter": "^1.0.0", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "yoast/yoastcs": "^3.1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "files": [ - "phpunitpolyfills-autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Team Yoast", - "email": "support@yoast.com", - "homepage": "https://yoast.com" - }, - { - "name": "Contributors", - "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors" - } - ], - "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests", - "homepage": "https://github.com/Yoast/PHPUnit-Polyfills", - "keywords": [ - "phpunit", - "polyfill", - "testing" - ], - "support": { - "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", - "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", - "source": "https://github.com/Yoast/PHPUnit-Polyfills" - }, - "time": "2025-01-08T16:58:34+00:00" } ], "aliases": [], diff --git a/projects/plugins/videopress/phpunit.xml.dist b/projects/plugins/videopress/phpunit.xml.dist deleted file mode 100644 index 3223c32458db2..0000000000000 --- a/projects/plugins/videopress/phpunit.xml.dist +++ /dev/null @@ -1,14 +0,0 @@ - - - - tests/php - - - - - - - src - - - diff --git a/projects/plugins/videopress/tests/php/bootstrap.php b/projects/plugins/videopress/tests/php/bootstrap.php deleted file mode 100644 index 46763b04a2cdb..0000000000000 --- a/projects/plugins/videopress/tests/php/bootstrap.php +++ /dev/null @@ -1,11 +0,0 @@ -=5.6.20", - "roots/wordpress": "^6.0.2", - "yoast/phpunit-polyfills": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^9.5" - }, - "type": "wordpress-dropin", - "autoload": { - "psr-4": { - "WorDBless\\": "src/", - "WorDBless\\Composer\\": "src/Composer/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Automattic Inc." - } - ], - "description": "WorDBless allows you to use WordPress core functions in your PHPUnit tests without having to set up a database and the whole WordPress environment", - "support": { - "issues": "https://github.com/Automattic/wordbless/issues", - "source": "https://github.com/Automattic/wordbless/tree/0.4.2" - }, - "time": "2023-03-15T12:16:20+00:00" - }, { "name": "doctrine/instantiator", "version": "2.0.0", @@ -3068,190 +3016,6 @@ }, "time": "2021-11-05T16:47:00+00:00" }, - { - "name": "roots/wordpress", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress.git", - "reference": "9451af491af7124c12186398c56ab87a6e145123" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress/zipball/9451af491af7124c12186398c56ab87a6e145123", - "reference": "9451af491af7124c12186398c56ab87a6e145123", - "shasum": "" - }, - "require": { - "roots/wordpress-core-installer": "^1.0.0", - "roots/wordpress-no-content": "self.version" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "GPL-2.0-or-later" - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress/issues", - "source": "https://github.com/roots/wordpress/tree/6.7.1" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - } - ], - "time": "2024-11-13T09:56:09+00:00" - }, - { - "name": "roots/wordpress-core-installer", - "version": "1.100.0", - "source": { - "type": "git", - "url": "https://github.com/roots/wordpress-core-installer.git", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/73f8488e5178c5d54234b919f823a9095e2b1847", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "conflict": { - "composer/installers": "<1.0.6" - }, - "replace": { - "johnpbloch/wordpress-core-installer": "*" - }, - "require-dev": { - "composer/composer": "^1.0 || ^2.0", - "phpunit/phpunit": ">=5.7.27" - }, - "type": "composer-plugin", - "extra": { - "class": "Roots\\Composer\\WordPressCorePlugin" - }, - "autoload": { - "psr-4": { - "Roots\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "John P. Bloch", - "email": "me@johnpbloch.com" - }, - { - "name": "Roots", - "email": "team@roots.io" - } - ], - "description": "A custom installer to handle deploying WordPress with composer", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/roots/wordpress-core-installer/issues", - "source": "https://github.com/roots/wordpress-core-installer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/roots", - "type": "github" - }, - { - "url": "https://www.patreon.com/rootsdev", - "type": "patreon" - } - ], - "time": "2020-08-20T00:27:30+00:00" - }, - { - "name": "roots/wordpress-no-content", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/WordPress/WordPress.git", - "reference": "6.7.1" - }, - "dist": { - "type": "zip", - "url": "https://downloads.wordpress.org/release/wordpress-6.7.1-no-content.zip", - "shasum": "321a5b819369e772ce606fbc12b1e264fb73da5b" - }, - "require": { - "php": ">= 7.2.24" - }, - "provide": { - "wordpress/core-implementation": "6.7.1" - }, - "suggest": { - "ext-curl": "Performs remote request operations.", - "ext-dom": "Used to validate Text Widget content and to automatically configuring IIS7+.", - "ext-exif": "Works with metadata stored in images.", - "ext-fileinfo": "Used to detect mimetype of file uploads.", - "ext-hash": "Used for hashing, including passwords and update packages.", - "ext-imagick": "Provides better image quality for media uploads.", - "ext-json": "Used for communications with other servers.", - "ext-libsodium": "Validates Signatures and provides securely random bytes.", - "ext-mbstring": "Used to properly handle UTF8 text.", - "ext-mysqli": "Connects to MySQL for database interactions.", - "ext-openssl": "Permits SSL-based connections to other hosts.", - "ext-pcre": "Increases performance of pattern matching in code searches.", - "ext-xml": "Used for XML parsing, such as from a third-party site.", - "ext-zip": "Used for decompressing Plugins, Themes, and WordPress update packages." - }, - "type": "wordpress-core", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "docs": "https://developer.wordpress.org/", - "forum": "https://wordpress.org/support/", - "irc": "irc://irc.freenode.net/wordpress", - "issues": "https://core.trac.wordpress.org/", - "rss": "https://wordpress.org/news/feed/", - "source": "https://core.trac.wordpress.org/browser", - "wiki": "https://codex.wordpress.org/" - }, - "funding": [ - { - "url": "https://wordpressfoundation.org/donate/", - "type": "other" - } - ], - "time": "2024-11-21T14:15:19+00:00" - }, { "name": "sebastian/cli-parser", "version": "1.0.2", diff --git a/projects/plugins/wpcomsh/tests/php/bootstrap.php b/projects/plugins/wpcomsh/tests/php/bootstrap.php deleted file mode 100644 index 46763b04a2cdb..0000000000000 --- a/projects/plugins/wpcomsh/tests/php/bootstrap.php +++ /dev/null @@ -1,11 +0,0 @@ - Date: Thu, 23 Jan 2025 11:59:23 +1300 Subject: [PATCH 167/420] Charts: Fix direct import from cjs & rollup config cleanup (#41266) * we should not import from @visx/*/lib which is cjs module - we can only import types from there * simplify rollup config * simplify rollup config * remove fixup bash * changelog * no need to set file name --- .../changelog/fix-direct-import-from-cjs | 4 + projects/js-packages/charts/package.json | 4 +- projects/js-packages/charts/rollup.config.mjs | 119 ++++-------------- .../pie-semi-circle-chart.tsx | 4 +- projects/js-packages/charts/tools/fixup.sh | 11 -- 5 files changed, 36 insertions(+), 106 deletions(-) create mode 100644 projects/js-packages/charts/changelog/fix-direct-import-from-cjs delete mode 100644 projects/js-packages/charts/tools/fixup.sh diff --git a/projects/js-packages/charts/changelog/fix-direct-import-from-cjs b/projects/js-packages/charts/changelog/fix-direct-import-from-cjs new file mode 100644 index 0000000000000..5cf9bcf800535 --- /dev/null +++ b/projects/js-packages/charts/changelog/fix-direct-import-from-cjs @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Simplify rollup config and remove a cjs import diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 79a322a24d230..8898213368a2d 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -21,9 +21,9 @@ "compile-ts": "tsc --pretty", "clean-build": "rm -rf dist/", "build": "pnpm run build:prod", - "build:prod": "pnpm run clean && rollup -c --environment NODE_ENV:production && bash ./tools/fixup.sh", + "build:prod": "pnpm run clean && rollup -c --environment NODE_ENV:production", "build:dev": "rollup -c --environment NODE_ENV:development", - "build:webpack": "pnpm run clean-build && webpack --config webpack.config.cjs --mode production && bash ./tools/fixup.sh && pnpm run build:types", + "build:webpack": "pnpm run clean-build && webpack --config webpack.config.cjs --mode production && pnpm run build:types", "build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types" }, "main": "./dist/cjs/index.js", diff --git a/projects/js-packages/charts/rollup.config.mjs b/projects/js-packages/charts/rollup.config.mjs index 10629b92429c2..95d03df5bbfdf 100644 --- a/projects/js-packages/charts/rollup.config.mjs +++ b/projects/js-packages/charts/rollup.config.mjs @@ -1,4 +1,3 @@ -// Import necessary plugins for building the library import commonjs from '@rollup/plugin-commonjs'; import json from '@rollup/plugin-json'; import resolve from '@rollup/plugin-node-resolve'; @@ -9,61 +8,44 @@ import dts from 'rollup-plugin-dts'; import peerDepsExternal from 'rollup-plugin-peer-deps-external'; import postcss from 'rollup-plugin-postcss'; -// Common plugins used across all build configurations -const commonPlugins = [ - // Automatically externalize peer dependencies - peerDepsExternal( { - includeDependencies: true, - } ), - // Locate and bundle third-party dependencies from node_modules - resolve( { - preferBuiltins: true, - extensions: [ '.tsx', '.ts', '.js', '.jsx' ], - } ), - // Convert CommonJS modules to ES6 - commonjs(), - // Allow importing JSON files - json(), - // Process SCSS/CSS modules - postcss( { - // Configure CSS modules with scoped names - modules: { - generateScopedName: '[name]__[local]__[hash:base64:5]', - }, - extract: 'style.css', - autoModules: false, - use: [ 'sass' ], - } ), -]; - -// Main bundle configuration for the entire library const mainConfig = { - // Entry point for the bundle input: 'src/index.ts', - // Output configuration for different module formats output: [ { - file: './dist/cjs/index.js', - format: 'cjs', // CommonJS format for Node.js + dir: './dist/cjs/', + format: 'cjs', + preserveModules: true, + preserveModulesRoot: 'src', sourcemap: true, - sourcemapPathTransform: relativeSourcePath => { - return `/@automattic/charts/${ relativeSourcePath }`; - }, + sourcemapPathTransform: relativeSourcePath => `/@automattic/charts/${ relativeSourcePath }`, }, { - file: './dist/mjs/index.js', - format: 'esm', // ES modules for modern bundlers + dir: './dist/mjs/', + format: 'esm', + preserveModules: true, + preserveModulesRoot: 'src', sourcemap: true, }, ], - // Mark all dependencies as external to avoid bundling them external: [ 'react', 'react-dom', /^@visx\/.*/, '@react-spring/web', 'clsx', 'tslib' ], plugins: [ - ...commonPlugins, - // TypeScript compilation + peerDepsExternal( { includeDependencies: true } ), + resolve( { + preferBuiltins: true, + extensions: [ '.tsx', '.ts', '.js', '.jsx' ], + } ), + commonjs(), + json(), + postcss( { + extract: true, // Generate individual CSS files + autoModules: true, // Automatically handle .module.scss as CSS modules + modules: true, // Enable CSS modules + use: [ 'sass' ], // Enable SCSS support + minimize: true, // Minify the CSS + } ), typescript( { tsconfig: './tsconfig.json', - declaration: false, // Declarations handled by dts plugin + declaration: false, sourceMap: true, compilerOptions: { verbatimModuleSyntax: true, @@ -71,7 +53,6 @@ const mainConfig = { } ), terser(), ], - // Handle circular dependencies warning onwarn( warning, warn ) { if ( warning.code === 'CIRCULAR_DEPENDENCY' ) { return; @@ -80,55 +61,10 @@ const mainConfig = { }, }; -// List of components to build individually -const components = [ - 'components/bar-chart', - 'components/line-chart', - 'components/pie-chart', - 'components/pie-semi-circle-chart', - 'components/tooltip', - 'components/legend', - 'components/grid-control', - 'providers/theme', -]; - -// Generate individual bundles for each component -const componentConfigs = components.map( component => ( { - // Component entry point - try both .tsx and .ts extensions - input: `src/${ component }/index`, - // Output both ESM and CJS formats - output: [ - { - file: `dist/mjs/${ component }/index.js`, - format: 'esm', - sourcemap: true, - }, - { - file: `dist/cjs/${ component }/index.js`, - format: 'cjs', - sourcemap: true, - }, - ], - // Same external config as main bundle - external: [ 'react', 'react-dom', /^@visx\/.*/, '@react-spring/web', 'clsx', 'tslib' ], - plugins: [ - ...commonPlugins, - typescript( { - tsconfig: './tsconfig.json', - declaration: false, - sourceMap: true, - compilerOptions: { - verbatimModuleSyntax: true, - }, - } ), - terser(), - ], -} ) ); - // Configuration for generating TypeScript declaration files -const typesConfig = { +const dtsConfig = { input: 'src/index.ts', - output: [ { file: 'dist/index.d.ts', format: 'es' } ], + output: [ { file: 'dist/index.d.ts' } ], plugins: [ dts( { respectExternal: true, @@ -138,5 +74,4 @@ const typesConfig = { external: [ /\.scss$/, /\.css$/, 'react', /@types\/.*/, /^@visx\/.*/, 'react/jsx-runtime' ], }; -// Export all configurations to be built in parallel -export default defineConfig( [ mainConfig, ...componentConfigs, typesConfig ] ); +export default defineConfig( [ mainConfig, dtsConfig ] ); diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx index 8e85cd89aba52..16520428d4308 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx @@ -1,6 +1,6 @@ import { localPoint } from '@visx/event'; import { Group } from '@visx/group'; -import Pie, { type PieArcDatum } from '@visx/shape/lib/shapes/Pie'; +import { Pie } from '@visx/shape'; import { Text } from '@visx/text'; import { useTooltip } from '@visx/tooltip'; import clsx from 'clsx'; @@ -11,6 +11,8 @@ import { withResponsive } from '../shared/with-responsive'; import { BaseTooltip } from '../tooltip'; import styles from './pie-semi-circle-chart.module.scss'; import type { BaseChartProps, DataPointPercentage } from '../../types'; +import type { PieArcDatum } from '@visx/shape/lib/shapes/Pie'; + interface PieSemiCircleChartProps extends BaseChartProps< DataPointPercentage[] > { /** * Size of the chart in pixels diff --git a/projects/js-packages/charts/tools/fixup.sh b/projects/js-packages/charts/tools/fixup.sh deleted file mode 100644 index 39177d086577c..0000000000000 --- a/projects/js-packages/charts/tools/fixup.sh +++ /dev/null @@ -1,11 +0,0 @@ -cat >dist/cjs/package.json <dist/mjs/package.json < Date: Thu, 23 Jan 2025 10:20:37 +1100 Subject: [PATCH 168/420] Adds Fiverr Logo Maker link to options-general.php (#41173) * Doc comments * changelog * Move CTA below site icon and track events * Styling, i18n * Button margin + use the asset file to bust cache on atomic * Revert tracks ws --- .../jetpack-mu-wpcom/changelog/update-fiverr | 4 ++ .../src/class-jetpack-mu-wpcom.php | 1 + .../features/wpcom-fiverr/wpcom-fiverr.php | 66 +++++++++++++++++++ .../features/wpcom-fiverr/wpcom-fiverr.scss | 9 +++ .../src/features/wpcom-fiverr/wpcom-fiverr.ts | 23 +++++++ .../jetpack-mu-wpcom/webpack.config.js | 4 ++ 6 files changed, 107 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-fiverr create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-fiverr/wpcom-fiverr.php create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-fiverr/wpcom-fiverr.scss create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-fiverr/wpcom-fiverr.ts diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-fiverr b/projects/packages/jetpack-mu-wpcom/changelog/update-fiverr new file mode 100644 index 0000000000000..a03fa4d2606b0 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-fiverr @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Adds fiverr logo maker link in general settings diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index ea1c568ae5a8d..cc1920346eb27 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -158,6 +158,7 @@ public static function load_wpcom_user_features() { require_once __DIR__ . '/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php'; require_once __DIR__ . '/features/wpcom-siteurl/siteurl.php'; require_once __DIR__ . '/features/wpcom-themes/wpcom-themes.php'; + require_once __DIR__ . '/features/wpcom-fiverr/wpcom-fiverr.php'; // Only load the Calypsoify and Masterbar features on WoA sites. if ( class_exists( '\Automattic\Jetpack\Status\Host' ) && ( new \Automattic\Jetpack\Status\Host() )->is_woa_site() ) { diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-fiverr/wpcom-fiverr.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-fiverr/wpcom-fiverr.php new file mode 100644 index 0000000000000..69c7c569fb869 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-fiverr/wpcom-fiverr.php @@ -0,0 +1,66 @@ + 'defer', + 'in_footer' => false, + ) + ); +} +add_action( 'admin_enqueue_scripts', 'wpcom_fiverr_enqueue_scripts' ); + +/** + * Add the fiverr cta to the general settings page. + */ +function wpcom_fiverr() { + add_settings_field( 'wpcom_fiverr_cta', '', 'wpcom_fiverr_cta', 'general', 'default' ); +} +add_action( 'admin_init', 'wpcom_fiverr' ); + +/** + * Display the fiverr cta on the general settings page. + */ +function wpcom_fiverr_cta() { + ?> + + + + + +

      +

      + + + + { + const fiverrCtaRow = document.querySelector( '.wpcom-fiverr-cta' ); + const siteIconSectionRow = document.querySelector( '.site-icon-section' ); + + if ( fiverrCtaRow && siteIconSectionRow ) { + siteIconSectionRow?.parentNode?.insertBefore( fiverrCtaRow, siteIconSectionRow.nextSibling ); + } + + const fiverCta = document.querySelector( '.wpcom-fiverr-cta-button' ); + if ( fiverCta ) { + fiverCta.addEventListener( 'click', e => { + e.preventDefault(); + + wpcomTrackEvent( 'wp_admin_site_icon_fiverr_logo_maker_cta_click', { + cta_name: 'wp_admin_site_icon_fiverr_logo_maker', + } ); + + window.open( 'https://wp.me/logo-maker/?utm_campaign=general_settings', '_blank' ); + } ); + } +} ); diff --git a/projects/packages/jetpack-mu-wpcom/webpack.config.js b/projects/packages/jetpack-mu-wpcom/webpack.config.js index 965e3bb66f22b..9ae2f34e712c4 100644 --- a/projects/packages/jetpack-mu-wpcom/webpack.config.js +++ b/projects/packages/jetpack-mu-wpcom/webpack.config.js @@ -56,6 +56,10 @@ module.exports = [ 'starter-page-templates': './src/features/starter-page-templates/index.tsx', 'removed-calypso-screen-notice': './src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx', + 'wpcom-fiverr': [ + './src/features/wpcom-fiverr/wpcom-fiverr.ts', + './src/features/wpcom-fiverr/wpcom-fiverr.scss', + ], }, mode: jetpackWebpackConfig.mode, devtool: jetpackWebpackConfig.devtool, From 057881cc2a45def5882dcce7e46e6be9905452f3 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Thu, 23 Jan 2025 12:21:18 +1300 Subject: [PATCH 169/420] changelog (#41267) --- projects/js-packages/charts/CHANGELOG.md | 5 +++++ .../js-packages/charts/changelog/clean-extra-composer-things | 5 ----- .../js-packages/charts/changelog/fix-direct-import-from-cjs | 4 ---- projects/js-packages/charts/package.json | 2 +- 4 files changed, 6 insertions(+), 10 deletions(-) delete mode 100644 projects/js-packages/charts/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/charts/changelog/fix-direct-import-from-cjs diff --git a/projects/js-packages/charts/CHANGELOG.md b/projects/js-packages/charts/CHANGELOG.md index 0c18fc7f60980..3d7500efacfe2 100644 --- a/projects/js-packages/charts/CHANGELOG.md +++ b/projects/js-packages/charts/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.5.0] - 2025-01-22 +### Changed +- Simplify rollup config and remove a cjs import [#41266] + ## [0.4.0] - 2025-01-22 ### Added - Added passing through options for X, Y axis [#41109] @@ -67,6 +71,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed lints following ESLint rule changes for TS [#40584] - Fixing a bug in Chart storybook data. [#40640] +[0.5.0]: https://github.com/Automattic/charts/compare/v0.4.0...v0.5.0 [0.4.0]: https://github.com/Automattic/charts/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/Automattic/charts/compare/v0.2.3...v0.3.0 [0.2.3]: https://github.com/Automattic/charts/compare/v0.2.2...v0.2.3 diff --git a/projects/js-packages/charts/changelog/clean-extra-composer-things b/projects/js-packages/charts/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/charts/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/charts/changelog/fix-direct-import-from-cjs b/projects/js-packages/charts/changelog/fix-direct-import-from-cjs deleted file mode 100644 index 5cf9bcf800535..0000000000000 --- a/projects/js-packages/charts/changelog/fix-direct-import-from-cjs +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Simplify rollup config and remove a cjs import diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 8898213368a2d..ee73258264ae2 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/charts", - "version": "0.4.0", + "version": "0.5.0", "description": "Display charts within Automattic products.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/charts/#readme", "bugs": { From 6d972248c85d1f1c3bc8dd21d0c14632ade56f17 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Thu, 23 Jan 2025 14:08:05 +1300 Subject: [PATCH 170/420] Charts: rename semi pie `size` to `width` and fix stories (#41270) * size renamed back to width for semi circle chart * changelog * changed stories as well * add height and width for pie and semi pie * fix comment for responsive story --- .../changelog/update-semi-pie-size-to-width | 4 +++ .../src/components/pie-chart/pie-chart.tsx | 7 ++++- .../pie-chart/stories/index.stories.tsx | 28 +++++++------------ .../pie-semi-circle-chart.tsx | 14 +++++----- .../stories/index.stories.tsx | 28 ++++++------------- 5 files changed, 36 insertions(+), 45 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-semi-pie-size-to-width diff --git a/projects/js-packages/charts/changelog/update-semi-pie-size-to-width b/projects/js-packages/charts/changelog/update-semi-pie-size-to-width new file mode 100644 index 0000000000000..a6b4599b84167 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-semi-pie-size-to-width @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +size props renamed to width for semi circle chart diff --git a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx index 6a56812c15ca3..dd5641ff15339 100644 --- a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx @@ -151,7 +151,12 @@ const PieChart = ( { return (
      - + data={ dataWithIndex } diff --git a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx index 0f2bcdf4d310d..273c0a7262b23 100644 --- a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx @@ -41,6 +41,7 @@ const meta = { aspectRatio: '1/1', minWidth: '400px', maxWidth: '1200px', + height: '800px', border: '1px dashed #ccc', } } > @@ -56,6 +57,7 @@ const meta = { min: 100, max: 800, step: 10, + default: 400, }, }, thickness: { @@ -111,7 +113,7 @@ type Story = StoryObj< typeof PieChart >; export const Default: Story = { args: { - size: 400, + size: 600, thickness: 1, gapScale: 0, padding: 20, @@ -128,6 +130,7 @@ export const WithHorizontalLegend: Story = { args: { ...Default.args, showLegend: true, + size: 600, legendOrientation: 'horizontal', }, }; @@ -136,6 +139,7 @@ export const WithVerticalLegend: Story = { args: { ...Default.args, showLegend: true, + size: 600, legendOrientation: 'vertical', }, }; @@ -183,26 +187,14 @@ export const WithTooltipsDoughnut: Story = { }, }; -export const FixedDimensions: Story = { - render: args => ( -
      - -
      - ), - args: { - size: 400, - thickness: 1, - padding: 20, - data, - withTooltips: true, - theme: 'default', - showLegend: false, - }, +const responsiveArgs = { ...Default.args }; +delete responsiveArgs.size; +export const Responsiveness: Story = { + args: responsiveArgs, parameters: { docs: { description: { - story: - 'Pie chart with fixed dimensions that override the responsive behavior. Uses size prop instead of width/height.', + story: 'Pie chart with responsive behavior. Uses size prop instead of width/height.', }, }, }, diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx index 16520428d4308..f2ab7a325fcd3 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx @@ -15,9 +15,9 @@ import type { PieArcDatum } from '@visx/shape/lib/shapes/Pie'; interface PieSemiCircleChartProps extends BaseChartProps< DataPointPercentage[] > { /** - * Size of the chart in pixels + * Width of the chart in pixels; height would be half of this value calculated automatically. */ - size?: number; + width?: number; /** * Thickness of the pie chart. A value between 0 and 1 @@ -43,7 +43,7 @@ type ArcData = PieArcDatum< DataPointPercentage >; const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { data, - size = 500, + width, label, note, className, @@ -57,9 +57,9 @@ const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { const { tooltipOpen, tooltipLeft, tooltipTop, tooltipData, hideTooltip, showTooltip } = useTooltip< DataPointPercentage >(); - const centerX = size / 2; - const height = size / 2; - const radius = size / 2; + const centerX = width / 2; + const height = width / 2; + const radius = width / 2; const pad = 0.03; const innerRadius = radius * ( 1 - thickness + pad ); @@ -120,7 +120,7 @@ const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( {
      - + { /* Main chart group that contains both the pie and text elements */ } { /* Pie chart */ } diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx index 32cc2bce8037d..d818a21f1aa95 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx @@ -32,6 +32,7 @@ const ResponsiveDecorator = Story => ( aspectRatio: '2/1', minWidth: '400px', maxWidth: '1200px', + height: '450px', border: '1px dashed #ccc', } } > @@ -47,7 +48,7 @@ const meta = { }, decorators: [ ResponsiveDecorator ], argTypes: { - size: { + width: { control: { type: 'range', min: 100, @@ -79,7 +80,7 @@ type Story = StoryObj< typeof PieSemiCircleChart >; export const Default: Story = { args: { - size: 400, + width: 600, thickness: 0.4, padding: 20, data, @@ -108,6 +109,7 @@ export const WithTooltips: Story = { export const WithHorizontalLegend: Story = { args: { ...Default.args, + width: 600, showLegend: true, legendOrientation: 'horizontal', }, @@ -121,27 +123,15 @@ export const WithVerticalLegend: Story = { }, }; -export const FixedDimensions: Story = { - render: args => ( -
      - -
      - ), - args: { - size: 400, - thickness: 0.4, - padding: 20, - data, - label: 'Fixed Dimensions', - note: 'Non-responsive chart', - clockwise: true, - showLegend: false, - }, +const responsiveArgs = { ...Default.args }; +delete responsiveArgs.width; +export const Responsiveness: Story = { + args: responsiveArgs, parameters: { docs: { description: { story: - 'Semi-circle pie chart with fixed dimensions that override the responsive behavior. Uses size prop for unified width/height handling.', + 'Semi-circle pie chart with responsive behavior. Uses width prop for unified width/height handling.', }, }, }, From ea0b6d3d7c034e456ba66c0b149d90f95ec88fbf Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Thu, 23 Jan 2025 14:41:18 +1300 Subject: [PATCH 171/420] revert to use width for semi pie chart (#41271) --- projects/js-packages/charts/CHANGELOG.md | 5 +++++ .../charts/changelog/update-semi-pie-size-to-width | 4 ---- projects/js-packages/charts/package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 projects/js-packages/charts/changelog/update-semi-pie-size-to-width diff --git a/projects/js-packages/charts/CHANGELOG.md b/projects/js-packages/charts/CHANGELOG.md index 3d7500efacfe2..fce43804178c0 100644 --- a/projects/js-packages/charts/CHANGELOG.md +++ b/projects/js-packages/charts/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.6.0] - 2025-01-23 +### Changed +- size props renamed to width for semi circle chart [#41270] + ## [0.5.0] - 2025-01-22 ### Changed - Simplify rollup config and remove a cjs import [#41266] @@ -71,6 +75,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed lints following ESLint rule changes for TS [#40584] - Fixing a bug in Chart storybook data. [#40640] +[0.6.0]: https://github.com/Automattic/charts/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/Automattic/charts/compare/v0.4.0...v0.5.0 [0.4.0]: https://github.com/Automattic/charts/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/Automattic/charts/compare/v0.2.3...v0.3.0 diff --git a/projects/js-packages/charts/changelog/update-semi-pie-size-to-width b/projects/js-packages/charts/changelog/update-semi-pie-size-to-width deleted file mode 100644 index a6b4599b84167..0000000000000 --- a/projects/js-packages/charts/changelog/update-semi-pie-size-to-width +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -size props renamed to width for semi circle chart diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index ee73258264ae2..452d7e5972ee9 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/charts", - "version": "0.5.0", + "version": "0.6.0", "description": "Display charts within Automattic products.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/charts/#readme", "bugs": { From 4ff6a2210c9c086b5c70509d40bc22f4a68b28f2 Mon Sep 17 00:00:00 2001 From: Louis Laugesen Date: Thu, 23 Jan 2025 15:26:31 +1100 Subject: [PATCH 172/420] Remove Settings > Performance menu item (#41145) * Hide Performance menu item when duplciate views experiment is enabled * changelog * Instead of hiding, don't add it instead - covers simple and atomic. * Fix phan-suppress annotation placement * Prevent hiding of page-optimize menu item when in the holdout group * Update changelog based on prev commit --- .../changelog/update-remove-performance-menu-item | 4 ++++ .../masterbar/src/admin-menu/class-admin-menu.php | 7 +++++-- .../src/admin-menu/class-atomic-admin-menu.php | 11 +++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 projects/packages/masterbar/changelog/update-remove-performance-menu-item diff --git a/projects/packages/masterbar/changelog/update-remove-performance-menu-item b/projects/packages/masterbar/changelog/update-remove-performance-menu-item new file mode 100644 index 0000000000000..2300c80248710 --- /dev/null +++ b/projects/packages/masterbar/changelog/update-remove-performance-menu-item @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Hides the calypso based Performance menu item on wordpress.com, shows page-optimize based Performance menu item on Atomic sites. diff --git a/projects/packages/masterbar/src/admin-menu/class-admin-menu.php b/projects/packages/masterbar/src/admin-menu/class-admin-menu.php index 3b0085f29391d..4e52f6f966f05 100644 --- a/projects/packages/masterbar/src/admin-menu/class-admin-menu.php +++ b/projects/packages/masterbar/src/admin-menu/class-admin-menu.php @@ -395,8 +395,11 @@ public function add_options_menu() { add_submenu_page( 'options-general.php', esc_attr__( 'Newsletter', 'jetpack-masterbar' ), __( 'Newsletter', 'jetpack-masterbar' ), 'manage_options', 'https://wordpress.com/settings/newsletter/' . $this->domain, null, 7 ); // @phan-suppress-next-line PhanTypeMismatchArgumentProbablyReal -- Core should ideally document null for no-callback arg. https://core.trac.wordpress.org/ticket/52539. add_submenu_page( 'options-general.php', esc_attr__( 'Podcasting', 'jetpack-masterbar' ), __( 'Podcasting', 'jetpack-masterbar' ), 'manage_options', 'https://wordpress.com/settings/podcasting/' . $this->domain, null, 8 ); - // @phan-suppress-next-line PhanTypeMismatchArgumentProbablyReal -- Core should ideally document null for no-callback arg. https://core.trac.wordpress.org/ticket/52539. - add_submenu_page( 'options-general.php', esc_attr__( 'Performance', 'jetpack-masterbar' ), __( 'Performance', 'jetpack-masterbar' ), 'manage_options', 'https://wordpress.com/settings/performance/' . $this->domain, null, 9 ); + + if ( function_exists( 'wpcom_is_duplicate_views_experiment_enabled' ) && ! wpcom_is_duplicate_views_experiment_enabled() ) { + // @phan-suppress-next-line PhanTypeMismatchArgumentProbablyReal -- Core should ideally document null for no-callback arg. https://core.trac.wordpress.org/ticket/52539. + add_submenu_page( 'options-general.php', esc_attr__( 'Performance', 'jetpack-masterbar' ), __( 'Performance', 'jetpack-masterbar' ), 'manage_options', 'https://wordpress.com/settings/performance/' . $this->domain, null, 9 ); + } } /** diff --git a/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php b/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php index 0bcafb72c30b7..57ee461a3a0db 100644 --- a/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php +++ b/projects/packages/masterbar/src/admin-menu/class-atomic-admin-menu.php @@ -436,10 +436,13 @@ function_exists( 'wpcom_is_duplicate_views_experiment_enabled' ) && 11 ); - // Page Optimize is active by default on all Atomic sites and registers a Settings > Performance submenu which - // would conflict with our own Settings > Performance that links to Calypso, so we hide it it since the Calypso - // performance settings already have a link to Page Optimize settings page. - $this->hide_submenu_page( 'options-general.php', 'page-optimize' ); + // The calypso based Performance screen is no longer linked from wp-admin and no longer conflicts with the Page Optimize "Performance"submenu item. + if ( function_exists( 'wpcom_is_duplicate_views_experiment_enabled' ) && ! wpcom_is_duplicate_views_experiment_enabled() ) { + // Page Optimize is active by default on all Atomic sites and registers a Settings > Performance submenu which + // would conflict with our own Settings > Performance that links to Calypso, so we hide it it since the Calypso + // performance settings already have a link to Page Optimize settings page. + $this->hide_submenu_page( 'options-general.php', 'page-optimize' ); + } // Hide Settings > Performance when the interface is set to wp-admin. // This is due to these settings are mostly also available in Jetpack > Settings, in the Performance tab. From 706ba079e445b45bf7eb69e0df286469829d00f0 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Wed, 22 Jan 2025 21:55:13 -0800 Subject: [PATCH 173/420] Social | Fix profile links for LinkedIn connections (#40873) --- .../fix-social-linkedin-profile-links | 4 +++ .../publicize/src/class-publicize-base.php | 35 +++++++------------ .../fix-social-linkedin-profile-links | 4 +++ .../fix-social-linkedin-profile-links | 4 +++ 4 files changed, 25 insertions(+), 22 deletions(-) create mode 100644 projects/packages/publicize/changelog/fix-social-linkedin-profile-links create mode 100644 projects/plugins/jetpack/changelog/fix-social-linkedin-profile-links create mode 100644 projects/plugins/social/changelog/fix-social-linkedin-profile-links diff --git a/projects/packages/publicize/changelog/fix-social-linkedin-profile-links b/projects/packages/publicize/changelog/fix-social-linkedin-profile-links new file mode 100644 index 0000000000000..e043639911d3a --- /dev/null +++ b/projects/packages/publicize/changelog/fix-social-linkedin-profile-links @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Social: Fix profile links for LinkedIn connections diff --git a/projects/packages/publicize/src/class-publicize-base.php b/projects/packages/publicize/src/class-publicize-base.php index d707968be7b2f..613e7b2ceddff 100644 --- a/projects/packages/publicize/src/class-publicize-base.php +++ b/projects/packages/publicize/src/class-publicize-base.php @@ -497,6 +497,19 @@ public function get_profile_link( $service_name, $connection ) { return 'https://instagram.com/' . $cmeta['connection_data']['meta']['username']; } + if ( 'linkedin' === $service_name ) { + + $entity_type = $cmeta['connection_data']['meta']['entity_type'] ?? 'person'; + + if ( 'organization' === $entity_type && ! empty( $cmeta['connection_data']['meta']['external_name'] ) ) { + return 'https://www.linkedin.com/company/' . $cmeta['connection_data']['meta']['external_name']; + } + + if ( 'person' === $entity_type && ! empty( $cmeta['external_name'] ) ) { + return 'https://www.linkedin.com/in/' . $cmeta['external_name']; + } + } + if ( 'threads' === $service_name && isset( $cmeta['external_name'] ) ) { return 'https://www.threads.net/@' . $cmeta['external_name']; } @@ -521,28 +534,6 @@ public function get_profile_link( $service_name, $connection ) { return 'https://bsky.app/profile/' . $cmeta['external_id']; } - if ( 'linkedin' === $service_name ) { - if ( ! isset( $cmeta['connection_data']['meta']['profile_url'] ) ) { - return false; - } - - $profile_url_query = wp_parse_url( $cmeta['connection_data']['meta']['profile_url'], PHP_URL_QUERY ); - $profile_url_query_args = array(); - wp_parse_str( $profile_url_query, $profile_url_query_args ); - - $id = null; - - if ( isset( $profile_url_query_args['key'] ) ) { - $id = $profile_url_query_args['key']; - } elseif ( isset( $profile_url_query_args['id'] ) ) { - $id = $profile_url_query_args['id']; - } else { - return false; - } - - return esc_url_raw( add_query_arg( 'id', rawurlencode( $id ), 'https://www.linkedin.com/profile/view' ) ); - } - return false; // no fallback. we just won't link it. } diff --git a/projects/plugins/jetpack/changelog/fix-social-linkedin-profile-links b/projects/plugins/jetpack/changelog/fix-social-linkedin-profile-links new file mode 100644 index 0000000000000..06f9ff81b9f67 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-social-linkedin-profile-links @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Social: Fix profile links for LinkedIn connections diff --git a/projects/plugins/social/changelog/fix-social-linkedin-profile-links b/projects/plugins/social/changelog/fix-social-linkedin-profile-links new file mode 100644 index 0000000000000..fbcf7bc784a02 --- /dev/null +++ b/projects/plugins/social/changelog/fix-social-linkedin-profile-links @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed profile links for LinkedIn connections From fee92abbcd40641f881442bb718195c0c2b46677 Mon Sep 17 00:00:00 2001 From: arthur791004 Date: Thu, 23 Jan 2025 14:22:22 +0800 Subject: [PATCH 174/420] MU WPCOM: Don't load ETK on agency sites on all pages (#41272) * MU WPCOM: Don't load ETK on agency sites * changelog * MU WPCOM: Avoid initializing starter page template by auto loader --- .../changelog/fix-etk-feature-on-a4a-site | 4 ++++ .../src/class-jetpack-mu-wpcom.php | 14 ++++++++++++++ .../class-wpcom-block-patterns-from-api.php | 2 +- projects/packages/jetpack-mu-wpcom/src/utils.php | 11 ++++++++++- .../changelog/fix-etk-feature-on-a4a-site | 4 ++++ .../wpcomsh/changelog/fix-etk-feature-on-a4a-site | 4 ++++ 6 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-etk-feature-on-a4a-site create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/fix-etk-feature-on-a4a-site create mode 100644 projects/plugins/wpcomsh/changelog/fix-etk-feature-on-a4a-site diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-etk-feature-on-a4a-site b/projects/packages/jetpack-mu-wpcom/changelog/fix-etk-feature-on-a4a-site new file mode 100644 index 0000000000000..4bdc7f05f6df9 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-etk-feature-on-a4a-site @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +MU WPCOM: Don't load ETK on agency sites on all pages diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index cc1920346eb27..2c75170257510 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -173,6 +173,13 @@ public static function load_wpcom_user_features() { * Can be removed once the feature no longer exists in the ETK plugin. */ public static function load_etk_features_flags() { + // Don't load on agency sites. + if ( is_fully_managed_agency_site() ) { + return; + } + + // Don't load if the user is not a wpcom user on WP Admin. + // The features is still required on the frontend page regardless of the user. if ( is_admin() && ! is_wpcom_user() ) { return; } @@ -206,6 +213,13 @@ public static function load_etk_features_flags() { * Can be moved back to load_features() once the feature no longer exists in the ETK plugin. */ public static function load_etk_features() { + // Don't load on agency sites. + if ( is_fully_managed_agency_site() ) { + return; + } + + // Don't load if the user is not a wpcom user on WP Admin. + // The features is still required on the frontend page regardless of the user. if ( is_admin() && ! is_wpcom_user() ) { return; } diff --git a/projects/packages/jetpack-mu-wpcom/src/features/block-patterns/class-wpcom-block-patterns-from-api.php b/projects/packages/jetpack-mu-wpcom/src/features/block-patterns/class-wpcom-block-patterns-from-api.php index 96bee410c4677..c3675159da2b5 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/block-patterns/class-wpcom-block-patterns-from-api.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/block-patterns/class-wpcom-block-patterns-from-api.php @@ -103,7 +103,7 @@ public function register_patterns() { // We prefer to show the starter page patterns modal of wpcom instead of core // if it's available. Hence, we have to update the block types of patterns // to disable the core's. - if ( class_exists( '\A8C\FSE\Starter_Page_Templates' ) || class_exists( '\Automattic\Jetpack\Jetpack_Mu_Wpcom\Starter_Page_Templates' ) ) { + if ( class_exists( '\A8C\FSE\Starter_Page_Templates', false ) || class_exists( '\Automattic\Jetpack\Jetpack_Mu_Wpcom\Starter_Page_Templates', false ) ) { $this->update_pattern_block_types(); } diff --git a/projects/packages/jetpack-mu-wpcom/src/utils.php b/projects/packages/jetpack-mu-wpcom/src/utils.php index ca94419d770ec..fa7a484796e9b 100644 --- a/projects/packages/jetpack-mu-wpcom/src/utils.php +++ b/projects/packages/jetpack-mu-wpcom/src/utils.php @@ -8,6 +8,15 @@ use Automattic\Jetpack\Connection\Manager as Connection_Manager; use Automattic\Jetpack\Jetpack_Mu_Wpcom; +/** + * Whether the site is fully managed agency site. + * + * @return bool True if the site is fully managed agency site. + */ +function is_fully_managed_agency_site() { + return ! empty( get_option( 'is_fully_managed_agency_site' ) ); +} + /** * Whether the current user is logged-in via WordPress.com account. * @@ -15,7 +24,7 @@ */ function is_wpcom_user() { // If the site is explicitly marked as agency-managed, treat the user as non-wpcom user. - if ( ! empty( get_option( 'is_fully_managed_agency_site' ) ) ) { + if ( is_fully_managed_agency_site() ) { return false; } diff --git a/projects/plugins/mu-wpcom-plugin/changelog/fix-etk-feature-on-a4a-site b/projects/plugins/mu-wpcom-plugin/changelog/fix-etk-feature-on-a4a-site new file mode 100644 index 0000000000000..4bdc7f05f6df9 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/fix-etk-feature-on-a4a-site @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +MU WPCOM: Don't load ETK on agency sites on all pages diff --git a/projects/plugins/wpcomsh/changelog/fix-etk-feature-on-a4a-site b/projects/plugins/wpcomsh/changelog/fix-etk-feature-on-a4a-site new file mode 100644 index 0000000000000..4bdc7f05f6df9 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/fix-etk-feature-on-a4a-site @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +MU WPCOM: Don't load ETK on agency sites on all pages From 5cc8dfcaff89c75419f3492c148e1a876ce51e60 Mon Sep 17 00:00:00 2001 From: Griffith Chen Date: Thu, 23 Jan 2025 15:12:46 +0800 Subject: [PATCH 175/420] MU WPCOM: Add more defensive checks when loading the Coming Soon feature (#41273) --- ...ack-mu-wpcom-load-coming-soon-remove-etk-version-check | 4 ++++ .../jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-jetpack-mu-wpcom-load-coming-soon-remove-etk-version-check diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-jetpack-mu-wpcom-load-coming-soon-remove-etk-version-check b/projects/packages/jetpack-mu-wpcom/changelog/update-jetpack-mu-wpcom-load-coming-soon-remove-etk-version-check new file mode 100644 index 0000000000000..3af6159f761de --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-jetpack-mu-wpcom-load-coming-soon-remove-etk-version-check @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Coming Soon: Add more checks to the ETK version comparison. diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index 2c75170257510..deed61cbc4bdf 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -276,9 +276,13 @@ public static function load_coming_soon() { * Explicitly pass $markup = false in get_plugin_data to avoid indirectly calling wptexturize that could cause unintended side effects. * See: https://developer.wordpress.org/reference/functions/get_plugin_data/ */ + $fse_plugin = 'full-site-editing/full-site-editing-plugin.php'; + $fse_plugin_path = WP_PLUGIN_DIR . '/' . $fse_plugin; $invalid_fse_version_active = - is_plugin_active( 'full-site-editing/full-site-editing-plugin.php' ) && - version_compare( get_plugin_data( WP_PLUGIN_DIR . '/full-site-editing/full-site-editing-plugin.php', false )['Version'], '3.56084', '<' ); + file_exists( $fse_plugin_path ) && + is_file( $fse_plugin_path ) && + is_plugin_active( $fse_plugin ) && + version_compare( get_plugin_data( $fse_plugin_path, false )['Version'], '3.56084', '<' ); if ( $invalid_fse_version_active ) { return; From 01e9cd1f63d26ec099012f9b63cbfdfec598c909 Mon Sep 17 00:00:00 2001 From: Juanma Rodriguez Escriche Date: Thu, 23 Jan 2025 08:28:04 +0100 Subject: [PATCH 176/420] Full Sync: Avoid sending actions when expanded objects create empty arrays (#41183) * Change to not send actions if get_next_chunk is overriden and objects are empty (only posts and comments for the moment) * changelog * Don't update chunks_sent if action is not sent * Keep legacy implementation for comments * Removed include_unapproved to true since it is not a boolean * Used fetched comment ids to get the metadata from the fetched comments --- ...comments-expanding-while-geting-next-chunk | 4 + .../sync/src/modules/class-comments.php | 78 ++++++++++++++++++- .../sync/src/modules/class-module.php | 18 +++-- .../packages/sync/src/modules/class-posts.php | 21 ++--- 4 files changed, 103 insertions(+), 18 deletions(-) create mode 100644 projects/packages/sync/changelog/update-full-sync-comments-expanding-while-geting-next-chunk diff --git a/projects/packages/sync/changelog/update-full-sync-comments-expanding-while-geting-next-chunk b/projects/packages/sync/changelog/update-full-sync-comments-expanding-while-geting-next-chunk new file mode 100644 index 0000000000000..93da9d4f53ede --- /dev/null +++ b/projects/packages/sync/changelog/update-full-sync-comments-expanding-while-geting-next-chunk @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Sync: Full sync doesn't send actions for posts and comments with no items diff --git a/projects/packages/sync/src/modules/class-comments.php b/projects/packages/sync/src/modules/class-comments.php index 40f2ea143909a..c4281f68400c9 100644 --- a/projects/packages/sync/src/modules/class-comments.php +++ b/projects/packages/sync/src/modules/class-comments.php @@ -318,8 +318,14 @@ public function is_comment_type_allowed( $comment_id ) { * @access public */ public function init_before_send() { + // Full sync. - add_filter( 'jetpack_sync_before_send_jetpack_full_sync_comments', array( $this, 'expand_comment_ids' ) ); + $sync_module = Modules::get_module( 'full-sync' ); + if ( $sync_module instanceof Full_Sync_Immediately ) { + add_filter( 'jetpack_sync_before_send_jetpack_full_sync_comments', array( $this, 'extract_comments_and_meta' ) ); + } else { + add_filter( 'jetpack_sync_before_send_jetpack_full_sync_comments', array( $this, 'expand_comment_ids' ) ); + } } /** @@ -515,4 +521,74 @@ public function expand_comment_ids( $args ) { $previous_interval_end, ); } + + /** + * Expand the comment IDs to comment objects and meta before being serialized and sent to the server. + * + * @access public + * + * @param array $args The hook parameters. + * @return array The expanded hook parameters. + */ + public function extract_comments_and_meta( $args ) { + list( $filtered_comments, $previous_end ) = $args; + return array( + $filtered_comments['objects'], + $filtered_comments['meta'], + $previous_end, + ); + } + + /** + * Given the Module Configuration and Status return the next chunk of items to send. + * This function also expands the posts and metadata and filters them based on the maximum size constraints. + * + * @param array $config This module Full Sync configuration. + * @param array $status This module Full Sync status. + * @param int $chunk_size Chunk size. + * + * @return array + */ + public function get_next_chunk( $config, $status, $chunk_size ) { + + $comment_ids = parent::get_next_chunk( $config, $status, $chunk_size ); + if ( empty( $comment_ids ) ) { + return array(); + } + $comments = get_comments( + array( + 'comment__in' => $comment_ids, + 'orderby' => 'comment_ID', + 'order' => 'DESC', + ) + ); + if ( empty( $comments ) ) { + return array(); + } + // Get the comment IDs from the comments that were fetched. + $fetched_comment_ids = wp_list_pluck( $comments, 'comment_ID' ); + return array( + 'object_ids' => $comment_ids, // Still send the original comment IDs since we need them to update the status. + 'objects' => $comments, + 'meta' => $this->get_metadata( $fetched_comment_ids, 'comment', Settings::get_setting( 'comment_meta_whitelist' ) ), + ); + } + + /** + * Set the status of the full sync action based on the objects that were sent. + * + * @access public + * + * @param array $status This module Full Sync status. + * @param array $objects This module Full Sync objects. + * + * @return array The updated status. + */ + public function set_send_full_sync_actions_status( $status, $objects ) { + + $object_ids = $objects['object_ids']; + $status['last_sent'] = end( $object_ids ); + $status['sent'] += count( $object_ids ); + return $status; + } } diff --git a/projects/packages/sync/src/modules/class-module.php b/projects/packages/sync/src/modules/class-module.php index af3ca93207047..7f0efd2a80f8e 100644 --- a/projects/packages/sync/src/modules/class-module.php +++ b/projects/packages/sync/src/modules/class-module.php @@ -405,20 +405,24 @@ public function send_full_sync_actions( $config, $status, $send_until ) { $status['finished'] = true; return $status; } - $key = $this->full_sync_action_name() . '_' . crc32( wp_json_encode( $status['last_sent'] ) ); - - $result = $this->send_action( $this->full_sync_action_name(), array( $objects, $status['last_sent'] ), $key ); - if ( is_wp_error( $result ) || $wpdb->last_error ) { - $status['error'] = true; - return $status; + // If we have objects as a key it means get_next_chunk is being overridden, we need to check for it being an empty array. + // In case it is an empty array, we should not send the action or increase the chunks_sent, we just need to update the status. + if ( ! isset( $objects['objects'] ) || array() !== $objects['objects'] ) { + $key = $this->full_sync_action_name() . '_' . crc32( wp_json_encode( $status['last_sent'] ) ); + $result = $this->send_action( $this->full_sync_action_name(), array( $objects, $status['last_sent'] ), $key ); + if ( is_wp_error( $result ) || $wpdb->last_error ) { + $status['error'] = true; + return $status; + } + ++$chunks_sent; } + // Updated the sent and last_sent status. $status = $this->set_send_full_sync_actions_status( $status, $objects ); if ( $last_item === $status['last_sent'] ) { $status['finished'] = true; return $status; } - ++$chunks_sent; } return $status; diff --git a/projects/packages/sync/src/modules/class-posts.php b/projects/packages/sync/src/modules/class-posts.php index cee98fb2c3514..5f86a5241a385 100644 --- a/projects/packages/sync/src/modules/class-posts.php +++ b/projects/packages/sync/src/modules/class-posts.php @@ -809,13 +809,12 @@ public function send_published( $post_ID, $post ) { * @return array $args The expanded hook parameters. */ public function add_term_relationships( $args ) { - list( $filtered_posts, $previous_interval_end ) = $args; - list( $filtered_post_ids, $filtered_posts, $filtered_posts_metadata ) = $filtered_posts; + list( $filtered_posts, $previous_interval_end ) = $args; return array( - $filtered_posts, - $filtered_posts_metadata, - $this->get_term_relationships( $filtered_post_ids ), + $filtered_posts['objects'], + $filtered_posts['meta'], + $this->get_term_relationships( $filtered_posts['object_ids'] ), $previous_interval_end, ); } @@ -882,9 +881,9 @@ public function get_next_chunk( $config, $status, $chunk_size ) { // Filter posts and metadata based on maximum size constraints. list( $filtered_post_ids, $filtered_posts, $filtered_posts_metadata ) = $this->filter_posts_and_metadata_max_size( $posts, $posts_metadata ); return array( - $filtered_post_ids, - $filtered_posts, - $filtered_posts_metadata, + 'object_ids' => $filtered_post_ids, + 'objects' => $filtered_posts, + 'meta' => $filtered_posts_metadata, ); } @@ -964,8 +963,10 @@ public function filter_posts_and_metadata_max_size( $posts, $metadata ) { * @return array The updated status. */ public function set_send_full_sync_actions_status( $status, $objects ) { - $status['last_sent'] = end( $objects[0] ); - $status['sent'] += count( $objects[0] ); + + $object_ids = $objects['object_ids']; + $status['last_sent'] = end( $object_ids ); + $status['sent'] += count( $object_ids ); return $status; } } From b33b45bb7f5dbc31ff7f14184a9c795f8fd53513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donncha=20=C3=93=20Caoimh?= <5656673+donnchawp@users.noreply.github.com> Date: Thu, 23 Jan 2025 09:38:14 +0000 Subject: [PATCH 177/420] Boost: Add filter on cache parameters so caching is more flexible (#40894) * Add "jetpack_boost_cache_parameters" filter on request parameters * Use filter to ignore certain cookies when building cache file * changelog * Display removed cookies on the debug cache log. * Add a comment explaining why using a static variable here * Make cookies unique and trim whitespace. * Put all this cookie code together. * Don't nest to many function calls, for readability * Removed -> Ignored in cookie variables * Change cookie list to regexes * Add docblocks for function and filter * Remove the JETPACK_BOOST_IGNORE_COOKIES constant and simplify code * Replace boost_cache_key_components with jetpack_boost_cache_parameters * Added deprecated notice * Fix the arguments on the deprecated filter Co-authored-by: Adnan Haque <3737780+haqadn@users.noreply.github.com> * Add function to ignore get parameters * List includes utm_* family of GET parameters * Adds a filter "jetpack_boost_ignore_get_parameters" to modify the list * Fix the sourcebuster cookie regex * Ignore these analytics cookies * Fix the eucookielaw value so those visitors share a cache file * Fix the personalized ads consent cookie too * Check that cookies is valid before using it. Fix PHAN check. * Fixes for PHAN * Update changelog Co-authored-by: Adnan Haque <3737780+haqadn@users.noreply.github.com> --------- Co-authored-by: Adnan Haque <3737780+haqadn@users.noreply.github.com> Co-authored-by: Peter Petrov --- .../page-cache/pre-wordpress/Boost_Cache.php | 155 +++++++++++++++++- .../pre-wordpress/Filesystem_Utils.php | 3 +- .../page-cache/pre-wordpress/Request.php | 17 +- .../changelog/update-boost-cookie_filter | 4 + 4 files changed, 174 insertions(+), 5 deletions(-) create mode 100644 projects/plugins/boost/changelog/update-boost-cookie_filter diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php index f2a3f5af9ab5f..15220cb9edcca 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php @@ -59,6 +59,16 @@ class Boost_Cache { */ private $do_cache = false; + /** + * @var string - The ignored cookies that were removed from the cache parameters. + */ + private $ignored_cookies = ''; + + /** + * @var string - The ignored GET parameters that were removed from the cache parameters. + */ + private $ignored_get_parameters = ''; + /** * @param ?Storage\Storage $storage - Optionally provide a Storage subclass to handle actually storing and retrieving cached content. Defaults to a new instance of File_Storage. */ @@ -81,6 +91,8 @@ public function init_actions() { add_action( 'wp_trash_post', array( $this, 'delete_on_post_trash' ), 10, 2 ); add_filter( 'wp_php_error_message', array( $this, 'disable_caching_on_error' ) ); add_filter( 'init', array( $this, 'init_do_cache' ) ); + add_filter( 'jetpack_boost_cache_parameters', array( $this, 'ignore_cookies' ) ); + add_filter( 'jetpack_boost_cache_parameters', array( $this, 'ignore_get_parameters' ) ); $this->load_extra(); } @@ -148,7 +160,9 @@ public function serve_cached() { if ( is_string( $cached ) ) { $this->send_header( 'X-Jetpack-Boost-Cache: hit' ); - Logger::debug( 'Serving cached page' ); + $ignored_cookies_message = $this->ignored_cookies === '' ? '' : " and ignored cookies: {$this->ignored_cookies}"; + $ignored_get_message = $this->ignored_get_parameters === '' ? '' : " and ignored GET parameters: {$this->ignored_get_parameters}"; + Logger::debug( 'Serving cached page' . $ignored_cookies_message . $ignored_get_message ); echo $cached; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped die( 0 ); } @@ -205,7 +219,9 @@ public function ob_callback( $buffer ) { if ( $result instanceof Boost_Cache_Error ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf Logger::debug( 'Error writing cache file: ' . $result->get_error_message() ); } else { - Logger::debug( 'Cache file created' ); + $ignored_cookies_message = $this->ignored_cookies === '' ? '' : " and ignored cookies: {$this->ignored_cookies}"; + $ignored_get_message = $this->ignored_get_parameters === '' ? '' : " and ignored GET parameters: {$this->ignored_get_parameters}"; + Logger::debug( 'Cache file created' . $ignored_cookies_message . $ignored_get_message ); } } @@ -480,6 +496,141 @@ public function invalidate_cache( $action = Filesystem_Utils::REBUILD_ALL ) { return $this->invalidate_cache_for_url( home_url(), $action ); } + /** + * Ignore certain GET parameters in the cache parameters so cached pages can be served to these visitors. + * + * @param array $parameters - The parameters with the GET array to filter. + * @return array - The parameters with GET parameters removed. + */ + public function ignore_get_parameters( $parameters ) { + static $params = false; + + // Only run this once as it may be called multiple times on uncached pages. + if ( $params ) { + return $params; + } + + /** + * Filters the GET parameters so cached pages can be served to these visitors. + * The list is an array of regex patterns. The default list contains the + * most common GET parameters used by analytics services. + * + * @since $$next-version$$ + * + * @param array $get_parameters An array of regexes to remove items from the GET parameter list. + */ + $get_parameters = apply_filters( + 'jetpack_boost_ignore_get_parameters', + array( 'utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term' ) + ); + + $get_parameters = array_unique( + array_map( + 'trim', + $get_parameters + ) + ); + + foreach ( $get_parameters as $get_parameter ) { + foreach ( array_keys( $parameters['get'] ) as $get_parameter_name ) { + if ( preg_match( '/^' . $get_parameter . '$/', $get_parameter_name ) ) { + unset( $parameters['get'][ $get_parameter_name ] ); + $this->ignored_get_parameters .= $get_parameter_name . ','; + } + } + } + if ( $this->ignored_get_parameters !== '' ) { + $this->ignored_get_parameters = rtrim( $this->ignored_get_parameters, ',' ); + } + + $params = $parameters; + + return $parameters; + } + + /** + * Ignore certain cookies in the cache parameters so cached pages can be served to these visitors. + * + * @param array $parameters - The parameters with the cookies array to filter. + * @return array - The parameters with cookies removed. + */ + public function ignore_cookies( $parameters ) { + static $params = false; + + // Only run this once as it may be called multiple times on uncached pages. + if ( $params ) { + return $params; + } + + $default_cookies = array( 'cf_clearance', 'cf_chl_rc_i', 'cf_chl_rc_ni', 'cf_chl_rc_m', '_cfuvid', '__cfruid', '__cfwaitingroom', 'cf_ob_info', 'cf_use_ob', '__cfseq', '__cf_bm', '__cflb', 'sbjs_(.*)' ); + $jetpack_cookies = array( 'tk_ai', 'tk_qs' ); + $cookies = array_merge( $default_cookies, $jetpack_cookies ); + + /** + * Filters the browser cookies so cached pages can be served to these visitors. + * The list is an array of regex patterns. The default list contains the + * cookies used by Cloudflare, and the regex pattern for the sbjs_ cookies + * used by sourcebuster.js + * + * @since $$next-version$$ + * + * @param array $cookies An array of regexes to remove items from the cookie list. + */ + $cookies = apply_filters( + 'jetpack_boost_ignore_cookies', + $cookies + ); + + $cookies = array_unique( + array_map( + 'trim', + $cookies + ) + ); + + /** + * The Jetpack Cookie Banner plugin sets a cookie to indicate that the + * user has accepted the cookie policy. + * The value of the cookie is the expiry date of the cookie, which means + * that everyone who has accepted the cookie policy will use a different + * cache file. + * Set it to 1 here so those visitors will use the same cache file. + */ + if ( isset( $parameters['cookies']['eucookielaw'] ) ) { + $parameters['cookies']['eucookielaw'] = 1; + } + + /** + * This is for the personalized ads consent cookie. + */ + if ( isset( $parameters['cookies']['personalized-ads-consent'] ) ) { + $parameters['cookies']['personalized-ads-consent'] = 1; + } + + $cookie_keys = array(); + if ( isset( $parameters['cookies'] ) && is_array( $parameters['cookies'] ) ) { + $cookie_keys = array_keys( $parameters['cookies'] ); + } else { + return $parameters; + } + + foreach ( $cookies as $cookie ) { + foreach ( $cookie_keys as $cookie_name ) { + if ( preg_match( '/^' . $cookie . '$/', $cookie_name ) ) { + unset( $parameters['cookies'][ $cookie_name ] ); + $this->ignored_cookies .= $cookie_name . ','; + } + } + } + if ( $this->ignored_cookies !== '' ) { + $this->ignored_cookies = rtrim( $this->ignored_cookies, ',' ); + } + + $params = $parameters; + + return $parameters; + } + public function disable_caching_on_error( $message ) { if ( ! defined( 'DONOTCACHEPAGE' ) ) { define( 'DONOTCACHEPAGE', true ); diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Filesystem_Utils.php b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Filesystem_Utils.php index fa8f5a6e56877..bca79d5ebb025 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Filesystem_Utils.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Filesystem_Utils.php @@ -112,8 +112,9 @@ public static function get_request_filename( $parameters ) { * @param array $parameters The array of components, url, cookies, get parameters, etc. * * @since 1.0.0 + * @deprecated $$next-version$$ */ - $key_components = apply_filters( 'boost_cache_key_components', $parameters ); + $key_components = apply_filters_deprecated( 'boost_cache_key_components', array( $parameters ), '$$next-version$$', 'jetpack_boost_cache_parameters' ); return md5( json_encode( $key_components ) ) . '.html'; // phpcs:ignore WordPress.WP.AlternativeFunctions.json_encode_json_encode } diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Request.php b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Request.php index d94eefb8eeac2..16ee3c4a949fb 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Request.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Request.php @@ -52,8 +52,20 @@ public function get_uri() { return $this->request_uri; } + /** + * Returns the parameters for the current request. + * + * @return array The parameters for the current request, made up of cookies and get parameters. + */ public function get_parameters() { - return $this->request_parameters; + /** + * Filters the parameters for the current request to identify the cache key. + * + * @since $$next-version$$ + * + * @param array $parameters The parameters for the current request, made up of cookies and get parameters. + */ + return apply_filters( 'jetpack_boost_cache_parameters', $this->request_parameters ); } /** @@ -84,7 +96,8 @@ public function is_url_excluded( $request_uri = '' ) { } // Check if the query parameters `jb-disable-modules` or `jb-generate-critical-css` exist. - $query_params = isset( $this->request_parameters['get'] ) ? $this->request_parameters['get'] : array(); + $request_parameters = $this->get_parameters(); + $query_params = isset( $request_parameters['get'] ) ? $request_parameters['get'] : array(); if ( isset( $query_params ) && ( isset( $query_params['jb-disable-modules'] ) || isset( $query_params['jb-generate-critical-css'] ) ) ) { diff --git a/projects/plugins/boost/changelog/update-boost-cookie_filter b/projects/plugins/boost/changelog/update-boost-cookie_filter new file mode 100644 index 0000000000000..8603ce9d0fb0e --- /dev/null +++ b/projects/plugins/boost/changelog/update-boost-cookie_filter @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Cache: filter cookies and GET parameters so they do not cause a cache miss. From 9efd675d92d078cfc0fc6e091dc68734389131e4 Mon Sep 17 00:00:00 2001 From: Liam Sarsfield <43409125+LiamSarsfield@users.noreply.github.com> Date: Thu, 23 Jan 2025 11:12:12 +0000 Subject: [PATCH 178/420] Changelog and readme.txt edits. (#41279) --- projects/js-packages/analytics/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/js-packages/analytics/package.json | 2 +- projects/js-packages/base-styles/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/js-packages/base-styles/package.json | 2 +- .../js-packages/boost-score-api/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- .../js-packages/boost-score-api/package.json | 2 +- projects/js-packages/config/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/js-packages/config/package.json | 2 +- .../js-packages/critical-css-gen/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- .../js-packages/critical-css-gen/package.json | 2 +- projects/js-packages/image-guide/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/js-packages/image-guide/package.json | 2 +- projects/js-packages/licensing/CHANGELOG.md | 4 ++++ .../changelog/clean-extra-composer-things | 5 ----- projects/js-packages/licensing/package.json | 2 +- .../react-data-sync-client/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- .../react-data-sync-client/package.json | 2 +- projects/js-packages/scan/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/js-packages/scan/package.json | 2 +- projects/js-packages/script-data/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/js-packages/script-data/package.json | 2 +- projects/packages/boost-core/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/packages/boost-core/package.json | 2 +- .../packages/boost-speed-score/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- .../src/class-speed-score.php | 2 +- projects/packages/my-jetpack/CHANGELOG.md | 8 ++++++++ .../add-my-jetpack-modal-interstitial | 4 ---- ...ror-when-main-jetpack-plugin-not-installed | 4 ---- projects/packages/my-jetpack/composer.json | 2 +- projects/packages/my-jetpack/package.json | 2 +- .../my-jetpack/src/class-initializer.php | 2 +- .../packages/plugin-deactivation/CHANGELOG.md | 5 +++++ ...fix-functionify_and_statusify_exit_and_die | 4 ---- .../packages/plugin-deactivation/package.json | 2 +- .../src/class-deactivation-handler.php | 2 +- projects/packages/sync/CHANGELOG.md | 5 +++++ ...comments-expanding-while-geting-next-chunk | 4 ---- .../update-jetpack-sync-settings-static-usage | 5 ----- projects/packages/sync/composer.json | 2 +- .../sync/src/class-package-version.php | 2 +- .../packages/wp-js-data-sync/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- .../packages/wp-js-data-sync/package.json | 2 +- .../wp-js-data-sync/src/class-data-sync.php | 2 +- .../changelog/prerelease#2 | 0 .../composer.lock | 4 ++-- .../changelog/prerelease#2} | 0 projects/plugins/backup/composer.lock | 8 ++++---- projects/plugins/boost/CHANGELOG.md | 17 +++++++++++++++++ .../page-cache/pre-wordpress/Boost_Cache.php | 4 ++-- .../pre-wordpress/Filesystem_Utils.php | 4 ++-- .../page-cache/pre-wordpress/Request.php | 2 +- .../changelog/add-boost-extra-code-loader | 4 ---- .../changelog/add-cornerstone-to-site-health | 4 ---- .../changelog/clean-extra-composer-things | 5 ----- .../changelog/fix-boost-cache-bypass-patterns | 4 ---- .../fix-boost-liar-toggle-clear-cache | 4 ---- ...fix-functionify_and_statusify_exit_and_die | 4 ---- .../changelog/fix-image-cdn-double-encoding | 4 ---- ...ix-woocommerce-shipping-concat-js-conflict | 4 ---- .../changelog/update-boost-cookie_filter | 4 ---- .../changelog/update-boost-minify-css-library | 4 ---- ...e-boost-reduce-unnecessary-css-generations | 4 ---- .../changelog/update-boost-success-ratio | 4 ---- .../changelog/update-boost-ui-directory-docs | 5 ----- projects/plugins/boost/composer.json | 4 ++-- projects/plugins/boost/composer.lock | 10 +++++----- projects/plugins/boost/jetpack-boost.php | 4 ++-- projects/plugins/boost/package.json | 2 +- projects/plugins/boost/readme.txt | 19 ++++++++++--------- projects/plugins/jetpack/changelog/prerelease | 5 +++++ projects/plugins/jetpack/composer.lock | 8 ++++---- .../changelog/prerelease#3} | 3 ++- .../plugins/mu-wpcom-plugin/composer.lock | 4 ++-- .../changelog/prerelease#15} | 3 ++- projects/plugins/protect/composer.lock | 8 ++++---- .../plugins/search/changelog/prerelease#2 | 5 +++++ projects/plugins/search/composer.lock | 8 ++++---- .../plugins/social/changelog/prerelease#2 | 5 +++++ projects/plugins/social/composer.lock | 8 ++++---- .../starter-plugin/changelog/prerelease#6 | 5 +++++ projects/plugins/starter-plugin/composer.lock | 8 ++++---- .../plugins/videopress/changelog/prerelease#2 | 5 +++++ projects/plugins/videopress/composer.lock | 8 ++++---- .../plugins/wpcomsh/changelog/prerelease#9 | 5 +++++ projects/plugins/wpcomsh/composer.lock | 4 ++-- 97 files changed, 213 insertions(+), 221 deletions(-) delete mode 100644 projects/js-packages/analytics/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/base-styles/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/boost-score-api/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/config/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/critical-css-gen/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/image-guide/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/licensing/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/react-data-sync-client/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/scan/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/script-data/changelog/clean-extra-composer-things delete mode 100644 projects/packages/boost-core/changelog/clean-extra-composer-things delete mode 100644 projects/packages/boost-speed-score/changelog/clean-extra-composer-things delete mode 100644 projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial delete mode 100644 projects/packages/my-jetpack/changelog/fix-bug-with-critical-error-when-main-jetpack-plugin-not-installed delete mode 100644 projects/packages/plugin-deactivation/changelog/fix-functionify_and_statusify_exit_and_die delete mode 100644 projects/packages/sync/changelog/update-full-sync-comments-expanding-while-geting-next-chunk delete mode 100644 projects/packages/sync/changelog/update-jetpack-sync-settings-static-usage delete mode 100644 projects/packages/wp-js-data-sync/changelog/clean-extra-composer-things rename projects/plugins/{boost => automattic-for-agencies-client}/changelog/prerelease#2 (100%) rename projects/plugins/{boost/changelog/prerelease => backup/changelog/prerelease#2} (100%) delete mode 100644 projects/plugins/boost/changelog/add-boost-extra-code-loader delete mode 100644 projects/plugins/boost/changelog/add-cornerstone-to-site-health delete mode 100644 projects/plugins/boost/changelog/clean-extra-composer-things delete mode 100644 projects/plugins/boost/changelog/fix-boost-cache-bypass-patterns delete mode 100644 projects/plugins/boost/changelog/fix-boost-liar-toggle-clear-cache delete mode 100644 projects/plugins/boost/changelog/fix-functionify_and_statusify_exit_and_die delete mode 100644 projects/plugins/boost/changelog/fix-image-cdn-double-encoding delete mode 100644 projects/plugins/boost/changelog/fix-woocommerce-shipping-concat-js-conflict delete mode 100644 projects/plugins/boost/changelog/update-boost-cookie_filter delete mode 100644 projects/plugins/boost/changelog/update-boost-minify-css-library delete mode 100644 projects/plugins/boost/changelog/update-boost-reduce-unnecessary-css-generations delete mode 100644 projects/plugins/boost/changelog/update-boost-success-ratio delete mode 100644 projects/plugins/boost/changelog/update-boost-ui-directory-docs create mode 100644 projects/plugins/jetpack/changelog/prerelease rename projects/plugins/{boost/changelog/renovate-wordpress-monorepo => mu-wpcom-plugin/changelog/prerelease#3} (51%) rename projects/plugins/{boost/changelog/renovate-lock-file-maintenance => protect/changelog/prerelease#15} (51%) create mode 100644 projects/plugins/search/changelog/prerelease#2 create mode 100644 projects/plugins/social/changelog/prerelease#2 create mode 100644 projects/plugins/starter-plugin/changelog/prerelease#6 create mode 100644 projects/plugins/videopress/changelog/prerelease#2 create mode 100644 projects/plugins/wpcomsh/changelog/prerelease#9 diff --git a/projects/js-packages/analytics/CHANGELOG.md b/projects/js-packages/analytics/CHANGELOG.md index 7e0e9e0399e55..0ab8507f09fb2 100644 --- a/projects/js-packages/analytics/CHANGELOG.md +++ b/projects/js-packages/analytics/CHANGELOG.md @@ -2,6 +2,10 @@ ### This is a list detailing changes for the Jetpack RNA Analytics package releases. +## [0.1.35] - 2025-01-23 +### Changed +- Internal updates. + ## [0.1.34] - 2025-01-06 ### Changed - Updated package dependencies. [#40810] @@ -136,6 +140,7 @@ ### Added - Initial release of jetpack-api package. +[0.1.35]: https://github.com/Automattic/jetpack-analytics/compare/v0.1.34...v0.1.35 [0.1.34]: https://github.com/Automattic/jetpack-analytics/compare/v0.1.33...v0.1.34 [0.1.33]: https://github.com/Automattic/jetpack-analytics/compare/v0.1.32...v0.1.33 [0.1.32]: https://github.com/Automattic/jetpack-analytics/compare/v0.1.31...v0.1.32 diff --git a/projects/js-packages/analytics/changelog/clean-extra-composer-things b/projects/js-packages/analytics/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/analytics/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/analytics/package.json b/projects/js-packages/analytics/package.json index 211139feacf52..7c0a9f4fbbe78 100644 --- a/projects/js-packages/analytics/package.json +++ b/projects/js-packages/analytics/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-analytics", - "version": "0.1.34", + "version": "0.1.35", "description": "Jetpack Analytics Package", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/analytics/#readme", "bugs": { diff --git a/projects/js-packages/base-styles/CHANGELOG.md b/projects/js-packages/base-styles/CHANGELOG.md index d60d124640c22..2ac6a85f0c384 100644 --- a/projects/js-packages/base-styles/CHANGELOG.md +++ b/projects/js-packages/base-styles/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.6.41] - 2025-01-23 +### Changed +- Internal updates. + ## [0.6.40] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -345,6 +349,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated package dependencies. - Use Node 16.7.0 in tooling. This shouldn't change the behavior of the code itself. +[0.6.41]: https://github.com/Automattic/jetpack-base-styles/compare/0.6.40...0.6.41 [0.6.40]: https://github.com/Automattic/jetpack-base-styles/compare/0.6.39...0.6.40 [0.6.39]: https://github.com/Automattic/jetpack-base-styles/compare/0.6.38...0.6.39 [0.6.38]: https://github.com/Automattic/jetpack-base-styles/compare/0.6.37...0.6.38 diff --git a/projects/js-packages/base-styles/changelog/clean-extra-composer-things b/projects/js-packages/base-styles/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/base-styles/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/base-styles/package.json b/projects/js-packages/base-styles/package.json index 27b8a0c05c52c..0537b8bffeb6c 100644 --- a/projects/js-packages/base-styles/package.json +++ b/projects/js-packages/base-styles/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-base-styles", - "version": "0.6.40", + "version": "0.6.41", "description": "Jetpack components base styles", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/base-styles/#readme", "bugs": { diff --git a/projects/js-packages/boost-score-api/CHANGELOG.md b/projects/js-packages/boost-score-api/CHANGELOG.md index 082e1c0a596c0..5a8e8c6d1297e 100644 --- a/projects/js-packages/boost-score-api/CHANGELOG.md +++ b/projects/js-packages/boost-score-api/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.52] - 2025-01-23 +### Changed +- Internal updates. + ## [0.1.51] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -219,6 +223,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Create package for the boost score bar API [#30781] +[0.1.52]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.51...v0.1.52 [0.1.51]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.50...v0.1.51 [0.1.50]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.49...v0.1.50 [0.1.49]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.48...v0.1.49 diff --git a/projects/js-packages/boost-score-api/changelog/clean-extra-composer-things b/projects/js-packages/boost-score-api/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/boost-score-api/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/boost-score-api/package.json b/projects/js-packages/boost-score-api/package.json index aaab93a78461d..f7db4b491a4c9 100644 --- a/projects/js-packages/boost-score-api/package.json +++ b/projects/js-packages/boost-score-api/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-boost-score-api", - "version": "0.1.51", + "version": "0.1.52", "description": "A package to get the Jetpack Boost score of a site", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/boost-score-api/#readme", "bugs": { diff --git a/projects/js-packages/config/CHANGELOG.md b/projects/js-packages/config/CHANGELOG.md index 78ee69440f057..e378a2799f9de 100644 --- a/projects/js-packages/config/CHANGELOG.md +++ b/projects/js-packages/config/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.28] - 2025-01-23 +### Changed +- Internal updates. + ## [0.1.27] - 2024-11-14 ### Changed - Update dependencies. @@ -112,6 +116,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - fixed and improved README +[0.1.28]: https://github.com/Automattic/jetpack-config-js/compare/v0.1.27...v0.1.28 [0.1.27]: https://github.com/Automattic/jetpack-config-js/compare/v0.1.26...v0.1.27 [0.1.26]: https://github.com/Automattic/jetpack-config-js/compare/v0.1.25...v0.1.26 [0.1.25]: https://github.com/Automattic/jetpack-config-js/compare/v0.1.24...v0.1.25 diff --git a/projects/js-packages/config/changelog/clean-extra-composer-things b/projects/js-packages/config/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/config/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/config/package.json b/projects/js-packages/config/package.json index efdac3ed4fdf9..ce393af465bb5 100644 --- a/projects/js-packages/config/package.json +++ b/projects/js-packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-config", - "version": "0.1.27", + "version": "0.1.28", "description": "Handles Jetpack global configuration shared across all packages", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/config/#readme", "bugs": { diff --git a/projects/js-packages/critical-css-gen/CHANGELOG.md b/projects/js-packages/critical-css-gen/CHANGELOG.md index 719c6f505de8b..704ecbe17f10b 100644 --- a/projects/js-packages/critical-css-gen/CHANGELOG.md +++ b/projects/js-packages/critical-css-gen/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.5] - 2025-01-23 +### Changed +- Internal updates. + ## [1.0.4] - 2025-01-06 ### Changed - Updated package dependencies. [#40372] [#40498] [#40693] [#40798] @@ -44,6 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Initial version. [#38429] +[1.0.5]: https://github.com/Automattic/jetpack-critical-css-gen/compare/v1.0.4...v1.0.5 [1.0.4]: https://github.com/Automattic/jetpack-critical-css-gen/compare/v1.0.3...v1.0.4 [1.0.3]: https://github.com/Automattic/jetpack-critical-css-gen/compare/v1.0.2...v1.0.3 [1.0.2]: https://github.com/Automattic/jetpack-critical-css-gen/compare/v1.0.1...v1.0.2 diff --git a/projects/js-packages/critical-css-gen/changelog/clean-extra-composer-things b/projects/js-packages/critical-css-gen/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/critical-css-gen/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/critical-css-gen/package.json b/projects/js-packages/critical-css-gen/package.json index 39888e91ba759..68386372282d1 100644 --- a/projects/js-packages/critical-css-gen/package.json +++ b/projects/js-packages/critical-css-gen/package.json @@ -1,7 +1,7 @@ { "type": "module", "name": "@automattic/jetpack-critical-css-gen", - "version": "1.0.4", + "version": "1.0.5", "description": "A flexible Critical CSS Generator that supports multiple URLs and viewports, with both server-side and client-side generation capabilities.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/critical-css-gen/#readme", "bugs": { diff --git a/projects/js-packages/image-guide/CHANGELOG.md b/projects/js-packages/image-guide/CHANGELOG.md index 190c31756113a..a5877fd156162 100644 --- a/projects/js-packages/image-guide/CHANGELOG.md +++ b/projects/js-packages/image-guide/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.5.16] - 2025-01-23 +### Changed +- Internal updates. + ## [0.5.15] - 2025-01-06 ### Changed - Updated package dependencies. [#40797] @@ -140,6 +144,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed - Minor package.json change - removing private entry. +[0.5.16]: https://github.com/Automattic/jetpack-image-guide/compare/v0.5.15...v0.5.16 [0.5.15]: https://github.com/Automattic/jetpack-image-guide/compare/v0.5.14...v0.5.15 [0.5.14]: https://github.com/Automattic/jetpack-image-guide/compare/v0.5.13...v0.5.14 [0.5.13]: https://github.com/Automattic/jetpack-image-guide/compare/v0.5.12...v0.5.13 diff --git a/projects/js-packages/image-guide/changelog/clean-extra-composer-things b/projects/js-packages/image-guide/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/image-guide/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/image-guide/package.json b/projects/js-packages/image-guide/package.json index 5d76421db9487..f07e1e89e8a04 100644 --- a/projects/js-packages/image-guide/package.json +++ b/projects/js-packages/image-guide/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-image-guide", - "version": "0.5.15", + "version": "0.5.16", "description": "Go through the dom to analyze image size on screen vs actual file size.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/image-guide/#readme", "type": "module", diff --git a/projects/js-packages/licensing/CHANGELOG.md b/projects/js-packages/licensing/CHANGELOG.md index 90e2260df1ce9..f7f7f228f42b0 100644 --- a/projects/js-packages/licensing/CHANGELOG.md +++ b/projects/js-packages/licensing/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.14.5 - 2025-01-23 +### Changed +- Internal updates. + ## 0.14.4 - 2025-01-20 ### Changed - Updated package dependencies. [#41099] diff --git a/projects/js-packages/licensing/changelog/clean-extra-composer-things b/projects/js-packages/licensing/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/licensing/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/licensing/package.json b/projects/js-packages/licensing/package.json index 68f24b65ca6d5..972a8d5dd50d6 100644 --- a/projects/js-packages/licensing/package.json +++ b/projects/js-packages/licensing/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-licensing", - "version": "0.14.4", + "version": "0.14.5", "description": "Jetpack licensing flow", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/licensing/#readme", "bugs": { diff --git a/projects/js-packages/react-data-sync-client/CHANGELOG.md b/projects/js-packages/react-data-sync-client/CHANGELOG.md index 494169516c1c9..f19dd8c359eae 100644 --- a/projects/js-packages/react-data-sync-client/CHANGELOG.md +++ b/projects/js-packages/react-data-sync-client/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.9] - 2025-01-23 +### Changed +- Internal updates. + ## [0.1.8] - 2025-01-06 ### Changed - Internal updates. @@ -62,6 +66,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Added default param for callbacks to prevent crashes when none provided [#34910] +[0.1.9]: https://github.com/Automattic/jetpack-react-data-sync-client/compare/v0.1.8...v0.1.9 [0.1.8]: https://github.com/Automattic/jetpack-react-data-sync-client/compare/v0.1.7...v0.1.8 [0.1.7]: https://github.com/Automattic/jetpack-react-data-sync-client/compare/v0.1.6...v0.1.7 [0.1.6]: https://github.com/Automattic/jetpack-react-data-sync-client/compare/v0.1.5...v0.1.6 diff --git a/projects/js-packages/react-data-sync-client/changelog/clean-extra-composer-things b/projects/js-packages/react-data-sync-client/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/react-data-sync-client/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/react-data-sync-client/package.json b/projects/js-packages/react-data-sync-client/package.json index f826f02f32310..03b6024d29f23 100644 --- a/projects/js-packages/react-data-sync-client/package.json +++ b/projects/js-packages/react-data-sync-client/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-react-data-sync-client", - "version": "0.1.8", + "version": "0.1.9", "description": "DataSync client for React", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/react-data-sync-client/#readme", "bugs": { diff --git a/projects/js-packages/scan/CHANGELOG.md b/projects/js-packages/scan/CHANGELOG.md index 968409ea8d3c4..3db24498bea76 100644 --- a/projects/js-packages/scan/CHANGELOG.md +++ b/projects/js-packages/scan/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.5.5] - 2025-01-23 +### Changed +- Internal updates. + ## [0.5.4] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -95,6 +99,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed - Updated dependencies. [#39754] +[0.5.5]: https://github.com/Automattic/jetpack-scan/compare/v0.5.4...v0.5.5 [0.5.4]: https://github.com/Automattic/jetpack-scan/compare/v0.5.3...v0.5.4 [0.5.3]: https://github.com/Automattic/jetpack-scan/compare/v0.5.2...v0.5.3 [0.5.2]: https://github.com/Automattic/jetpack-scan/compare/v0.5.1...v0.5.2 diff --git a/projects/js-packages/scan/changelog/clean-extra-composer-things b/projects/js-packages/scan/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/scan/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/scan/package.json b/projects/js-packages/scan/package.json index aea2ccf6b7272..d19d48f118c0b 100644 --- a/projects/js-packages/scan/package.json +++ b/projects/js-packages/scan/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@automattic/jetpack-scan", - "version": "0.5.4", + "version": "0.5.5", "description": "A JS client for consuming Jetpack Scan services", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/scan/#readme", "bugs": { diff --git a/projects/js-packages/script-data/CHANGELOG.md b/projects/js-packages/script-data/CHANGELOG.md index a9d4703edcf93..6fbb381fd7a25 100644 --- a/projects/js-packages/script-data/CHANGELOG.md +++ b/projects/js-packages/script-data/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.9] - 2025-01-23 +### Changed +- Internal updates. + ## [0.1.8] - 2025-01-22 ### Added - Add wpcom data for current user. [#40679] @@ -41,6 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added jetpack-script-data package to consolidate the logic for Jetpack Initial state [#38430] +[0.1.9]: https://github.com/Automattic/jetpack-script-data/compare/v0.1.8...v0.1.9 [0.1.8]: https://github.com/Automattic/jetpack-script-data/compare/v0.1.7...v0.1.8 [0.1.7]: https://github.com/Automattic/jetpack-script-data/compare/v0.1.6...v0.1.7 [0.1.6]: https://github.com/Automattic/jetpack-script-data/compare/v0.1.5...v0.1.6 diff --git a/projects/js-packages/script-data/changelog/clean-extra-composer-things b/projects/js-packages/script-data/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/script-data/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/script-data/package.json b/projects/js-packages/script-data/package.json index 59550040f7db0..9fd86cdebea13 100644 --- a/projects/js-packages/script-data/package.json +++ b/projects/js-packages/script-data/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-script-data", - "version": "0.1.8", + "version": "0.1.9", "description": "A library to provide data for script handles and the corresponding utility functions for Jetpack.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/script-data/#readme", "bugs": { diff --git a/projects/packages/boost-core/CHANGELOG.md b/projects/packages/boost-core/CHANGELOG.md index 886821835592d..d696c967e95b7 100644 --- a/projects/packages/boost-core/CHANGELOG.md +++ b/projects/packages/boost-core/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.4] - 2025-01-23 +### Changed +- Internal updates. + ## [0.3.3] - 2024-12-23 ### Fixed - General: Fixed not parsing error responses from WordPress.com properly. [#40660] @@ -101,6 +105,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Introduce new package. [#31163] +[0.3.4]: https://github.com/Automattic/jetpack-boost-core/compare/v0.3.3...v0.3.4 [0.3.3]: https://github.com/Automattic/jetpack-boost-core/compare/v0.3.2...v0.3.3 [0.3.2]: https://github.com/Automattic/jetpack-boost-core/compare/v0.3.1...v0.3.2 [0.3.1]: https://github.com/Automattic/jetpack-boost-core/compare/v0.3.0...v0.3.1 diff --git a/projects/packages/boost-core/changelog/clean-extra-composer-things b/projects/packages/boost-core/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/packages/boost-core/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/packages/boost-core/package.json b/projects/packages/boost-core/package.json index 3ea2772d01755..95ddd5e228416 100644 --- a/projects/packages/boost-core/package.json +++ b/projects/packages/boost-core/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-boost-core", - "version": "0.3.3", + "version": "0.3.4", "description": "Core functionality for boost and relevant packages to depend on", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/boost-core/#readme", "bugs": { diff --git a/projects/packages/boost-speed-score/CHANGELOG.md b/projects/packages/boost-speed-score/CHANGELOG.md index f9650fec13a29..444c9003a0389 100644 --- a/projects/packages/boost-speed-score/CHANGELOG.md +++ b/projects/packages/boost-speed-score/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.1] - 2025-01-23 +### Changed +- Internal updates. + ## [0.4.0] - 2024-11-14 ### Removed - General: Update minimum PHP version to 7.2. [#40147] @@ -100,6 +104,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add a new package for Boost Speed Score [#30914] - Add a new argument to `Speed_Score` to identify where the request was made from (e.g. 'boost-plugin', 'jetpack-dashboard', etc). [#31012] +[0.4.1]: https://github.com/Automattic/jetpack-boost-speed-score/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/Automattic/jetpack-boost-speed-score/compare/v0.3.14...v0.4.0 [0.3.14]: https://github.com/Automattic/jetpack-boost-speed-score/compare/v0.3.13...v0.3.14 [0.3.13]: https://github.com/Automattic/jetpack-boost-speed-score/compare/v0.3.12...v0.3.13 diff --git a/projects/packages/boost-speed-score/changelog/clean-extra-composer-things b/projects/packages/boost-speed-score/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/packages/boost-speed-score/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/packages/boost-speed-score/src/class-speed-score.php b/projects/packages/boost-speed-score/src/class-speed-score.php index 85641ebd41be3..f02b350bcc232 100644 --- a/projects/packages/boost-speed-score/src/class-speed-score.php +++ b/projects/packages/boost-speed-score/src/class-speed-score.php @@ -23,7 +23,7 @@ */ class Speed_Score { - const PACKAGE_VERSION = '0.4.0'; + const PACKAGE_VERSION = '0.4.1'; /** * Array of module slugs that are currently active and can impact speed score. diff --git a/projects/packages/my-jetpack/CHANGELOG.md b/projects/packages/my-jetpack/CHANGELOG.md index f0515e9b5e17e..d6c8991ae7940 100644 --- a/projects/packages/my-jetpack/CHANGELOG.md +++ b/projects/packages/my-jetpack/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [5.4.0] - 2025-01-23 +### Added +- Adding new modal based interstitial component. [#40945] + +### Fixed +- Fix bug where My Jetpack would throw critical error if only a standalone plugin is not installed [#41192] + ## [5.3.3] - 2025-01-20 ### Added - Add caching for the red bubble alerts for My Jetpack. [#41131] @@ -1915,6 +1922,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Created package +[5.4.0]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.3.3...5.4.0 [5.3.3]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.3.2...5.3.3 [5.3.2]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.3.1...5.3.2 [5.3.1]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.3.0...5.3.1 diff --git a/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial b/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial deleted file mode 100644 index 60d58656c8b82..0000000000000 --- a/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Adding new modal based interstitial component. diff --git a/projects/packages/my-jetpack/changelog/fix-bug-with-critical-error-when-main-jetpack-plugin-not-installed b/projects/packages/my-jetpack/changelog/fix-bug-with-critical-error-when-main-jetpack-plugin-not-installed deleted file mode 100644 index 95cae97b6fa73..0000000000000 --- a/projects/packages/my-jetpack/changelog/fix-bug-with-critical-error-when-main-jetpack-plugin-not-installed +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix bug where My Jetpack would throw critical error if only a standalone plugin is not installed diff --git a/projects/packages/my-jetpack/composer.json b/projects/packages/my-jetpack/composer.json index 0f7a78b78d206..b422333d913eb 100644 --- a/projects/packages/my-jetpack/composer.json +++ b/projects/packages/my-jetpack/composer.json @@ -83,7 +83,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" diff --git a/projects/packages/my-jetpack/package.json b/projects/packages/my-jetpack/package.json index 5f4093170fc15..18ffda790b6d8 100644 --- a/projects/packages/my-jetpack/package.json +++ b/projects/packages/my-jetpack/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-my-jetpack", - "version": "5.3.3", + "version": "5.4.0", "description": "WP Admin page with information and configuration shared among all Jetpack stand-alone plugins", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/my-jetpack/#readme", "bugs": { diff --git a/projects/packages/my-jetpack/src/class-initializer.php b/projects/packages/my-jetpack/src/class-initializer.php index 4c8a67220a520..58eccc75b8644 100644 --- a/projects/packages/my-jetpack/src/class-initializer.php +++ b/projects/packages/my-jetpack/src/class-initializer.php @@ -41,7 +41,7 @@ class Initializer { * * @var string */ - const PACKAGE_VERSION = '5.3.3'; + const PACKAGE_VERSION = '5.4.0'; /** * HTML container ID for the IDC screen on My Jetpack page. diff --git a/projects/packages/plugin-deactivation/CHANGELOG.md b/projects/packages/plugin-deactivation/CHANGELOG.md index 8d5fc4ac63e6b..275763a278e7d 100644 --- a/projects/packages/plugin-deactivation/CHANGELOG.md +++ b/projects/packages/plugin-deactivation/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.2] - 2025-01-23 +### Changed +- Code: Use function-style exit() and die() with a default status code of 0. [#41167] + ## [0.3.1] - 2025-01-06 ### Changed - Internal updates. @@ -67,6 +71,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added package to intercept plugin deactivation [#27081] +[0.3.2]: https://github.com/Automattic/jetpack-plugin-deactivation/compare/v0.3.1...v0.3.2 [0.3.1]: https://github.com/Automattic/jetpack-plugin-deactivation/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/Automattic/jetpack-plugin-deactivation/compare/v0.2.4...v0.3.0 [0.2.4]: https://github.com/Automattic/jetpack-plugin-deactivation/compare/v0.2.3...v0.2.4 diff --git a/projects/packages/plugin-deactivation/changelog/fix-functionify_and_statusify_exit_and_die b/projects/packages/plugin-deactivation/changelog/fix-functionify_and_statusify_exit_and_die deleted file mode 100644 index 5f323ddb3e478..0000000000000 --- a/projects/packages/plugin-deactivation/changelog/fix-functionify_and_statusify_exit_and_die +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/packages/plugin-deactivation/package.json b/projects/packages/plugin-deactivation/package.json index 3a1f1ad29d219..03e4c990dfeac 100644 --- a/projects/packages/plugin-deactivation/package.json +++ b/projects/packages/plugin-deactivation/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-plugin-deactivation", - "version": "0.3.1", + "version": "0.3.2", "description": "Intercept plugin deactivation with a dialog", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/plugin-deactivation/#readme", "bugs": { diff --git a/projects/packages/plugin-deactivation/src/class-deactivation-handler.php b/projects/packages/plugin-deactivation/src/class-deactivation-handler.php index f99253ef1fc11..7b45cc80900de 100644 --- a/projects/packages/plugin-deactivation/src/class-deactivation-handler.php +++ b/projects/packages/plugin-deactivation/src/class-deactivation-handler.php @@ -21,7 +21,7 @@ class Deactivation_Handler { * * @var string */ - const PACKAGE_VERSION = '0.3.1'; + const PACKAGE_VERSION = '0.3.2'; /** * Slug of the plugin to intercept deactivation for. diff --git a/projects/packages/sync/CHANGELOG.md b/projects/packages/sync/CHANGELOG.md index f764eaa405033..de09b5ef2242d 100644 --- a/projects/packages/sync/CHANGELOG.md +++ b/projects/packages/sync/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.5.0] - 2025-01-23 +### Changed +- Sync: Full sync doesn't send actions for posts and comments with no items [#41183] + ## [4.4.0] - 2025-01-20 ### Added - Add context for full sync. [#40930] @@ -1374,6 +1378,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Packages: Move sync to a classmapped package +[4.5.0]: https://github.com/Automattic/jetpack-sync/compare/v4.4.0...v4.5.0 [4.4.0]: https://github.com/Automattic/jetpack-sync/compare/v4.3.0...v4.4.0 [4.3.0]: https://github.com/Automattic/jetpack-sync/compare/v4.2.0...v4.3.0 [4.2.0]: https://github.com/Automattic/jetpack-sync/compare/v4.1.1...v4.2.0 diff --git a/projects/packages/sync/changelog/update-full-sync-comments-expanding-while-geting-next-chunk b/projects/packages/sync/changelog/update-full-sync-comments-expanding-while-geting-next-chunk deleted file mode 100644 index 93da9d4f53ede..0000000000000 --- a/projects/packages/sync/changelog/update-full-sync-comments-expanding-while-geting-next-chunk +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Sync: Full sync doesn't send actions for posts and comments with no items diff --git a/projects/packages/sync/changelog/update-jetpack-sync-settings-static-usage b/projects/packages/sync/changelog/update-jetpack-sync-settings-static-usage deleted file mode 100644 index 11d0d11bd2981..0000000000000 --- a/projects/packages/sync/changelog/update-jetpack-sync-settings-static-usage +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Jetpack Sync Settings: Use static vs self for calling 'get_setting' within class - - diff --git a/projects/packages/sync/composer.json b/projects/packages/sync/composer.json index b0baf8bdbf67f..3e2df88d64ab2 100644 --- a/projects/packages/sync/composer.json +++ b/projects/packages/sync/composer.json @@ -62,7 +62,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/packages/sync/src/class-package-version.php b/projects/packages/sync/src/class-package-version.php index 194e7f03ce470..724e5291c27a4 100644 --- a/projects/packages/sync/src/class-package-version.php +++ b/projects/packages/sync/src/class-package-version.php @@ -12,7 +12,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '4.4.0'; + const PACKAGE_VERSION = '4.5.0'; const PACKAGE_SLUG = 'sync'; diff --git a/projects/packages/wp-js-data-sync/CHANGELOG.md b/projects/packages/wp-js-data-sync/CHANGELOG.md index b0be72843e21e..6d6e10a82e2ba 100644 --- a/projects/packages/wp-js-data-sync/CHANGELOG.md +++ b/projects/packages/wp-js-data-sync/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.6.1] - 2025-01-23 +### Changed +- Internal updates. + ## [0.6.0] - 2024-11-28 ### Changed - Updated dependencies. [#40286] @@ -100,6 +104,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Jetpack Boost: Fix assoc_array schema validation. [#29611] +[0.6.1]: https://github.com/Automattic/jetpack-wp-js-data-sync/compare/v0.6.0...v0.6.1 [0.6.0]: https://github.com/Automattic/jetpack-wp-js-data-sync/compare/v0.5.2...v0.6.0 [0.5.2]: https://github.com/Automattic/jetpack-wp-js-data-sync/compare/v0.5.1...v0.5.2 [0.5.1]: https://github.com/Automattic/jetpack-wp-js-data-sync/compare/v0.5.0...v0.5.1 diff --git a/projects/packages/wp-js-data-sync/changelog/clean-extra-composer-things b/projects/packages/wp-js-data-sync/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/packages/wp-js-data-sync/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/packages/wp-js-data-sync/package.json b/projects/packages/wp-js-data-sync/package.json index 5defe2e677208..18fbc1938a52e 100644 --- a/projects/packages/wp-js-data-sync/package.json +++ b/projects/packages/wp-js-data-sync/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-wp-js-data-sync", - "version": "0.6.0", + "version": "0.6.1", "description": "A package to setup REST API and script localization to pass data to a JavaScript client.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/wp-js-data-sync/#readme", "bugs": { diff --git a/projects/packages/wp-js-data-sync/src/class-data-sync.php b/projects/packages/wp-js-data-sync/src/class-data-sync.php index aea1623970200..71fe0978f2462 100644 --- a/projects/packages/wp-js-data-sync/src/class-data-sync.php +++ b/projects/packages/wp-js-data-sync/src/class-data-sync.php @@ -70,7 +70,7 @@ final class Data_Sync { - const PACKAGE_VERSION = '0.6.0'; + const PACKAGE_VERSION = '0.6.1'; /** * @var Registry diff --git a/projects/plugins/boost/changelog/prerelease#2 b/projects/plugins/automattic-for-agencies-client/changelog/prerelease#2 similarity index 100% rename from projects/plugins/boost/changelog/prerelease#2 rename to projects/plugins/automattic-for-agencies-client/changelog/prerelease#2 diff --git a/projects/plugins/automattic-for-agencies-client/composer.lock b/projects/plugins/automattic-for-agencies-client/composer.lock index 27d41d9161bdc..e1ecf74123cd2 100644 --- a/projects/plugins/automattic-for-agencies-client/composer.lock +++ b/projects/plugins/automattic-for-agencies-client/composer.lock @@ -905,7 +905,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -938,7 +938,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/boost/changelog/prerelease b/projects/plugins/backup/changelog/prerelease#2 similarity index 100% rename from projects/plugins/boost/changelog/prerelease rename to projects/plugins/backup/changelog/prerelease#2 diff --git a/projects/plugins/backup/composer.lock b/projects/plugins/backup/composer.lock index df613cf2c2928..2d5868fc71721 100644 --- a/projects/plugins/backup/composer.lock +++ b/projects/plugins/backup/composer.lock @@ -1190,7 +1190,7 @@ "dist": { "type": "path", "url": "../../packages/my-jetpack", - "reference": "73105b323ea52768c8db48a442ee4290d68b6efa" + "reference": "c36b7100bc310510d61a0915652b857a90604058" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1228,7 +1228,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" @@ -1797,7 +1797,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1830,7 +1830,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/boost/CHANGELOG.md b/projects/plugins/boost/CHANGELOG.md index 35841a3175502..506484b128be9 100644 --- a/projects/plugins/boost/CHANGELOG.md +++ b/projects/plugins/boost/CHANGELOG.md @@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.8.0] - 2025-01-23 +### Added +- Critical CSS: Flag a site-health issue for Critical CSS when a page from the Cornerstone Pages list is modified. [#41006] +- Page Cache: Add extra PHP file the site owner can use to modify how the cache works. [#40920] +- Page Cache: Filter cookies and GET parameters so they do not cause a cache miss. [#40894] + +### Changed +- Critical CSS: Reduce unnecessary regenerations. [#40891] + +### Fixed +- Page Cache: Clear Page Cache when Image CDN Auto Resize Lazy Images is toggled. [#41226] +- Page Cache: Fix issue where exceptions were incorrectly applied to the entire URL. [#40999] +- Concatenate JS: Improve compatibility with WooCommerce Shipping. [#40874] +- Concatenate CSS: Fix cases where minification might cause a file to load slower. [#40956] +- Image CDN: Ensure that double encoding doesn't happen. [#40886] + ## [3.7.0] - 2025-01-06 ### Added - Concatenate JS/CSS: Added a button that allows loading default excludes. [#40496] @@ -567,6 +583,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - First public alpha release +[3.8.0]: https://github.com/Automattic/jetpack-boost-production/compare/3.7.0...3.8.0 [3.7.0]: https://github.com/Automattic/jetpack-boost-production/compare/3.6.1...3.7.0 [3.6.1]: https://github.com/Automattic/jetpack-boost-production/compare/3.6.0...3.6.1 [3.6.0]: https://github.com/Automattic/jetpack-boost-production/compare/3.5.2...3.6.0 diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php index 15220cb9edcca..6beeba2a88083 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Boost_Cache.php @@ -515,7 +515,7 @@ public function ignore_get_parameters( $parameters ) { * The list is an array of regex patterns. The default list contains the * most common GET parameters used by analytics services. * - * @since $$next-version$$ + * @since 3.8.0 * * @param array $get_parameters An array of regexes to remove items from the GET parameter list. */ @@ -572,7 +572,7 @@ public function ignore_cookies( $parameters ) { * cookies used by Cloudflare, and the regex pattern for the sbjs_ cookies * used by sourcebuster.js * - * @since $$next-version$$ + * @since 3.8.0 * * @param array $cookies An array of regexes to remove items from the cookie list. */ diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Filesystem_Utils.php b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Filesystem_Utils.php index bca79d5ebb025..ef17e4b674823 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Filesystem_Utils.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Filesystem_Utils.php @@ -112,9 +112,9 @@ public static function get_request_filename( $parameters ) { * @param array $parameters The array of components, url, cookies, get parameters, etc. * * @since 1.0.0 - * @deprecated $$next-version$$ + * @deprecated 3.8.0 */ - $key_components = apply_filters_deprecated( 'boost_cache_key_components', array( $parameters ), '$$next-version$$', 'jetpack_boost_cache_parameters' ); + $key_components = apply_filters_deprecated( 'boost_cache_key_components', array( $parameters ), '3.8.0', 'jetpack_boost_cache_parameters' ); return md5( json_encode( $key_components ) ) . '.html'; // phpcs:ignore WordPress.WP.AlternativeFunctions.json_encode_json_encode } diff --git a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Request.php b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Request.php index 16ee3c4a949fb..fb32ed8bbd4ee 100644 --- a/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Request.php +++ b/projects/plugins/boost/app/modules/optimizations/page-cache/pre-wordpress/Request.php @@ -61,7 +61,7 @@ public function get_parameters() { /** * Filters the parameters for the current request to identify the cache key. * - * @since $$next-version$$ + * @since 3.8.0 * * @param array $parameters The parameters for the current request, made up of cookies and get parameters. */ diff --git a/projects/plugins/boost/changelog/add-boost-extra-code-loader b/projects/plugins/boost/changelog/add-boost-extra-code-loader deleted file mode 100644 index 8620b717449e9..0000000000000 --- a/projects/plugins/boost/changelog/add-boost-extra-code-loader +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Cache: added extra PHP file the site owner can use to modify how the cache works. diff --git a/projects/plugins/boost/changelog/add-cornerstone-to-site-health b/projects/plugins/boost/changelog/add-cornerstone-to-site-health deleted file mode 100644 index e36af1941bc0b..0000000000000 --- a/projects/plugins/boost/changelog/add-cornerstone-to-site-health +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Critical CSS: Flag a site-health issue if critical CSS is not fresh after cornerstone pages changed. diff --git a/projects/plugins/boost/changelog/clean-extra-composer-things b/projects/plugins/boost/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/plugins/boost/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/plugins/boost/changelog/fix-boost-cache-bypass-patterns b/projects/plugins/boost/changelog/fix-boost-cache-bypass-patterns deleted file mode 100644 index a7371df8724df..0000000000000 --- a/projects/plugins/boost/changelog/fix-boost-cache-bypass-patterns +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Page Cache: Fixed bypass patterns getting applied to the whole URL instead of the start. diff --git a/projects/plugins/boost/changelog/fix-boost-liar-toggle-clear-cache b/projects/plugins/boost/changelog/fix-boost-liar-toggle-clear-cache deleted file mode 100644 index e211a91b6f907..0000000000000 --- a/projects/plugins/boost/changelog/fix-boost-liar-toggle-clear-cache +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Page Cache: Clear Page Cache when Image CDN Auto Resize Lazy Images is toggled. diff --git a/projects/plugins/boost/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/boost/changelog/fix-functionify_and_statusify_exit_and_die deleted file mode 100644 index 5f323ddb3e478..0000000000000 --- a/projects/plugins/boost/changelog/fix-functionify_and_statusify_exit_and_die +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/boost/changelog/fix-image-cdn-double-encoding b/projects/plugins/boost/changelog/fix-image-cdn-double-encoding deleted file mode 100644 index da2382199f128..0000000000000 --- a/projects/plugins/boost/changelog/fix-image-cdn-double-encoding +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Image CDN: Ensure that double encoding doesn't happen. diff --git a/projects/plugins/boost/changelog/fix-woocommerce-shipping-concat-js-conflict b/projects/plugins/boost/changelog/fix-woocommerce-shipping-concat-js-conflict deleted file mode 100644 index 0dc8fa2292958..0000000000000 --- a/projects/plugins/boost/changelog/fix-woocommerce-shipping-concat-js-conflict +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Concatenate JS: Improve compatibility with WooCommerce shipping. diff --git a/projects/plugins/boost/changelog/update-boost-cookie_filter b/projects/plugins/boost/changelog/update-boost-cookie_filter deleted file mode 100644 index 8603ce9d0fb0e..0000000000000 --- a/projects/plugins/boost/changelog/update-boost-cookie_filter +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Cache: filter cookies and GET parameters so they do not cause a cache miss. diff --git a/projects/plugins/boost/changelog/update-boost-minify-css-library b/projects/plugins/boost/changelog/update-boost-minify-css-library deleted file mode 100644 index 0ebb483a0aa90..0000000000000 --- a/projects/plugins/boost/changelog/update-boost-minify-css-library +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Concatenate CSS: Fixed cases where minification might cause a file to load slower. diff --git a/projects/plugins/boost/changelog/update-boost-reduce-unnecessary-css-generations b/projects/plugins/boost/changelog/update-boost-reduce-unnecessary-css-generations deleted file mode 100644 index a46d7a6f8dd62..0000000000000 --- a/projects/plugins/boost/changelog/update-boost-reduce-unnecessary-css-generations +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Critical CSS: Reduce unnecessary regenerations. diff --git a/projects/plugins/boost/changelog/update-boost-success-ratio b/projects/plugins/boost/changelog/update-boost-success-ratio deleted file mode 100644 index 9a8a25f47ab4b..0000000000000 --- a/projects/plugins/boost/changelog/update-boost-success-ratio +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Cloud CSS: Added the success ratio required for Cloud CSS to succeed diff --git a/projects/plugins/boost/changelog/update-boost-ui-directory-docs b/projects/plugins/boost/changelog/update-boost-ui-directory-docs deleted file mode 100644 index c91b38182afb5..0000000000000 --- a/projects/plugins/boost/changelog/update-boost-ui-directory-docs +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Make sure Boost UI app directory docs are up-to-date. - - diff --git a/projects/plugins/boost/composer.json b/projects/plugins/boost/composer.json index b802dd4ec736c..e8b60cd75bcf0 100644 --- a/projects/plugins/boost/composer.json +++ b/projects/plugins/boost/composer.json @@ -3,7 +3,7 @@ "description": "Boost your WordPress site's performance, from the creators of Jetpack", "type": "library", "license": "GPL-2.0-or-later", - "version": "3.7.0", + "version": "3.8.0", "authors": [ { "name": "Automattic, Inc.", @@ -74,7 +74,7 @@ "platform": { "ext-intl": "0.0.0" }, - "autoloader-suffix": "b1e77e6231d50e7663f84529b6a3dfda_jetpack_boostⓥ3_7_0", + "autoloader-suffix": "b1e77e6231d50e7663f84529b6a3dfda_jetpack_boostⓥ3_8_0", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true diff --git a/projects/plugins/boost/composer.lock b/projects/plugins/boost/composer.lock index 417b664cf1548..bec35b5d94c7a 100644 --- a/projects/plugins/boost/composer.lock +++ b/projects/plugins/boost/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "aae9e21aecb09d6ee5d133abe80295e0", + "content-hash": "e45655297b840df1f3437375abb284a2", "packages": [ { "name": "automattic/jetpack-a8c-mc-stats", @@ -1106,7 +1106,7 @@ "dist": { "type": "path", "url": "../../packages/my-jetpack", - "reference": "73105b323ea52768c8db48a442ee4290d68b6efa" + "reference": "c36b7100bc310510d61a0915652b857a90604058" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1144,7 +1144,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" @@ -1851,7 +1851,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1884,7 +1884,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/boost/jetpack-boost.php b/projects/plugins/boost/jetpack-boost.php index c16732f889864..3359ff670c769 100644 --- a/projects/plugins/boost/jetpack-boost.php +++ b/projects/plugins/boost/jetpack-boost.php @@ -9,7 +9,7 @@ * Plugin Name: Jetpack Boost * Plugin URI: https://jetpack.com/boost * Description: Boost your WordPress site's performance, from the creators of Jetpack - * Version: 3.7.0 + * Version: 3.8.0 * Author: Automattic - Jetpack Site Speed team * Author URI: https://jetpack.com/boost/ * License: GPL-2.0+ @@ -29,7 +29,7 @@ die( 0 ); } -define( 'JETPACK_BOOST_VERSION', '3.7.0' ); +define( 'JETPACK_BOOST_VERSION', '3.8.0' ); define( 'JETPACK_BOOST_SLUG', 'jetpack-boost' ); if ( ! defined( 'JETPACK_BOOST_CLIENT_NAME' ) ) { diff --git a/projects/plugins/boost/package.json b/projects/plugins/boost/package.json index bfddc6364c163..b7e6f8cac3df3 100644 --- a/projects/plugins/boost/package.json +++ b/projects/plugins/boost/package.json @@ -1,6 +1,6 @@ { "name": "jetpack-boost", - "version": "3.7.0", + "version": "3.8.0", "description": "Boost your WordPress site's performance, from the creators of Jetpack", "directories": { "test": "tests" diff --git a/projects/plugins/boost/readme.txt b/projects/plugins/boost/readme.txt index 41693dd5a6820..fb0e08f55cf6c 100644 --- a/projects/plugins/boost/readme.txt +++ b/projects/plugins/boost/readme.txt @@ -183,20 +183,21 @@ If you run into compatibility issues, please do let us know. You can drop us a l 2. Jetpack Boost Speed Improvement == Changelog == -### 3.7.0 - 2025-01-06 +### 3.8.0 - 2025-01-23 #### Added -- Concatenate JS/CSS: Added a button that allows loading default excludes. -- General: Added tracks events to clickable elements on the settings page. -- General: Added WordPress filters to allow Cornerstone Pages list and Image Size Analyzer source data to be updated. -- Concatenate JS/CSS: Added HTTP header to take advantage of WordPress.com edge caching -- UI: Added notifications when interacting with dashboard settings. +- Critical CSS: Flag a site-health issue for Critical CSS when a page from the Cornerstone Pages list is modified. +- Page Cache: Add extra PHP file the site owner can use to modify how the cache works. +- Page Cache: Filter cookies and GET parameters so they do not cause a cache miss. #### Changed -- UI: Gave Page Cache, Concatenate JS/CSS and Image CDN - Image Quality modules a more unifed look. +- Critical CSS: Reduce unnecessary regenerations. #### Fixed -- Critical CSS: Improved UI responsiveness during a retry after failed generation. -- UI: Fixed showing an error if no ISA report was found. +- Page Cache: Clear Page Cache when Image CDN Auto Resize Lazy Images is toggled. +- Page Cache: Fix issue where exceptions were incorrectly applied to the entire URL. +- Concatenate JS: Improve compatibility with WooCommerce Shipping. +- Concatenate CSS: Fix cases where minification might cause a file to load slower. +- Image CDN: Ensure that double encoding doesn't happen. -------- diff --git a/projects/plugins/jetpack/changelog/prerelease b/projects/plugins/jetpack/changelog/prerelease new file mode 100644 index 0000000000000..a1c1831fa1ef7 --- /dev/null +++ b/projects/plugins/jetpack/changelog/prerelease @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Updated composer.lock. + + diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index e08b5d6e47c71..2c210154d384a 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -1789,7 +1789,7 @@ "dist": { "type": "path", "url": "../../packages/my-jetpack", - "reference": "73105b323ea52768c8db48a442ee4290d68b6efa" + "reference": "c36b7100bc310510d61a0915652b857a90604058" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1827,7 +1827,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" @@ -2771,7 +2771,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -2804,7 +2804,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/boost/changelog/renovate-wordpress-monorepo b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#3 similarity index 51% rename from projects/plugins/boost/changelog/renovate-wordpress-monorepo rename to projects/plugins/mu-wpcom-plugin/changelog/prerelease#3 index c47cb18e82997..9aa70e3ec1f75 100644 --- a/projects/plugins/boost/changelog/renovate-wordpress-monorepo +++ b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#3 @@ -1,4 +1,5 @@ Significance: patch Type: changed +Comment: Updated composer.lock. + -Updated package dependencies. diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index 741add4daa3b9..d93f5a2a12da1 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -1586,7 +1586,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1619,7 +1619,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/boost/changelog/renovate-lock-file-maintenance b/projects/plugins/protect/changelog/prerelease#15 similarity index 51% rename from projects/plugins/boost/changelog/renovate-lock-file-maintenance rename to projects/plugins/protect/changelog/prerelease#15 index c47cb18e82997..9aa70e3ec1f75 100644 --- a/projects/plugins/boost/changelog/renovate-lock-file-maintenance +++ b/projects/plugins/protect/changelog/prerelease#15 @@ -1,4 +1,5 @@ Significance: patch Type: changed +Comment: Updated composer.lock. + -Updated package dependencies. diff --git a/projects/plugins/protect/composer.lock b/projects/plugins/protect/composer.lock index 2fd000b0ae4a3..1855561d07c09 100644 --- a/projects/plugins/protect/composer.lock +++ b/projects/plugins/protect/composer.lock @@ -1100,7 +1100,7 @@ "dist": { "type": "path", "url": "../../packages/my-jetpack", - "reference": "73105b323ea52768c8db48a442ee4290d68b6efa" + "reference": "c36b7100bc310510d61a0915652b857a90604058" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1138,7 +1138,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" @@ -1707,7 +1707,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1740,7 +1740,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/search/changelog/prerelease#2 b/projects/plugins/search/changelog/prerelease#2 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/search/changelog/prerelease#2 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/search/composer.lock b/projects/plugins/search/composer.lock index 10e2e1a7526d8..ce75f3c49dc11 100644 --- a/projects/plugins/search/composer.lock +++ b/projects/plugins/search/composer.lock @@ -1040,7 +1040,7 @@ "dist": { "type": "path", "url": "../../packages/my-jetpack", - "reference": "73105b323ea52768c8db48a442ee4290d68b6efa" + "reference": "c36b7100bc310510d61a0915652b857a90604058" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1078,7 +1078,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" @@ -1802,7 +1802,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1835,7 +1835,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/social/changelog/prerelease#2 b/projects/plugins/social/changelog/prerelease#2 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/social/changelog/prerelease#2 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index 0879139bdd826..e9a0e23b5ec13 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -1040,7 +1040,7 @@ "dist": { "type": "path", "url": "../../packages/my-jetpack", - "reference": "73105b323ea52768c8db48a442ee4290d68b6efa" + "reference": "c36b7100bc310510d61a0915652b857a90604058" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1078,7 +1078,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" @@ -1794,7 +1794,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1827,7 +1827,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/starter-plugin/changelog/prerelease#6 b/projects/plugins/starter-plugin/changelog/prerelease#6 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/prerelease#6 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/starter-plugin/composer.lock b/projects/plugins/starter-plugin/composer.lock index 39fc5bbc33c4f..d181a5e9e6920 100644 --- a/projects/plugins/starter-plugin/composer.lock +++ b/projects/plugins/starter-plugin/composer.lock @@ -1040,7 +1040,7 @@ "dist": { "type": "path", "url": "../../packages/my-jetpack", - "reference": "73105b323ea52768c8db48a442ee4290d68b6efa" + "reference": "c36b7100bc310510d61a0915652b857a90604058" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1078,7 +1078,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" @@ -1647,7 +1647,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1680,7 +1680,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/videopress/changelog/prerelease#2 b/projects/plugins/videopress/changelog/prerelease#2 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/videopress/changelog/prerelease#2 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/videopress/composer.lock b/projects/plugins/videopress/composer.lock index 569bd5ce6b9d5..ec56f96dee2e1 100644 --- a/projects/plugins/videopress/composer.lock +++ b/projects/plugins/videopress/composer.lock @@ -1040,7 +1040,7 @@ "dist": { "type": "path", "url": "../../packages/my-jetpack", - "reference": "73105b323ea52768c8db48a442ee4290d68b6efa" + "reference": "c36b7100bc310510d61a0915652b857a90604058" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1078,7 +1078,7 @@ "link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}" }, "branch-alias": { - "dev-trunk": "5.3.x-dev" + "dev-trunk": "5.4.x-dev" }, "version-constants": { "::PACKAGE_VERSION": "src/class-initializer.php" @@ -1647,7 +1647,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1680,7 +1680,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/wpcomsh/changelog/prerelease#9 b/projects/plugins/wpcomsh/changelog/prerelease#9 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/prerelease#9 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index 9ed3e08b2f902..0fd3f243ed3d7 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -1788,7 +1788,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "8297245b0fa3c38c8362b016ddd2f59f536ff5b9" + "reference": "7763c437ec99943f6d26130e6dcd1c9395aaba3a" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1821,7 +1821,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.4.x-dev" + "dev-trunk": "4.5.x-dev" }, "dependencies": { "test-only": [ From d2487c47b323a83355510f931cf00a4afe342b0c Mon Sep 17 00:00:00 2001 From: Kosta Date: Thu, 23 Jan 2025 13:08:56 +0100 Subject: [PATCH 179/420] Fix cookie consent registration call (#41257) --- projects/plugins/jetpack/.phan/baseline.php | 1 - projects/plugins/jetpack/changelog/fix-cookie-consent-reg | 4 ++++ .../jetpack/extensions/blocks/cookie-consent/block.json | 6 ++++-- .../extensions/blocks/cookie-consent/cookie-consent.php | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-cookie-consent-reg diff --git a/projects/plugins/jetpack/.phan/baseline.php b/projects/plugins/jetpack/.phan/baseline.php index f194e666f4e5a..06efd6d4524f8 100644 --- a/projects/plugins/jetpack/.phan/baseline.php +++ b/projects/plugins/jetpack/.phan/baseline.php @@ -176,7 +176,6 @@ 'extensions/blocks/blog-stats/blog-stats.php' => ['PhanTypeMismatchReturnProbablyReal'], 'extensions/blocks/blogroll/blogroll-item/blogroll-item.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'extensions/blocks/calendly/calendly.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturnProbablyReal'], - 'extensions/blocks/cookie-consent/cookie-consent.php' => ['PhanParamTooMany'], 'extensions/blocks/donations/donations.php' => ['PhanTypeMismatchArgument'], 'extensions/blocks/gif/gif.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnProbablyReal'], 'extensions/blocks/google-calendar/google-calendar.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], diff --git a/projects/plugins/jetpack/changelog/fix-cookie-consent-reg b/projects/plugins/jetpack/changelog/fix-cookie-consent-reg new file mode 100644 index 0000000000000..1ef8afea050a2 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-cookie-consent-reg @@ -0,0 +1,4 @@ +Significance: patch +Type: other + + diff --git a/projects/plugins/jetpack/extensions/blocks/cookie-consent/block.json b/projects/plugins/jetpack/extensions/blocks/cookie-consent/block.json index 8c112cd761a4e..a14198fd9eb28 100644 --- a/projects/plugins/jetpack/extensions/blocks/cookie-consent/block.json +++ b/projects/plugins/jetpack/extensions/blocks/cookie-consent/block.json @@ -15,7 +15,8 @@ "anchor": false, "color": { "gradients": true, - "link": true + "link": true, + "background": true }, "spacing": { "padding": true @@ -63,5 +64,6 @@ "type": "boolean", "default": false } - } + }, + "viewScript": "file:./view.js" } diff --git a/projects/plugins/jetpack/extensions/blocks/cookie-consent/cookie-consent.php b/projects/plugins/jetpack/extensions/blocks/cookie-consent/cookie-consent.php index ccf15d8f4a4ff..6beba99928bf4 100644 --- a/projects/plugins/jetpack/extensions/blocks/cookie-consent/cookie-consent.php +++ b/projects/plugins/jetpack/extensions/blocks/cookie-consent/cookie-consent.php @@ -47,9 +47,9 @@ function register_block() { Blocks::jetpack_register_block( __DIR__, - array( 'render_callback' => __NAMESPACE__ . '\load_assets' ), array( - 'attributes' => array( + 'render_callback' => __NAMESPACE__ . '\load_assets', + 'attributes' => array( 'render_from_template' => array( 'default' => false, 'type' => 'boolean', From e4caa6e3c8c96611570ef49b18eb3a90680abe77 Mon Sep 17 00:00:00 2001 From: Siddarthan Sarumathi Pandian Date: Thu, 23 Jan 2025 17:48:56 +0530 Subject: [PATCH 180/420] Comments: Default to sign up when trying to comment logged out (#41246) * Comments: Added from_comments query param for wordpress.com query param. * changelog --- .../changelog/add-query-param-to-comments-connect-url | 4 ++++ .../src/features/verbum-comments/class-verbum-comments.php | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-query-param-to-comments-connect-url diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-query-param-to-comments-connect-url b/projects/packages/jetpack-mu-wpcom/changelog/add-query-param-to-comments-connect-url new file mode 100644 index 0000000000000..b5bb9e2e7a66f --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-query-param-to-comments-connect-url @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Added query param to the wordpress.com login url. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php index ec54e40df5fe5..afaca86991e51 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php @@ -124,6 +124,8 @@ public function enqueue_assets() { if ( strpos( $primary_redirect, '.wordpress.com' ) === false ) { $connect_url = add_query_arg( 'domain', $primary_redirect, $connect_url ); + } else { + $connect_url = add_query_arg( 'from_comments', 'yes', $connect_url ); } // Enqueue styles and scripts From 0dfb550d3c1aad3b1d3aa5087db685583e9481f6 Mon Sep 17 00:00:00 2001 From: Bogdan Ungureanu Date: Thu, 23 Jan 2025 14:49:49 +0200 Subject: [PATCH 181/420] RDV: Add experiment assignment override and reset (#41179) * RDV: Add experiment assignment override and reset In exceptional cases, we want a12s to be able to switch the experiment variation on the current user. This behavior is needed as an escape hatch where the experience in Calypso is better in certain scenarios. * Fix linting and remove debugging die * Linting * Store the override in a preference * Fix linting * Rename function and remove type cast --- .../changelog/update-add-rdv-override | 4 + .../wpcom-admin-interface.php | 114 ++++++++++++++++-- 2 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-add-rdv-override diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-add-rdv-override b/projects/packages/jetpack-mu-wpcom/changelog/update-add-rdv-override new file mode 100644 index 0000000000000..45f9e779dc67a --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-add-rdv-override @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Remove duplicate views: add possibility to override and reset the experiment variation diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index 4f725a05da8af..0a5a6a4bcf746 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -387,6 +387,11 @@ function wpcom_show_admin_interface_notice() { } add_action( 'admin_notices', 'wpcom_show_admin_interface_notice' ); +/** + * Option to force and cache the Remove duplicate Views experiment assigned variation. + */ +const RDV_EXPERIMENT_FORCE_ASSIGN_OPTION = 'remove_duplicate_views_experiment_assignment'; + /** * Check if the duplicate views experiment is enabled. * @@ -402,20 +407,19 @@ function wpcom_is_duplicate_views_experiment_enabled() { return $is_enabled; } - if ( ( new Host() )->is_wpcom_simple() ) { - \ExPlat\assign_current_user( $aa_test_name ); - $is_enabled = 'treatment' === \ExPlat\assign_current_user( $experiment_name ); - return $is_enabled; - } - - $option_name = 'remove_duplicate_views_experiment_assignment'; - $variation = get_user_option( $option_name, get_current_user_id() ); + $variation = get_user_option( RDV_EXPERIMENT_FORCE_ASSIGN_OPTION, get_current_user_id() ); if ( false !== $variation ) { $is_enabled = 'treatment' === $variation; return $is_enabled; } + if ( ( new Host() )->is_wpcom_simple() ) { + \ExPlat\assign_current_user( $aa_test_name ); + $is_enabled = 'treatment' === \ExPlat\assign_current_user( $experiment_name ); + return $is_enabled; + } + if ( ! ( new Jetpack_Connection() )->is_user_connected() ) { $is_enabled = false; return $is_enabled; @@ -449,7 +453,7 @@ function wpcom_is_duplicate_views_experiment_enabled() { if ( isset( $data['variations'] ) && isset( $data['variations'][ $experiment_name ] ) ) { $variation = $data['variations'][ $experiment_name ]; - update_user_option( get_current_user_id(), $option_name, $variation, true ); + update_user_option( get_current_user_id(), RDV_EXPERIMENT_FORCE_ASSIGN_OPTION, $variation, true ); $is_enabled = 'treatment' === $variation; return $is_enabled; @@ -459,6 +463,98 @@ function wpcom_is_duplicate_views_experiment_enabled() { } } +/** + * Set the Calypso preference for rdv. + * + * This is needed to override the ExPlat variation assignment in order to be able to revert the variation for some users. + * + * @param string|null $assignment The experiment variation. + * @return void + */ +function wpcom_set_rdv_calypso_preference( $assignment ) { + if ( ( new Host() )->is_wpcom_simple() ) { + $preferences = get_user_attribute( get_current_user_id(), 'calypso_preferences' ); + $preferences[ RDV_EXPERIMENT_FORCE_ASSIGN_OPTION ] = $assignment; + update_user_attribute( get_current_user_id(), 'calypso_preferences', $preferences ); + } else { + Client::wpcom_json_api_request_as_user( + '/me/preferences', + '2', + array( + 'method' => 'POST', + ), + array( 'calypso_preferences' => array( RDV_EXPERIMENT_FORCE_ASSIGN_OPTION => $assignment ) ) + ); + } +} + +/** + * Force a variation (control/treatment) for the Remove Duplicate Views experiment. + * + * @return void + */ +function wpcom_force_assign_variation_for_remove_duplicate_views_experiment() { + if ( ! isset( $_GET['force-assign-rdv-variation'] ) ) { + return; + } + + $assignment = in_array( $_GET['force-assign-rdv-variation'], array( 'control', 'treatment' ), true ) ? sanitize_text_field( wp_unslash( $_GET['force-assign-rdv-variation'] ) ) : false; + + if ( ! $assignment ) { + return; + } + + wpcom_set_rdv_calypso_preference( $assignment ); + + /** + * Setting the option globally (third parameter) will have the following behavior: + * - On Simple Sites, the option will be shared between them. + * - On Atomic Sites, the option will NOT be shared. + * + * This also means that if a user has a Simple Sites and Atomic sites, the option will not be shared between them. + * + * For example, if the option is set on a Simple Site, every other site will get it, except for the Atomic ones. + * If the option is set on an Atomic Site, this will apply only on this site - it won't be shared between the other Atomic Sites OR Simple Sites. + * + * This option is also not moved from Simple to Atomic on AT transfer. + */ + update_user_option( get_current_user_id(), RDV_EXPERIMENT_FORCE_ASSIGN_OPTION, $assignment, true ); +} + +/** + * Reset the assignment cache for the Remove duplicate views experiment. + * + * @return void + */ +function wpcom_reset_assignment_for_remove_duplicate_views_experiment() { + if ( ! isset( $_GET['force-reset-rdv-variation'] ) ) { + return; + } + + wpcom_set_rdv_calypso_preference( null ); + + /** + * Setting the option globally (third parameter) will have the following behavior: + * - On Simple Sites, the option will be shared between them. + * - On Atomic Sites, the option will NOT be shared. + * + * This also means that if a user has a Simple Sites and Atomic sites, the option will not be shared between them. + * + * For example, if the option is set on a Simple Site, every other site will get it, except for the Atomic ones. + * If the option is set on an Atomic Site, this will apply only on this site - it won't be shared between the other Atomic Sites OR Simple Sites. + * + * This option is also not moved from Simple to Atomic on AT transfer. + * + * Since this should be used only in exceptional cases, there's no need to implement something better. + */ + delete_user_option( get_current_user_id(), RDV_EXPERIMENT_FORCE_ASSIGN_OPTION, true ); +} + +if ( defined( 'A8C_PROXIED_REQUEST' ) && A8C_PROXIED_REQUEST || defined( 'AT_PROXIED_REQUEST' ) && AT_PROXIED_REQUEST ) { + add_action( 'admin_init', 'wpcom_force_assign_variation_for_remove_duplicate_views_experiment' ); + add_action( 'admin_init', 'wpcom_reset_assignment_for_remove_duplicate_views_experiment' ); +} + /** * Displays a notice when a user visits the enforced WP Admin view of a removed Calypso screen for * the first time. From 2bd9170baed289cb236e7877235a830ba1e62c67 Mon Sep 17 00:00:00 2001 From: Candy Tsai Date: Thu, 23 Jan 2025 23:12:10 +0800 Subject: [PATCH 182/420] Update onboarding newsletter goal tasks (#41158) * Add newsletter-v2 launchpad tasks * changelog * Remove write_welcome_message for now * Rename intent-newsletter-v2 to intent-newsletter-goal * Update projects/packages/jetpack-mu-wpcom/changelog/update-newletter-goal-tasks Co-authored-by: Philip Jackson * Update copy for customize_welcome_message --------- Co-authored-by: Philip Jackson --- .../changelog/update-newletter-goal-tasks | 4 +++ .../launchpad/launchpad-task-definitions.php | 34 +++++++++++++++---- .../src/features/launchpad/launchpad.php | 27 +++++++++++++++ 3 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-newletter-goal-tasks diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-newletter-goal-tasks b/projects/packages/jetpack-mu-wpcom/changelog/update-newletter-goal-tasks new file mode 100644 index 0000000000000..e10e7753e2c8e --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-newletter-goal-tasks @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Add intent-newsletter-goal tasks for newsletter goal in /setup/onboarding. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php index afe883411aeda..086b8eef29985 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php @@ -180,6 +180,15 @@ function wpcom_launchpad_get_task_definitions() { return '/me/account'; }, ), + 'preview_site' => array( + 'get_title' => function () { + return __( 'Preview your site', 'jetpack-mu-wpcom' ); + }, + 'is_complete_callback' => 'wpcom_launchpad_is_task_option_completed', + 'get_calypso_path' => function ( $task, $default, $data ) { + return '/view/' . $data['site_slug_encoded']; + }, + ), // Newsletter pre-launch tasks. 'first_post_published_newsletter' => array( @@ -260,6 +269,17 @@ function wpcom_launchpad_get_task_definitions() { }, ), + // intent-newsletter-goal tasks + 'start_building_your_audience' => array( + 'get_title' => function () { + return __( 'Start building your audience', 'jetpack-mu-wpcom' ); + }, + 'is_complete_callback' => 'wpcom_launchpad_is_task_option_completed', + 'get_calypso_path' => function ( $task, $default, $data ) { + return '/subscribers/' . $data['site_slug_encoded']; + }, + ), + // Link in bio tasks. 'link_in_bio_launched' => array( 'get_title' => function () { @@ -477,7 +497,7 @@ function wpcom_launchpad_get_task_definitions() { 'customize_welcome_message' => array( 'get_title' => function () { - return __( 'Customize welcome message', 'jetpack-mu-wpcom' ); + return __( 'Write a welcome message', 'jetpack-mu-wpcom' ); }, 'is_complete_callback' => 'wpcom_launchpad_is_task_option_completed', 'get_calypso_path' => function ( $task, $default, $data ) { @@ -2498,7 +2518,7 @@ function wpcom_launchpad_is_edit_page_task_visible() { /** * Mark the customize_welcome_message task complete - * if the subscription_options['invitation'] value + * if the subscription_options['welcome'] value * for the welcome message has changed on option update. * * @param mixed $old_value The old value of the welcome message. @@ -2507,9 +2527,9 @@ function wpcom_launchpad_is_edit_page_task_visible() { * @return void */ function wpcom_launchpad_mark_customize_welcome_message_complete_on_update( $old_value, $value ) { - $new_invitation = is_array( $value ) && isset( $value['invitation'] ) ? $value['invitation'] : ''; - $old_invitation = is_array( $old_value ) && isset( $old_value['invitation'] ) ? $old_value['invitation'] : ''; - if ( $new_invitation !== $old_invitation ) { + $new_welcome = is_array( $value ) && isset( $value['welcome'] ) ? $value['welcome'] : ''; + $old_welcome = is_array( $old_value ) && isset( $old_value['welcome'] ) ? $old_value['welcome'] : ''; + if ( $new_welcome !== $old_welcome ) { wpcom_mark_launchpad_task_complete( 'customize_welcome_message' ); } } @@ -2517,7 +2537,7 @@ function wpcom_launchpad_mark_customize_welcome_message_complete_on_update( $old /** * Mark the customize_welcome_message task complete - * if the subscription_options['invitation'] value + * if the subscription_options['welcome'] value * for the welcome message has been added. * * @param mixed $value The value of the welcome message. @@ -2525,7 +2545,7 @@ function wpcom_launchpad_mark_customize_welcome_message_complete_on_update( $old * @return void */ function wpcom_launchpad_mark_customize_welcome_message_complete_on_add( $value ) { - if ( is_array( $value ) && $value['invitation'] ) { + if ( is_array( $value ) && $value['welcome'] ) { wpcom_mark_launchpad_task_complete( 'customize_welcome_message' ); } } diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php index 8c4a999899b69..31f3be5b545ab 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php @@ -102,6 +102,20 @@ function wpcom_launchpad_get_task_list_definitions() { ), 'is_enabled_callback' => 'wpcom_launchpad_get_fullscreen_enabled', ), + 'intent-newsletter-goal' => array( + 'get_title' => function () { + return __( 'Next steps for your site', 'jetpack-mu-wpcom' ); + }, + 'task_ids' => array( + 'site_title', + 'start_building_your_audience', + 'customize_welcome_message', + 'add_about_page', + 'first_post_published', + 'preview_site', + ), + 'is_enabled_callback' => 'wpcom_launchpad_get_fullscreen_enabled', + ), 'videopress' => array( 'get_title' => function () { return __( 'Next steps for your site', 'jetpack-mu-wpcom' ); @@ -1091,6 +1105,19 @@ function wpcom_launchpad_is_paid_newsletter_enabled() { return wpcom_launchpad_has_goal_paid_subscribers() && apply_filters( 'wpcom_launchpad_intent_paid_newsletter_enabled', false ); } +/** + * Checks if the Newsletter goal flow task list is enabled. + * + * @return bool True if the task list is enabled, false otherwise. + */ +function wpcom_launchpad_is_newsletter_goal_enabled() { + $intent = get_option( 'site_intent', false ); + if ( 'intent-newsletter-goal' !== $intent ) { + return false; + } + + return apply_filters( 'wpcom_launchpad_intent_newsletter_goal_enabled', false ); +} /** * Add launchpad options to Jetpack Sync. * From 83b8676660a947dc473ecea1bfc51bb73e4e996c Mon Sep 17 00:00:00 2001 From: Kev Date: Thu, 23 Jan 2025 11:07:26 -0500 Subject: [PATCH 183/420] Jetpack button: implement outline style (#41194) * Jetpack button: implement outline style * changelog --- .../jetpack/changelog/fix-form-submit-button-outline | 4 ++++ .../plugins/jetpack/extensions/blocks/button/editor.scss | 6 ++++++ projects/plugins/jetpack/extensions/blocks/button/view.scss | 5 +++++ 3 files changed, 15 insertions(+) create mode 100644 projects/plugins/jetpack/changelog/fix-form-submit-button-outline diff --git a/projects/plugins/jetpack/changelog/fix-form-submit-button-outline b/projects/plugins/jetpack/changelog/fix-form-submit-button-outline new file mode 100644 index 0000000000000..57b3002471771 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-form-submit-button-outline @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Jetpack button: implement outline style diff --git a/projects/plugins/jetpack/extensions/blocks/button/editor.scss b/projects/plugins/jetpack/extensions/blocks/button/editor.scss index 5c4b93b47bb77..aa0173e0a0635 100644 --- a/projects/plugins/jetpack/extensions/blocks/button/editor.scss +++ b/projects/plugins/jetpack/extensions/blocks/button/editor.scss @@ -1,6 +1,12 @@ .wp-block[data-type='jetpack/button'] { display: inline-block; margin: 0 auto; + + &.is-style-outline > .wp-block-button__link { + background-color: transparent; + border: solid 1px currentColor; + color: currentColor; + } } .wp-block[data-align="center"] { diff --git a/projects/plugins/jetpack/extensions/blocks/button/view.scss b/projects/plugins/jetpack/extensions/blocks/button/view.scss index 0e6ca3502a4f1..7db0bedb6403d 100644 --- a/projects/plugins/jetpack/extensions/blocks/button/view.scss +++ b/projects/plugins/jetpack/extensions/blocks/button/view.scss @@ -3,6 +3,11 @@ } .wp-block-jetpack-button { + &.is-style-outline > .wp-block-button__link { + background-color: transparent; + border: solid 1px currentColor; + color: currentColor; + } &:not(.is-style-outline) button { border: none; } From f57398666700a9ff993eec15a93e5a5217959244 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Thu, 23 Jan 2025 10:04:33 -0800 Subject: [PATCH 184/420] Fix/form block icon colours (#41250) * Forms: update svg form icon colours * Fix all the colours * changelog --- .../changelog/fix-form-block-icon-colours | 4 + .../src/blocks/contact-form/child-blocks.js | 140 +++++------ .../jetpack-field-multiple-choice/index.js | 12 +- .../item/index.js | 14 +- .../jetpack-field-single-choice/index.js | 16 +- .../jetpack-field-single-choice/item/index.js | 12 +- .../jetpack-salesforce-lead-form-settings.js | 18 +- .../forms/src/blocks/contact-form/index.js | 14 +- .../src/blocks/contact-form/variations.js | 231 ++++++++---------- 9 files changed, 212 insertions(+), 249 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-form-block-icon-colours diff --git a/projects/packages/forms/changelog/fix-form-block-icon-colours b/projects/packages/forms/changelog/fix-form-block-icon-colours new file mode 100644 index 0000000000000..3aeb9f29911e9 --- /dev/null +++ b/projects/packages/forms/changelog/fix-form-block-icon-colours @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Updates the icon colours to the new standard diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index b84ea2da5ab83..6c3a246a15d4d 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -345,12 +345,12 @@ export const childBlocks = [ ...FieldDefaults, title: __( 'Text Input Field', 'jetpack-forms' ), description: __( 'Collect short text responses from site visitors.', 'jetpack-forms' ), - icon: renderMaterialIcon( - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit: editField( 'text' ), attributes: { ...FieldDefaults.attributes, @@ -367,12 +367,12 @@ export const childBlocks = [ ...FieldDefaults, title: __( 'Name Field', 'jetpack-forms' ), description: __( 'Collect the site visitor’s name.', 'jetpack-forms' ), - icon: renderMaterialIcon( - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit: editField( 'text' ), attributes: { ...FieldDefaults.attributes, @@ -390,14 +390,10 @@ export const childBlocks = [ title: __( 'Email Field', 'jetpack-forms' ), keywords: [ __( 'e-mail', 'jetpack-forms' ), __( 'mail', 'jetpack-forms' ), 'email' ], description: __( 'Collect email addresses from your visitors.', 'jetpack-forms' ), - icon: ( - - ), + icon: { + foreground: getIconColor(), + src: , + }, edit: editField( 'email' ), attributes: { ...FieldDefaults.attributes, @@ -420,14 +416,10 @@ export const childBlocks = [ __( 'website', 'jetpack-forms' ), ], description: __( 'Collect a website address from your site visitors.', 'jetpack-forms' ), - icon: ( - - ), + icon: { + foreground: getIconColor(), + src: , + }, edit: editField( 'url' ), attributes: { ...FieldDefaults.attributes, @@ -448,13 +440,15 @@ export const childBlocks = [ _x( 'day month year', 'block search term', 'jetpack-forms' ), ], description: __( 'Capture date information with a date picker.', 'jetpack-forms' ), - icon: renderMaterialIcon( - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit: JetpackDatePicker, attributes: { ...FieldDefaults.attributes, @@ -480,14 +474,10 @@ export const childBlocks = [ __( 'Mobile', 'jetpack-forms' ), ], description: __( 'Collect phone numbers from site visitors.', 'jetpack-forms' ), - icon: ( - - ), + icon: { + foreground: getIconColor(), + src: , + }, edit: editField( 'tel' ), attributes: { ...FieldDefaults.attributes, @@ -509,12 +499,12 @@ export const childBlocks = [ __( 'Multiline text', 'jetpack-forms' ), ], description: __( 'Capture longform text responses from site visitors.', 'jetpack-forms' ), - icon: renderMaterialIcon( - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit: EditTextarea, attributes: { ...FieldDefaults.attributes, @@ -528,13 +518,15 @@ export const childBlocks = [ title: __( 'Checkbox', 'jetpack-forms' ), keywords: [ __( 'Confirm', 'jetpack-forms' ), __( 'Accept', 'jetpack-forms' ) ], description: __( 'Confirm or select information with a single checkbox.', 'jetpack-forms' ), - icon: renderMaterialIcon( - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit: EditCheckbox, attributes: { ...FieldDefaults.attributes, @@ -555,18 +547,15 @@ export const childBlocks = [ 'Communicate site terms and offer visitors consent to those terms.', 'jetpack-forms' ), - icon: renderMaterialIcon( - <> - - - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + <> + + + + ), + }, attributes: { ...FieldDefaults.attributes, label: { @@ -636,12 +625,15 @@ export const childBlocks = [ 'Add a compact select box, that when expanded, allows visitors to choose one value from the list.', 'jetpack-forms' ), - icon: renderMaterialIcon( - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit: JetpackDropdown, attributes: { ...FieldDefaults.attributes, diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-multiple-choice/index.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-multiple-choice/index.js index acd80063a4dea..434f4c4811686 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-multiple-choice/index.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-multiple-choice/index.js @@ -15,12 +15,12 @@ const settings = { 'Offer users a list of choices, and allow them to select multiple options.', 'jetpack-forms' ), - icon: renderMaterialIcon( - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit, save, allowedBlocks: [ 'jetpack/field-option-checkbox' ], diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-multiple-choice/item/index.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-multiple-choice/item/index.js index 0b7d33e3f512b..9935bcb87a3fa 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-multiple-choice/item/index.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-multiple-choice/item/index.js @@ -10,14 +10,12 @@ const settings = { ...choiceItemSettings, title: __( 'Multiple Choice Option', 'jetpack-forms' ), parent: [ 'jetpack/field-checkbox-multiple' ], - icon: renderMaterialIcon( - <> - - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit, }; diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-single-choice/index.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-single-choice/index.js index f4fc2d7312448..001259b16eeba 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-single-choice/index.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-single-choice/index.js @@ -20,14 +20,14 @@ const settings = { 'Offer users a list of choices, and allow them to select a single option.', 'jetpack-forms' ), - icon: renderMaterialIcon( - - - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + + + ), + }, edit, save, allowedBlocks: [ 'jetpack/field-option-radio' ], diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-single-choice/item/index.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-single-choice/item/index.js index 2959346acdf79..86fb08a9530f4 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-single-choice/item/index.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-single-choice/item/index.js @@ -10,12 +10,12 @@ const settings = { ...choiceItemSettings, title: __( 'Single Choice Option', 'jetpack-forms' ), parent: [ 'jetpack/field-radio' ], - icon: renderMaterialIcon( - - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + + ), + }, edit, }; diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings.js index 4871c158d4b19..2ea3d1cb912b6 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings.js @@ -9,15 +9,15 @@ export const salesforceLeadFormVariation = { name: 'salesforce-web-to-lead-form', title: __( 'Salesforce Lead Form', 'jetpack-forms' ), description: __( 'Add a Salesforce Lead form to your site', 'jetpack-forms' ), - icon: renderMaterialIcon( - , - 24, - 24, - '0 0 24 24' - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + , + 24, + 24, + '0 0 24 24' + ), + }, innerBlocks: [ [ 'jetpack/field-email', diff --git a/projects/packages/forms/src/blocks/contact-form/index.js b/projects/packages/forms/src/blocks/contact-form/index.js index 5fbabeea63cfa..70cb8196dd7d9 100644 --- a/projects/packages/forms/src/blocks/contact-form/index.js +++ b/projects/packages/forms/src/blocks/contact-form/index.js @@ -14,30 +14,22 @@ export const name = 'contact-form'; const icon = renderMaterialIcon( <> - - + + ); @@ -49,7 +41,7 @@ export const settings = { 'Create forms to collect data from site visitors and manage their responses.', 'jetpack-forms' ), - icon, + icon: { src: icon, foreground: getIconColor() }, keywords: [ _x( 'email', 'block search term', 'jetpack-forms' ), _x( 'feedback', 'block search term', 'jetpack-forms' ), diff --git a/projects/packages/forms/src/blocks/contact-form/variations.js b/projects/packages/forms/src/blocks/contact-form/variations.js index aeb8fe77d8c91..71d2ba32e8e4a 100644 --- a/projects/packages/forms/src/blocks/contact-form/variations.js +++ b/projects/packages/forms/src/blocks/contact-form/variations.js @@ -25,25 +25,23 @@ const variations = compact( [ name: 'contact-form', title: __( 'Contact Form', 'jetpack-forms' ), description: __( 'Add a contact form to your page.', 'jetpack-forms' ), - icon: renderMaterialIcon( - <> - - - , - 24, - 24, - '0 0 24 24' - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + <> + + + + ), + }, innerBlocks: [ [ 'jetpack/field-name', { required: true, label: __( 'Name', 'jetpack-forms' ) } ], [ 'jetpack/field-email', { required: true, label: __( 'Email', 'jetpack-forms' ) } ], @@ -65,25 +63,23 @@ const variations = compact( [ name: 'rsvp-form', title: __( 'RSVP Form', 'jetpack-forms' ), description: __( 'Add an RSVP form to your page', 'jetpack-forms' ), - icon: renderMaterialIcon( - <> - - - , - 24, - 24, - '0 0 24 24' - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + <> + + + + ), + }, innerBlocks: [ [ 'jetpack/field-name', { required: true, label: __( 'Name', 'jetpack-forms' ) } ], [ 'jetpack/field-email', { required: true, label: __( 'Email', 'jetpack-forms' ) } ], @@ -114,29 +110,24 @@ const variations = compact( [ name: 'registration-form', title: __( 'Registration Form', 'jetpack-forms' ), description: __( 'Add a Registration form to your page', 'jetpack-forms' ), - icon: renderMaterialIcon( - <> - - - - , - 24, - 24, - '0 0 24 24' - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + <> + + + + + ), + }, innerBlocks: [ [ 'jetpack/field-name', { required: true, label: __( 'Name', 'jetpack-forms' ) } ], [ 'jetpack/field-email', { required: true, label: __( 'Email', 'jetpack-forms' ) } ], @@ -173,36 +164,26 @@ const variations = compact( [ name: 'appointment-form', title: __( 'Appointment Form', 'jetpack-forms' ), description: __( 'Add an Appointment booking form to your page', 'jetpack-forms' ), - icon: renderMaterialIcon( - <> - - - - - - , - 24, - 24, - '0 0 24 24' - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + <> + + + + + + + ), + }, innerBlocks: [ [ 'jetpack/field-name', { required: true, label: __( 'Name', 'jetpack-forms' ) } ], [ 'jetpack/field-email', { required: true, label: __( 'Email', 'jetpack-forms' ) } ], @@ -235,41 +216,34 @@ const variations = compact( [ name: 'feedback-form', title: __( 'Feedback Form', 'jetpack-forms' ), description: __( 'Add a Feedback form to your page', 'jetpack-forms' ), - icon: renderMaterialIcon( - <> - - - - - - , - 24, - 24, - '0 0 24 24' - ), + icon: { + foreground: getIconColor(), + src: renderMaterialIcon( + <> + + + + + + + ), + }, innerBlocks: [ [ 'jetpack/field-name', { required: true, label: __( 'Name', 'jetpack-forms' ) } ], [ 'jetpack/field-email', { required: true, label: __( 'Email', 'jetpack-forms' ) } ], @@ -311,7 +285,10 @@ const variations = compact( [ _x( 'email', 'block search term', 'jetpack-forms' ), _x( 'signup', 'block search term', 'jetpack-forms' ), ], - icon: people, + icon: { + foreground: getIconColor(), + src: people, + }, innerBlocks: [ [ 'jetpack/field-name', { required: true, label: __( 'Name', 'jetpack-forms' ) } ], [ 'jetpack/field-email', { required: true, label: __( 'Email', 'jetpack-forms' ) } ], From a8623b9452376716b51ca3f4ca925bb3f12eaff7 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Thu, 23 Jan 2025 10:22:53 -0800 Subject: [PATCH 185/420] Forms: Fixes checkbox checked state for admins (#40847) * Fix: #14912 * changelog * Fix the check that lets you prefills the form fields * Add tests --- .../changelog/fix-checkbox-checked-state | 4 + .../contact-form/class-contact-form-field.php | 106 +++++++----- .../test-class.contact-form-field.php | 162 ++++++++++++++++++ 3 files changed, 226 insertions(+), 46 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-checkbox-checked-state create mode 100644 projects/packages/forms/tests/php/contact-form/test-class.contact-form-field.php diff --git a/projects/packages/forms/changelog/fix-checkbox-checked-state b/projects/packages/forms/changelog/fix-checkbox-checked-state new file mode 100644 index 0000000000000..93093a7ae3ad5 --- /dev/null +++ b/projects/packages/forms/changelog/fix-checkbox-checked-state @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Form: fix the default checkstate for admins diff --git a/projects/packages/forms/src/contact-form/class-contact-form-field.php b/projects/packages/forms/src/contact-form/class-contact-form-field.php index 239935f75c16d..7b442ca76078b 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-field.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-field.php @@ -280,7 +280,6 @@ public function get_option_value( $value, $index, $options ) { * @return string HTML */ public function render() { - global $current_user, $user_identity; $field_id = $this->get_attribute( 'id' ); $field_type = $this->maybe_override_type(); @@ -359,46 +358,7 @@ public function render() { */ $field_class = apply_filters( 'jetpack_contact_form_input_class', $class ); - if ( isset( $_POST[ $field_id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- no site changes. - if ( is_array( $_POST[ $field_id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- no site changes. - $this->value = array_map( 'sanitize_textarea_field', wp_unslash( $_POST[ $field_id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- no site changes. - } else { - $this->value = sanitize_textarea_field( wp_unslash( $_POST[ $field_id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- no site changes. - } - } elseif ( isset( $_GET[ $field_id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- no site changes. - $this->value = sanitize_textarea_field( wp_unslash( $_GET[ $field_id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- no site changes. - } elseif ( - is_user_logged_in() && - ( ( defined( 'IS_WPCOM' ) && IS_WPCOM ) || - /** - * Allow third-party tools to prefill the contact form with the user's details when they're logged in. - * - * @module contact-form - * - * @since 3.2.0 - * - * @param bool false Should the Contact Form be prefilled with your details when you're logged in. Default to false. - */ - true === apply_filters( 'jetpack_auto_fill_logged_in_user', false ) - ) - ) { - // Special defaults for logged-in users - switch ( $field_type ) { - case 'email': - $this->value = $current_user->data->user_email; - break; - case 'name': - $this->value = $user_identity; - break; - case 'url': - $this->value = $current_user->data->user_url; - break; - default: - $this->value = $this->get_attribute( 'default' ); - } - } else { - $this->value = $this->get_attribute( 'default' ); - } + $this->value = $this->get_computed_field_value( $field_type, $field_id ); $field_value = Contact_Form_Plugin::strip_tags( $this->value ); $field_label = Contact_Form_Plugin::strip_tags( $field_label ); @@ -418,6 +378,65 @@ public function render() { */ return apply_filters( 'grunion_contact_form_field_html', $rendered_field, $field_label, ( in_the_loop() ? get_the_ID() : null ) ); } + /** + * Returns the computed field value for a field. It uses the POST, GET, Logged in data. + * + * @module contact-form + * + * @param string $field_type The field type. + * @param string $field_id The field id. + * + * @return string + */ + public function get_computed_field_value( $field_type, $field_id ) { + global $current_user, $user_identity; + // Use the POST Field if it is available. + if ( isset( $_POST[ $field_id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- no site changes. + if ( is_array( $_POST[ $field_id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- no site changes. + return array_map( 'sanitize_textarea_field', wp_unslash( $_POST[ $field_id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- no site changes. + } + + return sanitize_textarea_field( wp_unslash( $_POST[ $field_id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- no site changes. + } + + // Use the GET Field if it is available. + if ( isset( $_GET[ $field_id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- no site changes. + if ( is_array( $_GET[ $field_id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- no site changes. + return array_map( 'sanitize_textarea_field', wp_unslash( $_GET[ $field_id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- no site changes. + } + + return sanitize_textarea_field( wp_unslash( $_GET[ $field_id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- no site changes. + } + + if ( ! is_user_logged_in() ) { + return $this->get_attribute( 'default' ); + } + + /** + * Allow third-party tools to prefill the contact form with the user's details when they're logged in. + * + * @module contact-form + * + * @since 3.2.0 + * + * @param bool false Should the Contact Form be prefilled with your details when you're logged in. Default to false. + */ + $filter_value = apply_filters( 'jetpack_auto_fill_logged_in_user', false ); + if ( ( ! current_user_can( 'manage_options' ) && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) || $filter_value ) { + switch ( $field_type ) { + case 'email': + return $current_user->data->user_email; + + case 'name': + return ! empty( $user_identity ) ? $user_identity : $current_user->data->display_name; + + case 'url': + return $current_user->data->user_url; + } + } + + return $this->get_attribute( 'default' ); + } /** * Return the HTML for the label. @@ -1032,11 +1051,6 @@ public function render_field( $type, $id, $label, $value, $class, $placeholder, $field .= "\n
      \n"; // new in Jetpack 6.8.0 - // If they are logged in, and this is their site, don't pre-populate fields - if ( current_user_can( 'manage_options' ) ) { - $value = ''; - } - switch ( $type ) { case 'email': $field .= $this->render_email_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder ); diff --git a/projects/packages/forms/tests/php/contact-form/test-class.contact-form-field.php b/projects/packages/forms/tests/php/contact-form/test-class.contact-form-field.php new file mode 100644 index 0000000000000..19cdc676e05b6 --- /dev/null +++ b/projects/packages/forms/tests/php/contact-form/test-class.contact-form-field.php @@ -0,0 +1,162 @@ + 'admin', + 'user_pass' => 'pass', + 'user_email' => 'admin@admin.com', + 'role' => 'reader', + 'user_url' => 'https://example.com', + ) + ); + + // Simulate a logged-in user + wp_set_current_user( $user_id ); + $user_identity = 'Test User'; + } + + protected function tearDown(): void { + parent::tearDown(); + global $current_user, $user_identity; + + // Clean up globals + unset( $_POST, $_GET, $current_user, $user_identity ); + } + + /** + * Helper function to invoke the function from the class. + */ + private function invoke_get_computed_field_value( $field_type, $field_id ) { + $field = $this->get_new_field_instance( + array( + 'type' => $field_type, + 'id' => $field_id, + ) + ); + return $field->get_computed_field_value( $field_type, $field_id ); + } + + private function get_new_field_instance( $attributes ) { + $defaults = array( + 'type' => 'text', + 'id' => 'id', + 'default' => 'default', + ); + + return new Contact_Form_Field( wp_parse_args( $attributes, $defaults ) ); + } + + /** + * Test handling $_POST single value + */ + public function test_handles_post_single_value() { + $_POST['test_field'] = 'Post Value'; + + $result = $this->invoke_get_computed_field_value( 'text', 'test_field' ); + + $this->assertEquals( 'Post Value', $result ); + } + + /** + * Test handling $_POST array value + */ + public function test_handles_post_array_value() { + $_POST['test_field'] = array( 'value1', 'value2' ); + + $result = $this->invoke_get_computed_field_value( 'text', 'test_field' ); + + $this->assertEquals( array( 'value1', 'value2' ), $result ); + } + + /** + * Test handling $_GET single value + */ + public function test_handles_get_single_value() { + $_GET['test_field'] = 'Get Value'; + + $result = $this->invoke_get_computed_field_value( 'text', 'test_field' ); + + $this->assertEquals( 'Get Value', $result ); + } + + /** + * Test handling $_GET array value + */ + public function test_handles_get_array_value() { + $_GET['test_field'] = array( 'value1', 'value2' ); + + $result = $this->invoke_get_computed_field_value( 'text', 'test_field' ); + + $this->assertEquals( array( 'value1', 'value2' ), $result ); + } + + /** + * Test logged-in user email return + */ + public function test_returns_logged_in_user_email() { + add_filter( 'jetpack_auto_fill_logged_in_user', '__return_true' ); + $result = $this->invoke_get_computed_field_value( 'email', 'test_field' ); + remove_filter( 'jetpack_auto_fill_logged_in_user', '__return_true' ); + + $this->assertEquals( 'admin@admin.com', $result ); + } + + /** + * Test logged-in user name return + */ + public function test_returns_logged_in_user_name() { + add_filter( 'jetpack_auto_fill_logged_in_user', '__return_true' ); + $result = $this->invoke_get_computed_field_value( 'name', 'test_field' ); + remove_filter( 'jetpack_auto_fill_logged_in_user', '__return_true' ); + + $this->assertEquals( 'Test User', $result ); + } + + /** + * Test logged-in user URL return + */ + public function test_returns_logged_in_user_url() { + add_filter( 'jetpack_auto_fill_logged_in_user', '__return_true' ); + $result = $this->invoke_get_computed_field_value( 'url', 'test_field' ); + remove_filter( 'jetpack_auto_fill_logged_in_user', '__return_true' ); + + $this->assertEquals( 'https://example.com', $result ); + } + + /** + * Test logged-in user URL return + */ + public function test_returns_logged_out_user_url() { + global $current_user; + unset( $current_user ); + wp_set_current_user( 0 ); + + add_filter( 'jetpack_auto_fill_logged_in_user', '__return_true' ); + $result = $this->invoke_get_computed_field_value( 'url', 'test_field' ); + remove_filter( 'jetpack_auto_fill_logged_in_user', '__return_true' ); + + $this->assertEquals( 'default', $result ); + } +} // end class From cac5e60ae1d398639eb72c48cca9ece519ac3c9d Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Thu, 23 Jan 2025 14:11:23 -0500 Subject: [PATCH 186/420] Add `jetpack-composer-plugin` to `wpcomsh` and `mu-wpcom-plugin` (#41185) The `wp i18n` command ignores files under `vendor/`, on the assumption that Composer packages probably aren't using WordPress's i18n functions. This doesn't hold true for many of our packages, such as `jetpack-mu-wpcom`. Our workaround for that is a Composer plugin that installs "jetpack-library" packages under `jetpack_vendor/` instead, which `wp i18n` does not ignore. See Problem 5 at https://developer.wordpress.com/2022/01/06/wordpress-plugin-i18n-webpack-and-composer/ for details. Presumably we don't need to worry about Problem 6 for these plugins, as they're only used on WordPress.com and we'd presumably have heard about it already if that problem wasn't worked around somehow at the platform level there. --- .../plugins/mu-wpcom-plugin/.gitattributes | 1 + ...oser-plugin-to-wpcomsh-and-mu-wpcom-plugin | 4 ++ .../plugins/mu-wpcom-plugin/composer.json | 6 +- .../plugins/mu-wpcom-plugin/composer.lock | 63 ++++++++++++++++++- projects/plugins/wpcomsh/.gitattributes | 1 + .../plugins/wpcomsh/bin/i18n/generate-pot.sh | 8 +-- ...oser-plugin-to-wpcomsh-and-mu-wpcom-plugin | 4 ++ projects/plugins/wpcomsh/composer.json | 4 +- projects/plugins/wpcomsh/composer.lock | 63 ++++++++++++++++++- projects/plugins/wpcomsh/lib/class.color.php | 2 +- projects/plugins/wpcomsh/lib/tonesque.php | 2 +- 11 files changed, 148 insertions(+), 10 deletions(-) create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/add-jetpack-composer-plugin-to-wpcomsh-and-mu-wpcom-plugin create mode 100644 projects/plugins/wpcomsh/changelog/add-jetpack-composer-plugin-to-wpcomsh-and-mu-wpcom-plugin diff --git a/projects/plugins/mu-wpcom-plugin/.gitattributes b/projects/plugins/mu-wpcom-plugin/.gitattributes index 623a47aeeff78..1c778c5bd5663 100644 --- a/projects/plugins/mu-wpcom-plugin/.gitattributes +++ b/projects/plugins/mu-wpcom-plugin/.gitattributes @@ -10,6 +10,7 @@ vendor/autoload.php production-include vendor/composer/** production-include vendor/automattic/** production-include vendor/scssphp/scssphp/** production-include +/jetpack_vendor/** production-include # Files to exclude from the mirror repo, but included in the monorepo. # Remember to end all directories with `/**` to properly tag every file. diff --git a/projects/plugins/mu-wpcom-plugin/changelog/add-jetpack-composer-plugin-to-wpcomsh-and-mu-wpcom-plugin b/projects/plugins/mu-wpcom-plugin/changelog/add-jetpack-composer-plugin-to-wpcomsh-and-mu-wpcom-plugin new file mode 100644 index 0000000000000..fc509b4c97346 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/add-jetpack-composer-plugin-to-wpcomsh-and-mu-wpcom-plugin @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Use `Automattic/jetpack-composer-plugin` so jetpack-library packages will be installed in a place where `wp i18n` will see them. diff --git a/projects/plugins/mu-wpcom-plugin/composer.json b/projects/plugins/mu-wpcom-plugin/composer.json index 03c52b5fd753d..70abf182aed2a 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.json +++ b/projects/plugins/mu-wpcom-plugin/composer.json @@ -4,6 +4,7 @@ "type": "wordpress-plugin", "license": "GPL-2.0-or-later", "require": { + "automattic/jetpack-composer-plugin": "@dev", "automattic/jetpack-mu-wpcom": "@dev" }, "require-dev": { @@ -45,6 +46,9 @@ "release-branch-prefix": "mu-wpcom" }, "config": { - "autoloader-suffix": "d9d132a783958a00a2c7cccff60ca42d_jetpack_mu_wpcom_pluginⓥ2_7_0" + "autoloader-suffix": "d9d132a783958a00a2c7cccff60ca42d_jetpack_mu_wpcom_pluginⓥ2_7_0", + "allow-plugins": { + "automattic/jetpack-composer-plugin": true + } } } diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index d93f5a2a12da1..5809ffd01bef4 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "af295edda39f3f040eedb7dc3cc58237", + "content-hash": "24fe6dcb29ff2384e2c975a43cdcdd71", "packages": [ { "name": "automattic/jetpack-a8c-mc-stats", @@ -502,6 +502,66 @@ "relative": true } }, + { + "name": "automattic/jetpack-composer-plugin", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/composer-plugin", + "reference": "8bc70ad510c3f54b6fa962b2be1ad442422f50b5" + }, + "require": { + "composer-plugin-api": "^2.2", + "php": ">=7.2" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "composer/composer": "^2.2", + "yoast/phpunit-polyfills": "^1.1.1" + }, + "type": "composer-plugin", + "extra": { + "plugin-modifies-install-path": true, + "class": "Automattic\\Jetpack\\Composer\\Plugin", + "mirror-repo": "Automattic/jetpack-composer-plugin", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-composer-plugin/compare/v${old}...v${new}" + }, + "autotagger": true, + "branch-alias": { + "dev-trunk": "4.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-coverage": [ + "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "A custom installer plugin for Composer to move Jetpack packages out of `vendor/` so WordPress's translation infrastructure will find their strings.", + "keywords": [ + "composer", + "i18n", + "jetpack", + "plugin" + ], + "transport-options": { + "relative": true + } + }, { "name": "automattic/jetpack-connection", "version": "dev-trunk", @@ -4458,6 +4518,7 @@ "minimum-stability": "dev", "stability-flags": { "automattic/jetpack-changelogger": 20, + "automattic/jetpack-composer-plugin": 20, "automattic/jetpack-mu-wpcom": 20 }, "prefer-stable": true, diff --git a/projects/plugins/wpcomsh/.gitattributes b/projects/plugins/wpcomsh/.gitattributes index ceaacf3606ce1..5525b3d4eb332 100644 --- a/projects/plugins/wpcomsh/.gitattributes +++ b/projects/plugins/wpcomsh/.gitattributes @@ -13,6 +13,7 @@ package.json export-ignore /vendor/scssphp/scssphp/** production-include /vendor/tubalmartin/** production-include /vendor/wordpress/classic-editor-plugin/** production-include +/jetpack_vendor/** production-include # Files to exclude from the mirror repo, but included in the monorepo. # Remember to end all directories with `/**` to properly tag every file. diff --git a/projects/plugins/wpcomsh/bin/i18n/generate-pot.sh b/projects/plugins/wpcomsh/bin/i18n/generate-pot.sh index 9b8c8efb4d218..62ba9344c52fe 100755 --- a/projects/plugins/wpcomsh/bin/i18n/generate-pot.sh +++ b/projects/plugins/wpcomsh/bin/i18n/generate-pot.sh @@ -9,19 +9,19 @@ find -L . \ -or -path './vendor/*/wordpress' \ -or -path './vendor/*/node_modules' \ -or -path './vendor/*/jetpack_vendor' \ + -or -path './jetpack_vendor/*/vendor' \ + -or -path './jetpack_vendor/*/wordpress' \ + -or -path './jetpack_vendor/*/node_modules' \ + -or -path './jetpack_vendor/*/jetpack_vendor' \ \) \ -prune \ -or \ -name '*.php' -and ! -path './build/*' -and ! -path './custom-colors/*' \ -and \( \ ! -path './vendor/*' \ - -or -path './vendor/automattic/jetpack-mu-wpcom/*' \ -or -path './vendor/automattic/at-pressable-podcasting/*' \ -or -path './vendor/automattic/custom-fonts-typekit/*' \ -or -path './vendor/automattic/custom-fonts/*' \ - -or -path './vendor/automattic/jetpack-assets/*' \ - -or -path './vendor/automattic/jetpack-config/*' \ - -or -path './vendor/automattic/jetpack-post-list/*' \ \) \ -print \ | sed -e 's,^\./,,' \ diff --git a/projects/plugins/wpcomsh/changelog/add-jetpack-composer-plugin-to-wpcomsh-and-mu-wpcom-plugin b/projects/plugins/wpcomsh/changelog/add-jetpack-composer-plugin-to-wpcomsh-and-mu-wpcom-plugin new file mode 100644 index 0000000000000..fc509b4c97346 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/add-jetpack-composer-plugin-to-wpcomsh-and-mu-wpcom-plugin @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Use `Automattic/jetpack-composer-plugin` so jetpack-library packages will be installed in a place where `wp i18n` will see them. diff --git a/projects/plugins/wpcomsh/composer.json b/projects/plugins/wpcomsh/composer.json index 5ca78534d480e..7b6dafb6136f6 100644 --- a/projects/plugins/wpcomsh/composer.json +++ b/projects/plugins/wpcomsh/composer.json @@ -11,6 +11,7 @@ "automattic/text-media-widget-styles": "^2.0", "automattic/wc-calypso-bridge": "2.8.1", "wordpress/classic-editor-plugin": "1.6.7", + "automattic/jetpack-composer-plugin": "@dev", "automattic/jetpack-config": "@dev", "automattic/jetpack-post-list": "@dev", "automattic/jetpack-mu-wpcom": "@dev", @@ -122,7 +123,8 @@ "config": { "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true, - "composer/installers": true + "composer/installers": true, + "automattic/jetpack-composer-plugin": true }, "autoloader-suffix": "26841ac2064774301cbe06d174833bfc_wpcomshⓥ6_0_0" }, diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index 0fd3f243ed3d7..bdef3c1de7ae1 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6ab2743918e89ff38920aec42c033adf", + "content-hash": "61f98aeaa724ef3b6c8460aa67a09223", "packages": [ { "name": "automattic/at-pressable-podcasting", @@ -567,6 +567,66 @@ "relative": true } }, + { + "name": "automattic/jetpack-composer-plugin", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/composer-plugin", + "reference": "8bc70ad510c3f54b6fa962b2be1ad442422f50b5" + }, + "require": { + "composer-plugin-api": "^2.2", + "php": ">=7.2" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "composer/composer": "^2.2", + "yoast/phpunit-polyfills": "^1.1.1" + }, + "type": "composer-plugin", + "extra": { + "plugin-modifies-install-path": true, + "class": "Automattic\\Jetpack\\Composer\\Plugin", + "mirror-repo": "Automattic/jetpack-composer-plugin", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-composer-plugin/compare/v${old}...v${new}" + }, + "autotagger": true, + "branch-alias": { + "dev-trunk": "4.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-coverage": [ + "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "A custom installer plugin for Composer to move Jetpack packages out of `vendor/` so WordPress's translation infrastructure will find their strings.", + "keywords": [ + "composer", + "i18n", + "jetpack", + "plugin" + ], + "transport-options": { + "relative": true + } + }, { "name": "automattic/jetpack-config", "version": "dev-trunk", @@ -4806,6 +4866,7 @@ "minimum-stability": "dev", "stability-flags": { "automattic/jetpack-changelogger": 20, + "automattic/jetpack-composer-plugin": 20, "automattic/jetpack-config": 20, "automattic/jetpack-mu-wpcom": 20, "automattic/jetpack-post-list": 20 diff --git a/projects/plugins/wpcomsh/lib/class.color.php b/projects/plugins/wpcomsh/lib/class.color.php index 43419401fc27d..7a6750a2699f4 100644 --- a/projects/plugins/wpcomsh/lib/class.color.php +++ b/projects/plugins/wpcomsh/lib/class.color.php @@ -8,4 +8,4 @@ // phpcs:ignoreFile WordPress.Files.FileName.NotHyphenatedLowercase // Dummy comment to make phpcs happy. -require_once WPCOMSH__PLUGIN_DIR_PATH . '/vendor/automattic/jetpack-classic-theme-helper/_inc/lib/class.color.php'; \ No newline at end of file +require_once WPCOMSH__PLUGIN_DIR_PATH . '/jetpack_vendor/automattic/jetpack-classic-theme-helper/_inc/lib/class.color.php'; diff --git a/projects/plugins/wpcomsh/lib/tonesque.php b/projects/plugins/wpcomsh/lib/tonesque.php index cc95ebcc45442..7900bf25aad4b 100644 --- a/projects/plugins/wpcomsh/lib/tonesque.php +++ b/projects/plugins/wpcomsh/lib/tonesque.php @@ -6,4 +6,4 @@ */ // Dummy comment to make phpcs happy. -require_once WPCOMSH__PLUGIN_DIR_PATH . '/vendor/automattic/jetpack-classic-theme-helper/_inc/lib/tonesque.php'; +require_once WPCOMSH__PLUGIN_DIR_PATH . '/jetpack_vendor/automattic/jetpack-classic-theme-helper/_inc/lib/tonesque.php'; From 192c97673ef1172f84436775666e09636d0d5b62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dami=C3=A1n=20Su=C3=A1rez?= Date: Thu, 23 Jan 2025 20:17:26 +0000 Subject: [PATCH 187/420] Introduce `children` PieChart property (#41289) * introduce `children` property to the PieChart cmp * tweak the Doughnut story to render children's * changelog --- .../update-charts-add-children-prop-to-pie-chart | 4 ++++ .../src/components/pie-chart/pie-chart.tsx | 8 ++++++++ .../pie-chart/stories/index.stories.tsx | 16 +++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 projects/js-packages/charts/changelog/update-charts-add-children-prop-to-pie-chart diff --git a/projects/js-packages/charts/changelog/update-charts-add-children-prop-to-pie-chart b/projects/js-packages/charts/changelog/update-charts-add-children-prop-to-pie-chart new file mode 100644 index 0000000000000..49238039304d3 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-charts-add-children-prop-to-pie-chart @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Introduce `children` PieChart property diff --git a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx index dd5641ff15339..f5160948f584a 100644 --- a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx @@ -48,6 +48,11 @@ interface PieChartProps extends OmitBaseChartProps { * A value between 0 and 1, where 0 means no corner radius. */ cornerScale?: number; + + /** + * Use the children prop to render additional elements on the chart. + */ + children?: React.ReactNode; } /** @@ -93,6 +98,7 @@ const PieChart = ( { padding = 20, gapScale = 0, cornerScale = 0, + children = null, }: PieChartProps ) => { const providerTheme = useChartTheme(); const { onMouseMove, onMouseLeave, tooltipOpen, tooltipData, tooltipLeft, tooltipTop } = @@ -206,6 +212,8 @@ const PieChart = ( { } ); } } + + { children } diff --git a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx index 273c0a7262b23..9f0c741f047d7 100644 --- a/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/stories/index.stories.tsx @@ -1,3 +1,5 @@ +import { Group } from '@visx/group'; +import { Text } from '@visx/text'; import { ThemeProvider, jetpackTheme, wooTheme } from '../../../providers/theme'; import { PieChart } from '../index'; import type { Meta, StoryObj } from '@storybook/react'; @@ -113,7 +115,6 @@ type Story = StoryObj< typeof PieChart >; export const Default: Story = { args: { - size: 600, thickness: 1, gapScale: 0, padding: 20, @@ -148,6 +149,19 @@ export const Doughnut: Story = { args: { ...Default.args, thickness: 0.5, + padding: 0, + gapScale: 0.03, + cornerScale: 0.03, + children: ( + + + 🍩 Doughnut + + + Three donuts for the price of one! + + + ), }, parameters: { docs: { From 1398afe074cf13b61fd6bdd49451fee06c6e8377 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Fri, 24 Jan 2025 13:23:45 +1300 Subject: [PATCH 188/420] Line chart: Y axis Non-zero start + fix lable cutoff (#41291) * allow non-zero start for Y axis * changelog * fix y label cutoffs --- .../charts/changelog/add-proper-scale-for-y-axis | 4 ++++ .../charts/src/components/line-chart/line-chart.tsx | 8 ++++---- .../src/components/line-chart/stories/index.stories.tsx | 1 + projects/js-packages/charts/src/types.ts | 3 +++ 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 projects/js-packages/charts/changelog/add-proper-scale-for-y-axis diff --git a/projects/js-packages/charts/changelog/add-proper-scale-for-y-axis b/projects/js-packages/charts/changelog/add-proper-scale-for-y-axis new file mode 100644 index 0000000000000..19e538692ed9f --- /dev/null +++ b/projects/js-packages/charts/changelog/add-proper-scale-for-y-axis @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Y axis non-zero start for line chart diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index 287cd0845969f..ce6b980434198 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -79,8 +79,8 @@ const LineChart: FC< LineChartProps > = ( { data, width, height, - margin = { top: 20, right: 20, bottom: 40, left: 40 }, className, + margin = {}, withTooltips = true, showLegend = false, legendOrientation = 'horizontal', @@ -122,9 +122,9 @@ const LineChart: FC< LineChartProps > = ( { theme={ theme } width={ width } height={ height } - margin={ margin } - xScale={ { type: 'time' } } - yScale={ { type: 'linear', nice: true } } + margin={ { top: 20, right: 20, bottom: 40, left: 40, ...margin } } + xScale={ { type: 'time', ...options?.xScale } } + yScale={ { type: 'linear', nice: true, zero: false, ...options?.yScale } } > = T[ keyof T ]; @@ -130,6 +131,8 @@ export type BaseChartProps< T = DataPoint | DataPointDate > = { * More options for the chart. */ options?: { + yScale?: { type?: ScaleType; zero?: boolean }; + xScale?: { type?: ScaleType }; axis?: { x?: AxisOptions; y?: AxisOptions; From 618e6eeefead8d83f4d9e53da989d15bb99e4378 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Fri, 24 Jan 2025 13:43:38 +1300 Subject: [PATCH 189/420] Line Chart: Only use area lines (#41292) * use only area line for line chart * changelog * exclude the curve change * revert package.json changes * pnpm lock update * revert some unnecessary changes --- .../changelog/update-only-use-area-lines | 4 ++ .../src/components/line-chart/line-chart.tsx | 46 +++++++------------ 2 files changed, 21 insertions(+), 29 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-only-use-area-lines diff --git a/projects/js-packages/charts/changelog/update-only-use-area-lines b/projects/js-packages/charts/changelog/update-only-use-area-lines new file mode 100644 index 0000000000000..ca23ea251046e --- /dev/null +++ b/projects/js-packages/charts/changelog/update-only-use-area-lines @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Only use area line for line chart diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index ce6b980434198..dccc2437733d3 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -1,7 +1,6 @@ import { LinearGradient } from '@visx/gradient'; import { XYChart, - AnimatedLineSeries, AnimatedAreaSeries, AnimatedAxis, AnimatedGrid, @@ -9,7 +8,7 @@ import { buildChartTheme, } from '@visx/xychart'; import clsx from 'clsx'; -import { FC } from 'react'; +import { FC, useMemo } from 'react'; import { useChartTheme } from '../../providers/theme/theme-provider'; import { Legend } from '../legend'; import { withResponsive } from '../shared/with-responsive'; @@ -89,6 +88,19 @@ const LineChart: FC< LineChartProps > = ( { } ) => { const providerTheme = useChartTheme(); + const theme = useMemo( () => { + const seriesColors = + data?.map( series => series.options?.stroke ?? '' ).filter( Boolean ) ?? []; + return buildChartTheme( { + backgroundColor: providerTheme.backgroundColor, + colors: [ ...seriesColors, ...providerTheme.colors ], + gridStyles: providerTheme.gridStyles, + tickLength: providerTheme?.tickLength || 0, + gridColor: providerTheme?.gridColor || '', + gridColorDark: providerTheme?.gridColorDark || '', + } ); + }, [ providerTheme, data ] ); + if ( ! data?.length ) { return (
      Empty...
      @@ -107,15 +119,6 @@ const LineChart: FC< LineChartProps > = ( { yAccessor: ( d: DataPointDate ) => d.value, }; - const theme = buildChartTheme( { - backgroundColor: providerTheme.backgroundColor, - colors: providerTheme.colors, - gridStyles: providerTheme.gridStyles, - tickLength: providerTheme?.tickLength || 0, - gridColor: providerTheme?.gridColor || '', - gridColorDark: providerTheme?.gridColorDark || '', - } ); - return (
      = ( { { data.map( ( seriesData, index ) => { const stroke = seriesData.options?.stroke ?? theme.colors[ index % theme.colors.length ]; - return ( <> = ( { toOpacity={ 0.1 } { ...seriesData.options?.gradient } /> - - { /** Theoretically the area series should work without the line series; however it outlines the area with borders, which isn't ideal. */ } - { /** TODO: Investigate whehter we could leverage area series alone. */ } - { withGradientFill && ( - - ) } ); } ) } From 1c61018fdffc858a228106358482bcf640d80440 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Fri, 24 Jan 2025 14:12:51 +1300 Subject: [PATCH 190/420] Line chart: use natural curve (#41293) --- pnpm-lock.yaml | 3 +++ .../charts/changelog/update-use-natural-curve | 4 ++++ projects/js-packages/charts/package.json | 23 ++++++++++--------- .../src/components/line-chart/line-chart.tsx | 2 ++ 4 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-use-natural-curve diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c87a94c4a18e2..39b95d5a5ed94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -304,6 +304,9 @@ importers: '@visx/axis': specifier: ^3.12.0 version: 3.12.0(react@18.3.1) + '@visx/curve': + specifier: 3.12.0 + version: 3.12.0 '@visx/event': specifier: ^3.8.0 version: 3.12.0 diff --git a/projects/js-packages/charts/changelog/update-use-natural-curve b/projects/js-packages/charts/changelog/update-use-natural-curve new file mode 100644 index 0000000000000..44da3067eef35 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-use-natural-curve @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Line chart: use natural curve diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 452d7e5972ee9..831884bb00ad5 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -49,6 +49,7 @@ "@babel/runtime": "7.26.0", "@react-spring/web": "9.7.3", "@visx/axis": "^3.12.0", + "@visx/curve": "3.12.0", "@visx/event": "^3.8.0", "@visx/gradient": "3.12.0", "@visx/grid": "^3.12.0", @@ -64,11 +65,14 @@ "tslib": "2.5.0" }, "devDependencies": { + "@automattic/jetpack-webpack-config": "workspace:*", "@babel/core": "7.26.0", + "@babel/plugin-transform-react-jsx": "7.25.9", "@babel/plugin-transform-runtime": "7.25.9", "@babel/preset-env": "7.26.0", "@babel/preset-react": "7.26.3", "@babel/preset-typescript": "7.26.0", + "@jest/globals": "^29.0.0", "@rollup/plugin-commonjs": "26.0.1", "@rollup/plugin-json": "6.1.0", "@rollup/plugin-node-resolve": "15.3.0", @@ -76,8 +80,15 @@ "@rollup/plugin-typescript": "12.1.0", "@storybook/blocks": "8.4.7", "@storybook/react": "8.4.7", + "@testing-library/jest-dom": "^6.0.0", + "@testing-library/react": "^14.0.0", + "@types/jest": "^29.0.0", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", + "@types/testing-library__jest-dom": "^5.14.9", + "@wordpress/babel-plugin-import-jsx-pragma": "5.14.0", + "@wordpress/element": "6.14.0", + "babel-jest": "^29.7.0", "babel-loader": "9.1.2", "clean-webpack-plugin": "^4.0.0", "css-loader": "^6.7.0", @@ -102,17 +113,7 @@ "tsconfig-paths-webpack-plugin": "4.2.0", "typescript": "5.7.2", "webpack": "^5.88.0", - "webpack-cli": "^5.1.0", - "@testing-library/react": "^14.0.0", - "@testing-library/jest-dom": "^6.0.0", - "@types/jest": "^29.0.0", - "@types/testing-library__jest-dom": "^5.14.9", - "@jest/globals": "^29.0.0", - "babel-jest": "^29.7.0", - "@automattic/jetpack-webpack-config": "workspace:*", - "@wordpress/babel-plugin-import-jsx-pragma": "5.14.0", - "@wordpress/element": "6.14.0", - "@babel/plugin-transform-react-jsx": "7.25.9" + "webpack-cli": "^5.1.0" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0", diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index dccc2437733d3..4d9331edfe38e 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -1,3 +1,4 @@ +import { curveNatural } from '@visx/curve'; import { LinearGradient } from '@visx/gradient'; import { XYChart, @@ -156,6 +157,7 @@ const LineChart: FC< LineChartProps > = ( { { ...accessors } fill={ withGradientFill ? `url(#area-gradient-${ index + 1 })` : undefined } renderLine={ true } + curve={ curveNatural } /> ); From 7f5fce2c56b997a6ccaf434bd54f62dc14c8818b Mon Sep 17 00:00:00 2001 From: Anna McPhee <30754158+annacmc@users.noreply.github.com> Date: Fri, 24 Jan 2025 14:45:30 +1100 Subject: [PATCH 191/420] Chart Library: Add Line Chart component tests + resolve failing tests (#41174) * Add dependencies for testing * create line chart tests * fix up test id on gradient element * withGradientFill default to true * lockfile update * tsconfig update * changelog * config updates * reinstate updates to tsconfig for rollup * typo fix * rename directories * update linechart tests * update line chart component to validate data * update container testing * modify line chart component * add ARIA role and label to chart container * add error state story to storybook * remove unecessary inline style * Rebase + Tidy Up --- .../add-chart-library-test-line-chart | 4 + projects/js-packages/charts/global.d.ts | 14 -- .../src/components/line-chart/line-chart.tsx | 54 ++++-- .../line-chart/stories/index.stories.tsx | 66 +++++++ .../line-chart/test/line-chart.test.tsx | 165 ++++++++++++++++++ .../pie-chart/__tests__/pie-chart.test.tsx | 59 ------- .../pie-chart/test/pie-chart.test.tsx | 51 +++++- projects/js-packages/charts/src/types.ts | 2 +- 8 files changed, 321 insertions(+), 94 deletions(-) create mode 100644 projects/js-packages/charts/changelog/add-chart-library-test-line-chart delete mode 100644 projects/js-packages/charts/global.d.ts create mode 100644 projects/js-packages/charts/src/components/line-chart/test/line-chart.test.tsx delete mode 100644 projects/js-packages/charts/src/components/pie-chart/__tests__/pie-chart.test.tsx diff --git a/projects/js-packages/charts/changelog/add-chart-library-test-line-chart b/projects/js-packages/charts/changelog/add-chart-library-test-line-chart new file mode 100644 index 0000000000000..77c323e9bcce3 --- /dev/null +++ b/projects/js-packages/charts/changelog/add-chart-library-test-line-chart @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Charts: adds tests for line chart component diff --git a/projects/js-packages/charts/global.d.ts b/projects/js-packages/charts/global.d.ts deleted file mode 100644 index 7930501819925..0000000000000 --- a/projects/js-packages/charts/global.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// - -declare global { - const describe: jest.Describe; - const test: jest.It; - const expect: jest.Expect; - const it: jest.It; - const beforeAll: jest.Lifecycle; - const afterAll: jest.Lifecycle; - const beforeEach: jest.Lifecycle; - const afterEach: jest.Lifecycle; -} - -export {}; diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index 4d9331edfe38e..b332c1dbffc5d 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -75,6 +75,23 @@ const formatDateTick = ( value: number ) => { } ); }; +const validateData = ( data: SeriesData[] ) => { + if ( ! data?.length ) return 'No data available'; + + const hasInvalidData = data.some( series => + series.data.some( + point => + isNaN( point.value as number ) || + point.value === null || + point.value === undefined || + isNaN( point.date.getTime() ) + ) + ); + + if ( hasInvalidData ) return 'Invalid data'; + return null; +}; + const LineChart: FC< LineChartProps > = ( { data, width, @@ -102,10 +119,9 @@ const LineChart: FC< LineChartProps > = ( { } ); }, [ providerTheme, data ] ); - if ( ! data?.length ) { - return ( -
      Empty...
      - ); + const error = validateData( data ); + if ( error ) { + return
      { error }
      ; } // Create legend items from group labels, this iterates over groups rather than data points @@ -121,7 +137,12 @@ const LineChart: FC< LineChartProps > = ( { }; return ( -
      +
      = ( { { data.map( ( seriesData, index ) => { const stroke = seriesData.options?.stroke ?? theme.colors[ index % theme.colors.length ]; return ( - <> - + + { withGradientFill && ( + + ) } - + ); } ) } diff --git a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx index 777d27ba2efb9..c83e1ced0cec3 100644 --- a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx @@ -115,3 +115,69 @@ GridientFilled.args = { axis: { x: { numTicks: 10 }, y: { orientation: 'right' } }, }, }; + +export const ErrorStates: StoryObj< typeof LineChart > = { + render: () => ( +
      +
      +

      Empty Data

      + +
      +
      +

      Invalid Date Values

      + +
      +
      +

      Invalid Values

      + +
      +
      +

      Single Data Point

      + +
      +
      + ), + parameters: { + docs: { + description: { + story: 'Examples of how the line chart handles various error states and edge cases.', + }, + }, + }, +}; diff --git a/projects/js-packages/charts/src/components/line-chart/test/line-chart.test.tsx b/projects/js-packages/charts/src/components/line-chart/test/line-chart.test.tsx new file mode 100644 index 0000000000000..1564427400e35 --- /dev/null +++ b/projects/js-packages/charts/src/components/line-chart/test/line-chart.test.tsx @@ -0,0 +1,165 @@ +/** + * @jest-environment jsdom + */ + +import { render, screen } from '@testing-library/react'; +import { ThemeProvider } from '../../../providers/theme'; +import LineChart from '../line-chart'; + +describe( 'LineChart', () => { + const defaultProps = { + width: 500, + height: 300, + data: [ + { + label: 'Series A', + data: [ + { date: new Date( '2024-01-01' ), value: 10, label: 'Jan 1' }, + { date: new Date( '2024-01-02' ), value: 20, label: 'Jan 2' }, + ], + options: {}, + }, + ], + }; + + const renderWithTheme = ( props = {} ) => { + return render( + + + + ); + }; + + describe( 'Data Validation', () => { + test( 'handles empty data array', () => { + renderWithTheme( { data: [] } ); + expect( screen.getByText( /no data available/i ) ).toBeInTheDocument(); + } ); + + test( 'handles single data point', () => { + renderWithTheme( { + data: [ + { + label: 'Series A', + data: [ { date: new Date( '2024-01-01' ), value: 10, label: 'Jan 1' } ], + }, + ], + } ); + // Should render without crashing and show the single point + expect( screen.getByRole( 'img', { name: /line chart/i } ) ).toBeInTheDocument(); + } ); + + test( 'handles null or undefined values', () => { + renderWithTheme( { + data: [ + { + label: 'Series A', + data: [ + { date: new Date( '2024-01-01' ), value: null as number | null, label: 'Jan 1' }, + { + date: new Date( '2024-01-02' ), + value: undefined as number | undefined, + label: 'Jan 2', + }, + ], + }, + ], + } ); + expect( screen.getByText( /invalid data/i ) ).toBeInTheDocument(); + } ); + + test( 'handles invalid date values', () => { + renderWithTheme( { + data: [ + { + label: 'Series A', + data: [ + { date: new Date( 'invalid' ), value: 10, label: 'Jan 1' }, + { date: new Date( '2024-01-02' ), value: 20, label: 'Jan 2' }, + ], + }, + ], + } ); + expect( screen.getByText( /invalid data/i ) ).toBeInTheDocument(); + } ); + } ); + + describe( 'Legend', () => { + test( 'shows legend when showLegend is true', () => { + renderWithTheme( { + showLegend: true, + data: [ + { + label: 'Series A', + data: [ { date: new Date( '2024-01-01' ), value: 10, label: 'Jan 1' } ], + }, + { + label: 'Series B', + data: [ { date: new Date( '2024-01-01' ), value: 20, label: 'Jan 1' } ], + }, + ], + } ); + expect( screen.getByText( 'Series A' ) ).toBeInTheDocument(); + expect( screen.getByText( 'Series B' ) ).toBeInTheDocument(); + } ); + + test( 'hides legend when showLegend is false', () => { + renderWithTheme( { + showLegend: false, + data: [ + { + label: 'Series A', + data: [ { date: new Date( '2024-01-01' ), value: 10, label: 'Jan 1' } ], + }, + ], + } ); + expect( screen.queryByText( 'Series A' ) ).not.toBeInTheDocument(); + } ); + } ); + + describe( 'Gradient Fill', () => { + test( 'renders with gradient fill when withGradientFill is true', () => { + renderWithTheme( { withGradientFill: true } ); + expect( screen.getByTestId( 'line-gradient' ) ).toBeInTheDocument(); + } ); + + test( 'renders without gradient fill when withGradientFill is false', () => { + renderWithTheme( { withGradientFill: false } ); + expect( screen.queryByTestId( 'line-gradient' ) ).not.toBeInTheDocument(); + } ); + } ); + + describe( 'Axis Configuration', () => { + test( 'renders with custom axis options', () => { + renderWithTheme( { + options: { + axis: { + x: { orientation: 'top' }, + y: { orientation: 'right' }, + }, + }, + } ); + // The chart should render with the custom axis configuration + expect( screen.getByRole( 'img', { name: /line chart/i } ) ).toBeInTheDocument(); + } ); + } ); + + describe( 'Responsiveness', () => { + test( 'renders with custom dimensions', () => { + renderWithTheme( { + width: 800, + height: 400, + data: [ + { + label: 'Series A', + data: [ { date: new Date( '2024-01-01' ), value: 10 } ], + }, + ], + } ); + + // Instead of checking styles, verify the chart renders + expect( screen.getByTestId( 'line-chart' ) ).toBeInTheDocument(); + expect( screen.getByRole( 'img', { name: /line chart/i } ) ).toBeInTheDocument(); + } ); + } ); +} ); diff --git a/projects/js-packages/charts/src/components/pie-chart/__tests__/pie-chart.test.tsx b/projects/js-packages/charts/src/components/pie-chart/__tests__/pie-chart.test.tsx deleted file mode 100644 index 1958dbaa2f6f3..0000000000000 --- a/projects/js-packages/charts/src/components/pie-chart/__tests__/pie-chart.test.tsx +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @jest-environment jsdom - */ - -import { render, screen } from '@testing-library/react'; -import { ThemeProvider } from '../../../providers/theme'; -import PieChart from '../pie-chart'; - -describe( 'PieChart', () => { - const defaultProps = { - size: 500, - data: [ - { label: 'A', percentage: 50, value: 50 }, - { label: 'B', percentage: 50, value: 50 }, - ], - }; - - const renderWithTheme = ( props = {} ) => { - return render( - - - - ); - }; - - describe( 'Data Validation', () => { - test( 'validates total percentage equals 100', () => { - renderWithTheme( { - data: [ - { label: 'A', percentage: 60, value: 60 }, - { label: 'B', percentage: 50, value: 50 }, - ], - } ); - expect( screen.getByText( /invalid percentage total/i ) ).toBeInTheDocument(); - } ); - - test( 'handles negative values', () => { - renderWithTheme( { - data: [ - { label: 'A', percentage: -30, value: -30 }, - { label: 'B', percentage: 130, value: 130 }, - ], - } ); - expect( screen.getByText( /invalid data/i ) ).toBeInTheDocument(); - } ); - - test( 'handles empty data array', () => { - renderWithTheme( { data: [] } ); - expect( screen.getByText( /no data available/i ) ).toBeInTheDocument(); - } ); - - test( 'handles single data point', () => { - renderWithTheme( { - data: [ { label: 'A', percentage: 100, value: 100 } ], - } ); - expect( screen.getByText( 'A' ) ).toBeInTheDocument(); - } ); - } ); -} ); diff --git a/projects/js-packages/charts/src/components/pie-chart/test/pie-chart.test.tsx b/projects/js-packages/charts/src/components/pie-chart/test/pie-chart.test.tsx index 4cb1f0af0d8e4..1958dbaa2f6f3 100644 --- a/projects/js-packages/charts/src/components/pie-chart/test/pie-chart.test.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/test/pie-chart.test.tsx @@ -2,17 +2,58 @@ * @jest-environment jsdom */ -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import { ThemeProvider } from '../../../providers/theme'; import PieChart from '../pie-chart'; describe( 'PieChart', () => { - it( 'renders', () => { - const { container } = render( + const defaultProps = { + size: 500, + data: [ + { label: 'A', percentage: 50, value: 50 }, + { label: 'B', percentage: 50, value: 50 }, + ], + }; + + const renderWithTheme = ( props = {} ) => { + return render( - + ); - expect( container ).toBeTruthy(); + }; + + describe( 'Data Validation', () => { + test( 'validates total percentage equals 100', () => { + renderWithTheme( { + data: [ + { label: 'A', percentage: 60, value: 60 }, + { label: 'B', percentage: 50, value: 50 }, + ], + } ); + expect( screen.getByText( /invalid percentage total/i ) ).toBeInTheDocument(); + } ); + + test( 'handles negative values', () => { + renderWithTheme( { + data: [ + { label: 'A', percentage: -30, value: -30 }, + { label: 'B', percentage: 130, value: 130 }, + ], + } ); + expect( screen.getByText( /invalid data/i ) ).toBeInTheDocument(); + } ); + + test( 'handles empty data array', () => { + renderWithTheme( { data: [] } ); + expect( screen.getByText( /no data available/i ) ).toBeInTheDocument(); + } ); + + test( 'handles single data point', () => { + renderWithTheme( { + data: [ { label: 'A', percentage: 100, value: 100 } ], + } ); + expect( screen.getByText( 'A' ) ).toBeInTheDocument(); + } ); } ); } ); diff --git a/projects/js-packages/charts/src/types.ts b/projects/js-packages/charts/src/types.ts index 96a5ee283a72d..46a1e858b8ae0 100644 --- a/projects/js-packages/charts/src/types.ts +++ b/projects/js-packages/charts/src/types.ts @@ -13,8 +13,8 @@ export type DataPoint = { export type DataPointDate = { date: Date; + value: number | null; label?: string; - value: number; }; export type SeriesData = { From 4757d07f6454b5b25b78dbaf0d8a5330edef55f5 Mon Sep 17 00:00:00 2001 From: Philip Jackson Date: Fri, 24 Jan 2025 20:35:39 +1300 Subject: [PATCH 192/420] Launchpad: add URL hash to "build audience" task (#41299) start_building_your_audience task navigates with a hash in the URL The URL hash can be used by Calypso to decide whether to mark the task as completed. --- .../changelog/add-query-param-build-audience-task | 4 ++++ .../src/features/launchpad/launchpad-task-definitions.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-query-param-build-audience-task diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-query-param-build-audience-task b/projects/packages/jetpack-mu-wpcom/changelog/add-query-param-build-audience-task new file mode 100644 index 0000000000000..3ace206df4a53 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-query-param-build-audience-task @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +"Build your audience" task action now has a URL hash diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php index 086b8eef29985..3ca3dd81a5c34 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php @@ -276,7 +276,7 @@ function wpcom_launchpad_get_task_definitions() { }, 'is_complete_callback' => 'wpcom_launchpad_is_task_option_completed', 'get_calypso_path' => function ( $task, $default, $data ) { - return '/subscribers/' . $data['site_slug_encoded']; + return '/subscribers/' . $data['site_slug_encoded'] . '#building-your-audience-task'; }, ), From 792894763a5df7893f65455f1f5ae696c22ba1f3 Mon Sep 17 00:00:00 2001 From: Daniel Richards Date: Fri, 24 Jan 2025 17:37:46 +0800 Subject: [PATCH 193/420] Form: Fix form block alignment by removing contact form wrapping `
      ` element (#41274) --- .../forms/changelog/remove-contact-form-hocs | 4 + .../forms/src/blocks/contact-form/edit.js | 575 +++++++++--------- .../contact-form/util/with-style-variables.js | 15 - .../changelog/remove-contact-form-hocs | 4 + 4 files changed, 279 insertions(+), 319 deletions(-) create mode 100644 projects/packages/forms/changelog/remove-contact-form-hocs delete mode 100644 projects/packages/forms/src/blocks/contact-form/util/with-style-variables.js create mode 100644 projects/plugins/jetpack/changelog/remove-contact-form-hocs diff --git a/projects/packages/forms/changelog/remove-contact-form-hocs b/projects/packages/forms/changelog/remove-contact-form-hocs new file mode 100644 index 0000000000000..9b38f38c0c172 --- /dev/null +++ b/projects/packages/forms/changelog/remove-contact-form-hocs @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Forms: Remove wrapping
      element from form block. diff --git a/projects/packages/forms/src/blocks/contact-form/edit.js b/projects/packages/forms/src/blocks/contact-form/edit.js index fff949c91a860..a1279826cc9b9 100644 --- a/projects/packages/forms/src/blocks/contact-form/edit.js +++ b/projects/packages/forms/src/blocks/contact-form/edit.js @@ -23,9 +23,9 @@ import { TextControl, Notice, } from '@wordpress/components'; -import { compose, withInstanceId } from '@wordpress/compose'; -import { withDispatch, withSelect } from '@wordpress/data'; -import { forwardRef, Fragment, useEffect, useState } from '@wordpress/element'; +import { useInstanceId } from '@wordpress/compose'; +import { useDispatch, useSelect } from '@wordpress/data'; +import { useEffect, useRef, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; import { filter, get, isArray, map } from 'lodash'; @@ -38,8 +38,8 @@ import JetpackEmailConnectionSettings from './components/jetpack-email-connectio import JetpackManageResponsesSettings from './components/jetpack-manage-responses-settings'; import NewsletterIntegrationSettings from './components/jetpack-newsletter-integration-settings'; import SalesforceLeadFormSettings from './components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings'; -import { withStyleVariables } from './util/with-style-variables'; import defaultVariations from './variations'; +import './util/form-styles.js'; const validFields = filter( childBlocks, ( { settings } ) => { return ( @@ -72,332 +72,299 @@ const PRIORITIZED_INSERTER_BLOCKS = [ ...map( validFields, block => `jetpack/${ const RESPONSES_PATH = `${ get( getJetpackData(), 'adminUrl', false ) }edit.php?post_type=feedback`; const CUSTOMIZING_FORMS_URL = 'https://jetpack.com/support/jetpack-blocks/contact-form/'; -export const JetpackContactFormEdit = forwardRef( - ( - { - attributes, - setAttributes, - postAuthorEmail, - hasInnerBlocks, - replaceInnerBlocks, - selectBlock, - clientId, - instanceId, - className, - blockType, - variations, - defaultVariation, - canUserInstallPlugins, - style, - }, - ref - ) => { - const { - to, - subject, - customThankyou, - customThankyouHeading, - customThankyouMessage, - customThankyouRedirect, - jetpackCRM, - salesforceData, - } = attributes; - const [ isPatternsModalOpen, setIsPatternsModalOpen ] = useState( false ); - - const blockProps = useBlockProps(); - const { isLoadingModules, isChangingStatus, isModuleActive, changeStatus } = - useModuleStatus( 'contact-form' ); +function JetpackContactFormEdit( { name, attributes, setAttributes, clientId, className } ) { + const { + to, + subject, + customThankyou, + customThankyouHeading, + customThankyouMessage, + customThankyouRedirect, + jetpackCRM, + salesforceData, + } = attributes; + const instanceId = useInstanceId( JetpackContactFormEdit ); + const { replaceInnerBlocks, selectBlock } = useDispatch( 'core/block-editor' ); + const { + blockType, + canUserInstallPlugins, + defaultVariation, + variations, + hasInnerBlocks, + postAuthorEmail, + } = useSelect( + select => { + const { getBlockType, getBlockVariations, getDefaultBlockVariation } = + select( 'core/blocks' ); + const { getBlocks } = select( 'core/block-editor' ); + const { getEditedPostAttribute } = select( 'core/editor' ); + const { getUser, canUser } = select( 'core' ); + const innerBlocks = getBlocks( clientId ); - const formClassnames = clsx( className, 'jetpack-contact-form', { - 'is-placeholder': ! hasInnerBlocks && registerBlockVariation, - } ); + const authorId = getEditedPostAttribute( 'author' ); + const authorEmail = authorId && getUser( authorId ) && getUser( authorId ).email; + const submitButton = innerBlocks.find( block => block.name === 'jetpack/button' ); + if ( submitButton && ! submitButton.attributes.lock ) { + const lock = { move: false, remove: true }; + submitButton.attributes.lock = lock; + } - const isSalesForceExtensionEnabled = - !! window?.Jetpack_Editor_Initial_State?.available_blocks[ - 'contact-form/salesforce-lead-form' - ]; + return { + blockType: getBlockType && getBlockType( name ), + canUserInstallPlugins: canUser( 'create', 'plugins' ), + defaultVariation: getDefaultBlockVariation && getDefaultBlockVariation( name, 'block' ), + variations: getBlockVariations && getBlockVariations( name, 'block' ), + hasInnerBlocks: innerBlocks.length > 0, + postAuthorEmail: authorEmail, + }; + }, + [ clientId, name ] + ); + const [ isPatternsModalOpen, setIsPatternsModalOpen ] = useState( false ); + const wrapperRef = useRef(); + const innerRef = useRef(); + const blockProps = useBlockProps( { ref: wrapperRef } ); + const { isLoadingModules, isChangingStatus, isModuleActive, changeStatus } = + useModuleStatus( 'contact-form' ); - const createBlocksFromInnerBlocksTemplate = innerBlocksTemplate => { - const blocks = map( innerBlocksTemplate, ( [ name, attr, innerBlocks = [] ] ) => - createBlock( name, attr, createBlocksFromInnerBlocksTemplate( innerBlocks ) ) - ); + const formClassnames = clsx( className, 'jetpack-contact-form', { + 'is-placeholder': ! hasInnerBlocks && registerBlockVariation, + } ); - return blocks; - }; + const isSalesForceExtensionEnabled = + !! window?.Jetpack_Editor_Initial_State?.available_blocks[ + 'contact-form/salesforce-lead-form' + ]; - const setVariation = variation => { - if ( variation.attributes ) { - setAttributes( variation.attributes ); - } + const createBlocksFromInnerBlocksTemplate = innerBlocksTemplate => { + const blocks = map( innerBlocksTemplate, ( [ blockName, attr, innerBlocks = [] ] ) => + createBlock( blockName, attr, createBlocksFromInnerBlocksTemplate( innerBlocks ) ) + ); - if ( variation.innerBlocks ) { - replaceInnerBlocks( - clientId, - createBlocksFromInnerBlocksTemplate( variation.innerBlocks ) - ); - } + return blocks; + }; - selectBlock( clientId ); - }; + const setVariation = variation => { + if ( variation.attributes ) { + setAttributes( variation.attributes ); + } - useEffect( () => { - // Populate default variation on older versions of WP or GB that don't support variations. - if ( ! hasInnerBlocks && ! registerBlockVariation ) { - setVariation( defaultVariations[ 0 ] ); - } - } ); + if ( variation.innerBlocks ) { + replaceInnerBlocks( clientId, createBlocksFromInnerBlocksTemplate( variation.innerBlocks ) ); + } - useEffect( () => { - if ( - ! hasInnerBlocks && - registerBlockVariation && - ! isPatternsModalOpen && - window.location.search.indexOf( 'showJetpackFormsPatterns' ) !== -1 - ) { - setIsPatternsModalOpen( true ); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [] ); + selectBlock( clientId ); + }; - const renderSubmissionSettings = () => { - return ( - <> - - { __( 'Customize the view after form submission:', 'jetpack-forms' ) } - - setAttributes( { customThankyou: newMessage } ) } - __nextHasNoMarginBottom={ true } - __next40pxDefaultSize={ true } - /> + useEffect( () => { + // Populate default variation on older versions of WP or GB that don't support variations. + if ( ! hasInnerBlocks && ! registerBlockVariation ) { + setVariation( defaultVariations[ 0 ] ); + } + } ); - { 'redirect' !== customThankyou && ( - setAttributes( { customThankyouHeading: newHeading } ) } - __nextHasNoMarginBottom={ true } - __next40pxDefaultSize={ true } - /> - ) } + useEffect( () => { + if ( + ! hasInnerBlocks && + registerBlockVariation && + ! isPatternsModalOpen && + window.location.search.indexOf( 'showJetpackFormsPatterns' ) !== -1 + ) { + setIsPatternsModalOpen( true ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [] ); - { 'message' === customThankyou && ( - setAttributes( { customThankyouMessage: newMessage } ) } - __nextHasNoMarginBottom={ true } - /> - ) } + let elt; - { 'redirect' === customThankyou && ( -
      - setAttributes( { customThankyouRedirect: newURL } ) } - /> -
      - ) } - + if ( ! isModuleActive ) { + if ( isLoadingModules ) { + elt = ; + } else { + elt = ( + ); - }; - - const renderVariationPicker = () => { - return ( -
      - ! v.hiddenFromPicker ) } - onSelect={ ( nextVariation = defaultVariation ) => { - setVariation( nextVariation ); - } } - /> -
      - +
      + -
      - - -
      -
      - { isPatternsModalOpen && ( - setIsPatternsModalOpen( false ) } + +
      - ); - }; - - let elt; - - if ( ! isModuleActive ) { - if ( isLoadingModules ) { - elt = ; - } else { - elt = ( - - ); - } - } else if ( ! hasInnerBlocks && registerBlockVariation ) { - elt = renderVariationPicker(); - } else { - elt = ( - <> - - { ! attributes.formTitle && ( - - - { __( - 'Add a heading inside the form or before it to help everybody identify it.', - 'jetpack-forms' - ) } - { ' ' } - - ) } - - - - - { renderSubmissionSettings() } + { isPatternsModalOpen && ( + setIsPatternsModalOpen( false ) } + > + { + return pattern.content.indexOf( 'jetpack/contact-form' ) !== -1; + } } + clientId={ clientId } + /> + + ) } +
      + ); + } else { + const style = window.jetpackForms.generateStyleVariables( innerRef.current ); + elt = ( + <> + + { ! attributes.formTitle && ( + + + { __( + 'Add a heading inside the form or before it to help everybody identify it.', + 'jetpack-forms' + ) } + { ' ' } - - + + + + + { __( 'Customize the view after form submission:', 'jetpack-forms' ) } + + setAttributes( { customThankyou: newMessage } ) } + __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } + /> + + { 'redirect' !== customThankyou && ( + setAttributes( { customThankyouHeading: newHeading } ) } + __nextHasNoMarginBottom={ true } + __next40pxDefaultSize={ true } /> - + ) } - { isSalesForceExtensionEnabled && salesforceData?.sendToSalesforce && ( - setAttributes( { customThankyouMessage: newMessage } ) } + __nextHasNoMarginBottom={ true } /> ) } - { ! ( isSimpleSite() || isAtomicSite() ) && ( - - { canUserInstallPlugins && ( - - - - ) } - - - - + + { 'redirect' === customThankyou && ( +
      + setAttributes( { customThankyouRedirect: newURL } ) } + /> +
      ) } -
      + + + + -
      - -
      - - ); - } + ) } + { ! ( isSimpleSite() || isAtomicSite() ) && ( + <> + { canUserInstallPlugins && ( + + + + ) } + + + + + ) } + - return
      { elt }
      ; +
      + +
      + + ); } -); - -const withThemeProvider = WrappedComponent => props => ( - - - -); - -export default compose( [ - withSelect( ( select, props ) => { - const { getBlockType, getBlockVariations, getDefaultBlockVariation } = select( 'core/blocks' ); - const { getBlocks } = select( 'core/block-editor' ); - const { getEditedPostAttribute } = select( 'core/editor' ); - const { getUser, canUser } = select( 'core' ); - const innerBlocks = getBlocks( props.clientId ); - - const authorId = getEditedPostAttribute( 'author' ); - const authorEmail = authorId && getUser( authorId ) && getUser( authorId ).email; - const canUserInstallPlugins = canUser( 'create', 'plugins' ); - const submitButton = innerBlocks.find( block => block.name === 'jetpack/button' ); - if ( submitButton && ! submitButton.attributes.lock ) { - const lock = { move: false, remove: true }; - submitButton.attributes.lock = lock; - } - - return { - blockType: getBlockType && getBlockType( props.name ), - canUserInstallPlugins, - defaultVariation: getDefaultBlockVariation && getDefaultBlockVariation( props.name, 'block' ), - variations: getBlockVariations && getBlockVariations( props.name, 'block' ), + return ( + +
      { elt }
      +
      + ); +} - innerBlocks, - hasInnerBlocks: innerBlocks.length > 0, - postAuthorEmail: authorEmail, - }; - } ), - withDispatch( dispatch => { - const { replaceInnerBlocks, selectBlock } = dispatch( 'core/block-editor' ); - return { replaceInnerBlocks, selectBlock }; - } ), - withInstanceId, - withThemeProvider, -] )( withStyleVariables( JetpackContactFormEdit ) ); +export default JetpackContactFormEdit; diff --git a/projects/packages/forms/src/blocks/contact-form/util/with-style-variables.js b/projects/packages/forms/src/blocks/contact-form/util/with-style-variables.js deleted file mode 100644 index 705689137dda6..0000000000000 --- a/projects/packages/forms/src/blocks/contact-form/util/with-style-variables.js +++ /dev/null @@ -1,15 +0,0 @@ -import './form-styles.js'; -import { useRef } from '@wordpress/element'; - -export const withStyleVariables = WrappedComponent => props => { - const { generateStyleVariables } = window.jetpackForms; - const componentRef = useRef( undefined ); - - return ( - - ); -}; diff --git a/projects/plugins/jetpack/changelog/remove-contact-form-hocs b/projects/plugins/jetpack/changelog/remove-contact-form-hocs new file mode 100644 index 0000000000000..3566d3d26c790 --- /dev/null +++ b/projects/plugins/jetpack/changelog/remove-contact-form-hocs @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Forms: Remove wrapping
      element from form block. From bdbf6d2b6afbac94907c5772cbf9fc0497d8fcbc Mon Sep 17 00:00:00 2001 From: Foteini Giannaropoulou Date: Fri, 24 Jan 2025 14:50:00 +0200 Subject: [PATCH 194/420] Classic Theme Helper: Fix Fatal in Jetpack_Portfolio (#41304) * Classic Theme Helper: Fix Fatal in Jetpack_Portfolio --- .../changelog/fix-jetpack-portfolio-fatal | 4 ++++ .../src/custom-post-types/class-jetpack-portfolio.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 projects/packages/classic-theme-helper/changelog/fix-jetpack-portfolio-fatal diff --git a/projects/packages/classic-theme-helper/changelog/fix-jetpack-portfolio-fatal b/projects/packages/classic-theme-helper/changelog/fix-jetpack-portfolio-fatal new file mode 100644 index 0000000000000..7a27a6d7d7f3e --- /dev/null +++ b/projects/packages/classic-theme-helper/changelog/fix-jetpack-portfolio-fatal @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Classic Theme Helper: Fix Fatal in Jetpack_Portfolio diff --git a/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-portfolio.php b/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-portfolio.php index 1c932464bd3f0..758e4e567d064 100644 --- a/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-portfolio.php +++ b/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-portfolio.php @@ -1069,7 +1069,7 @@ private static function get_project_type( $post_id ) { $project_type_link = get_term_link( $project_type, self::CUSTOM_TAXONOMY_TYPE ); if ( is_wp_error( $project_type_link ) ) { - return $project_type_link; + return ''; } $types[] = ''; @@ -1102,7 +1102,7 @@ private static function get_project_tags( $post_id ) { $project_tag_link = get_term_link( $project_tag, self::CUSTOM_TAXONOMY_TYPE ); if ( is_wp_error( $project_tag_link ) ) { - return $project_tag_link; + return ''; } $tags[] = ''; From cbd695796d1c55fd7c0b4c3ce01a6f2fc519e209 Mon Sep 17 00:00:00 2001 From: Bogdan Ungureanu Date: Fri, 24 Jan 2025 16:31:50 +0200 Subject: [PATCH 195/420] RDV: Fix the performance issue on AT sites (#41248) * RDV: Fix the performance issue on AT sites * Redo condition * Linting * Simplify condition * Modified comment a bit * We now use the constant instead of the option_name variable --------- Co-authored-by: Richard Ortiz --- .../changelog/fix-experiment-performance-issue | 5 +++++ .../wpcom-admin-interface.php | 14 +++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-experiment-performance-issue diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-experiment-performance-issue b/projects/packages/jetpack-mu-wpcom/changelog/fix-experiment-performance-issue new file mode 100644 index 0000000000000..9cb8a9b757f1e --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-experiment-performance-issue @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Fixed a performance issue on AT that was reproducing only for a12s. + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index 0a5a6a4bcf746..476f01613ca31 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -451,16 +451,24 @@ function wpcom_is_duplicate_views_experiment_enabled() { $data = json_decode( wp_remote_retrieve_body( $response ), true ); - if ( isset( $data['variations'] ) && isset( $data['variations'][ $experiment_name ] ) ) { + if ( isset( $data['variations'][ $experiment_name ] ) ) { $variation = $data['variations'][ $experiment_name ]; update_user_option( get_current_user_id(), RDV_EXPERIMENT_FORCE_ASSIGN_OPTION, $variation, true ); $is_enabled = 'treatment' === $variation; - return $is_enabled; + } elseif ( isset( $data['variations'] ) ) { + /** + * If the variations array is set but the variation value is null chances are this is an a11n (since ExPlat returns null for a12s). + * + * We set treatment for all a12s. + */ + update_user_option( get_current_user_id(), RDV_EXPERIMENT_FORCE_ASSIGN_OPTION, 'treatment', true ); + $is_enabled = true; } else { $is_enabled = false; - return $is_enabled; } + + return $is_enabled; } /** From 4daa973df34f06f38fdacfc692a5e36201eb0753 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Fri, 24 Jan 2025 11:00:59 -0500 Subject: [PATCH 196/420] Add phpcs:ignores for wpcom (#41308) Wpcom has a linting check that flags every use of the `switch_blog` hook, apparently with the intention that any "valid" uses ignore the sniff. So let's do that so as to not block any deploys that happen to touch near these lines (as is currently happening). --- .../packages/connection/changelog/add-phpcs-ignore-for-wpcut | 5 +++++ projects/packages/connection/src/class-manager.php | 1 + .../plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut | 5 +++++ projects/plugins/jetpack/modules/markdown/easy-markdown.php | 1 + .../modules/memberships/class-jetpack-memberships.php | 1 + 5 files changed, 13 insertions(+) create mode 100644 projects/packages/connection/changelog/add-phpcs-ignore-for-wpcut create mode 100644 projects/plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut diff --git a/projects/packages/connection/changelog/add-phpcs-ignore-for-wpcut b/projects/packages/connection/changelog/add-phpcs-ignore-for-wpcut new file mode 100644 index 0000000000000..3a9b3d16fc174 --- /dev/null +++ b/projects/packages/connection/changelog/add-phpcs-ignore-for-wpcut @@ -0,0 +1,5 @@ +Significance: patch +Type: added +Comment: Add phpcs:ignore for wpcom. No changes to functionality. + + diff --git a/projects/packages/connection/src/class-manager.php b/projects/packages/connection/src/class-manager.php index 2e8e67b2eae82..d28678c2dfd4e 100644 --- a/projects/packages/connection/src/class-manager.php +++ b/projects/packages/connection/src/class-manager.php @@ -189,6 +189,7 @@ private function add_connection_status_invalidation_hooks() { add_action( 'pre_update_jetpack_option_blog_token', array( $this, 'reset_connection_status' ) ); add_action( 'pre_update_jetpack_option_user_token', array( $this, 'reset_connection_status' ) ); add_action( 'pre_update_jetpack_option_user_tokens', array( $this, 'reset_connection_status' ) ); + // phpcs:ignore WPCUT.SwitchBlog.SwitchBlog -- wpcom flags **every** use of switch_blog, apparently expecting valid instances to ignore or suppress the sniff. add_action( 'switch_blog', array( $this, 'reset_connection_status' ) ); self::$connection_invalidators_added = true; diff --git a/projects/plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut b/projects/plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut new file mode 100644 index 0000000000000..e61241f9dddd2 --- /dev/null +++ b/projects/plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Add phpcs:ignore for wpcom. No changes to functionality. + + diff --git a/projects/plugins/jetpack/modules/markdown/easy-markdown.php b/projects/plugins/jetpack/modules/markdown/easy-markdown.php index d780350540ec1..b39cbf0db297c 100644 --- a/projects/plugins/jetpack/modules/markdown/easy-markdown.php +++ b/projects/plugins/jetpack/modules/markdown/easy-markdown.php @@ -93,6 +93,7 @@ public function load() { $this->add_default_post_type_support(); $this->maybe_load_actions_and_filters(); if ( defined( 'REST_API_REQUEST' ) && REST_API_REQUEST ) { + // phpcs:ignore WPCUT.SwitchBlog.SwitchBlog -- wpcom flags **every** use of switch_blog, apparently expecting valid instances to ignore or suppress the sniff. add_action( 'switch_blog', array( $this, 'maybe_load_actions_and_filters' ), 10, 2 ); } add_action( 'admin_init', array( $this, 'register_setting' ) ); diff --git a/projects/plugins/jetpack/modules/memberships/class-jetpack-memberships.php b/projects/plugins/jetpack/modules/memberships/class-jetpack-memberships.php index 75f4e627f88f5..42a2a39f34a30 100644 --- a/projects/plugins/jetpack/modules/memberships/class-jetpack-memberships.php +++ b/projects/plugins/jetpack/modules/memberships/class-jetpack-memberships.php @@ -234,6 +234,7 @@ private static function get_plan_property_mapping() { private function register_init_hook() { add_action( 'init', array( $this, 'init_hook_action' ) ); add_action( 'jetpack_register_gutenberg_extensions', array( $this, 'register_gutenberg_block' ) ); + // phpcs:ignore WPCUT.SwitchBlog.SwitchBlog -- wpcom flags **every** use of switch_blog, apparently expecting valid instances to ignore or suppress the sniff. add_action( 'switch_blog', array( $this, 'clear_post_access_level_cache' ) ); } From 3bfae29d24774884aee8c7f327104a6d14b1208d Mon Sep 17 00:00:00 2001 From: Brandon Kraft Date: Fri, 24 Jan 2025 11:44:20 -0600 Subject: [PATCH 197/420] Sitemaps: ensure one item in a news sitemap to ensure validitiy (#40893) --- projects/plugins/jetpack/changelog/fix-empty-news | 4 ++++ .../jetpack/modules/sitemaps/sitemap-builder.php | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-empty-news diff --git a/projects/plugins/jetpack/changelog/fix-empty-news b/projects/plugins/jetpack/changelog/fix-empty-news new file mode 100644 index 0000000000000..2a7c16c64d28a --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-empty-news @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Sitemaps: ensures a valid news sitemap is present even if no posts are eligible. diff --git a/projects/plugins/jetpack/modules/sitemaps/sitemap-builder.php b/projects/plugins/jetpack/modules/sitemaps/sitemap-builder.php index a524af7d7a8af..7055b3fbc8fb5 100644 --- a/projects/plugins/jetpack/modules/sitemaps/sitemap-builder.php +++ b/projects/plugins/jetpack/modules/sitemaps/sitemap-builder.php @@ -1087,12 +1087,15 @@ public function news_sitemap_xml() { ); $posts = $this->librarian->query_most_recent_posts( JP_NEWS_SITEMAP_MAX_ITEMS ); + if ( empty( $posts ) ) { + $buffer->append( array( 'url' => array( 'loc' => home_url( '/' ) ) ) ); + } else { + foreach ( $posts as $post ) { + $current_item = $this->post_to_news_sitemap_item( $post ); - foreach ( $posts as $post ) { - $current_item = $this->post_to_news_sitemap_item( $post ); - - if ( false === $buffer->append( $current_item['xml'] ) ) { - break; + if ( false === $buffer->append( $current_item['xml'] ) ) { + break; + } } } From 861a579cc92f6830af744443aa9162c5ad19d4b6 Mon Sep 17 00:00:00 2001 From: Dusty Reagan Date: Fri, 24 Jan 2025 12:10:07 -0600 Subject: [PATCH 198/420] Comments API: Add wpcom user fields option for Jetpack sites (#41254) * Comments API: Add wpcom_id and wpcom_login fields to response * changelog * Move fields to the author object * Introduce optional author_wpcom_data parameter * Update comments * Update changelog * Check for empty id * Populate wpcom data for simple sites * Update changelog * Apply suggestions from code review Simplify code. Co-authored-by: Jeremy Herve * Check for simple site first --------- Co-authored-by: Jeremy Herve --- .../add-comment-endpoint-wpcom-user-fields | 4 ++++ .../jetpack/class.json-api-endpoints.php | 22 +++++++++++++++++++ ....wpcom-json-api-list-comments-endpoint.php | 22 +++++++++++-------- 3 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/add-comment-endpoint-wpcom-user-fields diff --git a/projects/plugins/jetpack/changelog/add-comment-endpoint-wpcom-user-fields b/projects/plugins/jetpack/changelog/add-comment-endpoint-wpcom-user-fields new file mode 100644 index 0000000000000..56e3b470c7d40 --- /dev/null +++ b/projects/plugins/jetpack/changelog/add-comment-endpoint-wpcom-user-fields @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Comments API: Add wpcom_id and wpcom_login fields to comment author responses when requested via author_wpcom_data parameter. diff --git a/projects/plugins/jetpack/class.json-api-endpoints.php b/projects/plugins/jetpack/class.json-api-endpoints.php index 794bd049d6545..1bdbe1ef254bd 100644 --- a/projects/plugins/jetpack/class.json-api-endpoints.php +++ b/projects/plugins/jetpack/class.json-api-endpoints.php @@ -6,7 +6,9 @@ */ use Automattic\Jetpack\Connection\Client; +use Automattic\Jetpack\Connection\Manager; use Automattic\Jetpack\Status; +use Automattic\Jetpack\Status\Host; require_once __DIR__ . '/json-api-config.php'; require_once __DIR__ . '/sal/class.json-api-links.php'; @@ -771,6 +773,8 @@ public function cast_and_filter_item( &$return, $type, $key, $value, $types = ar 'is_super_admin' => '(bool)', 'roles' => '(array:string)', 'ip_address' => '(string|false)', + 'wpcom_id' => '(int|null)', + 'wpcom_login' => '(string|null)', ); $return[ $key ] = (object) $this->cast_and_filter( $value, $docs, false, $for_output ); break; @@ -1521,6 +1525,24 @@ public function get_author( $author, $show_email_and_ip = false ) { $author['site_visible'] = $site_visible; } + // Only include WordPress.com user data when author_wpcom_data is enabled. + $args = $this->query_args(); + + if ( ! empty( $id ) && ! empty( $args['author_wpcom_data'] ) ) { + if ( ( new Host() )->is_wpcom_simple() ) { + $user = get_user_by( 'id', $id ); + $author['wpcom_id'] = isset( $user->ID ) ? (int) $user->ID : null; + $author['wpcom_login'] = $user->user_login ?? ''; + } else { + // If this is a Jetpack site, use the connection manager to get the user data. + $wpcom_user_data = ( new Manager() )->get_connected_user_data( $id ); + if ( $wpcom_user_data && isset( $wpcom_user_data['ID'] ) ) { + $author['wpcom_id'] = (int) $wpcom_user_data['ID']; + $author['wpcom_login'] = $wpcom_user_data['login'] ?? ''; + } + } + } + return (object) $author; } diff --git a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php index 12390302281f5..993e14303cbf1 100644 --- a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php +++ b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php @@ -161,33 +161,37 @@ public function __construct( $args ) { $this->query = array_merge( $this->query, array( - 'number' => '(int=20) The number of comments to return. Limit: 100. When using hierarchical=1, number refers to the number of top-level comments returned.', - 'offset' => '(int=0) 0-indexed offset. Not available if using hierarchical=1.', - 'page' => '(int) Return the Nth 1-indexed page of comments. Takes precedence over the offset parameter. When using hierarchical=1, pagination is a bit different. See the note on the number parameter.', - 'order' => array( + 'number' => '(int=20) The number of comments to return. Limit: 100. When using hierarchical=1, number refers to the number of top-level comments returned.', + 'offset' => '(int=0) 0-indexed offset. Not available if using hierarchical=1.', + 'page' => '(int) Return the Nth 1-indexed page of comments. Takes precedence over the offset parameter. When using hierarchical=1, pagination is a bit different. See the note on the number parameter.', + 'order' => array( 'DESC' => 'Return comments in descending order from newest to oldest.', 'ASC' => 'Return comments in ascending order from oldest to newest.', ), - 'hierarchical' => array( + 'hierarchical' => array( 'false' => '', 'true' => '(BETA) Order the comment list hierarchically.', ), - 'after' => '(ISO 8601 datetime) Return comments dated on or after the specified datetime. Not available if using hierarchical=1.', - 'before' => '(ISO 8601 datetime) Return comments dated on or before the specified datetime. Not available if using hierarchical=1.', - 'type' => array( + 'after' => '(ISO 8601 datetime) Return comments dated on or after the specified datetime. Not available if using hierarchical=1.', + 'before' => '(ISO 8601 datetime) Return comments dated on or before the specified datetime. Not available if using hierarchical=1.', + 'type' => array( 'any' => 'Return all comments regardless of type.', 'comment' => 'Return only regular comments.', 'trackback' => 'Return only trackbacks.', 'pingback' => 'Return only pingbacks.', 'pings' => 'Return both trackbacks and pingbacks.', ), - 'status' => array( + 'status' => array( 'approved' => 'Return only approved comments.', 'unapproved' => 'Return only comments in the moderation queue.', 'spam' => 'Return only comments marked as spam.', 'trash' => 'Return only comments in the trash.', 'all' => 'Return comments of all statuses.', ), + 'author_wpcom_data' => array( + 'false' => 'Do not add wpcom_id and wpcom_login fields to comment author responses (default)', + 'true' => 'Add wpcom_id and wpcom_login fields to comment author responses', + ), ) ); } From 32de098e394596db7144f08332fdcd746d978c46 Mon Sep 17 00:00:00 2001 From: Miguel Lezama Date: Fri, 24 Jan 2025 15:22:08 -0300 Subject: [PATCH 199/420] use postAuthorEmail (#41290) --- .../packages/forms/changelog/fix-forms-send-to-settings | 4 ++++ .../src/blocks/contact-form/class-contact-form-block.php | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-forms-send-to-settings diff --git a/projects/packages/forms/changelog/fix-forms-send-to-settings b/projects/packages/forms/changelog/fix-forms-send-to-settings new file mode 100644 index 0000000000000..0e4d2a8341954 --- /dev/null +++ b/projects/packages/forms/changelog/fix-forms-send-to-settings @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: fix send to settings for multiple authors diff --git a/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php b/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php index 6a77ca212e17d..a1bdb1a39b9b6 100644 --- a/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php +++ b/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php @@ -156,7 +156,6 @@ public static function gutenblock_render_form( $atts, $content ) { * Loads scripts */ public static function load_editor_scripts() { - global $post; $handle = 'jp-forms-blocks'; @@ -171,10 +170,14 @@ public static function load_editor_scripts() { ) ); + // Create a Contact_Form instance to get the default values + $contact_form = new Contact_Form( array() ); + $defaults = $contact_form->defaults; + $data = array( 'defaults' => array( - 'to' => wp_get_current_user()->user_email, - 'subject' => '[' . get_bloginfo( 'name' ) . ']' . ( isset( $post ) ? ' ' . esc_html( $post->post_title ) : '' ), + 'to' => $defaults['to'], + 'subject' => $defaults['subject'], ), ); From 44fea3f72bb847aff816c31172f0fa0f252b9808 Mon Sep 17 00:00:00 2001 From: Brandon Kraft Date: Fri, 24 Jan 2025 12:29:43 -0600 Subject: [PATCH 200/420] Dev Docker: add php ast ext (#41288) --- tools/docker/Dockerfile.monorepo | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/docker/Dockerfile.monorepo b/tools/docker/Dockerfile.monorepo index 7d9bc62343575..9638c4b32a2ba 100644 --- a/tools/docker/Dockerfile.monorepo +++ b/tools/docker/Dockerfile.monorepo @@ -16,7 +16,9 @@ WORKDIR /app RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \ export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ - && apt-get install -y curl gpg language-pack-en-base software-properties-common ca-certificates \ + && apt-get install -y curl gpg language-pack-en-base ca-certificates \ + # Install software-properties-common without recommended packages to avoid Python issues + && apt-get install -y --no-install-recommends software-properties-common \ && add-apt-repository ppa:ondrej/php \ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ # Add Docker's official GPG key @@ -38,6 +40,7 @@ RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \ docker-compose-plugin \ jq \ "php${PHP_VERSION}" \ + "php${PHP_VERSION}-ast" \ "php${PHP_VERSION}-cli" \ "php${PHP_VERSION}-curl" \ "php${PHP_VERSION}-dom" \ @@ -45,7 +48,9 @@ RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \ "php${PHP_VERSION}-xml" \ "php${PHP_VERSION}-zip" \ rsync \ + && apt-get remove --purge -y python3-apt \ && apt-get remove --purge --auto-remove -y gpg software-properties-common \ + && apt-get clean \ && find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib # Install Composer @@ -60,7 +65,9 @@ RUN --mount=type=cache,target=/var/lib/apt/lists/,sharing=private \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$N.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \ && apt-get -q update \ && VER="$(apt-cache show nodejs | sed -n "/^Version: ${NODE_VERSION}-/ { s/^Version: /=/p; q }" )" \ - && apt-get install -y nodejs$VER + && apt-get install -y nodejs$VER \ + && apt-get clean \ + && find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib # Install pnpm RUN npm install --global pnpm@$PNPM_VERSION \ @@ -75,7 +82,9 @@ RUN chmod +x /usr/local/bin/monorepo-entrypoint.sh # Set up locale properly RUN apt-get update && apt-get install -y locales \ && locale-gen en_US.UTF-8 \ - && update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 + && update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \ + && apt-get clean \ + && find /var/ -name '*-old' -delete && rm -rf /var/log/dpkg.log /var/log/alternatives.log /var/log/apt/ ~/.launchpadlib ENV LANG=en_US.UTF-8 ENV LC_ALL=en_US.UTF-8 From 9acfbe9268920622f896b933dc178575b4fd876c Mon Sep 17 00:00:00 2001 From: dkmyta <43220201+dkmyta@users.noreply.github.com> Date: Fri, 24 Jan 2025 10:44:16 -0800 Subject: [PATCH 201/420] Packages: Add Account Protection (#40923) * Add account protection package * Update lock files * Fix versions * Update phan baseline --- pnpm-lock.yaml | 2 + .../account-protection/.gitattributes | 17 +++++ .../packages/account-protection/.gitignore | 2 + .../account-protection/.phan/baseline.php | 17 +++++ .../account-protection/.phan/config.php | 13 ++++ .../account-protection/.phpcs.dir.xml | 24 +++++++ .../packages/account-protection/CHANGELOG.md | 7 ++ .../packages/account-protection/README.md | 24 +++++++ .../account-protection/changelog/.gitkeep | 0 .../changelog/initial-version | 4 ++ .../packages/account-protection/composer.json | 67 +++++++++++++++++++ .../packages/account-protection/package.json | 25 +++++++ .../account-protection/phpunit.xml.dist | 14 ++++ .../src/class-account-protection.php | 16 +++++ .../account-protection/tests/.phpcs.dir.xml | 4 ++ .../tests/php/bootstrap.php | 11 +++ 16 files changed, 247 insertions(+) create mode 100644 projects/packages/account-protection/.gitattributes create mode 100644 projects/packages/account-protection/.gitignore create mode 100644 projects/packages/account-protection/.phan/baseline.php create mode 100644 projects/packages/account-protection/.phan/config.php create mode 100644 projects/packages/account-protection/.phpcs.dir.xml create mode 100644 projects/packages/account-protection/CHANGELOG.md create mode 100644 projects/packages/account-protection/README.md create mode 100644 projects/packages/account-protection/changelog/.gitkeep create mode 100644 projects/packages/account-protection/changelog/initial-version create mode 100644 projects/packages/account-protection/composer.json create mode 100644 projects/packages/account-protection/package.json create mode 100644 projects/packages/account-protection/phpunit.xml.dist create mode 100644 projects/packages/account-protection/src/class-account-protection.php create mode 100644 projects/packages/account-protection/tests/.phpcs.dir.xml create mode 100644 projects/packages/account-protection/tests/php/bootstrap.php diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 39b95d5a5ed94..0ffe5359ff09e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1849,6 +1849,8 @@ importers: specifier: 4.9.1 version: 4.9.1(webpack@5.94.0) + projects/packages/account-protection: {} + projects/packages/admin-ui: {} projects/packages/assets: diff --git a/projects/packages/account-protection/.gitattributes b/projects/packages/account-protection/.gitattributes new file mode 100644 index 0000000000000..b0b228d4ad6ad --- /dev/null +++ b/projects/packages/account-protection/.gitattributes @@ -0,0 +1,17 @@ +# Files not needed to be distributed in the package. +.gitattributes export-ignore +.github/ export-ignore +package.json export-ignore + +# Files to include in the mirror repo, but excluded via gitignore +# Remember to end all directories with `/**` to properly tag every file. +# /src/js/example.min.js production-include + +# Files to exclude from the mirror repo, but included in the monorepo. +# Remember to end all directories with `/**` to properly tag every file. +.gitignore production-exclude +changelog/** production-exclude +phpunit.xml.dist production-exclude +.phpcs.dir.xml production-exclude +tests/** production-exclude +.phpcsignore production-exclude diff --git a/projects/packages/account-protection/.gitignore b/projects/packages/account-protection/.gitignore new file mode 100644 index 0000000000000..140fd587d2d52 --- /dev/null +++ b/projects/packages/account-protection/.gitignore @@ -0,0 +1,2 @@ +vendor/ +node_modules/ diff --git a/projects/packages/account-protection/.phan/baseline.php b/projects/packages/account-protection/.phan/baseline.php new file mode 100644 index 0000000000000..3df50068147ad --- /dev/null +++ b/projects/packages/account-protection/.phan/baseline.php @@ -0,0 +1,17 @@ + [ + ], + // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. + // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases) +]; diff --git a/projects/packages/account-protection/.phan/config.php b/projects/packages/account-protection/.phan/config.php new file mode 100644 index 0000000000000..be8aae4527f9d --- /dev/null +++ b/projects/packages/account-protection/.phan/config.php @@ -0,0 +1,13 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/packages/account-protection/CHANGELOG.md b/projects/packages/account-protection/CHANGELOG.md new file mode 100644 index 0000000000000..721294abd00ad --- /dev/null +++ b/projects/packages/account-protection/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/projects/packages/account-protection/README.md b/projects/packages/account-protection/README.md new file mode 100644 index 0000000000000..990878492b5c2 --- /dev/null +++ b/projects/packages/account-protection/README.md @@ -0,0 +1,24 @@ +# account-protection + +Account protection + +## How to install account-protection + +### Installation From Git Repo + +## Contribute + +## Get Help + +## Using this package in your WordPress plugin + +If you plan on using this package in your WordPress plugin, we would recommend that you use [Jetpack Autoloader](https://packagist.org/packages/automattic/jetpack-autoloader) as your autoloader. This will allow for maximum interoperability with other plugins that use this package as well. + +## Security + +Need to report a security vulnerability? Go to [https://automattic.com/security/](https://automattic.com/security/) or directly to our security bug bounty site [https://hackerone.com/automattic](https://hackerone.com/automattic). + +## License + +account-protection is licensed under [GNU General Public License v2 (or later)](./LICENSE.txt) + diff --git a/projects/packages/account-protection/changelog/.gitkeep b/projects/packages/account-protection/changelog/.gitkeep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/projects/packages/account-protection/changelog/initial-version b/projects/packages/account-protection/changelog/initial-version new file mode 100644 index 0000000000000..fb1837c901e51 --- /dev/null +++ b/projects/packages/account-protection/changelog/initial-version @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Initial version. diff --git a/projects/packages/account-protection/composer.json b/projects/packages/account-protection/composer.json new file mode 100644 index 0000000000000..b6a0271497be0 --- /dev/null +++ b/projects/packages/account-protection/composer.json @@ -0,0 +1,67 @@ +{ + "name": "automattic/jetpack-account-protection", + "description": "Account protection", + "type": "jetpack-library", + "license": "GPL-2.0-or-later", + "require": { + "php": ">=7.2" + }, + "require-dev": { + "yoast/phpunit-polyfills": "^1.1.1", + "automattic/jetpack-changelogger": "@dev", + "automattic/wordbless": "dev-master" + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "build-development": "echo 'Add your build step to composer.json, please!'", + "build-production": "echo 'Add your build step to composer.json, please!'", + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", + "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy", + "test-coverage": [ + "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "repositories": [ + { + "type": "path", + "url": "../../packages/*", + "options": { + "monorepo": true + } + } + ], + "minimum-stability": "dev", + "prefer-stable": true, + "config": { + "allow-plugins": { + "roots/wordpress-core-installer": true + } + }, + "extra": { + "autotagger": true, + "branch-alias": { + "dev-trunk": "0.1.x-dev" + }, + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-account-protection/compare/v${old}...v${new}" + }, + "mirror-repo": "Automattic/jetpack-account-protection", + "textdomain": "jetpack-account-protection", + "version-constants": { + "::PACKAGE_VERSION": "src/class-account-protection.php" + } + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + } +} diff --git a/projects/packages/account-protection/package.json b/projects/packages/account-protection/package.json new file mode 100644 index 0000000000000..ebf7470206c3c --- /dev/null +++ b/projects/packages/account-protection/package.json @@ -0,0 +1,25 @@ +{ + "private": true, + "name": "@automattic/jetpack-account-protection", + "version": "0.1.0-alpha", + "description": "Account protection", + "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/account-protection/#readme", + "bugs": { + "url": "https://github.com/Automattic/jetpack/labels/[Package] Account Protection" + }, + "repository": { + "type": "git", + "url": "https://github.com/Automattic/jetpack.git", + "directory": "projects/packages/account-protection" + }, + "license": "GPL-2.0-or-later", + "author": "Automattic", + "scripts": { + "build": "echo 'Not implemented.'", + "build-js": "echo 'Not implemented.'", + "build-production": "echo 'Not implemented.'", + "build-production-js": "echo 'Not implemented.'", + "clean": "true" + }, + "devDependencies": {} +} diff --git a/projects/packages/account-protection/phpunit.xml.dist b/projects/packages/account-protection/phpunit.xml.dist new file mode 100644 index 0000000000000..3223c32458db2 --- /dev/null +++ b/projects/packages/account-protection/phpunit.xml.dist @@ -0,0 +1,14 @@ + + + + tests/php + + + + + + + src + + + diff --git a/projects/packages/account-protection/src/class-account-protection.php b/projects/packages/account-protection/src/class-account-protection.php new file mode 100644 index 0000000000000..0dd56070f3289 --- /dev/null +++ b/projects/packages/account-protection/src/class-account-protection.php @@ -0,0 +1,16 @@ + + + + diff --git a/projects/packages/account-protection/tests/php/bootstrap.php b/projects/packages/account-protection/tests/php/bootstrap.php new file mode 100644 index 0000000000000..46763b04a2cdb --- /dev/null +++ b/projects/packages/account-protection/tests/php/bootstrap.php @@ -0,0 +1,11 @@ + Date: Fri, 24 Jan 2025 14:12:00 -0500 Subject: [PATCH 202/420] Clean up names in package.json files (#41259) We have a bunch of package.json files that are never meant to be published to npmjs.com. Many are for JS dependencies to build and bundle JS in our GitHub Actions, PHP packages, and WordPress plugins. Others are for tooling that's used within the monorepo. Every once in a while someone notices one of these where we have an unscoped "name", either unused or for internal use, and tries to submit a bug bounty for it despite the intra-monorepo `workspace:*` deps not allowing that. To avoid that annoyance, this adds a check in `lint-project-structure.sh` that every package.json "name" must either be scoped to `@automattic/*`, or begin with an underscore (which is not allowed to be published to npmjs.com), or be an existing package that's maintained by either us (specifically, our `matticbot` account) or NPM itself (`npm`). Then we also have to fix the existing instances someone hasn't caught yet: * For most we just delete the unused "name". * For `jetpack-cli` in `tools/cli/package.json`, we manually published a dummy package similar to existing ones like for `jetpack-js-tools`. * For `jetpack-e2e-commons` in `tools/e2e-commons/package.json`, we renamed that to `_jetpack-e2e-commons`. Which unfortunately required a lot of references to be updated, sigh. --- .github/files/coverage-munger/package.json | 1 - .../files/coverage-munger/process-coverage.sh | 4 +- .github/files/lint-project-structure.sh | 17 +++++++ pnpm-lock.yaml | 48 +++++++++---------- .../changelog/fix-bad-npm-package-names | 5 ++ .../repo-gardening/package.json | 3 +- .../changelog/fix-bad-npm-package-names | 5 ++ .../required-review/package.json | 3 +- .../changelog/fix-bad-npm-package-names | 5 ++ .../test-results-to-slack/package.json | 3 +- .../changelog/fix-bad-npm-package-names | 5 ++ projects/packages/search/package.json | 3 +- .../changelog/fix-bad-npm-package-names | 5 ++ .../tests/e2e/config/default.cjs | 2 +- .../tests/e2e/eslint.config.mjs | 2 +- .../tests/e2e/package.json | 6 +-- .../tests/e2e/playwright.config.mjs | 2 +- .../tests/e2e/specs/start.test.js | 4 +- .../boost/changelog/fix-bad-npm-package-names | 5 ++ .../changelog/fix-bad-npm-package-names#2 | 5 ++ projects/plugins/boost/package.json | 4 +- .../boost/tests/e2e/config/default.cjs | 2 +- .../plugins/boost/tests/e2e/eslint.config.mjs | 2 +- .../boost/tests/e2e/lib/env/prerequisites.js | 6 +-- .../e2e/lib/pages/frontend/FirstPostPage.js | 4 +- .../lib/pages/wp-admin/JetpackBoostPage.js | 4 +- .../e2e/lib/pages/wp-admin/PermalinksPage.js | 4 +- .../plugins/boost/tests/e2e/lib/setupTests.js | 2 +- projects/plugins/boost/tests/e2e/package.json | 6 +-- .../boost/tests/e2e/playwright.config.mjs | 2 +- .../boost/tests/e2e/specs/base/common.test.js | 10 ++-- .../tests/e2e/specs/base/get-started.test.ts | 4 +- .../e2e/specs/concatenate/concatenate.test.js | 6 +-- .../specs/critical-css/critical-css.test.js | 10 ++-- .../e2e/specs/image-cdn/image-cdn.test.js | 4 +- .../e2e/specs/image-guide/image-guide.test.js | 4 +- .../e2e/specs/modules/modules-common.test.js | 4 +- .../specs/modules/render-blocking-js.test.js | 6 +-- .../specs/modules/score-auto-refresh.test.js | 4 +- .../e2e/specs/modules/speed-score.test.js | 2 +- .../e2e/specs/page-cache/page-cache.test.js | 10 ++-- .../changelog/fix-bad-npm-package-names | 5 ++ .../tests/e2e/config/default.cjs | 2 +- .../tests/e2e/eslint.config.mjs | 2 +- .../tests/e2e/package.json | 6 +-- .../tests/e2e/playwright.config.mjs | 2 +- .../tests/e2e/specs/start.test.js | 4 +- .../changelog/fix-bad-npm-package-names | 5 ++ .../changelog/fix-bad-npm-package-names#2 | 5 ++ projects/plugins/jetpack/package.json | 2 - .../jetpack/tests/e2e/config/default.cjs | 2 +- .../jetpack/tests/e2e/config/encrypted.enc | 3 +- .../jetpack/tests/e2e/eslint.config.mjs | 2 +- .../jetpack/tests/e2e/helpers/sync-helper.js | 4 +- .../jetpack/tests/e2e/helpers/waf-helper.js | 4 +- .../plugins/jetpack/tests/e2e/package.json | 8 ++-- .../jetpack/tests/e2e/playwright.config.mjs | 2 +- .../e2e/specs/connection/connection.test.js | 8 ++-- .../e2e/specs/editor/sidebar-social.test.js | 8 ++-- .../post-connection/recommendations.test.js | 6 +-- .../post-connection/waf-blocking.test.js | 8 ++-- .../pre-connection/pre-connection.test.js | 6 +-- .../jetpack/tests/e2e/specs/sync/sync.test.js | 10 ++-- .../e2e/specs/update/plugin-update.test.js | 8 ++-- .../changelog/fix-bad-npm-package-names | 5 ++ .../search/tests/e2e/config/default.cjs | 2 +- .../search/tests/e2e/eslint.config.mjs | 2 +- .../search/tests/e2e/helpers/search-helper.js | 4 +- .../plugins/search/tests/e2e/package.json | 6 +-- .../search/tests/e2e/pages/search-homepage.js | 4 +- .../e2e/pages/wp-admin/search-configure.js | 4 +- .../e2e/pages/wp-admin/search-dashboard.js | 4 +- .../search/tests/e2e/playwright.config.mjs | 2 +- .../tests/e2e/specs/search-configure.test.js | 4 +- .../tests/e2e/specs/search-dashboard.test.js | 4 +- .../search/tests/e2e/specs/search.test.js | 6 +-- .../changelog/fix-bad-npm-package-names | 5 ++ .../social/tests/e2e/config/default.cjs | 2 +- .../social/tests/e2e/eslint.config.mjs | 2 +- .../social/tests/e2e/flows/connection.js | 4 +- .../plugins/social/tests/e2e/package.json | 6 +-- .../e2e/pages/wp-admin/jetpack-social.js | 6 +-- .../social/tests/e2e/playwright.config.mjs | 2 +- .../social/tests/e2e/specs/admin-page.test.js | 6 +-- .../social/tests/e2e/specs/connection.test.js | 4 +- .../tests/e2e/specs/social-sidebar.test.js | 8 ++-- .../changelog/fix-bad-npm-package-names | 5 ++ .../tests/e2e/config/default.cjs | 2 +- .../tests/e2e/eslint.config.mjs | 2 +- .../starter-plugin/tests/e2e/package.json | 6 +-- .../tests/e2e/playwright.config.mjs | 2 +- .../tests/e2e/specs/start.test.js | 4 +- .../changelog/fix-bad-npm-package-names | 5 ++ .../videopress/tests/e2e/config/default.cjs | 2 +- .../videopress/tests/e2e/eslint.config.mjs | 2 +- .../plugins/videopress/tests/e2e/package.json | 6 +-- .../tests/e2e/playwright.config.mjs | 2 +- .../videopress/tests/e2e/specs/start.test.js | 4 +- tools/cli/skeletons/common/package.json | 6 +-- tools/e2e-commons/package.json | 4 +- 100 files changed, 283 insertions(+), 206 deletions(-) create mode 100644 projects/github-actions/repo-gardening/changelog/fix-bad-npm-package-names create mode 100644 projects/github-actions/required-review/changelog/fix-bad-npm-package-names create mode 100644 projects/github-actions/test-results-to-slack/changelog/fix-bad-npm-package-names create mode 100644 projects/packages/search/changelog/fix-bad-npm-package-names create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/fix-bad-npm-package-names create mode 100644 projects/plugins/boost/changelog/fix-bad-npm-package-names create mode 100644 projects/plugins/boost/changelog/fix-bad-npm-package-names#2 create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/fix-bad-npm-package-names create mode 100644 projects/plugins/jetpack/changelog/fix-bad-npm-package-names create mode 100644 projects/plugins/jetpack/changelog/fix-bad-npm-package-names#2 create mode 100644 projects/plugins/search/changelog/fix-bad-npm-package-names create mode 100644 projects/plugins/social/changelog/fix-bad-npm-package-names create mode 100644 projects/plugins/starter-plugin/changelog/fix-bad-npm-package-names create mode 100644 projects/plugins/videopress/changelog/fix-bad-npm-package-names diff --git a/.github/files/coverage-munger/package.json b/.github/files/coverage-munger/package.json index 4b62d05803239..96660e1c1b00e 100644 --- a/.github/files/coverage-munger/package.json +++ b/.github/files/coverage-munger/package.json @@ -1,6 +1,5 @@ { "private": true, - "name": "jetpack-gh-config-munger", "devDependencies": { "istanbul-merge": "^2.0.0", "nyc": "^17.1.0" diff --git a/.github/files/coverage-munger/process-coverage.sh b/.github/files/coverage-munger/process-coverage.sh index c95ff9809e5c8..c2c7b77d607b1 100755 --- a/.github/files/coverage-munger/process-coverage.sh +++ b/.github/files/coverage-munger/process-coverage.sh @@ -36,14 +36,14 @@ fi TMP=$( find "$PWD/coverage" -name '*.json' ) if [[ -n "$TMP" ]]; then echo "::group::Combining JS coverage" - pnpm --filter=jetpack-gh-config-munger exec istanbul-merge --out "$PWD"/artifacts/js-combined.json $TMP + pnpm --filter=./.github/files/coverage-munger/ exec istanbul-merge --out "$PWD"/artifacts/js-combined.json $TMP perl -i -pwe 'BEGIN { $prefix = shift; $prefix=~s!/*$!/!; $re = qr/\Q$prefix\E/; } s!"$re!"!g' "$GITHUB_WORKSPACE" artifacts/js-combined.json echo '::endgroup::' echo "::group::Creating JS coverage summary" mkdir "$TMP_DIR/js" cp artifacts/js-combined.json "$TMP_DIR/js" - pnpm --filter=jetpack-gh-config-munger exec nyc report --no-exclude-after-remap --report-dir="$TMP_DIR" --temp-dir="$TMP_DIR/js" --reporter=json-summary + pnpm --filter=./.github/files/coverage-munger/ exec nyc report --no-exclude-after-remap --report-dir="$TMP_DIR" --temp-dir="$TMP_DIR/js" --reporter=json-summary jq -r 'to_entries[] | select( .key != "total" ) | [ .key, .value.lines.total, .value.lines.covered ] | @tsv' "$TMP_DIR/coverage-summary.json" > "$TMP_DIR/js-summary.tsv" echo '::endgroup::' else diff --git a/.github/files/lint-project-structure.sh b/.github/files/lint-project-structure.sh index 194bf66cd9d32..f20d8aa420fd5 100755 --- a/.github/files/lint-project-structure.sh +++ b/.github/files/lint-project-structure.sh @@ -645,5 +645,22 @@ while IFS= read -r FILE; do done < <( git grep -h --line-number --column -o '\(random\|unique-id\)\s*(' "$FILE" ) done < <( git -c core.quotepath=off grep -l '\(random\|unique-id\)\s*(' '*.sass' '*.scss' ) +# - package.json name fields must be prefixed or already registered. +debug "Checking for bad package.json names" +while IFS=$'\t' read -r FILE NAME; do + LINE=$(grep --line-number --max-count=1 '^ "name":' "$FILE" || true) + if [[ -n "$LINE" ]]; then + LINE=",line=${LINE%%:*}" + fi + + J=$( curl -sS "https://registry.npmjs.com/$( jq -rn --arg V "$NAME" '$V | @uri' )" ) + if ! jq -e '.maintainers' <<<"$J" &>/dev/null; then + EXIT=1 + echo "::error file=$FILE$LINE::Name $NAME is not published and not scoped. If it is not supposed to be published to npmjs, then if possible omit the \"name\" field entirely or otherwise rename it like \"@automattic/$NAME\" or \"_$NAME\" or manually publish a dummy version. If it will be published, rename it like \"@automattic/$NAME\" or manually publish a dummy version." + elif ! jq -e '.maintainers[] | select( .name == "matticbot" or .name == "npm" )' <<<"$J" &>/dev/null; then + EXIT=1 + echo "::error file=$FILE$LINE::Name $NAME is not owned by us (\`matticbot\`) or the NPM security account (\`npm\`). If this is not supposed to be published to npmjs, then if possible omit the \"name\" field entirely or otherwise rename it like \"@automattic/$NAME\" or \"_$NAME\". If it will be published, either add \`matticbot\` as a maintainer if we can or you'll have to rename (e.g. like \"@automattic/$NAME\")." + fi +done < <( jq -r '.name // empty | select( startswith( "@automattic/" ) or startswith( "_" ) | not ) | [ input_filename, . ] | @tsv' $( git ls-files package.json '*/package.json' ) ) exit $EXIT diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ffe5359ff09e..7ae42e0b8bf6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3492,15 +3492,15 @@ importers: '@playwright/test': specifier: 1.48.2 version: 1.48.2 + _jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons allure-playwright: specifier: 2.9.2 version: 2.9.2 config: specifier: 3.3.12 version: 3.3.12 - jetpack-e2e-commons: - specifier: workspace:* - version: link:../../../../../tools/e2e-commons projects/plugins/boost: dependencies: @@ -3649,15 +3649,15 @@ importers: '@playwright/test': specifier: 1.48.2 version: 1.48.2 + _jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons allure-playwright: specifier: 2.9.2 version: 2.9.2 config: specifier: 3.3.12 version: 3.3.12 - jetpack-e2e-commons: - specifier: workspace:* - version: link:../../../../../tools/e2e-commons projects/plugins/classic-theme-helper-plugin: dependencies: @@ -3740,15 +3740,15 @@ importers: '@playwright/test': specifier: 1.48.2 version: 1.48.2 + _jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons allure-playwright: specifier: 2.9.2 version: 2.9.2 config: specifier: 3.3.12 version: 3.3.12 - jetpack-e2e-commons: - specifier: workspace:* - version: link:../../../../../tools/e2e-commons projects/plugins/crm: dependencies: @@ -4284,15 +4284,15 @@ importers: '@playwright/test': specifier: 1.48.2 version: 1.48.2 + _jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons allure-playwright: specifier: 2.9.2 version: 2.9.2 config: specifier: 3.3.12 version: 3.3.12 - jetpack-e2e-commons: - specifier: workspace:* - version: link:../../../../../tools/e2e-commons projects/plugins/mu-wpcom-plugin: {} @@ -4409,15 +4409,15 @@ importers: '@playwright/test': specifier: 1.48.2 version: 1.48.2 + _jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons allure-playwright: specifier: 2.9.2 version: 2.9.2 config: specifier: 3.3.12 version: 3.3.12 - jetpack-e2e-commons: - specifier: workspace:* - version: link:../../../../../tools/e2e-commons projects/plugins/social: dependencies: @@ -4548,15 +4548,15 @@ importers: '@playwright/test': specifier: 1.48.2 version: 1.48.2 + _jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons allure-playwright: specifier: 2.9.2 version: 2.9.2 config: specifier: 3.3.12 version: 3.3.12 - jetpack-e2e-commons: - specifier: workspace:* - version: link:../../../../../tools/e2e-commons projects/plugins/starter-plugin: dependencies: @@ -4639,15 +4639,15 @@ importers: '@playwright/test': specifier: 1.48.2 version: 1.48.2 + _jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons allure-playwright: specifier: 2.9.2 version: 2.9.2 config: specifier: 3.3.12 version: 3.3.12 - jetpack-e2e-commons: - specifier: workspace:* - version: link:../../../../../tools/e2e-commons projects/plugins/super-cache: {} @@ -4744,15 +4744,15 @@ importers: '@playwright/test': specifier: 1.48.2 version: 1.48.2 + _jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons allure-playwright: specifier: 2.9.2 version: 2.9.2 config: specifier: 3.3.12 version: 3.3.12 - jetpack-e2e-commons: - specifier: workspace:* - version: link:../../../../../tools/e2e-commons projects/plugins/wpcomsh: devDependencies: diff --git a/projects/github-actions/repo-gardening/changelog/fix-bad-npm-package-names b/projects/github-actions/repo-gardening/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..6e781f5152830 --- /dev/null +++ b/projects/github-actions/repo-gardening/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Remove unused "name" field from package.json. This is not published and is not the target of an intra-monorepo JS dependency. + + diff --git a/projects/github-actions/repo-gardening/package.json b/projects/github-actions/repo-gardening/package.json index 88f0f419d6010..265d3c058369d 100644 --- a/projects/github-actions/repo-gardening/package.json +++ b/projects/github-actions/repo-gardening/package.json @@ -1,6 +1,5 @@ { - "name": "repo-gardening", - "version": "6.0.0", + "private": "true", "description": "Manage Pull Requests and issues in your Open Source project (automate labelling, milestones, feedback to PR authors, ...)", "author": "Automattic", "license": "GPL-2.0-or-later", diff --git a/projects/github-actions/required-review/changelog/fix-bad-npm-package-names b/projects/github-actions/required-review/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..6e781f5152830 --- /dev/null +++ b/projects/github-actions/required-review/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Remove unused "name" field from package.json. This is not published and is not the target of an intra-monorepo JS dependency. + + diff --git a/projects/github-actions/required-review/package.json b/projects/github-actions/required-review/package.json index 657867f70fdfb..ad2c9a14a558a 100644 --- a/projects/github-actions/required-review/package.json +++ b/projects/github-actions/required-review/package.json @@ -1,6 +1,5 @@ { - "name": "required-review", - "version": "4.0.2", + "private": true, "description": "Check that a Pull Request has reviews from required teams.", "main": "index.js", "author": "Automattic", diff --git a/projects/github-actions/test-results-to-slack/changelog/fix-bad-npm-package-names b/projects/github-actions/test-results-to-slack/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..6e781f5152830 --- /dev/null +++ b/projects/github-actions/test-results-to-slack/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Remove unused "name" field from package.json. This is not published and is not the target of an intra-monorepo JS dependency. + + diff --git a/projects/github-actions/test-results-to-slack/package.json b/projects/github-actions/test-results-to-slack/package.json index 4abcd422a153f..d8a938da6ce4e 100644 --- a/projects/github-actions/test-results-to-slack/package.json +++ b/projects/github-actions/test-results-to-slack/package.json @@ -1,6 +1,5 @@ { - "name": "test-results-to-slack", - "version": "0.3.2", + "private": true, "description": "GitHub Action to send Slack notifications with test results", "author": "Automattic", "license": "GPL-2.0-or-later", diff --git a/projects/packages/search/changelog/fix-bad-npm-package-names b/projects/packages/search/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..6e781f5152830 --- /dev/null +++ b/projects/packages/search/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Remove unused "name" field from package.json. This is not published and is not the target of an intra-monorepo JS dependency. + + diff --git a/projects/packages/search/package.json b/projects/packages/search/package.json index aa3ee4672171c..83f1363488204 100644 --- a/projects/packages/search/package.json +++ b/projects/packages/search/package.json @@ -1,6 +1,5 @@ { - "name": "jetpack-search", - "version": "0.47.6", + "private": true, "description": "Package for Jetpack Search products", "main": "main.js", "directories": { diff --git a/projects/plugins/automattic-for-agencies-client/changelog/fix-bad-npm-package-names b/projects/plugins/automattic-for-agencies-client/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..fc1da13877c8e --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. + + diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/config/default.cjs b/projects/plugins/automattic-for-agencies-client/tests/e2e/config/default.cjs index 179bdfe0e8c9a..2c757920e87a2 100644 --- a/projects/plugins/automattic-for-agencies-client/tests/e2e/config/default.cjs +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/config/default.cjs @@ -1 +1 @@ -module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); +module.exports = require( '_jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/eslint.config.mjs b/projects/plugins/automattic-for-agencies-client/tests/e2e/eslint.config.mjs index 8d2ff03cc1c1a..81d63116a5e48 100644 --- a/projects/plugins/automattic-for-agencies-client/tests/e2e/eslint.config.mjs +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/eslint.config.mjs @@ -1,3 +1,3 @@ -import { makeE2eConfig } from 'jetpack-e2e-commons/eslint.config.mjs'; +import { makeE2eConfig } from '_jetpack-e2e-commons/eslint.config.mjs'; export default [ ...makeE2eConfig( import.meta.url ) ]; diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/package.json b/projects/plugins/automattic-for-agencies-client/tests/e2e/package.json index 764e9d8bc18cb..d25acda3f41d6 100644 --- a/projects/plugins/automattic-for-agencies-client/tests/e2e/package.json +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/package.json @@ -16,7 +16,7 @@ "scripts": { "build": "pnpm jetpack build plugins/automattic-for-agencies-client plugins/jetpack -v --no-pnpm-install --production", "clean": "rm -rf output", - "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", + "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", "distclean": "rm -rf node_modules", "env:up": "e2e-env start --activate-plugins automattic-for-agencies-client", "env:down": "e2e-env stop", @@ -25,13 +25,13 @@ "tunnel:reset": "tunnel reset", "tunnel:down": "tunnel down", "pretest:run": "pnpm run clean", - "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" + "test:run": ". ./node_modules/_jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" }, "devDependencies": { "@playwright/test": "1.48.2", "allure-playwright": "2.9.2", "config": "3.3.12", - "jetpack-e2e-commons": "workspace:*" + "_jetpack-e2e-commons": "workspace:*" }, "browserslist": [], "ci": { diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/playwright.config.mjs b/projects/plugins/automattic-for-agencies-client/tests/e2e/playwright.config.mjs index b5d057df1a7b8..e4ba2c71b583d 100644 --- a/projects/plugins/automattic-for-agencies-client/tests/e2e/playwright.config.mjs +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/playwright.config.mjs @@ -1 +1 @@ -export { default } from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; +export { default } from '_jetpack-e2e-commons/config/playwright.config.default.mjs'; diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/specs/start.test.js b/projects/plugins/automattic-for-agencies-client/tests/e2e/specs/start.test.js index f13283a0ab1e1..baa9f3ee0f4fa 100644 --- a/projects/plugins/automattic-for-agencies-client/tests/e2e/specs/start.test.js +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/specs/start.test.js @@ -1,6 +1,6 @@ import { test } from '@playwright/test'; -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { Sidebar, DashboardPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { Sidebar, DashboardPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; import playwrightConfig from '../playwright.config.mjs'; test.describe( 'Starter plugin!', () => { diff --git a/projects/plugins/boost/changelog/fix-bad-npm-package-names b/projects/plugins/boost/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..6e781f5152830 --- /dev/null +++ b/projects/plugins/boost/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Remove unused "name" field from package.json. This is not published and is not the target of an intra-monorepo JS dependency. + + diff --git a/projects/plugins/boost/changelog/fix-bad-npm-package-names#2 b/projects/plugins/boost/changelog/fix-bad-npm-package-names#2 new file mode 100644 index 0000000000000..fc1da13877c8e --- /dev/null +++ b/projects/plugins/boost/changelog/fix-bad-npm-package-names#2 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. + + diff --git a/projects/plugins/boost/package.json b/projects/plugins/boost/package.json index b7e6f8cac3df3..fe8e1e7a743ab 100644 --- a/projects/plugins/boost/package.json +++ b/projects/plugins/boost/package.json @@ -1,6 +1,5 @@ { - "name": "jetpack-boost", - "version": "3.8.0", + "private": true, "description": "Boost your WordPress site's performance, from the creators of Jetpack", "directories": { "test": "tests" @@ -73,7 +72,6 @@ "test-e2e:stop": "pnpm --prefix tests/e2e run tunnel:down && pnpm --prefix tests/e2e run env:down", "test-e2e:decrypt-config": "pnpm --prefix tests/e2e run config:decrypt" }, - "private": true, "repository": { "type": "git", "url": "https://github.com/Automattic/jetpack", diff --git a/projects/plugins/boost/tests/e2e/config/default.cjs b/projects/plugins/boost/tests/e2e/config/default.cjs index 179bdfe0e8c9a..2c757920e87a2 100644 --- a/projects/plugins/boost/tests/e2e/config/default.cjs +++ b/projects/plugins/boost/tests/e2e/config/default.cjs @@ -1 +1 @@ -module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); +module.exports = require( '_jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/boost/tests/e2e/eslint.config.mjs b/projects/plugins/boost/tests/e2e/eslint.config.mjs index 8d2ff03cc1c1a..81d63116a5e48 100644 --- a/projects/plugins/boost/tests/e2e/eslint.config.mjs +++ b/projects/plugins/boost/tests/e2e/eslint.config.mjs @@ -1,3 +1,3 @@ -import { makeE2eConfig } from 'jetpack-e2e-commons/eslint.config.mjs'; +import { makeE2eConfig } from '_jetpack-e2e-commons/eslint.config.mjs'; export default [ ...makeE2eConfig( import.meta.url ) ]; diff --git a/projects/plugins/boost/tests/e2e/lib/env/prerequisites.js b/projects/plugins/boost/tests/e2e/lib/env/prerequisites.js index 31a9e7f9f57ac..f4bd70c7623e3 100644 --- a/projects/plugins/boost/tests/e2e/lib/env/prerequisites.js +++ b/projects/plugins/boost/tests/e2e/lib/env/prerequisites.js @@ -1,7 +1,7 @@ import { expect } from '@playwright/test'; -import { ensureUserIsLoggedIn } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { execWpCommand } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import logger from 'jetpack-e2e-commons/logger.js'; +import { ensureUserIsLoggedIn } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { execWpCommand } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import logger from '_jetpack-e2e-commons/logger.js'; import { JetpackBoostPage } from '../pages/index.js'; /** diff --git a/projects/plugins/boost/tests/e2e/lib/pages/frontend/FirstPostPage.js b/projects/plugins/boost/tests/e2e/lib/pages/frontend/FirstPostPage.js index d8540cc86fc71..78f2d0d783061 100644 --- a/projects/plugins/boost/tests/e2e/lib/pages/frontend/FirstPostPage.js +++ b/projects/plugins/boost/tests/e2e/lib/pages/frontend/FirstPostPage.js @@ -1,5 +1,5 @@ -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import WpPage from 'jetpack-e2e-commons/pages/wp-page.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import WpPage from '_jetpack-e2e-commons/pages/wp-page.js'; export default class FirstPostPage extends WpPage { constructor( page ) { diff --git a/projects/plugins/boost/tests/e2e/lib/pages/wp-admin/JetpackBoostPage.js b/projects/plugins/boost/tests/e2e/lib/pages/wp-admin/JetpackBoostPage.js index afe15bab290cc..6ae7aa9e7733b 100644 --- a/projects/plugins/boost/tests/e2e/lib/pages/wp-admin/JetpackBoostPage.js +++ b/projects/plugins/boost/tests/e2e/lib/pages/wp-admin/JetpackBoostPage.js @@ -1,5 +1,5 @@ -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import WpPage from 'jetpack-e2e-commons/pages/wp-page.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import WpPage from '_jetpack-e2e-commons/pages/wp-page.js'; const apiEndpointsRegex = { 'modules-state': /jetpack-boost-ds\/modules-state\/set/, diff --git a/projects/plugins/boost/tests/e2e/lib/pages/wp-admin/PermalinksPage.js b/projects/plugins/boost/tests/e2e/lib/pages/wp-admin/PermalinksPage.js index 881a85f8b01af..4ab16a4ac48ed 100644 --- a/projects/plugins/boost/tests/e2e/lib/pages/wp-admin/PermalinksPage.js +++ b/projects/plugins/boost/tests/e2e/lib/pages/wp-admin/PermalinksPage.js @@ -1,5 +1,5 @@ -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import WpPage from 'jetpack-e2e-commons/pages/wp-page.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import WpPage from '_jetpack-e2e-commons/pages/wp-page.js'; export default class PermalinksPage extends WpPage { constructor( page ) { diff --git a/projects/plugins/boost/tests/e2e/lib/setupTests.js b/projects/plugins/boost/tests/e2e/lib/setupTests.js index 99d581b450de8..22e968f03506f 100644 --- a/projects/plugins/boost/tests/e2e/lib/setupTests.js +++ b/projects/plugins/boost/tests/e2e/lib/setupTests.js @@ -1,5 +1,5 @@ import { chromium } from '@playwright/test'; -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; import { boostPrerequisitesBuilder } from './env/prerequisites.js'; /** diff --git a/projects/plugins/boost/tests/e2e/package.json b/projects/plugins/boost/tests/e2e/package.json index 0121aa55e79da..908e8fb8d45b3 100644 --- a/projects/plugins/boost/tests/e2e/package.json +++ b/projects/plugins/boost/tests/e2e/package.json @@ -15,7 +15,7 @@ "scripts": { "build": "pnpm jetpack build plugins/jetpack plugins/boost js-packages/image-guide js-packages/critical-css-gen packages/plugin-deactivation -v --no-pnpm-install --production", "clean": "rm -rf output", - "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", + "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", "distclean": "rm -rf node_modules", "env:up": "e2e-env start --activate-plugins boost && pnpm run prepare:e2e", "env:down": "e2e-env stop", @@ -24,14 +24,14 @@ "tunnel:reset": "tunnel reset", "tunnel:down": "tunnel down", "pretest:run": "pnpm run clean", - "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs", + "test:run": ". ./node_modules/_jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs", "prepare:e2e": "pnpm jetpack docker --type e2e --name t1 exec-silent -- chown -R www-data .htaccess wp-config.php wp-content" }, "devDependencies": { "@playwright/test": "1.48.2", "allure-playwright": "2.9.2", "config": "3.3.12", - "jetpack-e2e-commons": "workspace:*" + "_jetpack-e2e-commons": "workspace:*" }, "browserslist": [], "ci": { diff --git a/projects/plugins/boost/tests/e2e/playwright.config.mjs b/projects/plugins/boost/tests/e2e/playwright.config.mjs index 56d22771f7342..dd9f4cfb1c655 100644 --- a/projects/plugins/boost/tests/e2e/playwright.config.mjs +++ b/projects/plugins/boost/tests/e2e/playwright.config.mjs @@ -1,4 +1,4 @@ -import config from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; +import config from '_jetpack-e2e-commons/config/playwright.config.default.mjs'; config.globalSetup = './lib/setupTests.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/base/common.test.js b/projects/plugins/boost/tests/e2e/specs/base/common.test.js index ff8d67c4e303a..390203f988241 100644 --- a/projects/plugins/boost/tests/e2e/specs/base/common.test.js +++ b/projects/plugins/boost/tests/e2e/specs/base/common.test.js @@ -1,8 +1,8 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { execWpCommand } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import { DashboardPage, PluginsPage, Sidebar } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { execWpCommand } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import { DashboardPage, PluginsPage, Sidebar } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/base/get-started.test.ts b/projects/plugins/boost/tests/e2e/specs/base/get-started.test.ts index 5539420458675..381ffa66e33b3 100644 --- a/projects/plugins/boost/tests/e2e/specs/base/get-started.test.ts +++ b/projects/plugins/boost/tests/e2e/specs/base/get-started.test.ts @@ -1,5 +1,5 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/concatenate/concatenate.test.js b/projects/plugins/boost/tests/e2e/specs/concatenate/concatenate.test.js index cf32b45c90166..27b33ce5125db 100644 --- a/projects/plugins/boost/tests/e2e/specs/concatenate/concatenate.test.js +++ b/projects/plugins/boost/tests/e2e/specs/concatenate/concatenate.test.js @@ -1,6 +1,6 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { PostFrontendPage } from 'jetpack-e2e-commons/pages/index.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { PostFrontendPage } from '_jetpack-e2e-commons/pages/index.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/critical-css/critical-css.test.js b/projects/plugins/boost/tests/e2e/specs/critical-css/critical-css.test.js index 231c9c9b278a2..b4425559eb857 100644 --- a/projects/plugins/boost/tests/e2e/specs/critical-css/critical-css.test.js +++ b/projects/plugins/boost/tests/e2e/specs/critical-css/critical-css.test.js @@ -1,8 +1,8 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { execWpCommand } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import { PostFrontendPage } from 'jetpack-e2e-commons/pages/index.js'; -import { DashboardPage, ThemesPage, Sidebar } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { execWpCommand } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import { PostFrontendPage } from '_jetpack-e2e-commons/pages/index.js'; +import { DashboardPage, ThemesPage, Sidebar } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/image-cdn/image-cdn.test.js b/projects/plugins/boost/tests/e2e/specs/image-cdn/image-cdn.test.js index 049bbca926f41..9d45b1ae539dd 100644 --- a/projects/plugins/boost/tests/e2e/specs/image-cdn/image-cdn.test.js +++ b/projects/plugins/boost/tests/e2e/specs/image-cdn/image-cdn.test.js @@ -1,5 +1,5 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage, FirstPostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/image-guide/image-guide.test.js b/projects/plugins/boost/tests/e2e/specs/image-guide/image-guide.test.js index 161843448925b..d09258476c819 100644 --- a/projects/plugins/boost/tests/e2e/specs/image-guide/image-guide.test.js +++ b/projects/plugins/boost/tests/e2e/specs/image-guide/image-guide.test.js @@ -1,5 +1,5 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { FirstPostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/modules/modules-common.test.js b/projects/plugins/boost/tests/e2e/specs/modules/modules-common.test.js index 95344c7dd210f..b3181c642cd52 100644 --- a/projects/plugins/boost/tests/e2e/specs/modules/modules-common.test.js +++ b/projects/plugins/boost/tests/e2e/specs/modules/modules-common.test.js @@ -1,5 +1,5 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/modules/render-blocking-js.test.js b/projects/plugins/boost/tests/e2e/specs/modules/render-blocking-js.test.js index 6358b0b3fba7d..6d8206b033ac2 100644 --- a/projects/plugins/boost/tests/e2e/specs/modules/render-blocking-js.test.js +++ b/projects/plugins/boost/tests/e2e/specs/modules/render-blocking-js.test.js @@ -1,6 +1,6 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { PostFrontendPage } from 'jetpack-e2e-commons/pages/index.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { PostFrontendPage } from '_jetpack-e2e-commons/pages/index.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; const testPostTitle = 'Hello World with JavaScript'; diff --git a/projects/plugins/boost/tests/e2e/specs/modules/score-auto-refresh.test.js b/projects/plugins/boost/tests/e2e/specs/modules/score-auto-refresh.test.js index 4286016401339..f61b63a559f21 100644 --- a/projects/plugins/boost/tests/e2e/specs/modules/score-auto-refresh.test.js +++ b/projects/plugins/boost/tests/e2e/specs/modules/score-auto-refresh.test.js @@ -1,5 +1,5 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/modules/speed-score.test.js b/projects/plugins/boost/tests/e2e/specs/modules/speed-score.test.js index 794a0e09cde51..4df4b7bdf9960 100644 --- a/projects/plugins/boost/tests/e2e/specs/modules/speed-score.test.js +++ b/projects/plugins/boost/tests/e2e/specs/modules/speed-score.test.js @@ -1,4 +1,4 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/boost/tests/e2e/specs/page-cache/page-cache.test.js b/projects/plugins/boost/tests/e2e/specs/page-cache/page-cache.test.js index c76a67e1dc602..d45fd4e2f12d5 100644 --- a/projects/plugins/boost/tests/e2e/specs/page-cache/page-cache.test.js +++ b/projects/plugins/boost/tests/e2e/specs/page-cache/page-cache.test.js @@ -1,8 +1,8 @@ -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import { PostFrontendPage } from 'jetpack-e2e-commons/pages/index.js'; -import { WPLoginPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; -import playwrightConfig from 'jetpack-e2e-commons/playwright.config.mjs'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import { PostFrontendPage } from '_jetpack-e2e-commons/pages/index.js'; +import { WPLoginPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; +import playwrightConfig from '_jetpack-e2e-commons/playwright.config.mjs'; import { boostPrerequisitesBuilder } from '../../lib/env/prerequisites.js'; import { JetpackBoostPage, PermalinksPage } from '../../lib/pages/index.js'; diff --git a/projects/plugins/classic-theme-helper-plugin/changelog/fix-bad-npm-package-names b/projects/plugins/classic-theme-helper-plugin/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..fc1da13877c8e --- /dev/null +++ b/projects/plugins/classic-theme-helper-plugin/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. + + diff --git a/projects/plugins/classic-theme-helper-plugin/tests/e2e/config/default.cjs b/projects/plugins/classic-theme-helper-plugin/tests/e2e/config/default.cjs index 179bdfe0e8c9a..2c757920e87a2 100644 --- a/projects/plugins/classic-theme-helper-plugin/tests/e2e/config/default.cjs +++ b/projects/plugins/classic-theme-helper-plugin/tests/e2e/config/default.cjs @@ -1 +1 @@ -module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); +module.exports = require( '_jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/classic-theme-helper-plugin/tests/e2e/eslint.config.mjs b/projects/plugins/classic-theme-helper-plugin/tests/e2e/eslint.config.mjs index 8d2ff03cc1c1a..81d63116a5e48 100644 --- a/projects/plugins/classic-theme-helper-plugin/tests/e2e/eslint.config.mjs +++ b/projects/plugins/classic-theme-helper-plugin/tests/e2e/eslint.config.mjs @@ -1,3 +1,3 @@ -import { makeE2eConfig } from 'jetpack-e2e-commons/eslint.config.mjs'; +import { makeE2eConfig } from '_jetpack-e2e-commons/eslint.config.mjs'; export default [ ...makeE2eConfig( import.meta.url ) ]; diff --git a/projects/plugins/classic-theme-helper-plugin/tests/e2e/package.json b/projects/plugins/classic-theme-helper-plugin/tests/e2e/package.json index 1abf3ffd9f812..d726e7aaae3d0 100644 --- a/projects/plugins/classic-theme-helper-plugin/tests/e2e/package.json +++ b/projects/plugins/classic-theme-helper-plugin/tests/e2e/package.json @@ -16,7 +16,7 @@ "scripts": { "build": "pnpm jetpack build plugins/classic-theme-helper-plugin plugins/jetpack -v --no-pnpm-install --production", "clean": "rm -rf output", - "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", + "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", "distclean": "rm -rf node_modules", "env:up": "e2e-env start --activate-plugins classic-theme-helper-plugin", "env:down": "e2e-env stop", @@ -25,13 +25,13 @@ "tunnel:reset": "tunnel reset", "tunnel:down": "tunnel down", "pretest:run": "pnpm run clean", - "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" + "test:run": ". ./node_modules/_jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" }, "devDependencies": { "@playwright/test": "1.48.2", "allure-playwright": "2.9.2", "config": "3.3.12", - "jetpack-e2e-commons": "workspace:*" + "_jetpack-e2e-commons": "workspace:*" }, "browserslist": [], "ci": { diff --git a/projects/plugins/classic-theme-helper-plugin/tests/e2e/playwright.config.mjs b/projects/plugins/classic-theme-helper-plugin/tests/e2e/playwright.config.mjs index b5d057df1a7b8..e4ba2c71b583d 100644 --- a/projects/plugins/classic-theme-helper-plugin/tests/e2e/playwright.config.mjs +++ b/projects/plugins/classic-theme-helper-plugin/tests/e2e/playwright.config.mjs @@ -1 +1 @@ -export { default } from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; +export { default } from '_jetpack-e2e-commons/config/playwright.config.default.mjs'; diff --git a/projects/plugins/classic-theme-helper-plugin/tests/e2e/specs/start.test.js b/projects/plugins/classic-theme-helper-plugin/tests/e2e/specs/start.test.js index f13283a0ab1e1..baa9f3ee0f4fa 100644 --- a/projects/plugins/classic-theme-helper-plugin/tests/e2e/specs/start.test.js +++ b/projects/plugins/classic-theme-helper-plugin/tests/e2e/specs/start.test.js @@ -1,6 +1,6 @@ import { test } from '@playwright/test'; -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { Sidebar, DashboardPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { Sidebar, DashboardPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; import playwrightConfig from '../playwright.config.mjs'; test.describe( 'Starter plugin!', () => { diff --git a/projects/plugins/jetpack/changelog/fix-bad-npm-package-names b/projects/plugins/jetpack/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..aea5a62a1613d --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Remove unused "name" field from package.json. This is not published and is not the target of an intra-monorepo JS dependency. + + diff --git a/projects/plugins/jetpack/changelog/fix-bad-npm-package-names#2 b/projects/plugins/jetpack/changelog/fix-bad-npm-package-names#2 new file mode 100644 index 0000000000000..64df5e9573438 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-bad-npm-package-names#2 @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. + + diff --git a/projects/plugins/jetpack/package.json b/projects/plugins/jetpack/package.json index ddfe931a97db9..1b1a3c0ae5eac 100644 --- a/projects/plugins/jetpack/package.json +++ b/projects/plugins/jetpack/package.json @@ -1,6 +1,4 @@ { - "name": "Jetpack", - "version": "14.3.0-a.3", "private": true, "description": "[Jetpack](https://jetpack.com/) is a WordPress plugin that supercharges your self-hosted WordPress site with the awesome cloud power of [WordPress.com](https://wordpress.com).", "homepage": "https://jetpack.com", diff --git a/projects/plugins/jetpack/tests/e2e/config/default.cjs b/projects/plugins/jetpack/tests/e2e/config/default.cjs index 179bdfe0e8c9a..2c757920e87a2 100644 --- a/projects/plugins/jetpack/tests/e2e/config/default.cjs +++ b/projects/plugins/jetpack/tests/e2e/config/default.cjs @@ -1 +1 @@ -module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); +module.exports = require( '_jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/jetpack/tests/e2e/config/encrypted.enc b/projects/plugins/jetpack/tests/e2e/config/encrypted.enc index 2b7a724cefde0..1742470fc1a9f 100644 --- a/projects/plugins/jetpack/tests/e2e/config/encrypted.enc +++ b/projects/plugins/jetpack/tests/e2e/config/encrypted.enc @@ -1,2 +1 @@ -Salted__BHø߂Uj/XП_T3'AxM{( -J"FrA%&+GMNj|mFP \ No newline at end of file +Salted__dR!(d$+UQfx%ͨWeff!q1LLdk kzgXm~#7K&?RWƙh8 \ No newline at end of file diff --git a/projects/plugins/jetpack/tests/e2e/eslint.config.mjs b/projects/plugins/jetpack/tests/e2e/eslint.config.mjs index 8d2ff03cc1c1a..81d63116a5e48 100644 --- a/projects/plugins/jetpack/tests/e2e/eslint.config.mjs +++ b/projects/plugins/jetpack/tests/e2e/eslint.config.mjs @@ -1,3 +1,3 @@ -import { makeE2eConfig } from 'jetpack-e2e-commons/eslint.config.mjs'; +import { makeE2eConfig } from '_jetpack-e2e-commons/eslint.config.mjs'; export default [ ...makeE2eConfig( import.meta.url ) ]; diff --git a/projects/plugins/jetpack/tests/e2e/helpers/sync-helper.js b/projects/plugins/jetpack/tests/e2e/helpers/sync-helper.js index d2b414229eb8d..09b23dbff53d6 100644 --- a/projects/plugins/jetpack/tests/e2e/helpers/sync-helper.js +++ b/projects/plugins/jetpack/tests/e2e/helpers/sync-helper.js @@ -1,5 +1,5 @@ -import { execWpCommand } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import logger from 'jetpack-e2e-commons/logger.js'; +import { execWpCommand } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import logger from '_jetpack-e2e-commons/logger.js'; /** * Enable sync diff --git a/projects/plugins/jetpack/tests/e2e/helpers/waf-helper.js b/projects/plugins/jetpack/tests/e2e/helpers/waf-helper.js index d0b9b6072ef57..c09fe1a7b19a6 100644 --- a/projects/plugins/jetpack/tests/e2e/helpers/waf-helper.js +++ b/projects/plugins/jetpack/tests/e2e/helpers/waf-helper.js @@ -1,5 +1,5 @@ -import { execWpCommand } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import logger from 'jetpack-e2e-commons/logger.js'; +import { execWpCommand } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import logger from '_jetpack-e2e-commons/logger.js'; /** * Enable automatic rules diff --git a/projects/plugins/jetpack/tests/e2e/package.json b/projects/plugins/jetpack/tests/e2e/package.json index d45561b038e83..5f29079ed847b 100644 --- a/projects/plugins/jetpack/tests/e2e/package.json +++ b/projects/plugins/jetpack/tests/e2e/package.json @@ -26,18 +26,18 @@ "tunnel:reset": "tunnel reset", "tunnel:down": "tunnel down", "pretest:run": "pnpm run clean", - "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=playwright.config.mjs", - "test-decrypt-default-config": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./node_modules/jetpack-e2e-commons/config/local.cjs", + "test:run": ". ./node_modules/_jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=playwright.config.mjs", + "test-decrypt-default-config": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./node_modules/_jetpack-e2e-commons/config/local.cjs", "test-decrypt-config": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./config/encrypted.enc -out config/local.cjs", "test-decrypt-all-config": "pnpm test-decrypt-default-config && pnpm test-decrypt-config", - "test-encrypt-default-config": "openssl enc -md sha1 -aes-256-cbc -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/local.cjs -out ./node_modules/jetpack-e2e-commons/config/encrypted.enc", + "test-encrypt-default-config": "openssl enc -md sha1 -aes-256-cbc -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/local.cjs -out ./node_modules/_jetpack-e2e-commons/config/encrypted.enc", "test-encrypt-config": "openssl enc -md sha1 -aes-256-cbc -pass env:CONFIG_KEY -in config/local.cjs -out ./config/encrypted.enc" }, "devDependencies": { "@playwright/test": "1.48.2", "allure-playwright": "2.9.2", "config": "3.3.12", - "jetpack-e2e-commons": "workspace:*" + "_jetpack-e2e-commons": "workspace:*" }, "browserslist": [], "ci": { diff --git a/projects/plugins/jetpack/tests/e2e/playwright.config.mjs b/projects/plugins/jetpack/tests/e2e/playwright.config.mjs index b5d057df1a7b8..e4ba2c71b583d 100644 --- a/projects/plugins/jetpack/tests/e2e/playwright.config.mjs +++ b/projects/plugins/jetpack/tests/e2e/playwright.config.mjs @@ -1 +1 @@ -export { default } from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; +export { default } from '_jetpack-e2e-commons/config/playwright.config.default.mjs'; diff --git a/projects/plugins/jetpack/tests/e2e/specs/connection/connection.test.js b/projects/plugins/jetpack/tests/e2e/specs/connection/connection.test.js index 41c6a4ad1ea12..aa6840fe94467 100644 --- a/projects/plugins/jetpack/tests/e2e/specs/connection/connection.test.js +++ b/projects/plugins/jetpack/tests/e2e/specs/connection/connection.test.js @@ -1,11 +1,11 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { doSiteLevelConnection, doClassicConnection } from 'jetpack-e2e-commons/flows/index.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { doSiteLevelConnection, doClassicConnection } from '_jetpack-e2e-commons/flows/index.js'; import { Sidebar, JetpackDashboardPage, DashboardPage, -} from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +} from '_jetpack-e2e-commons/pages/wp-admin/index.js'; test.beforeEach( async ( { page } ) => { await prerequisitesBuilder( page ) diff --git a/projects/plugins/jetpack/tests/e2e/specs/editor/sidebar-social.test.js b/projects/plugins/jetpack/tests/e2e/specs/editor/sidebar-social.test.js index 0bb8368131b93..a9868b75089dd 100644 --- a/projects/plugins/jetpack/tests/e2e/specs/editor/sidebar-social.test.js +++ b/projects/plugins/jetpack/tests/e2e/specs/editor/sidebar-social.test.js @@ -1,7 +1,7 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/index.js'; -import { expect, test } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import logger from 'jetpack-e2e-commons/logger.js'; -import { BlockEditorPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/index.js'; +import { expect, test } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import logger from '_jetpack-e2e-commons/logger.js'; +import { BlockEditorPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; test.beforeEach( async ( { page } ) => { await prerequisitesBuilder( page ) diff --git a/projects/plugins/jetpack/tests/e2e/specs/post-connection/recommendations.test.js b/projects/plugins/jetpack/tests/e2e/specs/post-connection/recommendations.test.js index 5c4142d2f768a..264481827e4ef 100644 --- a/projects/plugins/jetpack/tests/e2e/specs/post-connection/recommendations.test.js +++ b/projects/plugins/jetpack/tests/e2e/specs/post-connection/recommendations.test.js @@ -1,6 +1,6 @@ -import { Plans, prerequisitesBuilder } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { RecommendationsPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { Plans, prerequisitesBuilder } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { RecommendationsPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; import playwrightConfig from '../../playwright.config.mjs'; test.beforeAll( async ( { browser } ) => { diff --git a/projects/plugins/jetpack/tests/e2e/specs/post-connection/waf-blocking.test.js b/projects/plugins/jetpack/tests/e2e/specs/post-connection/waf-blocking.test.js index bb131bdfcbb88..1e3ded8a27e2b 100644 --- a/projects/plugins/jetpack/tests/e2e/specs/post-connection/waf-blocking.test.js +++ b/projects/plugins/jetpack/tests/e2e/specs/post-connection/waf-blocking.test.js @@ -1,7 +1,7 @@ -import { Plans, prerequisitesBuilder } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import { WpPage } from 'jetpack-e2e-commons/pages/index.js'; +import { Plans, prerequisitesBuilder } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import { WpPage } from '_jetpack-e2e-commons/pages/index.js'; import { enableAutomaticRules, generateRules } from '../../helpers/waf-helper.js'; import playwrightConfig from '../../playwright.config.mjs'; diff --git a/projects/plugins/jetpack/tests/e2e/specs/pre-connection/pre-connection.test.js b/projects/plugins/jetpack/tests/e2e/specs/pre-connection/pre-connection.test.js index 5941883344d72..6d8c6e987d5e5 100644 --- a/projects/plugins/jetpack/tests/e2e/specs/pre-connection/pre-connection.test.js +++ b/projects/plugins/jetpack/tests/e2e/specs/pre-connection/pre-connection.test.js @@ -1,6 +1,6 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { Sidebar, DashboardPage, JetpackPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { Sidebar, DashboardPage, JetpackPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; import playwrightConfig from '../../playwright.config.mjs'; test.beforeAll( async ( { browser } ) => { diff --git a/projects/plugins/jetpack/tests/e2e/specs/sync/sync.test.js b/projects/plugins/jetpack/tests/e2e/specs/sync/sync.test.js index 75b843c08e559..e761b1cface6b 100644 --- a/projects/plugins/jetpack/tests/e2e/specs/sync/sync.test.js +++ b/projects/plugins/jetpack/tests/e2e/specs/sync/sync.test.js @@ -1,8 +1,8 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { execWpCommand } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import logger from 'jetpack-e2e-commons/logger.js'; -import { BlockEditorPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { execWpCommand } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import logger from '_jetpack-e2e-commons/logger.js'; +import { BlockEditorPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; import { enableSync, disableSync, diff --git a/projects/plugins/jetpack/tests/e2e/specs/update/plugin-update.test.js b/projects/plugins/jetpack/tests/e2e/specs/update/plugin-update.test.js index 21eec5a21dfff..522c7606b02c6 100644 --- a/projects/plugins/jetpack/tests/e2e/specs/update/plugin-update.test.js +++ b/projects/plugins/jetpack/tests/e2e/specs/update/plugin-update.test.js @@ -1,11 +1,11 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; import { execShellCommand, resolveSiteUrl, execContainerShellCommand, -} from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import { PluginsPage, JetpackDashboardPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +} from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import { PluginsPage, JetpackDashboardPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; test.skip( 'Update Jetpack plugin', async ( { page } ) => { const binPath = '/usr/local/src/jetpack-monorepo/projects/plugins/jetpack/tests/e2e/bin/update/'; diff --git a/projects/plugins/search/changelog/fix-bad-npm-package-names b/projects/plugins/search/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..fc1da13877c8e --- /dev/null +++ b/projects/plugins/search/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. + + diff --git a/projects/plugins/search/tests/e2e/config/default.cjs b/projects/plugins/search/tests/e2e/config/default.cjs index 179bdfe0e8c9a..2c757920e87a2 100644 --- a/projects/plugins/search/tests/e2e/config/default.cjs +++ b/projects/plugins/search/tests/e2e/config/default.cjs @@ -1 +1 @@ -module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); +module.exports = require( '_jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/search/tests/e2e/eslint.config.mjs b/projects/plugins/search/tests/e2e/eslint.config.mjs index 8d2ff03cc1c1a..81d63116a5e48 100644 --- a/projects/plugins/search/tests/e2e/eslint.config.mjs +++ b/projects/plugins/search/tests/e2e/eslint.config.mjs @@ -1,3 +1,3 @@ -import { makeE2eConfig } from 'jetpack-e2e-commons/eslint.config.mjs'; +import { makeE2eConfig } from '_jetpack-e2e-commons/eslint.config.mjs'; export default [ ...makeE2eConfig( import.meta.url ) ]; diff --git a/projects/plugins/search/tests/e2e/helpers/search-helper.js b/projects/plugins/search/tests/e2e/helpers/search-helper.js index 77450e19eac47..7ab5660d1b617 100644 --- a/projects/plugins/search/tests/e2e/helpers/search-helper.js +++ b/projects/plugins/search/tests/e2e/helpers/search-helper.js @@ -1,5 +1,5 @@ -import { execWpCommand } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import logger from 'jetpack-e2e-commons/logger.js'; +import { execWpCommand } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import logger from '_jetpack-e2e-commons/logger.js'; import { SearchHomepage } from '../pages/index.js'; /** diff --git a/projects/plugins/search/tests/e2e/package.json b/projects/plugins/search/tests/e2e/package.json index 56ce4e0989500..b2c71aea1d4eb 100644 --- a/projects/plugins/search/tests/e2e/package.json +++ b/projects/plugins/search/tests/e2e/package.json @@ -12,7 +12,7 @@ "scripts": { "build": "pnpm jetpack build packages/assets packages/search packages/connection plugins/jetpack -v --no-pnpm-install --production", "clean": "rm -rf output", - "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", + "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", "distclean": "rm -rf node_modules", "env:up": "e2e-env start", "env:down": "e2e-env stop", @@ -23,13 +23,13 @@ "tunnel:reset": "tunnel reset", "tunnel:down": "tunnel down", "pretest:run": "pnpm run clean", - "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=playwright.config.mjs" + "test:run": ". ./node_modules/_jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=playwright.config.mjs" }, "devDependencies": { "@playwright/test": "1.48.2", "allure-playwright": "2.9.2", "config": "3.3.12", - "jetpack-e2e-commons": "workspace:*" + "_jetpack-e2e-commons": "workspace:*" }, "browserslist": [], "ci": { diff --git a/projects/plugins/search/tests/e2e/pages/search-homepage.js b/projects/plugins/search/tests/e2e/pages/search-homepage.js index 0a4b6a3fdb6d4..63a66e0338bf4 100644 --- a/projects/plugins/search/tests/e2e/pages/search-homepage.js +++ b/projects/plugins/search/tests/e2e/pages/search-homepage.js @@ -1,5 +1,5 @@ -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import WpPage from 'jetpack-e2e-commons/pages/wp-page.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import WpPage from '_jetpack-e2e-commons/pages/wp-page.js'; export default class SearchHomepage extends WpPage { static SEARCH_API_PATTERN = diff --git a/projects/plugins/search/tests/e2e/pages/wp-admin/search-configure.js b/projects/plugins/search/tests/e2e/pages/wp-admin/search-configure.js index 9f6a1b9bda3bf..e0eafb381a109 100644 --- a/projects/plugins/search/tests/e2e/pages/wp-admin/search-configure.js +++ b/projects/plugins/search/tests/e2e/pages/wp-admin/search-configure.js @@ -1,5 +1,5 @@ -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import WpPage from 'jetpack-e2e-commons/pages/wp-page.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import WpPage from '_jetpack-e2e-commons/pages/wp-page.js'; export default class SearchConfigure extends WpPage { static SEARCH_SETTING_API_PATTERN = /^https?:\/\/.*%2Fwp%2Fv2%2Fsettings/; diff --git a/projects/plugins/search/tests/e2e/pages/wp-admin/search-dashboard.js b/projects/plugins/search/tests/e2e/pages/wp-admin/search-dashboard.js index 4e81cedbb1479..01242026b988f 100644 --- a/projects/plugins/search/tests/e2e/pages/wp-admin/search-dashboard.js +++ b/projects/plugins/search/tests/e2e/pages/wp-admin/search-dashboard.js @@ -1,5 +1,5 @@ -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import WpPage from 'jetpack-e2e-commons/pages/wp-page.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import WpPage from '_jetpack-e2e-commons/pages/wp-page.js'; export default class SearchDashboard extends WpPage { static SEARCH_SETTING_API_PATTERN = /^https?:\/\/.*jetpack\/v4\/search\/settings/; diff --git a/projects/plugins/search/tests/e2e/playwright.config.mjs b/projects/plugins/search/tests/e2e/playwright.config.mjs index b5d057df1a7b8..e4ba2c71b583d 100644 --- a/projects/plugins/search/tests/e2e/playwright.config.mjs +++ b/projects/plugins/search/tests/e2e/playwright.config.mjs @@ -1 +1 @@ -export { default } from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; +export { default } from '_jetpack-e2e-commons/config/playwright.config.default.mjs'; diff --git a/projects/plugins/search/tests/e2e/specs/search-configure.test.js b/projects/plugins/search/tests/e2e/specs/search-configure.test.js index 1bb77758e0286..a187084283fa1 100644 --- a/projects/plugins/search/tests/e2e/specs/search-configure.test.js +++ b/projects/plugins/search/tests/e2e/specs/search-configure.test.js @@ -1,5 +1,5 @@ -import { prerequisitesBuilder, Plans } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; +import { prerequisitesBuilder, Plans } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; import { disableInstantSearch, enableInstantSearch, diff --git a/projects/plugins/search/tests/e2e/specs/search-dashboard.test.js b/projects/plugins/search/tests/e2e/specs/search-dashboard.test.js index 5f279f7503f02..134b8b7ad03e9 100644 --- a/projects/plugins/search/tests/e2e/specs/search-dashboard.test.js +++ b/projects/plugins/search/tests/e2e/specs/search-dashboard.test.js @@ -1,5 +1,5 @@ -import { prerequisitesBuilder, Plans } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; +import { prerequisitesBuilder, Plans } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; import { enableInstantSearch, disableInstantSearch, diff --git a/projects/plugins/search/tests/e2e/specs/search.test.js b/projects/plugins/search/tests/e2e/specs/search.test.js index 32bc34f061d18..c45fe540ae80c 100644 --- a/projects/plugins/search/tests/e2e/specs/search.test.js +++ b/projects/plugins/search/tests/e2e/specs/search.test.js @@ -1,6 +1,6 @@ -import { prerequisitesBuilder, Plans } from 'jetpack-e2e-commons/env/index.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; +import { prerequisitesBuilder, Plans } from '_jetpack-e2e-commons/env/index.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; import { enableInstantSearch, disableInstantSearch, diff --git a/projects/plugins/social/changelog/fix-bad-npm-package-names b/projects/plugins/social/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..fc1da13877c8e --- /dev/null +++ b/projects/plugins/social/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. + + diff --git a/projects/plugins/social/tests/e2e/config/default.cjs b/projects/plugins/social/tests/e2e/config/default.cjs index 179bdfe0e8c9a..2c757920e87a2 100644 --- a/projects/plugins/social/tests/e2e/config/default.cjs +++ b/projects/plugins/social/tests/e2e/config/default.cjs @@ -1 +1 @@ -module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); +module.exports = require( '_jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/social/tests/e2e/eslint.config.mjs b/projects/plugins/social/tests/e2e/eslint.config.mjs index 8d2ff03cc1c1a..81d63116a5e48 100644 --- a/projects/plugins/social/tests/e2e/eslint.config.mjs +++ b/projects/plugins/social/tests/e2e/eslint.config.mjs @@ -1,3 +1,3 @@ -import { makeE2eConfig } from 'jetpack-e2e-commons/eslint.config.mjs'; +import { makeE2eConfig } from '_jetpack-e2e-commons/eslint.config.mjs'; export default [ ...makeE2eConfig( import.meta.url ) ]; diff --git a/projects/plugins/social/tests/e2e/flows/connection.js b/projects/plugins/social/tests/e2e/flows/connection.js index f15e94d3e0b66..3ed17dc9a5d63 100644 --- a/projects/plugins/social/tests/e2e/flows/connection.js +++ b/projects/plugins/social/tests/e2e/flows/connection.js @@ -1,5 +1,5 @@ -import logger from 'jetpack-e2e-commons/logger.js'; -import { AuthorizePage } from 'jetpack-e2e-commons/pages/wpcom/index.js'; +import logger from '_jetpack-e2e-commons/logger.js'; +import { AuthorizePage } from '_jetpack-e2e-commons/pages/wpcom/index.js'; import { JetpackSocialPage } from '../pages/index.js'; /** diff --git a/projects/plugins/social/tests/e2e/package.json b/projects/plugins/social/tests/e2e/package.json index f15c2a56b88f1..3aae91eaad655 100644 --- a/projects/plugins/social/tests/e2e/package.json +++ b/projects/plugins/social/tests/e2e/package.json @@ -16,7 +16,7 @@ "scripts": { "build": "pnpm jetpack build packages/assets packages/connection plugins/social plugins/jetpack -v --no-pnpm-install --production", "clean": "rm -rf output", - "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", + "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", "distclean": "rm -rf node_modules", "env:up": "e2e-env start --activate-plugins social", "env:down": "e2e-env stop", @@ -27,13 +27,13 @@ "tunnel:reset": "tunnel reset", "tunnel:down": "tunnel down", "pretest:run": "pnpm run clean", - "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" + "test:run": ". ./node_modules/_jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" }, "devDependencies": { "@playwright/test": "1.48.2", "allure-playwright": "2.9.2", "config": "3.3.12", - "jetpack-e2e-commons": "workspace:*" + "_jetpack-e2e-commons": "workspace:*" }, "browserslist": [], "ci": { diff --git a/projects/plugins/social/tests/e2e/pages/wp-admin/jetpack-social.js b/projects/plugins/social/tests/e2e/pages/wp-admin/jetpack-social.js index 4adcd9c7bfb46..fd2588a782640 100644 --- a/projects/plugins/social/tests/e2e/pages/wp-admin/jetpack-social.js +++ b/projects/plugins/social/tests/e2e/pages/wp-admin/jetpack-social.js @@ -1,6 +1,6 @@ -import { resolveSiteUrl } from 'jetpack-e2e-commons/helpers/utils-helper.js'; -import logger from 'jetpack-e2e-commons/logger.js'; -import WpPage from 'jetpack-e2e-commons/pages/wp-page.js'; +import { resolveSiteUrl } from '_jetpack-e2e-commons/helpers/utils-helper.js'; +import logger from '_jetpack-e2e-commons/logger.js'; +import WpPage from '_jetpack-e2e-commons/pages/wp-page.js'; export default class JetpackSocialPage extends WpPage { constructor( page ) { diff --git a/projects/plugins/social/tests/e2e/playwright.config.mjs b/projects/plugins/social/tests/e2e/playwright.config.mjs index b5d057df1a7b8..e4ba2c71b583d 100644 --- a/projects/plugins/social/tests/e2e/playwright.config.mjs +++ b/projects/plugins/social/tests/e2e/playwright.config.mjs @@ -1 +1 @@ -export { default } from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; +export { default } from '_jetpack-e2e-commons/config/playwright.config.default.mjs'; diff --git a/projects/plugins/social/tests/e2e/specs/admin-page.test.js b/projects/plugins/social/tests/e2e/specs/admin-page.test.js index 29d171225ff37..6b45921581ea8 100644 --- a/projects/plugins/social/tests/e2e/specs/admin-page.test.js +++ b/projects/plugins/social/tests/e2e/specs/admin-page.test.js @@ -1,6 +1,6 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { expect, test } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import logger from 'jetpack-e2e-commons/logger.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { expect, test } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import logger from '_jetpack-e2e-commons/logger.js'; test.beforeEach( async ( { page } ) => { await prerequisitesBuilder( page ) diff --git a/projects/plugins/social/tests/e2e/specs/connection.test.js b/projects/plugins/social/tests/e2e/specs/connection.test.js index ac72cf2182efb..8e525df9c251c 100644 --- a/projects/plugins/social/tests/e2e/specs/connection.test.js +++ b/projects/plugins/social/tests/e2e/specs/connection.test.js @@ -1,5 +1,5 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { test, expect } from 'jetpack-e2e-commons/fixtures/base-test.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { test, expect } from '_jetpack-e2e-commons/fixtures/base-test.js'; import { connect } from '../flows/index.js'; import { JetpackSocialPage } from '../pages/index.js'; diff --git a/projects/plugins/social/tests/e2e/specs/social-sidebar.test.js b/projects/plugins/social/tests/e2e/specs/social-sidebar.test.js index 1d4f3b3757cd0..acc67d06557a2 100644 --- a/projects/plugins/social/tests/e2e/specs/social-sidebar.test.js +++ b/projects/plugins/social/tests/e2e/specs/social-sidebar.test.js @@ -1,7 +1,7 @@ -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { expect, test } from 'jetpack-e2e-commons/fixtures/base-test.js'; -import logger from 'jetpack-e2e-commons/logger.js'; -import BlockEditorPage from 'jetpack-e2e-commons/pages/wp-admin/block-editor.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { expect, test } from '_jetpack-e2e-commons/fixtures/base-test.js'; +import logger from '_jetpack-e2e-commons/logger.js'; +import BlockEditorPage from '_jetpack-e2e-commons/pages/wp-admin/block-editor.js'; import { connect } from '../flows/index.js'; test.beforeEach( async ( { page } ) => { diff --git a/projects/plugins/starter-plugin/changelog/fix-bad-npm-package-names b/projects/plugins/starter-plugin/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..fc1da13877c8e --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. + + diff --git a/projects/plugins/starter-plugin/tests/e2e/config/default.cjs b/projects/plugins/starter-plugin/tests/e2e/config/default.cjs index 179bdfe0e8c9a..2c757920e87a2 100644 --- a/projects/plugins/starter-plugin/tests/e2e/config/default.cjs +++ b/projects/plugins/starter-plugin/tests/e2e/config/default.cjs @@ -1 +1 @@ -module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); +module.exports = require( '_jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/starter-plugin/tests/e2e/eslint.config.mjs b/projects/plugins/starter-plugin/tests/e2e/eslint.config.mjs index 8d2ff03cc1c1a..81d63116a5e48 100644 --- a/projects/plugins/starter-plugin/tests/e2e/eslint.config.mjs +++ b/projects/plugins/starter-plugin/tests/e2e/eslint.config.mjs @@ -1,3 +1,3 @@ -import { makeE2eConfig } from 'jetpack-e2e-commons/eslint.config.mjs'; +import { makeE2eConfig } from '_jetpack-e2e-commons/eslint.config.mjs'; export default [ ...makeE2eConfig( import.meta.url ) ]; diff --git a/projects/plugins/starter-plugin/tests/e2e/package.json b/projects/plugins/starter-plugin/tests/e2e/package.json index 41cbbf0950ed3..d67019704ff29 100644 --- a/projects/plugins/starter-plugin/tests/e2e/package.json +++ b/projects/plugins/starter-plugin/tests/e2e/package.json @@ -16,7 +16,7 @@ "scripts": { "build": "pnpm jetpack build plugins/starter-plugin plugins/jetpack -v --no-pnpm-install --production", "clean": "rm -rf output", - "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", + "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", "distclean": "rm -rf node_modules", "env:up": "e2e-env start --activate-plugins starter-plugin", "env:down": "e2e-env stop", @@ -25,13 +25,13 @@ "tunnel:reset": "tunnel reset", "tunnel:down": "tunnel down", "pretest:run": "pnpm run clean", - "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" + "test:run": ". ./node_modules/_jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" }, "devDependencies": { "@playwright/test": "1.48.2", "allure-playwright": "2.9.2", "config": "3.3.12", - "jetpack-e2e-commons": "workspace:*" + "_jetpack-e2e-commons": "workspace:*" }, "browserslist": [], "ci": { diff --git a/projects/plugins/starter-plugin/tests/e2e/playwright.config.mjs b/projects/plugins/starter-plugin/tests/e2e/playwright.config.mjs index b5d057df1a7b8..e4ba2c71b583d 100644 --- a/projects/plugins/starter-plugin/tests/e2e/playwright.config.mjs +++ b/projects/plugins/starter-plugin/tests/e2e/playwright.config.mjs @@ -1 +1 @@ -export { default } from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; +export { default } from '_jetpack-e2e-commons/config/playwright.config.default.mjs'; diff --git a/projects/plugins/starter-plugin/tests/e2e/specs/start.test.js b/projects/plugins/starter-plugin/tests/e2e/specs/start.test.js index f13283a0ab1e1..baa9f3ee0f4fa 100644 --- a/projects/plugins/starter-plugin/tests/e2e/specs/start.test.js +++ b/projects/plugins/starter-plugin/tests/e2e/specs/start.test.js @@ -1,6 +1,6 @@ import { test } from '@playwright/test'; -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { Sidebar, DashboardPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { Sidebar, DashboardPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; import playwrightConfig from '../playwright.config.mjs'; test.describe( 'Starter plugin!', () => { diff --git a/projects/plugins/videopress/changelog/fix-bad-npm-package-names b/projects/plugins/videopress/changelog/fix-bad-npm-package-names new file mode 100644 index 0000000000000..fc1da13877c8e --- /dev/null +++ b/projects/plugins/videopress/changelog/fix-bad-npm-package-names @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. + + diff --git a/projects/plugins/videopress/tests/e2e/config/default.cjs b/projects/plugins/videopress/tests/e2e/config/default.cjs index 179bdfe0e8c9a..2c757920e87a2 100644 --- a/projects/plugins/videopress/tests/e2e/config/default.cjs +++ b/projects/plugins/videopress/tests/e2e/config/default.cjs @@ -1 +1 @@ -module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); +module.exports = require( '_jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/videopress/tests/e2e/eslint.config.mjs b/projects/plugins/videopress/tests/e2e/eslint.config.mjs index 8d2ff03cc1c1a..81d63116a5e48 100644 --- a/projects/plugins/videopress/tests/e2e/eslint.config.mjs +++ b/projects/plugins/videopress/tests/e2e/eslint.config.mjs @@ -1,3 +1,3 @@ -import { makeE2eConfig } from 'jetpack-e2e-commons/eslint.config.mjs'; +import { makeE2eConfig } from '_jetpack-e2e-commons/eslint.config.mjs'; export default [ ...makeE2eConfig( import.meta.url ) ]; diff --git a/projects/plugins/videopress/tests/e2e/package.json b/projects/plugins/videopress/tests/e2e/package.json index 7ebc72623571e..71f2c2d6b5880 100644 --- a/projects/plugins/videopress/tests/e2e/package.json +++ b/projects/plugins/videopress/tests/e2e/package.json @@ -16,7 +16,7 @@ "scripts": { "build": "pnpm jetpack build plugins/videopress plugins/jetpack -v --no-pnpm-install --production", "clean": "rm -rf output", - "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", + "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", "distclean": "rm -rf node_modules", "env:up": "e2e-env start --activate-plugins boost", "env:down": "e2e-env stop", @@ -25,13 +25,13 @@ "tunnel:reset": "tunnel reset", "tunnel:down": "tunnel down", "pretest:run": "pnpm run clean", - "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" + "test:run": ". ./node_modules/_jetpack-e2e-commons/bin/app-password.sh && playwright install --with-deps chromium && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" }, "devDependencies": { "@playwright/test": "1.48.2", "allure-playwright": "2.9.2", "config": "3.3.12", - "jetpack-e2e-commons": "workspace:*" + "_jetpack-e2e-commons": "workspace:*" }, "browserslist": [], "ci": { diff --git a/projects/plugins/videopress/tests/e2e/playwright.config.mjs b/projects/plugins/videopress/tests/e2e/playwright.config.mjs index b5d057df1a7b8..e4ba2c71b583d 100644 --- a/projects/plugins/videopress/tests/e2e/playwright.config.mjs +++ b/projects/plugins/videopress/tests/e2e/playwright.config.mjs @@ -1 +1 @@ -export { default } from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; +export { default } from '_jetpack-e2e-commons/config/playwright.config.default.mjs'; diff --git a/projects/plugins/videopress/tests/e2e/specs/start.test.js b/projects/plugins/videopress/tests/e2e/specs/start.test.js index f13283a0ab1e1..baa9f3ee0f4fa 100644 --- a/projects/plugins/videopress/tests/e2e/specs/start.test.js +++ b/projects/plugins/videopress/tests/e2e/specs/start.test.js @@ -1,6 +1,6 @@ import { test } from '@playwright/test'; -import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; -import { Sidebar, DashboardPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { prerequisitesBuilder } from '_jetpack-e2e-commons/env/prerequisites.js'; +import { Sidebar, DashboardPage } from '_jetpack-e2e-commons/pages/wp-admin/index.js'; import playwrightConfig from '../playwright.config.mjs'; test.describe( 'Starter plugin!', () => { diff --git a/tools/cli/skeletons/common/package.json b/tools/cli/skeletons/common/package.json index 6097e7f1cd3b2..dd3d01cae25c6 100644 --- a/tools/cli/skeletons/common/package.json +++ b/tools/cli/skeletons/common/package.json @@ -1,8 +1,8 @@ { "private": true, - "name": "TBD", - "version": "TBD", - "description": "TBD", + "name": "_TBD_", + "version": "_TBD_", + "description": "_TBD_", "homepage": "https://jetpack.com", "bugs": { "url": "https://github.com/Automattic/jetpack/issues" diff --git a/tools/e2e-commons/package.json b/tools/e2e-commons/package.json index cc5f0d3ecdc21..51618e804871a 100644 --- a/tools/e2e-commons/package.json +++ b/tools/e2e-commons/package.json @@ -1,9 +1,9 @@ { - "name": "jetpack-e2e-commons", + "private": true, + "name": "_jetpack-e2e-commons", "description": "Jetpack end-to-end tests commons", "license": "GPL-2.0-or-later", "author": "Automattic", - "version": "0.0.1", "type": "module", "scripts": { "distclean": "rm -rf node_modules", From 18b4f1296d497becee156ab8ec6ef4232fc9c818 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Fri, 24 Jan 2025 15:50:25 -0500 Subject: [PATCH 203/420] webpack-config: Set `output.uniqueName` (#41315) * webpack-config: Set `output.uniqueName` When we removed a bunch of otherwise-useless "name" properties from `package.json` files, it turns out that caused Webpack to start using the empty string for its `output.uniqueName`, which may result in collisions if multiple bundles on a page do the same thing. To avoid this, read the "name" from composer.json if package.json lacks one. Also, since we're now setting `output.uniqueName`, various webpack configs using `output.library.name` should also set `output.uniqueName` to maintain the previous behavior. * Remove for entry.x.library.name Hopefully Webpack does the right thing on its own for those. --- .../changelog/fix-webpack-uniqueName | 5 ++++ .../boost-score-api/webpack.config.cjs | 1 + .../changelog/fix-webpack-uniqueName | 5 ++++ .../tests/data/webpack.config.cjs | 1 + .../changelog/fix-webpack-uniqueName | 5 ++++ .../react-data-sync-client/webpack.config.cjs | 1 + .../changelog/fix-webpack-uniqueName | 5 ++++ .../webpack.config.cjs | 1 + .../changelog/fix-webpack-uniqueName | 5 ++++ .../videopress-core/webpack.config.cjs | 1 + projects/js-packages/webpack-config/README.md | 3 ++ .../changelog/fix-webpack-uniqueName | 4 +++ .../js-packages/webpack-config/src/webpack.js | 30 +++++++++++++++++++ 13 files changed, 67 insertions(+) create mode 100644 projects/js-packages/boost-score-api/changelog/fix-webpack-uniqueName create mode 100644 projects/js-packages/critical-css-gen/changelog/fix-webpack-uniqueName create mode 100644 projects/js-packages/react-data-sync-client/changelog/fix-webpack-uniqueName create mode 100644 projects/js-packages/svelte-data-sync-client/changelog/fix-webpack-uniqueName create mode 100644 projects/js-packages/videopress-core/changelog/fix-webpack-uniqueName create mode 100644 projects/js-packages/webpack-config/changelog/fix-webpack-uniqueName diff --git a/projects/js-packages/boost-score-api/changelog/fix-webpack-uniqueName b/projects/js-packages/boost-score-api/changelog/fix-webpack-uniqueName new file mode 100644 index 0000000000000..41bce8d835361 --- /dev/null +++ b/projects/js-packages/boost-score-api/changelog/fix-webpack-uniqueName @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Set webpack `output.uniqueName` to match `output.library.name`, to account for a change in js-packages/webpack-config. + + diff --git a/projects/js-packages/boost-score-api/webpack.config.cjs b/projects/js-packages/boost-score-api/webpack.config.cjs index 50c74010eb311..76525d52eab60 100644 --- a/projects/js-packages/boost-score-api/webpack.config.cjs +++ b/projects/js-packages/boost-score-api/webpack.config.cjs @@ -24,6 +24,7 @@ module.exports = { ...jetpackWebpackConfig.output, path: path.resolve( __dirname, 'build' ), filename: 'index.js', + uniqueName: 'BoostScoreApiLibrary', library: { name: 'BoostScoreApiLibrary', type: 'umd', diff --git a/projects/js-packages/critical-css-gen/changelog/fix-webpack-uniqueName b/projects/js-packages/critical-css-gen/changelog/fix-webpack-uniqueName new file mode 100644 index 0000000000000..41bce8d835361 --- /dev/null +++ b/projects/js-packages/critical-css-gen/changelog/fix-webpack-uniqueName @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Set webpack `output.uniqueName` to match `output.library.name`, to account for a change in js-packages/webpack-config. + + diff --git a/projects/js-packages/critical-css-gen/tests/data/webpack.config.cjs b/projects/js-packages/critical-css-gen/tests/data/webpack.config.cjs index 170020dd2a080..0c59578a5c5a8 100644 --- a/projects/js-packages/critical-css-gen/tests/data/webpack.config.cjs +++ b/projects/js-packages/critical-css-gen/tests/data/webpack.config.cjs @@ -11,6 +11,7 @@ module.exports = { path: path.join( __dirname, '../build' ), filename: 'bundle.js', library: 'CriticalCSSGenerator', + uniqueName: 'CriticalCSSGenerator', }, resolve: { ...jetpackWebpackConfig.resolve, diff --git a/projects/js-packages/react-data-sync-client/changelog/fix-webpack-uniqueName b/projects/js-packages/react-data-sync-client/changelog/fix-webpack-uniqueName new file mode 100644 index 0000000000000..41bce8d835361 --- /dev/null +++ b/projects/js-packages/react-data-sync-client/changelog/fix-webpack-uniqueName @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Set webpack `output.uniqueName` to match `output.library.name`, to account for a change in js-packages/webpack-config. + + diff --git a/projects/js-packages/react-data-sync-client/webpack.config.cjs b/projects/js-packages/react-data-sync-client/webpack.config.cjs index e0d5d1ca28ea4..1f204ccedea9b 100644 --- a/projects/js-packages/react-data-sync-client/webpack.config.cjs +++ b/projects/js-packages/react-data-sync-client/webpack.config.cjs @@ -24,6 +24,7 @@ module.exports = { ...jetpackWebpackConfig.output, path: path.resolve( __dirname, 'build' ), filename: 'index.js', + uniqueName: 'ReactDataSyncClient', library: { name: 'ReactDataSyncClient', type: 'umd', diff --git a/projects/js-packages/svelte-data-sync-client/changelog/fix-webpack-uniqueName b/projects/js-packages/svelte-data-sync-client/changelog/fix-webpack-uniqueName new file mode 100644 index 0000000000000..41bce8d835361 --- /dev/null +++ b/projects/js-packages/svelte-data-sync-client/changelog/fix-webpack-uniqueName @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Set webpack `output.uniqueName` to match `output.library.name`, to account for a change in js-packages/webpack-config. + + diff --git a/projects/js-packages/svelte-data-sync-client/webpack.config.cjs b/projects/js-packages/svelte-data-sync-client/webpack.config.cjs index 283379b9f2821..6b113aeb8febe 100644 --- a/projects/js-packages/svelte-data-sync-client/webpack.config.cjs +++ b/projects/js-packages/svelte-data-sync-client/webpack.config.cjs @@ -24,6 +24,7 @@ module.exports = { ...jetpackWebpackConfig.output, path: path.resolve( __dirname, 'build' ), filename: 'index.js', + uniqueName: 'SvelteDataSyncClient', library: { name: 'SvelteDataSyncClient', type: 'umd', diff --git a/projects/js-packages/videopress-core/changelog/fix-webpack-uniqueName b/projects/js-packages/videopress-core/changelog/fix-webpack-uniqueName new file mode 100644 index 0000000000000..41bce8d835361 --- /dev/null +++ b/projects/js-packages/videopress-core/changelog/fix-webpack-uniqueName @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Set webpack `output.uniqueName` to match `output.library.name`, to account for a change in js-packages/webpack-config. + + diff --git a/projects/js-packages/videopress-core/webpack.config.cjs b/projects/js-packages/videopress-core/webpack.config.cjs index bd2531efd44fb..3edc7438793e7 100644 --- a/projects/js-packages/videopress-core/webpack.config.cjs +++ b/projects/js-packages/videopress-core/webpack.config.cjs @@ -24,6 +24,7 @@ module.exports = { ...jetpackWebpackConfig.output, path: path.resolve( __dirname, 'build' ), filename: 'index.js', + uniqueName: 'VideoPressCore', library: { name: 'VideoPressCore', type: 'umd', diff --git a/projects/js-packages/webpack-config/README.md b/projects/js-packages/webpack-config/README.md index 1bd17535d1146..38fe32944d846 100644 --- a/projects/js-packages/webpack-config/README.md +++ b/projects/js-packages/webpack-config/README.md @@ -93,6 +93,9 @@ This is an object suited for spreading some default values into Webpack's `outpu - `filename`: `[name].js`. - `chunkFilename`: `[name].js?minify=false&ver=[contenthash]`. The content hash serves as a cache buster, while `minify=false` avoids a broken minifier in the WordPress.com environment. +- `uniqueName`: If `package.json` has a name, that. Otherwise if `composer.json` has a name, that. + +Note if you're setting `output.library.name`, you may want to also set `output.uniqueName` to the same string to match Webpack's default behavior. #### `optimization` diff --git a/projects/js-packages/webpack-config/changelog/fix-webpack-uniqueName b/projects/js-packages/webpack-config/changelog/fix-webpack-uniqueName new file mode 100644 index 0000000000000..ac7b02ae5238a --- /dev/null +++ b/projects/js-packages/webpack-config/changelog/fix-webpack-uniqueName @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Set `output.uniqueName` by default. Note this may change output for things setting `output.library.name`. diff --git a/projects/js-packages/webpack-config/src/webpack.js b/projects/js-packages/webpack-config/src/webpack.js index 449c8f370e0a0..745a4a70619f8 100644 --- a/projects/js-packages/webpack-config/src/webpack.js +++ b/projects/js-packages/webpack-config/src/webpack.js @@ -59,6 +59,35 @@ const i18nFilterFunction = file => { return i < 14 || file.startsWith( '@automattic/', i ); }; +const getUniqueName = () => { + let dir = process.cwd(), + olddir; + do { + const file = path.join( dir, 'package.json' ); + if ( fs.existsSync( file ) ) { + const cfg = JSON.parse( fs.readFileSync( file, { encoding: 'utf8' } ) ); + if ( cfg.name ) { + return cfg.name; + } + } + + const file2 = path.join( dir, 'composer.json' ); + if ( fs.existsSync( file2 ) ) { + const cfg = JSON.parse( fs.readFileSync( file2, { encoding: 'utf8' } ) ); + if ( cfg.name ) { + // Prepend an '@' to make it look more like a JS package name. + return '@' + cfg.name; + } + break; + } + + olddir = dir; + dir = path.dirname( dir ); + } while ( dir !== olddir ); + + throw new Error( 'Cannot determine unique name' ); +}; + /****** Options ******/ // See README.md for explanations of all these settings. @@ -70,6 +99,7 @@ const devtool = isProduction ? false : 'source-map'; const output = { filename: '[name].js', chunkFilename: '[name].js?minify=false&ver=[contenthash]', + uniqueName: getUniqueName(), }; const optimization = { minimize: isProduction, From 296cb3f76d72a9214586088b9ec13ad77ff86fac Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Fri, 24 Jan 2025 14:15:36 -0800 Subject: [PATCH 204/420] Fix: icon in style editor (#41314) * Block Icons: fix the icons in the block editor * changelog --- projects/packages/forms/changelog/fix-icon-in-site-editor | 4 ++++ .../src/blocks/contact-form/util/render-material-icon.js | 3 +-- projects/plugins/jetpack/changelog/fix-icon-in-site-editor | 4 ++++ projects/plugins/jetpack/extensions/blocks/map/block.json | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-icon-in-site-editor create mode 100644 projects/plugins/jetpack/changelog/fix-icon-in-site-editor diff --git a/projects/packages/forms/changelog/fix-icon-in-site-editor b/projects/packages/forms/changelog/fix-icon-in-site-editor new file mode 100644 index 0000000000000..2f4b228fcfae2 --- /dev/null +++ b/projects/packages/forms/changelog/fix-icon-in-site-editor @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Make the icons show up as expected in the style editor diff --git a/projects/packages/forms/src/blocks/contact-form/util/render-material-icon.js b/projects/packages/forms/src/blocks/contact-form/util/render-material-icon.js index 0478be63ebc79..3348e6990b18c 100644 --- a/projects/packages/forms/src/blocks/contact-form/util/render-material-icon.js +++ b/projects/packages/forms/src/blocks/contact-form/util/render-material-icon.js @@ -1,8 +1,7 @@ -import { Path, SVG } from '@wordpress/components'; +import { SVG } from '@wordpress/components'; const renderMaterialIcon = ( svg, width = 24, height = 24, viewbox = '0 0 24 24' ) => ( - { svg } ); diff --git a/projects/plugins/jetpack/changelog/fix-icon-in-site-editor b/projects/plugins/jetpack/changelog/fix-icon-in-site-editor new file mode 100644 index 0000000000000..87326664b1de1 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-icon-in-site-editor @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Make the icons show up as expected in the style editor diff --git a/projects/plugins/jetpack/extensions/blocks/map/block.json b/projects/plugins/jetpack/extensions/blocks/map/block.json index eca12d214a760..ed1e04ab2423a 100644 --- a/projects/plugins/jetpack/extensions/blocks/map/block.json +++ b/projects/plugins/jetpack/extensions/blocks/map/block.json @@ -8,7 +8,7 @@ "version": "12.5.0", "textdomain": "jetpack", "category": "embed", - "icon": "", + "icon": "", "supports": { "defaultStylePicker": false, "html": false }, "attributes": { "align": { From 5a588c655a8381952e037d7ccee7d7100c060b05 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Fri, 24 Jan 2025 14:15:53 -0800 Subject: [PATCH 205/420] Forms: Add checkbox and consent field enter action that creates a new block (#41297) * Forms: Add useEnter for checkbox and consent fields * changelog --- .../fix-forms-checkbox-enter-new-block | 4 +++ .../src/blocks/contact-form/child-blocks.js | 11 ++++++- .../components/jetpack-field-checkbox.js | 2 ++ .../components/jetpack-field-consent.js | 2 ++ .../components/jetpack-field-label.js | 31 +++++++++++++++++++ .../fix-forms-checkbox-enter-new-block | 4 +++ 6 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 projects/packages/forms/changelog/fix-forms-checkbox-enter-new-block create mode 100644 projects/plugins/jetpack/changelog/fix-forms-checkbox-enter-new-block diff --git a/projects/packages/forms/changelog/fix-forms-checkbox-enter-new-block b/projects/packages/forms/changelog/fix-forms-checkbox-enter-new-block new file mode 100644 index 0000000000000..38fe0d4db8565 --- /dev/null +++ b/projects/packages/forms/changelog/fix-forms-checkbox-enter-new-block @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Add Checkbox and Consent field enter action to create a new block diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index 6c3a246a15d4d..03add2e890a14 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -315,11 +315,19 @@ const EditCheckbox = props => { id={ props.attributes.id } width={ props.attributes.width } attributes={ props.attributes } + insertBlocksAfter={ props.insertBlocksAfter } /> ); }; -const EditConsent = ( { attributes, clientId, isSelected, name, setAttributes } ) => { +const EditConsent = ( { + attributes, + clientId, + isSelected, + name, + setAttributes, + insertBlocksAfter, +} ) => { useFormWrapper( { attributes, clientId, name } ); const { id, width, consentType, implicitConsentMessage, explicitConsentMessage } = attributes; @@ -334,6 +342,7 @@ const EditConsent = ( { attributes, clientId, isSelected, name, setAttributes } explicitConsentMessage={ explicitConsentMessage } setAttributes={ setAttributes } attributes={ attributes } + insertBlocksAfter={ insertBlocksAfter } /> ); }; diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-checkbox.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-checkbox.js index 54608cb294afb..dbd714bcbbbc1 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-checkbox.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-checkbox.js @@ -25,6 +25,7 @@ function JetpackFieldCheckbox( props ) { width, defaultValue, attributes, + insertBlocksAfter, } = props; const { blockStyle } = useJetpackFieldStyles( attributes ); @@ -56,6 +57,7 @@ function JetpackFieldCheckbox( props ) { label={ label } setAttributes={ setAttributes } attributes={ attributes } + insertBlocksAfter={ insertBlocksAfter } /> diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-consent.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-consent.js index 06cadae1c2c12..4f0c558b1b4eb 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-consent.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-consent.js @@ -15,6 +15,7 @@ const JetpackFieldConsent = ( { explicitConsentMessage, setAttributes, attributes, + insertBlocksAfter, } ) => { const blockProps = useBlockProps( { id: `jetpack-field-consent-${ instanceId }`, @@ -42,6 +43,7 @@ const JetpackFieldConsent = ( { __( 'Add %s consent message…', 'jetpack-forms' ), consentType ) } + insertBlocksAfter={ insertBlocksAfter } /> diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-label.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-label.js index fdf90f668905e..b6123dbbc65ce 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-label.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-label.js @@ -1,9 +1,37 @@ import { RichText } from '@wordpress/block-editor'; +import { createBlock, getDefaultBlockName } from '@wordpress/blocks'; +import { useRefEffect } from '@wordpress/compose'; +import { useRef } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; import { FORM_STYLE } from '../util/form'; import { useJetpackFieldStyles } from './use-jetpack-field-styles'; +function useEnter( props ) { + const propsRef = useRef( props ); + propsRef.current = props; + + return useRefEffect( element => { + const { insertBlocksAfter } = propsRef.current; + if ( ! insertBlocksAfter ) { + return; + } + function onKeyDown( event ) { + if ( event.defaultPrevented || event.key !== 'Enter' || event.shiftKey ) { + return; + } + + event.preventDefault(); + insertBlocksAfter( createBlock( getDefaultBlockName() ) ); + } + + element.addEventListener( 'keydown', onKeyDown ); + return () => { + element.removeEventListener( 'keydown', onKeyDown ); + }; + }, [] ); +} + const FieldLabel = ( { attributes, className, @@ -15,12 +43,15 @@ const FieldLabel = ( { required, requiredText, setAttributes, + insertBlocksAfter, } ) => { const { labelStyle } = useJetpackFieldStyles( attributes ); + const useEnterRef = useEnter( { insertBlocksAfter } ); return (
      Date: Fri, 24 Jan 2025 19:30:56 -0300 Subject: [PATCH 206/420] VideoPress: Fix issue with VideoPress block with 0 height and width (#41319) * remove flex display on videopress player wrapper * changelog --- .../videopress/changelog/fix-videopress-block-classic-themes | 4 ++++ .../src/client/block-editor/blocks/video/style.scss | 1 - .../jetpack/changelog/fix-videopress-block-classic-themes | 4 ++++ .../videopress/changelog/fix-videopress-block-classic-themes | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 projects/packages/videopress/changelog/fix-videopress-block-classic-themes create mode 100644 projects/plugins/jetpack/changelog/fix-videopress-block-classic-themes create mode 100644 projects/plugins/videopress/changelog/fix-videopress-block-classic-themes diff --git a/projects/packages/videopress/changelog/fix-videopress-block-classic-themes b/projects/packages/videopress/changelog/fix-videopress-block-classic-themes new file mode 100644 index 0000000000000..154c3dd749648 --- /dev/null +++ b/projects/packages/videopress/changelog/fix-videopress-block-classic-themes @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +VideoPress: Fix issue with VideoPress block with 0 height and width diff --git a/projects/packages/videopress/src/client/block-editor/blocks/video/style.scss b/projects/packages/videopress/src/client/block-editor/blocks/video/style.scss index 817e00019483e..10911c90ab106 100644 --- a/projects/packages/videopress/src/client/block-editor/blocks/video/style.scss +++ b/projects/packages/videopress/src/client/block-editor/blocks/video/style.scss @@ -11,7 +11,6 @@ .jetpack-videopress-player__wrapper { position: relative; - display: flex; line-height: 0; } diff --git a/projects/plugins/jetpack/changelog/fix-videopress-block-classic-themes b/projects/plugins/jetpack/changelog/fix-videopress-block-classic-themes new file mode 100644 index 0000000000000..a47d497c95f7d --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-videopress-block-classic-themes @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +VideoPress: Fix issue with VideoPress block with 0 height and width diff --git a/projects/plugins/videopress/changelog/fix-videopress-block-classic-themes b/projects/plugins/videopress/changelog/fix-videopress-block-classic-themes new file mode 100644 index 0000000000000..154c3dd749648 --- /dev/null +++ b/projects/plugins/videopress/changelog/fix-videopress-block-classic-themes @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +VideoPress: Fix issue with VideoPress block with 0 height and width From 56d9784a7ee08bb9eefa38b6b2c22ae04156c449 Mon Sep 17 00:00:00 2001 From: Calypso Bot Date: Sun, 26 Jan 2025 12:01:24 +0100 Subject: [PATCH 207/420] phan: Update wpcom stubs (#41302) Co-authored-by: Phabricator Bot --- .phan/stubs/wpcom-stubs.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.phan/stubs/wpcom-stubs.php b/.phan/stubs/wpcom-stubs.php index f36d0b756b102..7bb02bf46dd56 100644 --- a/.phan/stubs/wpcom-stubs.php +++ b/.phan/stubs/wpcom-stubs.php @@ -4,7 +4,7 @@ * `bin/teamcity-builds/jetpack-stubs/stub-defs.php` and regenerate the stubs * by triggering the Jetpack Staging → Update WPCOM Stubs job in TeamCity. * - * Stubs automatically generated from WordPress.com commit c22dbf3bcf2334f7010cf491a7817654b95c54fe. + * Stubs automatically generated from WordPress.com commit 8455d799e19d81bab955e52ecf72bcda5d4e6e34. */ namespace { @@ -260,6 +260,11 @@ class WPCOM_External_Connections static function init() { } + /** + * @param string $type + * @param int|false $blog_id + * @return array + */ public function get_external_services_list($type = \false, $blog_id = \false) { } From 7142fcb4fcc15ccaeada84018a4d1a08eb37a253 Mon Sep 17 00:00:00 2001 From: Philip Jackson Date: Mon, 27 Jan 2025 10:08:50 +1300 Subject: [PATCH 208/420] Show "verify email" task in newsletter goal's launchpad (#41298) * Show "verify email" task in newsletter goal's launchpad Task is only shown if the email isn't already verified. * changelog * Remove custom email verification behaviour We will use the existing task for now. there might be improvements we can make in the future to hide the task if we think it was never used for this particular site. --- .../changelog/add-verify-email-task-newsletter-goal | 4 ++++ .../jetpack-mu-wpcom/src/features/launchpad/launchpad.php | 1 + 2 files changed, 5 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-verify-email-task-newsletter-goal diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-verify-email-task-newsletter-goal b/projects/packages/jetpack-mu-wpcom/changelog/add-verify-email-task-newsletter-goal new file mode 100644 index 0000000000000..b1f7c8a7774cc --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-verify-email-task-newsletter-goal @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Adds verify email task to newsletter goal launchpad diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php index 31f3be5b545ab..6c36eaa48f9b1 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php @@ -107,6 +107,7 @@ function wpcom_launchpad_get_task_list_definitions() { return __( 'Next steps for your site', 'jetpack-mu-wpcom' ); }, 'task_ids' => array( + 'verify_email', 'site_title', 'start_building_your_audience', 'customize_welcome_message', From 3aa80c9fc46beba3037ceb439d6550eeea434d82 Mon Sep 17 00:00:00 2001 From: Philip Jackson Date: Mon, 27 Jan 2025 10:42:12 +1300 Subject: [PATCH 209/420] Remove about page task from Newsletter goal launchpad (#41323) Remove about page task from Newsletter goal's launchpad --- .../changelog/remove-about-page-task-newsletter-goal | 4 ++++ .../jetpack-mu-wpcom/src/features/launchpad/launchpad.php | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/remove-about-page-task-newsletter-goal diff --git a/projects/packages/jetpack-mu-wpcom/changelog/remove-about-page-task-newsletter-goal b/projects/packages/jetpack-mu-wpcom/changelog/remove-about-page-task-newsletter-goal new file mode 100644 index 0000000000000..7a07f9a06e65c --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/remove-about-page-task-newsletter-goal @@ -0,0 +1,4 @@ +Significance: minor +Type: removed + +Launchpad: Remove about page task from Newsletter task list diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php index 6c36eaa48f9b1..73f9f285ee020 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php @@ -111,7 +111,6 @@ function wpcom_launchpad_get_task_list_definitions() { 'site_title', 'start_building_your_audience', 'customize_welcome_message', - 'add_about_page', 'first_post_published', 'preview_site', ), From 5a601251293c01423643084db55f83629ce2e81d Mon Sep 17 00:00:00 2001 From: Luis Felipe Zaguini <26530524+zaguiini@users.noreply.github.com> Date: Sun, 26 Jan 2025 21:59:13 -0300 Subject: [PATCH 210/420] Launchpad: Add messages anchor in customize welcome message task URL (#41320) Add messages area anchor in customize_welcome_message Launchpad task path --- ...add-messages-anchor-in-customize_welcome_message-task-path | 4 ++++ .../src/features/launchpad/launchpad-task-definitions.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-messages-anchor-in-customize_welcome_message-task-path diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-messages-anchor-in-customize_welcome_message-task-path b/projects/packages/jetpack-mu-wpcom/changelog/add-messages-anchor-in-customize_welcome_message-task-path new file mode 100644 index 0000000000000..4425d51185c13 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-messages-anchor-in-customize_welcome_message-task-path @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Add messages area anchor in customize_welcome_message Launchpad task path diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php index 3ca3dd81a5c34..eb897a3bc8221 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php @@ -504,7 +504,7 @@ function wpcom_launchpad_get_task_definitions() { if ( wpcom_launchpad_should_use_wp_admin_link() ) { return admin_url( 'admin.php?page=jetpack#/newsletter' ); } - return '/settings/newsletter/' . $data['site_slug_encoded']; + return '/settings/newsletter/' . $data['site_slug_encoded'] . '#messages'; }, ), 'enable_subscribers_modal' => array( From 433666b0abc707a5c65ef82e6e97a97a7e40962e Mon Sep 17 00:00:00 2001 From: "okmttdhr, tada" Date: Mon, 27 Jan 2025 16:23:17 +0900 Subject: [PATCH 211/420] Remove customization for hiding Core's start page options modal (#41324) * Remove update_pattern_block_types * changelog --- .../update-remove-update_pattern_block_types | 4 +++ .../class-wpcom-block-patterns-from-api.php | 32 ------------------- 2 files changed, 4 insertions(+), 32 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-remove-update_pattern_block_types diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-remove-update_pattern_block_types b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-update_pattern_block_types new file mode 100644 index 0000000000000..2446dad01f5a2 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-remove-update_pattern_block_types @@ -0,0 +1,4 @@ +Significance: minor +Type: deprecated + +Remove customization for the start page options modal diff --git a/projects/packages/jetpack-mu-wpcom/src/features/block-patterns/class-wpcom-block-patterns-from-api.php b/projects/packages/jetpack-mu-wpcom/src/features/block-patterns/class-wpcom-block-patterns-from-api.php index c3675159da2b5..4855cac2dbc2c 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/block-patterns/class-wpcom-block-patterns-from-api.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/block-patterns/class-wpcom-block-patterns-from-api.php @@ -100,13 +100,6 @@ public function register_patterns() { } } - // We prefer to show the starter page patterns modal of wpcom instead of core - // if it's available. Hence, we have to update the block types of patterns - // to disable the core's. - if ( class_exists( '\A8C\FSE\Starter_Page_Templates', false ) || class_exists( '\Automattic\Jetpack\Jetpack_Mu_Wpcom\Starter_Page_Templates', false ) ) { - $this->update_pattern_block_types(); - } - // Temporarily removing the call to `update_pattern_post_types` while we investigate // https://github.com/Automattic/wp-calypso/issues/79145. @@ -205,29 +198,4 @@ private function update_pattern_post_types() { } } } - - /** - * Ensure that all patterns with a blockType property are registered with appropriate postTypes. - */ - private function update_pattern_block_types() { - if ( ! class_exists( 'WP_Block_Patterns_Registry' ) ) { - return; - } - foreach ( \WP_Block_Patterns_Registry::get_instance()->get_all_registered() as $pattern ) { - if ( ! array_key_exists( 'blockTypes', $pattern ) || empty( $pattern['blockTypes'] ) ) { - continue; - } - - $post_content_offset = array_search( 'core/post-content', $pattern['blockTypes'], true ); - $is_page_pattern = empty( $pattern['postTypes'] ) || in_array( 'page', $pattern['postTypes'], true ); - if ( $post_content_offset !== false && $is_page_pattern ) { - unregister_block_pattern( $pattern['name'] ); - - array_splice( $pattern['blockTypes'], $post_content_offset, 1 ); - $pattern_name = $pattern['name']; - unset( $pattern['name'] ); - register_block_pattern( $pattern_name, $pattern ); - } - } - } } From 8eb88d0841bbd435cac2725ce2b9f8e45bc9d656 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Mon, 27 Jan 2025 00:54:32 -0800 Subject: [PATCH 212/420] Social | Use feature flag for share status data (#41218) --- .../update-social-use-feature-flag-for-share-status-data | 4 ++++ .../packages/publicize/src/class-publicize-script-data.php | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 projects/packages/publicize/changelog/update-social-use-feature-flag-for-share-status-data diff --git a/projects/packages/publicize/changelog/update-social-use-feature-flag-for-share-status-data b/projects/packages/publicize/changelog/update-social-use-feature-flag-for-share-status-data new file mode 100644 index 0000000000000..e07a0da420545 --- /dev/null +++ b/projects/packages/publicize/changelog/update-social-use-feature-flag-for-share-status-data @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Social | Use feature flag for share status data diff --git a/projects/packages/publicize/src/class-publicize-script-data.php b/projects/packages/publicize/src/class-publicize-script-data.php index c40d5f51a31c9..0c42234e95630 100644 --- a/projects/packages/publicize/src/class-publicize-script-data.php +++ b/projects/packages/publicize/src/class-publicize-script-data.php @@ -171,14 +171,12 @@ public static function get_social_settings() { */ public static function get_store_initial_state() { - $is_wpcom = ( new Host() )->is_wpcom_platform(); - $post = get_post(); $share_status = array(); // get_post_share_status is not available on WPCOM yet. - if ( Utils::should_block_editor_have_social() && $post && ! $is_wpcom ) { + if ( Utils::should_block_editor_have_social() && $post && self::has_feature_flag( 'share-status' ) ) { $share_status[ $post->ID ] = self::publicize()->get_post_share_status( $post->ID ); } From c3f07967c2d04d976130eba21de500933632727e Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Mon, 27 Jan 2025 12:39:54 +0100 Subject: [PATCH 213/420] Add a launch site button to the admin bar. (#41240) --- .../changelog/add-launch-button | 4 ++ .../src/class-jetpack-mu-wpcom.php | 1 + .../src/features/launch-button/index.php | 49 +++++++++++++++++++ .../src/features/launch-button/style.css | 3 ++ .../changelog/add-launch-button | 4 ++ .../wpcomsh/changelog/add-launch-button | 4 ++ 6 files changed, 65 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-launch-button create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/launch-button/index.php create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/launch-button/style.css create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/add-launch-button create mode 100644 projects/plugins/wpcomsh/changelog/add-launch-button diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-launch-button b/projects/packages/jetpack-mu-wpcom/changelog/add-launch-button new file mode 100644 index 0000000000000..9163c43711231 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-launch-button @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Add site launch button to the admin bar. diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index deed61cbc4bdf..2b7dadb584711 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -105,6 +105,7 @@ public static function load_features() { require_once __DIR__ . '/features/google-analytics/google-analytics.php'; require_once __DIR__ . '/features/holiday-snow/class-holiday-snow.php'; require_once __DIR__ . '/features/import-customizations/import-customizations.php'; + require_once __DIR__ . '/features/launch-button/index.php'; require_once __DIR__ . '/features/marketplace-products-updater/class-marketplace-products-updater.php'; require_once __DIR__ . '/features/media/heif-support.php'; require_once __DIR__ . '/features/post-categories/quick-actions.php'; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launch-button/index.php b/projects/packages/jetpack-mu-wpcom/src/features/launch-button/index.php new file mode 100644 index 0000000000000..a95f2aeeaebba --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/launch-button/index.php @@ -0,0 +1,49 @@ +add_menu( + array( + 'id' => 'menu-id', + 'parent' => null, + 'group' => null, + 'title' => __( 'Launch site', 'jetpack-mu-wpcom' ), + 'href' => 'https://wordpress.com/start/launch-site?siteSlug=' . $blog_domain, + 'meta' => array( + 'class' => 'launch-site', + ), + ) + ); +} + +/** + * Enqueue the necessary styles for the admin bar button. + */ +function wpcom_enqueue_launch_button_styles() { + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + $version = filemtime( __DIR__ . '/style.css' ); + wp_enqueue_style( 'launch-banner', plugins_url( 'style.css', __FILE__ ), array(), $version ); +} + +add_action( 'admin_bar_menu', 'wpcom_add_launch_button_to_admin_bar', 500 ); +add_action( 'wp_enqueue_scripts', 'wpcom_enqueue_launch_button_styles' ); +add_action( 'admin_enqueue_scripts', 'wpcom_enqueue_launch_button_styles' ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launch-button/style.css b/projects/packages/jetpack-mu-wpcom/src/features/launch-button/style.css new file mode 100644 index 0000000000000..a885e6a7a3378 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/launch-button/style.css @@ -0,0 +1,3 @@ +#wpadminbar .launch-site { + background: var(--wp-admin-theme-color); +} diff --git a/projects/plugins/mu-wpcom-plugin/changelog/add-launch-button b/projects/plugins/mu-wpcom-plugin/changelog/add-launch-button new file mode 100644 index 0000000000000..9163c43711231 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/add-launch-button @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Add site launch button to the admin bar. diff --git a/projects/plugins/wpcomsh/changelog/add-launch-button b/projects/plugins/wpcomsh/changelog/add-launch-button new file mode 100644 index 0000000000000..9163c43711231 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/add-launch-button @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Add site launch button to the admin bar. From 9f24c9b43d22dc517fcca317386fb8d64b6d6749 Mon Sep 17 00:00:00 2001 From: Richard Ortiz Date: Mon, 27 Jan 2025 13:03:48 +0100 Subject: [PATCH 214/420] Remove duplicate view: Fix accessing empty preferences when dismissing (#41280) * Added a check to make sure that Calypso preferences is an array * changelog * We now bail instead of making the preferences an array --- ...fix-accessing-empty-preferences-when-dismissing | 5 +++++ .../wpcom-admin-interface.php | 14 ++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-accessing-empty-preferences-when-dismissing diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-accessing-empty-preferences-when-dismissing b/projects/packages/jetpack-mu-wpcom/changelog/fix-accessing-empty-preferences-when-dismissing new file mode 100644 index 0000000000000..a8bb4af0cf90f --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-accessing-empty-preferences-when-dismissing @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: We're adding a type check before accesing an array, the bug only affects WPCom. + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index 476f01613ca31..5292643ed800e 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -710,6 +710,20 @@ function wpcom_dismiss_removed_calypso_screen_notice() { $screen = sanitize_text_field( wp_unslash( $_REQUEST['screen'] ) ); if ( ( new Host() )->is_wpcom_simple() ) { $preferences = get_user_attribute( get_current_user_id(), 'calypso_preferences' ); + + // If $preferences is not array we log the contents so that we can further debug. + if ( ! is_array( $preferences ) && function_exists( 'log2logstash' ) ) { + log2logstash( + array( + 'feature' => 'wpcom-dismiss-wp-admin-notice', + 'message' => 'Retrieved a non-array value from Calypso preferences.', + 'extra' => wp_json_encode( $preferences ), + ) + ); + // Bail if we can't update the preferences array. + wp_die(); + } + $preferences[ 'removed-calypso-screen-dismissed-notice-' . $screen ] = true; update_user_attribute( get_current_user_id(), 'calypso_preferences', $preferences ); } else { From 90ac030feb873cb2b8ccd7f664126659f52716b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20M=C3=A1rk=20Juh=C3=A1sz?= <36671565+gmjuhasz@users.noreply.github.com> Date: Mon, 27 Jan 2025 13:11:18 +0100 Subject: [PATCH 215/420] Changelog and readme.txt edits. (#41328) --- .../js-packages/boost-score-api/CHANGELOG.md | 5 +++ .../changelog/fix-webpack-uniqueName | 5 --- .../js-packages/boost-score-api/package.json | 2 +- .../publicize-components/CHANGELOG.md | 7 ++++ .../changelog/clean-extra-composer-things | 5 --- .../changelog/fix-ts-errors | 5 --- ...al-move-admin-page-to-publicize-components | 4 -- .../refactor-social-note-settings-core | 4 -- .../social-unified-connections-management | 4 -- ...types-for-connection-actions-and-selectors | 5 --- .../publicize-components/package.json | 2 +- .../shared-extension-utils/CHANGELOG.md | 5 +++ .../changelog/clean-extra-composer-things | 5 --- .../shared-extension-utils/package.json | 2 +- .../js-packages/webpack-config/CHANGELOG.md | 4 ++ .../changelog/fix-webpack-uniqueName | 4 -- .../js-packages/webpack-config/package.json | 2 +- projects/packages/connection/CHANGELOG.md | 5 +++ .../changelog/add-phpcs-ignore-for-wpcut | 5 --- .../connection/src/class-package-version.php | 2 +- projects/packages/publicize/CHANGELOG.md | 12 ++++++ .../fix-social-connections-list-feature-check | 4 -- ...ial-jetpack-v4-endpoint-profile-link-field | 4 -- .../fix-social-linkedin-profile-links | 4 -- .../refactor-social-note-settings-core | 4 -- .../social-unified-connections-management | 4 -- ...ial-use-feature-flag-for-share-status-data | 4 -- projects/packages/publicize/composer.json | 2 +- projects/packages/publicize/package.json | 2 +- .../changelog/prerelease#2 | 2 +- projects/plugins/jetpack/composer.lock | 4 +- projects/plugins/social/CHANGELOG.md | 13 ++++++ .../changelog/clean-extra-composer-things | 5 --- .../changelog/fix-bad-npm-package-names | 5 --- ...fix-functionify_and_statusify_exit_and_die | 4 -- .../fix-social-connections-list-feature-check | 4 -- .../fix-social-linkedin-profile-links | 4 -- .../social/changelog/hide-license-on-woa | 4 -- projects/plugins/social/changelog/prerelease | 5 --- ...al-move-admin-page-to-publicize-components | 4 -- .../refactor-social-note-settings-core | 4 -- .../changelog/renovate-wordpress-monorepo | 4 -- ...isable-caching-for-publicize-services-list | 4 -- projects/plugins/social/composer.json | 2 +- projects/plugins/social/composer.lock | 4 +- projects/plugins/social/jetpack-social.php | 2 +- projects/plugins/social/readme.txt | 41 ++++--------------- 47 files changed, 73 insertions(+), 164 deletions(-) delete mode 100644 projects/js-packages/boost-score-api/changelog/fix-webpack-uniqueName delete mode 100644 projects/js-packages/publicize-components/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/publicize-components/changelog/fix-ts-errors delete mode 100644 projects/js-packages/publicize-components/changelog/refactor-social-move-admin-page-to-publicize-components delete mode 100644 projects/js-packages/publicize-components/changelog/refactor-social-note-settings-core delete mode 100644 projects/js-packages/publicize-components/changelog/social-unified-connections-management delete mode 100644 projects/js-packages/publicize-components/changelog/update-social-improve-types-for-connection-actions-and-selectors delete mode 100644 projects/js-packages/shared-extension-utils/changelog/clean-extra-composer-things delete mode 100644 projects/js-packages/webpack-config/changelog/fix-webpack-uniqueName delete mode 100644 projects/packages/connection/changelog/add-phpcs-ignore-for-wpcut delete mode 100644 projects/packages/publicize/changelog/fix-social-connections-list-feature-check delete mode 100644 projects/packages/publicize/changelog/fix-social-jetpack-v4-endpoint-profile-link-field delete mode 100644 projects/packages/publicize/changelog/fix-social-linkedin-profile-links delete mode 100644 projects/packages/publicize/changelog/refactor-social-note-settings-core delete mode 100644 projects/packages/publicize/changelog/social-unified-connections-management delete mode 100644 projects/packages/publicize/changelog/update-social-use-feature-flag-for-share-status-data rename projects/plugins/{social => jetpack}/changelog/prerelease#2 (79%) delete mode 100644 projects/plugins/social/changelog/clean-extra-composer-things delete mode 100644 projects/plugins/social/changelog/fix-bad-npm-package-names delete mode 100644 projects/plugins/social/changelog/fix-functionify_and_statusify_exit_and_die delete mode 100644 projects/plugins/social/changelog/fix-social-connections-list-feature-check delete mode 100644 projects/plugins/social/changelog/fix-social-linkedin-profile-links delete mode 100644 projects/plugins/social/changelog/hide-license-on-woa delete mode 100644 projects/plugins/social/changelog/prerelease delete mode 100644 projects/plugins/social/changelog/refactor-social-move-admin-page-to-publicize-components delete mode 100644 projects/plugins/social/changelog/refactor-social-note-settings-core delete mode 100644 projects/plugins/social/changelog/renovate-wordpress-monorepo delete mode 100644 projects/plugins/social/changelog/update-social-disable-caching-for-publicize-services-list diff --git a/projects/js-packages/boost-score-api/CHANGELOG.md b/projects/js-packages/boost-score-api/CHANGELOG.md index 5a8e8c6d1297e..204aeaf74ec4a 100644 --- a/projects/js-packages/boost-score-api/CHANGELOG.md +++ b/projects/js-packages/boost-score-api/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.53] - 2025-01-27 +### Changed +- Internal updates. + ## [0.1.52] - 2025-01-23 ### Changed - Internal updates. @@ -223,6 +227,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Create package for the boost score bar API [#30781] +[0.1.53]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.52...v0.1.53 [0.1.52]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.51...v0.1.52 [0.1.51]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.50...v0.1.51 [0.1.50]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.49...v0.1.50 diff --git a/projects/js-packages/boost-score-api/changelog/fix-webpack-uniqueName b/projects/js-packages/boost-score-api/changelog/fix-webpack-uniqueName deleted file mode 100644 index 41bce8d835361..0000000000000 --- a/projects/js-packages/boost-score-api/changelog/fix-webpack-uniqueName +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Set webpack `output.uniqueName` to match `output.library.name`, to account for a change in js-packages/webpack-config. - - diff --git a/projects/js-packages/boost-score-api/package.json b/projects/js-packages/boost-score-api/package.json index f7db4b491a4c9..c460d0a6e126a 100644 --- a/projects/js-packages/boost-score-api/package.json +++ b/projects/js-packages/boost-score-api/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-boost-score-api", - "version": "0.1.52", + "version": "0.1.53", "description": "A package to get the Jetpack Boost score of a site", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/boost-score-api/#readme", "bugs": { diff --git a/projects/js-packages/publicize-components/CHANGELOG.md b/projects/js-packages/publicize-components/CHANGELOG.md index 5c8e52c6bd1d5..d25ed6865d91f 100644 --- a/projects/js-packages/publicize-components/CHANGELOG.md +++ b/projects/js-packages/publicize-components/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.76.0] - 2025-01-27 +### Changed +- Moved the Social admin page to the publicize-components package [#41181] +- Refactored Social Note settings to use core [#41153] +- Social | Unify connections management API schema [#40679] + ## [0.75.4] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -1054,6 +1060,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated package dependencies. [#24470] +[0.76.0]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.4...v0.76.0 [0.75.4]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.3...v0.75.4 [0.75.3]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.2...v0.75.3 [0.75.2]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.1...v0.75.2 diff --git a/projects/js-packages/publicize-components/changelog/clean-extra-composer-things b/projects/js-packages/publicize-components/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/publicize-components/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/publicize-components/changelog/fix-ts-errors b/projects/js-packages/publicize-components/changelog/fix-ts-errors deleted file mode 100644 index 32e3ec35bb61d..0000000000000 --- a/projects/js-packages/publicize-components/changelog/fix-ts-errors +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fixes a TS error in trunk following a PR merged - - diff --git a/projects/js-packages/publicize-components/changelog/refactor-social-move-admin-page-to-publicize-components b/projects/js-packages/publicize-components/changelog/refactor-social-move-admin-page-to-publicize-components deleted file mode 100644 index c1fdb6d472afa..0000000000000 --- a/projects/js-packages/publicize-components/changelog/refactor-social-move-admin-page-to-publicize-components +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Moved the Social admin page to the publicize-components package diff --git a/projects/js-packages/publicize-components/changelog/refactor-social-note-settings-core b/projects/js-packages/publicize-components/changelog/refactor-social-note-settings-core deleted file mode 100644 index cb6e8105e2e53..0000000000000 --- a/projects/js-packages/publicize-components/changelog/refactor-social-note-settings-core +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Refactored Social Note settings to use core diff --git a/projects/js-packages/publicize-components/changelog/social-unified-connections-management b/projects/js-packages/publicize-components/changelog/social-unified-connections-management deleted file mode 100644 index 03f5d101125bf..0000000000000 --- a/projects/js-packages/publicize-components/changelog/social-unified-connections-management +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Social | Unify connections management API schema diff --git a/projects/js-packages/publicize-components/changelog/update-social-improve-types-for-connection-actions-and-selectors b/projects/js-packages/publicize-components/changelog/update-social-improve-types-for-connection-actions-and-selectors deleted file mode 100644 index a58cf3cf2e7fc..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-social-improve-types-for-connection-actions-and-selectors +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Improved TS types for connection actions and selectors - - diff --git a/projects/js-packages/publicize-components/package.json b/projects/js-packages/publicize-components/package.json index e8b095d02119e..6464503f3f7a3 100644 --- a/projects/js-packages/publicize-components/package.json +++ b/projects/js-packages/publicize-components/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-publicize-components", - "version": "0.75.4", + "version": "0.76.0", "description": "A library of JS components required by the Publicize editor plugin", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/publicize-components/#readme", "bugs": { diff --git a/projects/js-packages/shared-extension-utils/CHANGELOG.md b/projects/js-packages/shared-extension-utils/CHANGELOG.md index 9449a81cef49c..5b8cf61bc8016 100644 --- a/projects/js-packages/shared-extension-utils/CHANGELOG.md +++ b/projects/js-packages/shared-extension-utils/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.16.5] - 2025-01-27 +### Changed +- Internal updates. + ## [0.16.4] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -519,6 +523,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Core: prepare utility for release +[0.16.5]: https://github.com/Automattic/jetpack-shared-extension-utils/compare/0.16.4...0.16.5 [0.16.4]: https://github.com/Automattic/jetpack-shared-extension-utils/compare/0.16.3...0.16.4 [0.16.3]: https://github.com/Automattic/jetpack-shared-extension-utils/compare/0.16.2...0.16.3 [0.16.2]: https://github.com/Automattic/jetpack-shared-extension-utils/compare/0.16.1...0.16.2 diff --git a/projects/js-packages/shared-extension-utils/changelog/clean-extra-composer-things b/projects/js-packages/shared-extension-utils/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/shared-extension-utils/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/shared-extension-utils/package.json b/projects/js-packages/shared-extension-utils/package.json index 593db7f588151..0d3d53845c8d4 100644 --- a/projects/js-packages/shared-extension-utils/package.json +++ b/projects/js-packages/shared-extension-utils/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-shared-extension-utils", - "version": "0.16.4", + "version": "0.16.5", "description": "Utility functions used by the block editor extensions", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/shared-extension-utils/#readme", "bugs": { diff --git a/projects/js-packages/webpack-config/CHANGELOG.md b/projects/js-packages/webpack-config/CHANGELOG.md index 28b92127eb2ab..242c991999262 100644 --- a/projects/js-packages/webpack-config/CHANGELOG.md +++ b/projects/js-packages/webpack-config/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 3.6.0 - 2025-01-27 +### Added +- Set `output.uniqueName` by default. Note this may change output for things setting `output.library.name`. [#41315] + ## 3.5.7 - 2025-01-20 ### Changed - Updated package dependencies. [#41099] diff --git a/projects/js-packages/webpack-config/changelog/fix-webpack-uniqueName b/projects/js-packages/webpack-config/changelog/fix-webpack-uniqueName deleted file mode 100644 index ac7b02ae5238a..0000000000000 --- a/projects/js-packages/webpack-config/changelog/fix-webpack-uniqueName +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Set `output.uniqueName` by default. Note this may change output for things setting `output.library.name`. diff --git a/projects/js-packages/webpack-config/package.json b/projects/js-packages/webpack-config/package.json index d9fa2396260e7..9f268370be7a4 100644 --- a/projects/js-packages/webpack-config/package.json +++ b/projects/js-packages/webpack-config/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-webpack-config", - "version": "3.5.7", + "version": "3.6.0", "description": "Library of pieces for webpack config in Jetpack projects.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/webpack-config/#readme", "bugs": { diff --git a/projects/packages/connection/CHANGELOG.md b/projects/packages/connection/CHANGELOG.md index 5b3e2a56d09f2..361993603796f 100644 --- a/projects/packages/connection/CHANGELOG.md +++ b/projects/packages/connection/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [6.3.1] - 2025-01-27 +### Changed +- Internal updates. + ## [6.3.0] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -1287,6 +1291,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Separate the connection library into its own package. +[6.3.1]: https://github.com/Automattic/jetpack-connection/compare/v6.3.0...v6.3.1 [6.3.0]: https://github.com/Automattic/jetpack-connection/compare/v6.2.2...v6.3.0 [6.2.2]: https://github.com/Automattic/jetpack-connection/compare/v6.2.1...v6.2.2 [6.2.1]: https://github.com/Automattic/jetpack-connection/compare/v6.2.0...v6.2.1 diff --git a/projects/packages/connection/changelog/add-phpcs-ignore-for-wpcut b/projects/packages/connection/changelog/add-phpcs-ignore-for-wpcut deleted file mode 100644 index 3a9b3d16fc174..0000000000000 --- a/projects/packages/connection/changelog/add-phpcs-ignore-for-wpcut +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Add phpcs:ignore for wpcom. No changes to functionality. - - diff --git a/projects/packages/connection/src/class-package-version.php b/projects/packages/connection/src/class-package-version.php index 56b0339ac2c15..d2e9321086e49 100644 --- a/projects/packages/connection/src/class-package-version.php +++ b/projects/packages/connection/src/class-package-version.php @@ -12,7 +12,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '6.3.0'; + const PACKAGE_VERSION = '6.3.1'; const PACKAGE_SLUG = 'connection'; diff --git a/projects/packages/publicize/CHANGELOG.md b/projects/packages/publicize/CHANGELOG.md index b579d3da4a50b..00e423dd439f7 100644 --- a/projects/packages/publicize/CHANGELOG.md +++ b/projects/packages/publicize/CHANGELOG.md @@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.58.0] - 2025-01-27 +### Changed +- Refactored Social Note settings to use core [#41153] +- Social | Unify connections management API schema [#40679] +- Social | Use feature flag for share status data [#41218] + +### Fixed +- Social: Fix profile links for LinkedIn connections [#40873] +- Social | Fix editor invalid parameters error for old Jetpack versions. [#41199] +- Social | Fix feature check for social connections list initial state [#40679] + ## [0.57.4] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -817,6 +828,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated package dependencies. - Update package.json metadata. +[0.58.0]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.4...v0.58.0 [0.57.4]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.3...v0.57.4 [0.57.3]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.2...v0.57.3 [0.57.2]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.1...v0.57.2 diff --git a/projects/packages/publicize/changelog/fix-social-connections-list-feature-check b/projects/packages/publicize/changelog/fix-social-connections-list-feature-check deleted file mode 100644 index db871891de374..0000000000000 --- a/projects/packages/publicize/changelog/fix-social-connections-list-feature-check +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Social | Fix feature check for social connections list initial state diff --git a/projects/packages/publicize/changelog/fix-social-jetpack-v4-endpoint-profile-link-field b/projects/packages/publicize/changelog/fix-social-jetpack-v4-endpoint-profile-link-field deleted file mode 100644 index db5148732cb59..0000000000000 --- a/projects/packages/publicize/changelog/fix-social-jetpack-v4-endpoint-profile-link-field +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Social | Fix editor invalid parameters error for old Jetpack versions. diff --git a/projects/packages/publicize/changelog/fix-social-linkedin-profile-links b/projects/packages/publicize/changelog/fix-social-linkedin-profile-links deleted file mode 100644 index e043639911d3a..0000000000000 --- a/projects/packages/publicize/changelog/fix-social-linkedin-profile-links +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Social: Fix profile links for LinkedIn connections diff --git a/projects/packages/publicize/changelog/refactor-social-note-settings-core b/projects/packages/publicize/changelog/refactor-social-note-settings-core deleted file mode 100644 index cb6e8105e2e53..0000000000000 --- a/projects/packages/publicize/changelog/refactor-social-note-settings-core +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Refactored Social Note settings to use core diff --git a/projects/packages/publicize/changelog/social-unified-connections-management b/projects/packages/publicize/changelog/social-unified-connections-management deleted file mode 100644 index 03f5d101125bf..0000000000000 --- a/projects/packages/publicize/changelog/social-unified-connections-management +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Social | Unify connections management API schema diff --git a/projects/packages/publicize/changelog/update-social-use-feature-flag-for-share-status-data b/projects/packages/publicize/changelog/update-social-use-feature-flag-for-share-status-data deleted file mode 100644 index e07a0da420545..0000000000000 --- a/projects/packages/publicize/changelog/update-social-use-feature-flag-for-share-status-data +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Social | Use feature flag for share status data diff --git a/projects/packages/publicize/composer.json b/projects/packages/publicize/composer.json index a11800989b4b0..9c7672a02e161 100644 --- a/projects/packages/publicize/composer.json +++ b/projects/packages/publicize/composer.json @@ -72,7 +72,7 @@ "link-template": "https://github.com/Automattic/jetpack-publicize/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.57.x-dev" + "dev-trunk": "0.58.x-dev" } }, "config": { diff --git a/projects/packages/publicize/package.json b/projects/packages/publicize/package.json index d4c3f900ea181..1a048b04781b2 100644 --- a/projects/packages/publicize/package.json +++ b/projects/packages/publicize/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-publicize", - "version": "0.57.4", + "version": "0.58.0", "description": "Publicize makes it easy to share your site’s posts on several social media networks automatically when you publish a new post.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/publicize/#readme", "bugs": { diff --git a/projects/plugins/social/changelog/prerelease#2 b/projects/plugins/jetpack/changelog/prerelease#2 similarity index 79% rename from projects/plugins/social/changelog/prerelease#2 rename to projects/plugins/jetpack/changelog/prerelease#2 index 9aa70e3ec1f75..a1c1831fa1ef7 100644 --- a/projects/plugins/social/changelog/prerelease#2 +++ b/projects/plugins/jetpack/changelog/prerelease#2 @@ -1,5 +1,5 @@ Significance: patch -Type: changed +Type: other Comment: Updated composer.lock. diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index 2c210154d384a..2bf1832949535 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -2288,7 +2288,7 @@ "dist": { "type": "path", "url": "../../packages/publicize", - "reference": "0fa23aea603e89c8fce0e22ac921356ca84b1044" + "reference": "4f697dcdd12b550101de882bd997839907281ba6" }, "require": { "automattic/jetpack-assets": "@dev", @@ -2317,7 +2317,7 @@ "link-template": "https://github.com/Automattic/jetpack-publicize/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.57.x-dev" + "dev-trunk": "0.58.x-dev" } }, "autoload": { diff --git a/projects/plugins/social/CHANGELOG.md b/projects/plugins/social/CHANGELOG.md index 8092d19e46b9a..662eb8d226df4 100644 --- a/projects/plugins/social/CHANGELOG.md +++ b/projects/plugins/social/CHANGELOG.md @@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 6.1.0 - 2025-01-27 +### Changed +- Code: Use function-style exit() and die() with a default status code of 0. [#41167] +- License: Social admin page header hides license link on WoA sites. [#41076] +- Moved the Social admin page to the publicize-components package [#41181] +- Refactored Social Note settings to use core [#41153] +- Updated package dependencies. [#41099] + +### Fixed +- Fixed profile links for LinkedIn connections [#40873] +- Fixed wordpress.com log in error when connecting Social accounts [#41149] +- Fix publicize error in the editor due to malformed connections data [#40679] + ## 6.0.0 - 2025-01-14 ### Added - Add Bluesky to social feature copy. [#40487] diff --git a/projects/plugins/social/changelog/clean-extra-composer-things b/projects/plugins/social/changelog/clean-extra-composer-things deleted file mode 100644 index 3d6f81cf571b7..0000000000000 --- a/projects/plugins/social/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removed dev packages, no functional changes - - diff --git a/projects/plugins/social/changelog/fix-bad-npm-package-names b/projects/plugins/social/changelog/fix-bad-npm-package-names deleted file mode 100644 index fc1da13877c8e..0000000000000 --- a/projects/plugins/social/changelog/fix-bad-npm-package-names +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. - - diff --git a/projects/plugins/social/changelog/fix-functionify_and_statusify_exit_and_die b/projects/plugins/social/changelog/fix-functionify_and_statusify_exit_and_die deleted file mode 100644 index 5f323ddb3e478..0000000000000 --- a/projects/plugins/social/changelog/fix-functionify_and_statusify_exit_and_die +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Code: Use function-style exit() and die() with a default status code of 0. diff --git a/projects/plugins/social/changelog/fix-social-connections-list-feature-check b/projects/plugins/social/changelog/fix-social-connections-list-feature-check deleted file mode 100644 index d4868fdf6e0a2..0000000000000 --- a/projects/plugins/social/changelog/fix-social-connections-list-feature-check +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix publicize error in the editor due to malformed connections data diff --git a/projects/plugins/social/changelog/fix-social-linkedin-profile-links b/projects/plugins/social/changelog/fix-social-linkedin-profile-links deleted file mode 100644 index fbcf7bc784a02..0000000000000 --- a/projects/plugins/social/changelog/fix-social-linkedin-profile-links +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixed profile links for LinkedIn connections diff --git a/projects/plugins/social/changelog/hide-license-on-woa b/projects/plugins/social/changelog/hide-license-on-woa deleted file mode 100644 index 4a91af7a3d646..0000000000000 --- a/projects/plugins/social/changelog/hide-license-on-woa +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -License: Social admin page header hides license link on WoA sites. diff --git a/projects/plugins/social/changelog/prerelease b/projects/plugins/social/changelog/prerelease deleted file mode 100644 index 9aa70e3ec1f75..0000000000000 --- a/projects/plugins/social/changelog/prerelease +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: Updated composer.lock. - - diff --git a/projects/plugins/social/changelog/refactor-social-move-admin-page-to-publicize-components b/projects/plugins/social/changelog/refactor-social-move-admin-page-to-publicize-components deleted file mode 100644 index c1fdb6d472afa..0000000000000 --- a/projects/plugins/social/changelog/refactor-social-move-admin-page-to-publicize-components +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Moved the Social admin page to the publicize-components package diff --git a/projects/plugins/social/changelog/refactor-social-note-settings-core b/projects/plugins/social/changelog/refactor-social-note-settings-core deleted file mode 100644 index cb6e8105e2e53..0000000000000 --- a/projects/plugins/social/changelog/refactor-social-note-settings-core +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Refactored Social Note settings to use core diff --git a/projects/plugins/social/changelog/renovate-wordpress-monorepo b/projects/plugins/social/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/plugins/social/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/plugins/social/changelog/update-social-disable-caching-for-publicize-services-list b/projects/plugins/social/changelog/update-social-disable-caching-for-publicize-services-list deleted file mode 100644 index 3445dbbab7f45..0000000000000 --- a/projects/plugins/social/changelog/update-social-disable-caching-for-publicize-services-list +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixed wordpress.com log in error when connecting Social accounts diff --git a/projects/plugins/social/composer.json b/projects/plugins/social/composer.json index 2de73727dd9cd..9207be4f2abf0 100644 --- a/projects/plugins/social/composer.json +++ b/projects/plugins/social/composer.json @@ -85,6 +85,6 @@ "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true }, - "autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_socialⓥ6_0_0" + "autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_socialⓥ6_1_0" } } diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index e9a0e23b5ec13..24c943f0a2cfb 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -1539,7 +1539,7 @@ "dist": { "type": "path", "url": "../../packages/publicize", - "reference": "0fa23aea603e89c8fce0e22ac921356ca84b1044" + "reference": "4f697dcdd12b550101de882bd997839907281ba6" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1568,7 +1568,7 @@ "link-template": "https://github.com/Automattic/jetpack-publicize/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.57.x-dev" + "dev-trunk": "0.58.x-dev" } }, "autoload": { diff --git a/projects/plugins/social/jetpack-social.php b/projects/plugins/social/jetpack-social.php index 8f74067289e63..b32f11808190e 100644 --- a/projects/plugins/social/jetpack-social.php +++ b/projects/plugins/social/jetpack-social.php @@ -4,7 +4,7 @@ * Plugin Name: Jetpack Social * Plugin URI: https://wordpress.org/plugins/jetpack-social * Description: Share your site’s posts on several social media networks automatically when you publish a new post. - * Version: 6.0.0 + * Version: 6.1.0 * Author: Automattic - Jetpack Social team * Author URI: https://jetpack.com/social/ * License: GPLv2 or later diff --git a/projects/plugins/social/readme.txt b/projects/plugins/social/readme.txt index d21d09fbe1043..fe1e5e91b9ccf 100644 --- a/projects/plugins/social/readme.txt +++ b/projects/plugins/social/readme.txt @@ -104,43 +104,18 @@ The easiest way is to use the Custom Message option in the publishing options bo 6. Managing Social media accounts in the post editor == Changelog == -### 6.0.0 - 2025-01-14 -#### Added -- Add Bluesky to social feature copy. -- Add a new toggle for UTM tracking. -- Add LinkedIn permissions warning. -- Enable test coverage. -- Make Post share status immediately available in the editor on page load. -- My Jetpack: Update recommendations section in My Jetpack to include a slider interaction for the cards. - +### 6.1.0 - 2025-01-27 #### Changed -- Change My Jetpack CTA from "Learn more" to "Activate". -- Change order of connections. -- Clean up unused TypeScript types -- E2E Tests: Update tests to use @wordpress/e2e-test-utils-playwright. -- Ensure the support link points to Jetpack support. -- Image Generator: Change description for toggle. -- Image Generator: Move settings to new store. -- Migrate settings to new script data. -- Migrate the last bits of social store to new script data. -- Move the admin menu initialization to the init hook. -- Readme: Update documentation to include all supported social networks. -- Remove some unused code. -- Resolve an issue where revoked licenses were incorrectly treated as unattached. This caused users to be redirected to the license activation page after site connection, even when unattached licenses were not valid for activation. -- Updated dependencies. +- Code: Use function-style exit() and die() with a default status code of 0. +- License: Social admin page header hides license link on WoA sites. +- Moved the Social admin page to the publicize-components package +- Refactored Social Note settings to use core - Updated package dependencies. -#### Removed -- General: Update minimum PHP version to 7.2. -- General: Update minimum WordPress version to 6.6. - #### Fixed -- E2E Tests: Only install single browser used by Playwright. -- Fix an issue where we showed the license message even with a plan. -- Fix the infinite reload issue on Jetpack Sharing settings. -- Fix the Instagram max video length. -- Page & Post: Fix the layout on mobile when details are open. -- Prevent dataviews styles imported in share status from being added globally. +- Fixed profile links for LinkedIn connections +- Fixed wordpress.com log in error when connecting Social accounts +- Fix publicize error in the editor due to malformed connections data == Upgrade Notice == From d4e96f63103c6adbaf67a660798fa6b91b02f24e Mon Sep 17 00:00:00 2001 From: Igor Zinovyev Date: Mon, 27 Jan 2025 15:55:48 +0300 Subject: [PATCH 216/420] Changelog and readme.txt edits. (#41330) --- projects/js-packages/ai-client/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/js-packages/ai-client/package.json | 2 +- .../classic-theme-helper/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- .../changelog/fix-jetpack-portfolio-fatal | 4 ---- .../classic-theme-helper/package.json | 2 +- .../classic-theme-helper/src/class-main.php | 2 +- projects/packages/forms/CHANGELOG.md | 17 +++++++++++++++ .../changelog/fix-checkbox-checked-state | 4 ---- .../changelog/fix-form-block-icon-colours | 4 ---- .../fix-form-radio-button-missing-div | 4 ---- .../fix-form-textarea-default-border-stylinig | 5 ----- .../fix-forms-checkbox-enter-new-block | 4 ---- .../changelog/fix-forms-send-to-settings | 4 ---- .../forms/changelog/fix-icon-in-site-editor | 4 ---- .../forms-add-default-block-on-input-enter | 4 ---- .../forms/changelog/remove-contact-form-hocs | 4 ---- .../forms/changelog/update-forms-unique-id | 4 ---- projects/packages/forms/package.json | 2 +- .../forms/src/class-jetpack-forms.php | 2 +- projects/packages/import/CHANGELOG.md | 5 +++++ .../changelog/clean-extra-composer-things | 5 ----- projects/packages/import/package.json | 2 +- projects/packages/import/src/class-main.php | 2 +- projects/packages/masterbar/CHANGELOG.md | 8 +++++++ .../changelog/remove-classic-view-notice | 4 ---- .../update-remove-performance-menu-item | 4 ---- projects/packages/masterbar/composer.json | 2 +- projects/packages/masterbar/package.json | 2 +- .../packages/masterbar/src/class-main.php | 2 +- projects/packages/search/CHANGELOG.md | 5 +++++ .../changelog/fix-bad-npm-package-names | 5 ----- .../packages/search/src/class-package.php | 2 +- projects/packages/videopress/CHANGELOG.md | 5 +++++ .../fix-videopress-block-classic-themes | 4 ---- projects/packages/videopress/package.json | 2 +- .../videopress/src/class-package-version.php | 2 +- projects/plugins/jetpack/CHANGELOG.md | 21 +++++++++++++++++++ .../add-comment-endpoint-wpcom-user-fields | 4 ---- .../changelog/add-phpcs-ignore-for-wpcut | 5 ----- .../changelog/clean-extra-composer-things | 5 ----- .../changelog/fix-bad-npm-package-names | 5 ----- .../changelog/fix-bad-npm-package-names#2 | 5 ----- .../jetpack/changelog/fix-cookie-consent-reg | 4 ---- .../plugins/jetpack/changelog/fix-empty-news | 4 ---- .../fix-form-radio-button-missing-div | 5 ----- .../changelog/fix-form-submit-button-outline | 4 ---- .../fix-form-textarea-default-border-stylinig | 4 ---- .../fix-forms-checkbox-enter-new-block | 4 ---- .../jetpack/changelog/fix-icon-in-site-editor | 4 ---- .../fix-jetpack-ai-excerpt-site-editor | 4 ---- ...fix-jetpack-google-fonts-in-classic-themes | 4 ---- .../changelog/fix-publicize-php-unit-tests | 5 ----- .../changelog/fix-publicize-unit-tests-again | 5 ----- .../fix-social-connections-list-feature-check | 4 ---- .../fix-social-linkedin-profile-links | 4 ---- .../fix-videopress-block-classic-themes | 4 ---- .../changelog/remove-contact-form-hocs | 4 ---- .../remove-remove-jetpack-geo-location-2 | 4 ---- ...ert-41075-update-related-posts-block-theme | 4 ---- .../jetpack/changelog/update-forms-unique-id | 5 ----- projects/plugins/jetpack/composer.json | 2 +- projects/plugins/jetpack/composer.lock | 4 ++-- projects/plugins/jetpack/jetpack.php | 4 ++-- .../class.jetpack-geo-location.php | 2 +- projects/plugins/jetpack/readme.txt | 15 +++++++------ .../changelog/prerelease#4} | 2 +- .../plugins/mu-wpcom-plugin/composer.lock | 4 ++-- .../changelog/prerelease#10} | 2 +- projects/plugins/wpcomsh/composer.lock | 4 ++-- 71 files changed, 103 insertions(+), 210 deletions(-) delete mode 100644 projects/js-packages/ai-client/changelog/clean-extra-composer-things delete mode 100644 projects/packages/classic-theme-helper/changelog/clean-extra-composer-things delete mode 100644 projects/packages/classic-theme-helper/changelog/fix-jetpack-portfolio-fatal delete mode 100644 projects/packages/forms/changelog/fix-checkbox-checked-state delete mode 100644 projects/packages/forms/changelog/fix-form-block-icon-colours delete mode 100644 projects/packages/forms/changelog/fix-form-radio-button-missing-div delete mode 100644 projects/packages/forms/changelog/fix-form-textarea-default-border-stylinig delete mode 100644 projects/packages/forms/changelog/fix-forms-checkbox-enter-new-block delete mode 100644 projects/packages/forms/changelog/fix-forms-send-to-settings delete mode 100644 projects/packages/forms/changelog/fix-icon-in-site-editor delete mode 100644 projects/packages/forms/changelog/forms-add-default-block-on-input-enter delete mode 100644 projects/packages/forms/changelog/remove-contact-form-hocs delete mode 100644 projects/packages/forms/changelog/update-forms-unique-id delete mode 100644 projects/packages/import/changelog/clean-extra-composer-things delete mode 100644 projects/packages/masterbar/changelog/remove-classic-view-notice delete mode 100644 projects/packages/masterbar/changelog/update-remove-performance-menu-item delete mode 100644 projects/packages/search/changelog/fix-bad-npm-package-names delete mode 100644 projects/packages/videopress/changelog/fix-videopress-block-classic-themes delete mode 100644 projects/plugins/jetpack/changelog/add-comment-endpoint-wpcom-user-fields delete mode 100644 projects/plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut delete mode 100644 projects/plugins/jetpack/changelog/clean-extra-composer-things delete mode 100644 projects/plugins/jetpack/changelog/fix-bad-npm-package-names delete mode 100644 projects/plugins/jetpack/changelog/fix-bad-npm-package-names#2 delete mode 100644 projects/plugins/jetpack/changelog/fix-cookie-consent-reg delete mode 100644 projects/plugins/jetpack/changelog/fix-empty-news delete mode 100644 projects/plugins/jetpack/changelog/fix-form-radio-button-missing-div delete mode 100644 projects/plugins/jetpack/changelog/fix-form-submit-button-outline delete mode 100644 projects/plugins/jetpack/changelog/fix-form-textarea-default-border-stylinig delete mode 100644 projects/plugins/jetpack/changelog/fix-forms-checkbox-enter-new-block delete mode 100644 projects/plugins/jetpack/changelog/fix-icon-in-site-editor delete mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-ai-excerpt-site-editor delete mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-google-fonts-in-classic-themes delete mode 100644 projects/plugins/jetpack/changelog/fix-publicize-php-unit-tests delete mode 100644 projects/plugins/jetpack/changelog/fix-publicize-unit-tests-again delete mode 100644 projects/plugins/jetpack/changelog/fix-social-connections-list-feature-check delete mode 100644 projects/plugins/jetpack/changelog/fix-social-linkedin-profile-links delete mode 100644 projects/plugins/jetpack/changelog/fix-videopress-block-classic-themes delete mode 100644 projects/plugins/jetpack/changelog/remove-contact-form-hocs delete mode 100644 projects/plugins/jetpack/changelog/remove-remove-jetpack-geo-location-2 delete mode 100644 projects/plugins/jetpack/changelog/revert-41075-update-related-posts-block-theme delete mode 100644 projects/plugins/jetpack/changelog/update-forms-unique-id rename projects/plugins/{jetpack/changelog/prerelease#2 => mu-wpcom-plugin/changelog/prerelease#4} (79%) rename projects/plugins/{jetpack/changelog/prerelease => wpcomsh/changelog/prerelease#10} (79%) diff --git a/projects/js-packages/ai-client/CHANGELOG.md b/projects/js-packages/ai-client/CHANGELOG.md index 067a2d2986c40..8c6f7e7e30b67 100644 --- a/projects/js-packages/ai-client/CHANGELOG.md +++ b/projects/js-packages/ai-client/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.25.7] - 2025-01-27 +### Changed +- Internal updates. + ## [0.25.6] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -506,6 +510,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - AI Client: stop using smart document visibility handling on the fetchEventSource library, so it does not restart the completion when changing tabs. [#32004] - Updated package dependencies. [#31468] [#31659] [#31785] +[0.25.7]: https://github.com/Automattic/jetpack-ai-client/compare/v0.25.6...v0.25.7 [0.25.6]: https://github.com/Automattic/jetpack-ai-client/compare/v0.25.5...v0.25.6 [0.25.5]: https://github.com/Automattic/jetpack-ai-client/compare/v0.25.4...v0.25.5 [0.25.4]: https://github.com/Automattic/jetpack-ai-client/compare/v0.25.3...v0.25.4 diff --git a/projects/js-packages/ai-client/changelog/clean-extra-composer-things b/projects/js-packages/ai-client/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/js-packages/ai-client/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/js-packages/ai-client/package.json b/projects/js-packages/ai-client/package.json index 583e74aca2524..1769207997acb 100644 --- a/projects/js-packages/ai-client/package.json +++ b/projects/js-packages/ai-client/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@automattic/jetpack-ai-client", - "version": "0.25.6", + "version": "0.25.7", "description": "A JS client for consuming Jetpack AI services", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/ai-client/#readme", "bugs": { diff --git a/projects/packages/classic-theme-helper/CHANGELOG.md b/projects/packages/classic-theme-helper/CHANGELOG.md index c24c013a0314a..d4f3a910acde0 100644 --- a/projects/packages/classic-theme-helper/CHANGELOG.md +++ b/projects/packages/classic-theme-helper/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.9.2] - 2025-01-27 +### Fixed +- Classic Theme Helper: Fix Fatal in Jetpack_Portfolio. [#41304] + ## [0.9.1] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -198,6 +202,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Add wordpress folder on gitignore. [#37177] +[0.9.2]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.9.1...v0.9.2 [0.9.1]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.9.0...v0.9.1 [0.9.0]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.3...v0.9.0 [0.8.3]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.2...v0.8.3 diff --git a/projects/packages/classic-theme-helper/changelog/clean-extra-composer-things b/projects/packages/classic-theme-helper/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/packages/classic-theme-helper/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/packages/classic-theme-helper/changelog/fix-jetpack-portfolio-fatal b/projects/packages/classic-theme-helper/changelog/fix-jetpack-portfolio-fatal deleted file mode 100644 index 7a27a6d7d7f3e..0000000000000 --- a/projects/packages/classic-theme-helper/changelog/fix-jetpack-portfolio-fatal +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Classic Theme Helper: Fix Fatal in Jetpack_Portfolio diff --git a/projects/packages/classic-theme-helper/package.json b/projects/packages/classic-theme-helper/package.json index fc977bc036388..97e5f882bd51e 100644 --- a/projects/packages/classic-theme-helper/package.json +++ b/projects/packages/classic-theme-helper/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-classic-theme-helper", - "version": "0.9.1", + "version": "0.9.2", "description": "Features used with classic themes", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/classic-theme-helper/#readme", "bugs": { diff --git a/projects/packages/classic-theme-helper/src/class-main.php b/projects/packages/classic-theme-helper/src/class-main.php index 0539b42bbb53e..41e79780f7870 100644 --- a/projects/packages/classic-theme-helper/src/class-main.php +++ b/projects/packages/classic-theme-helper/src/class-main.php @@ -14,7 +14,7 @@ */ class Main { - const PACKAGE_VERSION = '0.9.1'; + const PACKAGE_VERSION = '0.9.2'; /** * Modules to include. diff --git a/projects/packages/forms/CHANGELOG.md b/projects/packages/forms/CHANGELOG.md index 4bae69f765038..b2d133840d786 100644 --- a/projects/packages/forms/CHANGELOG.md +++ b/projects/packages/forms/CHANGELOG.md @@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.35.1] - 2025-01-27 +### Added +- Add Checkbox and Consent field enter action to create a new block. [#41297] +- Forms: Create new default block when pressing Enter on text inputs. [#41177] + +### Changed +- Forms: Remove wrapping
      element from form block. [#41274] + +### Fixed +- Adds missing deprecation for checkboxes and radio fields. [#41198] +- Form: fix the default checkstate for admins. [#40847] +- Forms: Add unique ids to each form. [#40998] +- Forms: fix send to settings for multiple authors. [#41290] +- Forms: Make the icons show up as expected in the style editor. [#41314] +- Updates the icon colours to the new standard. [#41250] + ## [0.35.0] - 2025-01-20 ### Added - Forms: Allow HTML block within forms. [#41040] @@ -773,6 +789,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added a new jetpack/forms package [#28409] - Added a public load_contact_form method for initializing the contact form module. [#28416] +[0.35.1]: https://github.com/automattic/jetpack-forms/compare/v0.35.0...v0.35.1 [0.35.0]: https://github.com/automattic/jetpack-forms/compare/v0.34.6...v0.35.0 [0.34.6]: https://github.com/automattic/jetpack-forms/compare/v0.34.5...v0.34.6 [0.34.5]: https://github.com/automattic/jetpack-forms/compare/v0.34.4...v0.34.5 diff --git a/projects/packages/forms/changelog/fix-checkbox-checked-state b/projects/packages/forms/changelog/fix-checkbox-checked-state deleted file mode 100644 index 93093a7ae3ad5..0000000000000 --- a/projects/packages/forms/changelog/fix-checkbox-checked-state +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Form: fix the default checkstate for admins diff --git a/projects/packages/forms/changelog/fix-form-block-icon-colours b/projects/packages/forms/changelog/fix-form-block-icon-colours deleted file mode 100644 index 3aeb9f29911e9..0000000000000 --- a/projects/packages/forms/changelog/fix-form-block-icon-colours +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Updates the icon colours to the new standard diff --git a/projects/packages/forms/changelog/fix-form-radio-button-missing-div b/projects/packages/forms/changelog/fix-form-radio-button-missing-div deleted file mode 100644 index 0c87d0e433f94..0000000000000 --- a/projects/packages/forms/changelog/fix-form-radio-button-missing-div +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Adds missing deprecation for checkboxes and radio fields diff --git a/projects/packages/forms/changelog/fix-form-textarea-default-border-stylinig b/projects/packages/forms/changelog/fix-form-textarea-default-border-stylinig deleted file mode 100644 index 2e25c1fd436b6..0000000000000 --- a/projects/packages/forms/changelog/fix-form-textarea-default-border-stylinig +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: THis seems like a minor fix - - diff --git a/projects/packages/forms/changelog/fix-forms-checkbox-enter-new-block b/projects/packages/forms/changelog/fix-forms-checkbox-enter-new-block deleted file mode 100644 index 38fe0d4db8565..0000000000000 --- a/projects/packages/forms/changelog/fix-forms-checkbox-enter-new-block +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Add Checkbox and Consent field enter action to create a new block diff --git a/projects/packages/forms/changelog/fix-forms-send-to-settings b/projects/packages/forms/changelog/fix-forms-send-to-settings deleted file mode 100644 index 0e4d2a8341954..0000000000000 --- a/projects/packages/forms/changelog/fix-forms-send-to-settings +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: fix send to settings for multiple authors diff --git a/projects/packages/forms/changelog/fix-icon-in-site-editor b/projects/packages/forms/changelog/fix-icon-in-site-editor deleted file mode 100644 index 2f4b228fcfae2..0000000000000 --- a/projects/packages/forms/changelog/fix-icon-in-site-editor +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Make the icons show up as expected in the style editor diff --git a/projects/packages/forms/changelog/forms-add-default-block-on-input-enter b/projects/packages/forms/changelog/forms-add-default-block-on-input-enter deleted file mode 100644 index 4290c7cc770eb..0000000000000 --- a/projects/packages/forms/changelog/forms-add-default-block-on-input-enter +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Forms: Create new default block when pressing Enter on text inputs diff --git a/projects/packages/forms/changelog/remove-contact-form-hocs b/projects/packages/forms/changelog/remove-contact-form-hocs deleted file mode 100644 index 9b38f38c0c172..0000000000000 --- a/projects/packages/forms/changelog/remove-contact-form-hocs +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Forms: Remove wrapping
      element from form block. diff --git a/projects/packages/forms/changelog/update-forms-unique-id b/projects/packages/forms/changelog/update-forms-unique-id deleted file mode 100644 index a9fa70192e97b..0000000000000 --- a/projects/packages/forms/changelog/update-forms-unique-id +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Add unique ids to each form diff --git a/projects/packages/forms/package.json b/projects/packages/forms/package.json index bea70bfb8ae3e..f23a44628f4df 100644 --- a/projects/packages/forms/package.json +++ b/projects/packages/forms/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-forms", - "version": "0.35.0", + "version": "0.35.1", "description": "Jetpack Forms", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/forms/#readme", "bugs": { diff --git a/projects/packages/forms/src/class-jetpack-forms.php b/projects/packages/forms/src/class-jetpack-forms.php index 8c8db70db95be..418e8670fcb38 100644 --- a/projects/packages/forms/src/class-jetpack-forms.php +++ b/projects/packages/forms/src/class-jetpack-forms.php @@ -15,7 +15,7 @@ */ class Jetpack_Forms { - const PACKAGE_VERSION = '0.35.0'; + const PACKAGE_VERSION = '0.35.1'; /** * Load the contact form module. diff --git a/projects/packages/import/CHANGELOG.md b/projects/packages/import/CHANGELOG.md index 4d96561e5d532..c422652f39ef2 100644 --- a/projects/packages/import/CHANGELOG.md +++ b/projects/packages/import/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.9.3] - 2025-01-27 +### Changed +- Internal updates. + ## [0.9.2] - 2024-12-16 ### Fixed - Import: setting WP_IMPORTING when doing an import. [#40563] @@ -134,6 +138,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed various imported resources hierarchies [#29012] +[0.9.3]: https://github.com/Automattic/jetpack-import/compare/v0.9.2...v0.9.3 [0.9.2]: https://github.com/Automattic/jetpack-import/compare/v0.9.1...v0.9.2 [0.9.1]: https://github.com/Automattic/jetpack-import/compare/v0.9.0...v0.9.1 [0.9.0]: https://github.com/Automattic/jetpack-import/compare/v0.8.11...v0.9.0 diff --git a/projects/packages/import/changelog/clean-extra-composer-things b/projects/packages/import/changelog/clean-extra-composer-things deleted file mode 100644 index 3d662316f955f..0000000000000 --- a/projects/packages/import/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Removing development packages, nothing with production code - - diff --git a/projects/packages/import/package.json b/projects/packages/import/package.json index 1e754e2218de6..ebb2eb385a027 100644 --- a/projects/packages/import/package.json +++ b/projects/packages/import/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-import", - "version": "0.9.2", + "version": "0.9.3", "description": "Set of REST API routes used in WPCOM Unified Importer.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/import/#readme", "bugs": { diff --git a/projects/packages/import/src/class-main.php b/projects/packages/import/src/class-main.php index b3314f3ff2b1c..6d0e32fbb8d6f 100644 --- a/projects/packages/import/src/class-main.php +++ b/projects/packages/import/src/class-main.php @@ -20,7 +20,7 @@ class Main { * * @var string */ - const PACKAGE_VERSION = '0.9.2'; + const PACKAGE_VERSION = '0.9.3'; /** * A list of all the routes. diff --git a/projects/packages/masterbar/CHANGELOG.md b/projects/packages/masterbar/CHANGELOG.md index 1c298b39a101c..3f44847564b10 100644 --- a/projects/packages/masterbar/CHANGELOG.md +++ b/projects/packages/masterbar/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.12.0] - 2025-01-27 +### Added +- Hide the calypso based Performance menu item on wordpress.com, show page-optimize based Performance menu item on Atomic sites. [#41145] + +### Removed +- Remove classic view admin notice from general settings (for Atomic sites). [#41155] + ## [0.11.0] - 2025-01-20 ### Changed - Add watch command in the masterbar package. [#41066] @@ -207,6 +214,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Notifications: Change Icon [#37676] - Updated package dependencies. [#37669] [#37706] +[0.12.0]: https://github.com/Automattic/jetpack-masterbar/compare/v0.11.0...v0.12.0 [0.11.0]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.6...v0.11.0 [0.10.6]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.5...v0.10.6 [0.10.5]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.4...v0.10.5 diff --git a/projects/packages/masterbar/changelog/remove-classic-view-notice b/projects/packages/masterbar/changelog/remove-classic-view-notice deleted file mode 100644 index c67067aa466a4..0000000000000 --- a/projects/packages/masterbar/changelog/remove-classic-view-notice +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: removed - -removed classic view admin notice from general settings (for atomic sites) diff --git a/projects/packages/masterbar/changelog/update-remove-performance-menu-item b/projects/packages/masterbar/changelog/update-remove-performance-menu-item deleted file mode 100644 index 2300c80248710..0000000000000 --- a/projects/packages/masterbar/changelog/update-remove-performance-menu-item +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Hides the calypso based Performance menu item on wordpress.com, shows page-optimize based Performance menu item on Atomic sites. diff --git a/projects/packages/masterbar/composer.json b/projects/packages/masterbar/composer.json index 4906656bc2840..b4b0dfff9a159 100644 --- a/projects/packages/masterbar/composer.json +++ b/projects/packages/masterbar/composer.json @@ -72,7 +72,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.11.x-dev" + "dev-trunk": "0.12.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-masterbar/compare/v${old}...v${new}" diff --git a/projects/packages/masterbar/package.json b/projects/packages/masterbar/package.json index 1bb298709bf2b..eb0d07e11ffed 100644 --- a/projects/packages/masterbar/package.json +++ b/projects/packages/masterbar/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-masterbar", - "version": "0.11.0", + "version": "0.12.0", "description": "The WordPress.com Toolbar feature replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/masterbar/#readme", "bugs": { diff --git a/projects/packages/masterbar/src/class-main.php b/projects/packages/masterbar/src/class-main.php index 57551b00d9334..72b808a99261d 100644 --- a/projects/packages/masterbar/src/class-main.php +++ b/projects/packages/masterbar/src/class-main.php @@ -14,7 +14,7 @@ */ class Main { - const PACKAGE_VERSION = '0.11.0'; + const PACKAGE_VERSION = '0.12.0'; /** * Initializer. diff --git a/projects/packages/search/CHANGELOG.md b/projects/packages/search/CHANGELOG.md index 39e1e1f9dee3b..0f19be500029d 100644 --- a/projects/packages/search/CHANGELOG.md +++ b/projects/packages/search/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.47.7] - 2025-01-27 +### Changed +- Internal updates. + ## [0.47.6] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -1112,6 +1116,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated package dependencies. - Update PHPUnit configs to include just what needs coverage rather than include everything then try to exclude stuff that doesn't. +[0.47.7]: https://github.com/Automattic/jetpack-search/compare/v0.47.6...v0.47.7 [0.47.6]: https://github.com/Automattic/jetpack-search/compare/v0.47.5...v0.47.6 [0.47.5]: https://github.com/Automattic/jetpack-search/compare/v0.47.4...v0.47.5 [0.47.4]: https://github.com/Automattic/jetpack-search/compare/v0.47.3...v0.47.4 diff --git a/projects/packages/search/changelog/fix-bad-npm-package-names b/projects/packages/search/changelog/fix-bad-npm-package-names deleted file mode 100644 index 6e781f5152830..0000000000000 --- a/projects/packages/search/changelog/fix-bad-npm-package-names +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Remove unused "name" field from package.json. This is not published and is not the target of an intra-monorepo JS dependency. - - diff --git a/projects/packages/search/src/class-package.php b/projects/packages/search/src/class-package.php index 0006b997f6ae8..e1e73f8497b92 100644 --- a/projects/packages/search/src/class-package.php +++ b/projects/packages/search/src/class-package.php @@ -11,7 +11,7 @@ * Search package general information */ class Package { - const VERSION = '0.47.6'; + const VERSION = '0.47.7'; const SLUG = 'search'; /** diff --git a/projects/packages/videopress/CHANGELOG.md b/projects/packages/videopress/CHANGELOG.md index c70d4f2853b8a..edf6ca53cc250 100644 --- a/projects/packages/videopress/CHANGELOG.md +++ b/projects/packages/videopress/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.25.8] - 2025-01-27 +### Fixed +- VideoPress: Fix issue with VideoPress block with 0 height and width [#41319] + ## [0.25.7] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -1517,6 +1521,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Created empty package [#24952] +[0.25.8]: https://github.com/Automattic/jetpack-videopress/compare/v0.25.7...v0.25.8 [0.25.7]: https://github.com/Automattic/jetpack-videopress/compare/v0.25.6...v0.25.7 [0.25.6]: https://github.com/Automattic/jetpack-videopress/compare/v0.25.5...v0.25.6 [0.25.5]: https://github.com/Automattic/jetpack-videopress/compare/v0.25.4...v0.25.5 diff --git a/projects/packages/videopress/changelog/fix-videopress-block-classic-themes b/projects/packages/videopress/changelog/fix-videopress-block-classic-themes deleted file mode 100644 index 154c3dd749648..0000000000000 --- a/projects/packages/videopress/changelog/fix-videopress-block-classic-themes +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -VideoPress: Fix issue with VideoPress block with 0 height and width diff --git a/projects/packages/videopress/package.json b/projects/packages/videopress/package.json index cf03fb3ad28f5..3265c25493d52 100644 --- a/projects/packages/videopress/package.json +++ b/projects/packages/videopress/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-videopress", - "version": "0.25.7", + "version": "0.25.8", "description": "VideoPress package", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/videopress/#readme", "bugs": { diff --git a/projects/packages/videopress/src/class-package-version.php b/projects/packages/videopress/src/class-package-version.php index 2dc0c60e61184..92d353f8e1802 100644 --- a/projects/packages/videopress/src/class-package-version.php +++ b/projects/packages/videopress/src/class-package-version.php @@ -11,7 +11,7 @@ * The Package_Version class. */ class Package_Version { - const PACKAGE_VERSION = '0.25.7'; + const PACKAGE_VERSION = '0.25.8'; const PACKAGE_SLUG = 'videopress'; diff --git a/projects/plugins/jetpack/CHANGELOG.md b/projects/plugins/jetpack/CHANGELOG.md index 534c1fa2ad32f..00c73bb3bf771 100644 --- a/projects/plugins/jetpack/CHANGELOG.md +++ b/projects/plugins/jetpack/CHANGELOG.md @@ -2,6 +2,27 @@ ### This is a list detailing changes for all Jetpack releases. +## 14.3-a.5 - 2025-01-27 +### Enhancements +- Forms: Add Checkbox and Consent field enter action to create a new block. [#41297] + +### Bug fixes +- Forms: Make the icons show up as expected in the style editor. [#41314] +- Sitemaps: Ensure a valid news sitemap is present even if no posts are eligible. [#40893] +- Social: Fix profile links for LinkedIn connections. [#40873] +- Social: Fix Publicize error in the editor due to malformed connections data. [#40679] +- VideoPress: Fix issue with VideoPress block with zero height and width. [#41319] + +### Other changes +- Comments API: Add wpcom_id and wpcom_login fields to comment author responses when requested via author_wpcom_data parameter. [#41254] +- Forms: Fix default editor stying for textarea. [#41229] +- Forms: Remove wrapping
      element from form block. [#41274] +- General: Fix the rendering of Jetpack Google Fonts font faces for classic themes. [#41190] +- General: Deprecate Jetpack geo location module. [#41193] +- Jetpack AI: Use the PluginDocumentSettingPanel slotfill for compatibility with site and post editor in the Excerpt panel. [#41251] +- Jetpack button: Implement outline style. [#41194] +- Related Posts: Revert "Hide settings in block themes." [#41203] + ## 14.3-a.3 - 2025-01-20 ### Enhancements - Forms: Allow HTML block within forms. [#41040] diff --git a/projects/plugins/jetpack/changelog/add-comment-endpoint-wpcom-user-fields b/projects/plugins/jetpack/changelog/add-comment-endpoint-wpcom-user-fields deleted file mode 100644 index 56e3b470c7d40..0000000000000 --- a/projects/plugins/jetpack/changelog/add-comment-endpoint-wpcom-user-fields +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Comments API: Add wpcom_id and wpcom_login fields to comment author responses when requested via author_wpcom_data parameter. diff --git a/projects/plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut b/projects/plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut deleted file mode 100644 index e61241f9dddd2..0000000000000 --- a/projects/plugins/jetpack/changelog/add-phpcs-ignore-for-wpcut +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Add phpcs:ignore for wpcom. No changes to functionality. - - diff --git a/projects/plugins/jetpack/changelog/clean-extra-composer-things b/projects/plugins/jetpack/changelog/clean-extra-composer-things deleted file mode 100644 index 0246f2989b8fd..0000000000000 --- a/projects/plugins/jetpack/changelog/clean-extra-composer-things +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Only updated dev tools - - diff --git a/projects/plugins/jetpack/changelog/fix-bad-npm-package-names b/projects/plugins/jetpack/changelog/fix-bad-npm-package-names deleted file mode 100644 index aea5a62a1613d..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-bad-npm-package-names +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Remove unused "name" field from package.json. This is not published and is not the target of an intra-monorepo JS dependency. - - diff --git a/projects/plugins/jetpack/changelog/fix-bad-npm-package-names#2 b/projects/plugins/jetpack/changelog/fix-bad-npm-package-names#2 deleted file mode 100644 index 64df5e9573438..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-bad-npm-package-names#2 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Rename intra-monorepo `jetpack-e2e-commons` dep to `_jetpack-e2e-commons`, which cannot be published to npmjs.com. - - diff --git a/projects/plugins/jetpack/changelog/fix-cookie-consent-reg b/projects/plugins/jetpack/changelog/fix-cookie-consent-reg deleted file mode 100644 index 1ef8afea050a2..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-cookie-consent-reg +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - - diff --git a/projects/plugins/jetpack/changelog/fix-empty-news b/projects/plugins/jetpack/changelog/fix-empty-news deleted file mode 100644 index 2a7c16c64d28a..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-empty-news +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Sitemaps: ensures a valid news sitemap is present even if no posts are eligible. diff --git a/projects/plugins/jetpack/changelog/fix-form-radio-button-missing-div b/projects/plugins/jetpack/changelog/fix-form-radio-button-missing-div deleted file mode 100644 index e28a76958ead5..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-form-radio-button-missing-div +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: bugfix -Comment: Seems like a minor bug fix - - diff --git a/projects/plugins/jetpack/changelog/fix-form-submit-button-outline b/projects/plugins/jetpack/changelog/fix-form-submit-button-outline deleted file mode 100644 index 57b3002471771..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-form-submit-button-outline +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Jetpack button: implement outline style diff --git a/projects/plugins/jetpack/changelog/fix-form-textarea-default-border-stylinig b/projects/plugins/jetpack/changelog/fix-form-textarea-default-border-stylinig deleted file mode 100644 index d7c3a3acbc3c5..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-form-textarea-default-border-stylinig +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Forms: fixed default editor stying for textarea diff --git a/projects/plugins/jetpack/changelog/fix-forms-checkbox-enter-new-block b/projects/plugins/jetpack/changelog/fix-forms-checkbox-enter-new-block deleted file mode 100644 index a2ed2682d4ea1..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-forms-checkbox-enter-new-block +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: enhancement - -Forms: Add Checkbox and Consent field enter action to create a new block diff --git a/projects/plugins/jetpack/changelog/fix-icon-in-site-editor b/projects/plugins/jetpack/changelog/fix-icon-in-site-editor deleted file mode 100644 index 87326664b1de1..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-icon-in-site-editor +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Make the icons show up as expected in the style editor diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-ai-excerpt-site-editor b/projects/plugins/jetpack/changelog/fix-jetpack-ai-excerpt-site-editor deleted file mode 100644 index 923bc46e99287..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-jetpack-ai-excerpt-site-editor +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Jetpack AI: excerpt panel now uses PluginDocumentSettingPanel slotfill for compatibility with site and post editor diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-google-fonts-in-classic-themes b/projects/plugins/jetpack/changelog/fix-jetpack-google-fonts-in-classic-themes deleted file mode 100644 index 0a2c259a241f1..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-jetpack-google-fonts-in-classic-themes +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Fix the rendering of jetpack google fonts font faces for classic themes. diff --git a/projects/plugins/jetpack/changelog/fix-publicize-php-unit-tests b/projects/plugins/jetpack/changelog/fix-publicize-php-unit-tests deleted file mode 100644 index 62ae61fa5fb9f..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-publicize-php-unit-tests +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Fixed Publicize unit tests - - diff --git a/projects/plugins/jetpack/changelog/fix-publicize-unit-tests-again b/projects/plugins/jetpack/changelog/fix-publicize-unit-tests-again deleted file mode 100644 index c8f7896ae00a9..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-publicize-unit-tests-again +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Fixed publicize unit test - - diff --git a/projects/plugins/jetpack/changelog/fix-social-connections-list-feature-check b/projects/plugins/jetpack/changelog/fix-social-connections-list-feature-check deleted file mode 100644 index 76c3a4215d02f..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-social-connections-list-feature-check +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Social | Fix publicize error in the editor due to malformed connections data diff --git a/projects/plugins/jetpack/changelog/fix-social-linkedin-profile-links b/projects/plugins/jetpack/changelog/fix-social-linkedin-profile-links deleted file mode 100644 index 06f9ff81b9f67..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-social-linkedin-profile-links +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Social: Fix profile links for LinkedIn connections diff --git a/projects/plugins/jetpack/changelog/fix-videopress-block-classic-themes b/projects/plugins/jetpack/changelog/fix-videopress-block-classic-themes deleted file mode 100644 index a47d497c95f7d..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-videopress-block-classic-themes +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -VideoPress: Fix issue with VideoPress block with 0 height and width diff --git a/projects/plugins/jetpack/changelog/remove-contact-form-hocs b/projects/plugins/jetpack/changelog/remove-contact-form-hocs deleted file mode 100644 index 3566d3d26c790..0000000000000 --- a/projects/plugins/jetpack/changelog/remove-contact-form-hocs +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Forms: Remove wrapping
      element from form block. diff --git a/projects/plugins/jetpack/changelog/remove-remove-jetpack-geo-location-2 b/projects/plugins/jetpack/changelog/remove-remove-jetpack-geo-location-2 deleted file mode 100644 index 7ad726083cde6..0000000000000 --- a/projects/plugins/jetpack/changelog/remove-remove-jetpack-geo-location-2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Deprecate Jetpack geo location module diff --git a/projects/plugins/jetpack/changelog/revert-41075-update-related-posts-block-theme b/projects/plugins/jetpack/changelog/revert-41075-update-related-posts-block-theme deleted file mode 100644 index 842a45c767d72..0000000000000 --- a/projects/plugins/jetpack/changelog/revert-41075-update-related-posts-block-theme +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Revert "Related Posts: Hide settings in block themes" diff --git a/projects/plugins/jetpack/changelog/update-forms-unique-id b/projects/plugins/jetpack/changelog/update-forms-unique-id deleted file mode 100644 index b9412e76b338b..0000000000000 --- a/projects/plugins/jetpack/changelog/update-forms-unique-id +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: bugfix -Comment: Forms: Add unique ids to each form - - diff --git a/projects/plugins/jetpack/composer.json b/projects/plugins/jetpack/composer.json index 7092b747b3737..46a456adaf195 100644 --- a/projects/plugins/jetpack/composer.json +++ b/projects/plugins/jetpack/composer.json @@ -106,7 +106,7 @@ "platform": { "ext-intl": "0.0.0" }, - "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3_a_3", + "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3_a_5", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index 2bf1832949535..931fbc89862b2 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -1696,7 +1696,7 @@ "dist": { "type": "path", "url": "../../packages/masterbar", - "reference": "9587aa811998a8a174ddae723de91faa7e179f93" + "reference": "1a08129a72ad4ad0483881bd8fc7b2a5376d9a3b" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1725,7 +1725,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.11.x-dev" + "dev-trunk": "0.12.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-masterbar/compare/v${old}...v${new}" diff --git a/projects/plugins/jetpack/jetpack.php b/projects/plugins/jetpack/jetpack.php index 095e97494f88a..8ea34457295d0 100644 --- a/projects/plugins/jetpack/jetpack.php +++ b/projects/plugins/jetpack/jetpack.php @@ -4,7 +4,7 @@ * Plugin URI: https://jetpack.com * Description: Security, performance, and marketing tools made by WordPress experts. Jetpack keeps your site protected so you can focus on more important things. * Author: Automattic - * Version: 14.3-a.3 + * Version: 14.3-a.5 * Author URI: https://jetpack.com * License: GPL2+ * Text Domain: jetpack @@ -34,7 +34,7 @@ define( 'JETPACK__MINIMUM_WP_VERSION', '6.6' ); define( 'JETPACK__MINIMUM_PHP_VERSION', '7.2' ); -define( 'JETPACK__VERSION', '14.3-a.3' ); +define( 'JETPACK__VERSION', '14.3-a.5' ); /** * Constant used to fetch the connection owner token diff --git a/projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php b/projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php index 450edb92ee352..5552ce54c5250 100644 --- a/projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php +++ b/projects/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php @@ -63,7 +63,7 @@ public function __construct() { public function wordpress_init() { // Only render location label after post content, if the theme claims to support "geo-location". if ( current_theme_supports( 'jetpack-geo-location' ) ) { - _deprecated_class( 'Jetpack_Geo_Location', '$$next-version$$', '' ); + _deprecated_class( 'Jetpack_Geo_Location', '14.3', '' ); } } } diff --git a/projects/plugins/jetpack/readme.txt b/projects/plugins/jetpack/readme.txt index 705a43e725a2b..7b698af14a10a 100644 --- a/projects/plugins/jetpack/readme.txt +++ b/projects/plugins/jetpack/readme.txt @@ -326,17 +326,16 @@ Jetpack Backup can do a full website migration to a new host, migrate theme file == Changelog == -### 14.3-a.3 - 2025-01-20 +### 14.3-a.5 - 2025-01-27 #### Enhancements -- Forms: Allow HTML block within forms. -- Show Infinite Scroll options in Simple Classic. +- Forms: Add Checkbox and Consent field enter action to create a new block. #### Bug fixes -- Fix: Newsletter toggle in editor sidebar has a visually broken active state. -- Forms: Fix dropdown icon style. -- Photon: Fix double encoding image urls. -- Sharing: Fix the location of the sharing dialog so it is not always the first sharing element on the page. -- Social: Fix wordpress.com login error when connecting Social accounts. +- Forms: Make the icons show up as expected in the style editor. +- Sitemaps: Ensure a valid news sitemap is present even if no posts are eligible. +- Social: Fix profile links for LinkedIn connections. +- Social: Fix Publicize error in the editor due to malformed connections data. +- VideoPress: Fix issue with VideoPress block with zero height and width. -------- diff --git a/projects/plugins/jetpack/changelog/prerelease#2 b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#4 similarity index 79% rename from projects/plugins/jetpack/changelog/prerelease#2 rename to projects/plugins/mu-wpcom-plugin/changelog/prerelease#4 index a1c1831fa1ef7..9aa70e3ec1f75 100644 --- a/projects/plugins/jetpack/changelog/prerelease#2 +++ b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#4 @@ -1,5 +1,5 @@ Significance: patch -Type: other +Type: changed Comment: Updated composer.lock. diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index 5809ffd01bef4..4d6ef09c78296 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -1024,7 +1024,7 @@ "dist": { "type": "path", "url": "../../packages/masterbar", - "reference": "9587aa811998a8a174ddae723de91faa7e179f93" + "reference": "1a08129a72ad4ad0483881bd8fc7b2a5376d9a3b" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1053,7 +1053,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.11.x-dev" + "dev-trunk": "0.12.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-masterbar/compare/v${old}...v${new}" diff --git a/projects/plugins/jetpack/changelog/prerelease b/projects/plugins/wpcomsh/changelog/prerelease#10 similarity index 79% rename from projects/plugins/jetpack/changelog/prerelease rename to projects/plugins/wpcomsh/changelog/prerelease#10 index a1c1831fa1ef7..9aa70e3ec1f75 100644 --- a/projects/plugins/jetpack/changelog/prerelease +++ b/projects/plugins/wpcomsh/changelog/prerelease#10 @@ -1,5 +1,5 @@ Significance: patch -Type: other +Type: changed Comment: Updated composer.lock. diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index bdef3c1de7ae1..1b73f1ccae51c 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -1161,7 +1161,7 @@ "dist": { "type": "path", "url": "../../packages/masterbar", - "reference": "9587aa811998a8a174ddae723de91faa7e179f93" + "reference": "1a08129a72ad4ad0483881bd8fc7b2a5376d9a3b" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1190,7 +1190,7 @@ "extra": { "autotagger": true, "branch-alias": { - "dev-trunk": "0.11.x-dev" + "dev-trunk": "0.12.x-dev" }, "changelogger": { "link-template": "https://github.com/Automattic/jetpack-masterbar/compare/v${old}...v${new}" From 8656e93c78425038978ecd916b353ec637746171 Mon Sep 17 00:00:00 2001 From: Ella <4710635+ellatrix@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:28:44 +0100 Subject: [PATCH 217/420] MU WPCOM: dashboard: add site links/preview (#41106) --- .../changelog/add-site-widget | 4 ++ .../wpcom-dashboard-widgets.js | 2 +- .../wpcom-dashboard-widgets.php | 16 +++-- .../wpcom-site-management-widget/index.js | 71 ++++++------------- .../wpcom-site-management-widget/style.scss | 66 +++++++---------- .../mu-wpcom-plugin/changelog/add-site-widget | 4 ++ .../plugins/wpcomsh/changelog/add-site-widget | 4 ++ 7 files changed, 71 insertions(+), 96 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-site-widget create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/add-site-widget create mode 100644 projects/plugins/wpcomsh/changelog/add-site-widget diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-site-widget b/projects/packages/jetpack-mu-wpcom/changelog/add-site-widget new file mode 100644 index 0000000000000..db8bc5eafa54e --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-site-widget @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Dashboard: add site preview and links diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.js index 1ffa9c2b60021..edff5261e836b 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.js @@ -7,7 +7,7 @@ const data = typeof window === 'object' ? window.JETPACK_MU_WPCOM_DASHBOARD_WIDG const widgets = [ { - id: 'wpcom_site_management_widget_main', + id: 'wpcom_site_preview_widget_main', Widget: WpcomSiteManagementWidget, }, ]; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php index 5312a26f24cde..22f7d2a982cb1 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php @@ -17,8 +17,9 @@ function load_wpcom_dashboard_widgets() { $wpcom_dashboard_widgets = array( array( - 'id' => 'wpcom_site_management_widget', - 'name' => __( 'Site Management Panel', 'jetpack-mu-wpcom' ), + 'id' => 'wpcom_site_preview_widget', + 'name' => __( 'Site', 'jetpack-mu-wpcom' ), + 'context' => 'side', 'priority' => 'high', ), ); @@ -33,7 +34,7 @@ function () {}, 'id' => $wpcom_dashboard_widget['id'], 'name' => $wpcom_dashboard_widget['name'], ), - 'normal', + $wpcom_dashboard_widget['context'], $wpcom_dashboard_widget['priority'] ); } @@ -48,9 +49,10 @@ function enqueue_wpcom_dashboard_widgets() { $data = wp_json_encode( array( - 'siteName' => wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ), - 'siteDomain' => wp_parse_url( home_url(), PHP_URL_HOST ), - 'siteIconUrl' => get_site_icon_url( 38 ), + 'siteName' => wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ), + 'siteUrl' => home_url(), + 'siteIconUrl' => get_site_icon_url( 38 ), + 'isBlockTheme' => wp_is_block_theme(), ) ); @@ -80,7 +82,7 @@ function render_wpcom_dashboard_widget( $post, $callback_args ) { ); ?> -
      +
      diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/index.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/index.js index e7a8363f85897..afbf19d1f8a83 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/index.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/index.js @@ -2,32 +2,20 @@ import { __ } from '@wordpress/i18n'; import React from 'react'; import './style.scss'; -const WpcomSiteManagementWidget = ( { siteName, siteDomain, siteIconUrl } ) => { - const devToolItems = [ - { - name: __( 'Deployments', 'jetpack-mu-wpcom' ), - href: `/github-deployments/${ siteDomain }`, - }, - { - name: __( 'Monitoring', 'jetpack-mu-wpcom' ), - href: `/site-monitoring/${ siteDomain }`, - }, - { - name: __( 'Logs', 'jetpack-mu-wpcom' ), - href: `/site-logs/${ siteDomain }/php`, - }, - { - name: __( 'Staging Site', 'jetpack-mu-wpcom' ), - href: `/staging-site/${ siteDomain }`, - }, - { - name: __( 'Server Settings', 'jetpack-mu-wpcom' ), - href: `/hosting-config/${ siteDomain }`, - }, - ]; - +const WpcomSiteManagementWidget = ( { siteName, siteUrl, siteIconUrl, isBlockTheme } ) => { + const siteDomain = new URL( siteUrl ).hostname; return ( <> +
      +
      + +
      +
      { @@ -41,34 +29,19 @@ const WpcomSiteManagementWidget = ( { siteName, siteDomain, siteIconUrl } ) => {
      { siteName }
      -
      { siteDomain }
      +
      -
      -
      -

      - { __( - 'Get a quick overview of your plans, storage, and domains, or easily access your development tools using the links provided below:', - 'jetpack-mu-wpcom' - ) } -

      -
      -
      - { __( 'DEV TOOLS:', 'jetpack-mu-wpcom' ) } -
      -
      - -
      + { isBlockTheme ? ( + + { __( 'Edit Site', 'jetpack-mu-wpcom' ) } + + ) : null }
      diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/style.scss index 2bd4bd4577d90..f7ac7b2e60d62 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/style.scss +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/style.scss @@ -1,4 +1,4 @@ -#wpcom_site_management_widget { +#wpcom_site_preview_widget { color: #1e1e1e; .postbox-title-action { @@ -6,7 +6,30 @@ } } -#wpcom_site_management_widget_main { +#wpcom_site_preview_widget_main { + .wpcom_site_preview_wrapper { + background: #f0f0f1; + margin-bottom: 12px; + padding: 12px 12px 0; + } + + .wpcom_site_preview { + display: block; + max-width: 425px; + height: 200px; + overflow: hidden; + margin: 0 auto; + + iframe { + max-width: 250%; + min-height: 375%; + transform: scale(.4); + transform-origin: top left; + translate: 0 -13px; + width: 250%; + } + } + .wpcom_site_management_widget__header { display: flex; align-items: center; @@ -60,42 +83,7 @@ .wpcom_site_management_widget__site-actions { flex-shrink: 0; - } - - .wpcom_site_management_widget__content p { - margin: 12px 0; - font-size: 13px; - font-weight: 400; - line-height: 18px; - } - - .wpcom_site_management_widget__dev-tools-title { - margin-bottom: 12px; - font-size: 11px; - font-weight: 600; - line-height: 16px; - text-transform: uppercase; - } - - .wpcom_site_management_widget__dev-tools-content { - ul { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 12px; - margin-bottom: 0; - list-style: disc inside; - } - - li { - margin: 0 8px; - color: #0073aa; - font-size: 13px; - font-weight: 400; - line-height: 18px; - - &::marker { - margin-inline-end: 2px; - } - } + display: flex; + gap: 12px; } } diff --git a/projects/plugins/mu-wpcom-plugin/changelog/add-site-widget b/projects/plugins/mu-wpcom-plugin/changelog/add-site-widget new file mode 100644 index 0000000000000..db8bc5eafa54e --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/add-site-widget @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Dashboard: add site preview and links diff --git a/projects/plugins/wpcomsh/changelog/add-site-widget b/projects/plugins/wpcomsh/changelog/add-site-widget new file mode 100644 index 0000000000000..db8bc5eafa54e --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/add-site-widget @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Dashboard: add site preview and links From 8e0cd5124b5e18f03b938ca1d55cb367e0386b8e Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Mon, 27 Jan 2025 10:42:58 -0300 Subject: [PATCH 218/420] Jetpack SEO: change assistant wizard mechanics (#41268) * change assistant wizard mechanics so steps are rendered up until currentstep * changelog * fix infinite render issue, tweak styles a bit to make room for inputs even when they're not there yet * remove turning options into messasges * fix some spacing on the messages * add autoAdvance option for welcome step * add timings and autoadvance on welcome step * create jumpToStep and handleSelect to control over step handlers * add editLastMessage for better control on step messages * try to keep a better flow on meta step with editLastMessage * refactor css classnames for a more generic approach * add enter key handler on text input --- ...nge-jetpack-seo-assistant-wizard-mechanics | 4 + .../seo-assistant/assistant-wizard.tsx | 175 +++++++++++++ .../components/seo-assistant/index.tsx | 15 +- .../seo-assistant/seo-assistant-wizard.tsx | 231 ++++++------------ .../components/seo-assistant/style.scss | 36 ++- .../components/seo-assistant/types.tsx | 30 +-- .../seo-assistant/use-completion-step.tsx | 49 ---- .../seo-assistant/use-keywords-step.tsx | 92 ++++--- .../use-meta-description-step.tsx | 63 ++--- .../seo-assistant/use-title-step.tsx | 96 ++------ .../components/seo-assistant/wizard-input.tsx | 90 +++---- .../seo-assistant/wizard-messages.tsx | 103 ++++++-- .../components/seo-assistant/wizard-step.tsx | 25 ++ 13 files changed, 549 insertions(+), 460 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-wizard-mechanics create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx delete mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-wizard-mechanics b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-wizard-mechanics new file mode 100644 index 0000000000000..031857263b525 --- /dev/null +++ b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-wizard-mechanics @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Jetpack SEO: assistant wizard changes to achieve desired step flow diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx new file mode 100644 index 0000000000000..5e8254095acd1 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx @@ -0,0 +1,175 @@ +import { Button, Icon, Tooltip } from '@wordpress/components'; +import { useState, useEffect, useRef, useMemo, useCallback } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import { next, closeSmall, chevronLeft } from '@wordpress/icons'; +import debugFactory from 'debug'; +import { useKeywordsStep } from './use-keywords-step'; +import { useMetaDescriptionStep } from './use-meta-description-step'; +import { useTitleStep } from './use-title-step'; +import { OptionsInput, TextInput, CompletionInput } from './wizard-input'; +import WizardStep from './wizard-step'; +import type { Step, Option } from './types'; + +const debug = debugFactory( 'jetpack-seo:assistant-wizard' ); + +export default function AssistantWizard( { close, tasks } ) { + const [ currentStep, setCurrentStep ] = useState( 0 ); + const [ currentStepData, setCurrentStepData ] = useState< Step >(); + const [ isBusy ] = useState( false ); + const stepsEndRef = useRef( null ); + const scrollToBottom = () => { + stepsEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); + }; + const keywordsInputRef = useRef( null ); + + useEffect( () => { + scrollToBottom(); + }, [ currentStep ] ); + + // Keywords + const keywordsStepData = useKeywordsStep(); + const titleStepData = useTitleStep(); + const metaStepData = useMetaDescriptionStep(); + + // Memoize steps array to prevent unnecessary recreations + const steps = useMemo( + () => [ tasks[ 0 ], keywordsStepData, titleStepData, metaStepData, tasks[ 1 ] ], + [ tasks, keywordsStepData, titleStepData, metaStepData ] + ); + + const handleNext = useCallback( () => { + if ( currentStep + 1 < steps.length ) { + debug( 'moving to ' + ( currentStep + 1 ) ); + setCurrentStep( currentStep + 1 ); + setCurrentStepData( steps[ currentStep + 1 ] ); + steps[ currentStep + 1 ].onStart?.(); + } + }, [ currentStep, steps ] ); + + const handleStepSubmit = useCallback( async () => { + await steps[ currentStep ]?.onSubmit?.(); + debug( 'step submitted, moving next' ); + // always give half a second before moving forward + setTimeout( handleNext, 500 ); + }, [ currentStep, handleNext, steps ] ); + + const jumpToStep = useCallback( + stepNumber => { + if ( stepNumber < steps.length - 1 ) { + setCurrentStep( stepNumber ); + setCurrentStepData( stepNumber ); + } + }, + [ steps ] + ); + + const handleSelect = useCallback( + ( stepNumber: number, option: Option ) => { + if ( stepNumber !== currentStep ) { + jumpToStep( stepNumber ); + } + steps[ stepNumber ].onSelect?.( option ); + }, + [ currentStep, jumpToStep, steps ] + ); + + // Initialize current step data + useEffect( () => { + if ( currentStep === 0 ) { + setCurrentStepData( steps[ 0 ] ); + if ( steps[ 0 ].autoAdvance ) { + setTimeout( handleNext, steps[ 0 ].autoAdvance ); + } + } + }, [ currentStep, steps, handleNext ] ); + + const handleBack = () => { + if ( currentStep > 1 ) { + debug( 'moving to ' + ( currentStep - 1 ) ); + setCurrentStep( currentStep - 1 ); + setCurrentStepData( steps[ currentStep - 1 ] ); + } + }; + + const handleSkip = async () => { + await currentStepData?.onSkip?.(); + handleNext(); + }; + + // Reset states and close the wizard + const handleDone = () => { + close(); + setCurrentStep( 0 ); + setCurrentStepData( steps[ 0 ] ); + }; + + return ( +
      +
      + +

      { currentStepData?.title }

      +
      + + + + +
      +
      + +
      + { steps.map( ( step, index ) => ( + = index } + options={ step.options || [] } + onSelect={ option => handleSelect( index, option ) } + /> + ) ) } +
      +
      + +
      + { currentStep === 1 && ( + + ) } + { currentStep === 2 && ( + + ) } + { currentStep === 3 && ( + + ) } + { currentStep === steps.length - 1 && ( + + ) } +
      +
      + ); +} diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/index.tsx index 167dfa8d948c0..26ceb1e28adb9 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/index.tsx @@ -2,37 +2,38 @@ import { useModuleStatus } from '@automattic/jetpack-shared-extension-utils'; import { Button } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; import { store as editorStore } from '@wordpress/editor'; -import { useState } from '@wordpress/element'; +import { useState, useCallback } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import debugFactory from 'debug'; import { SeoPlaceholder } from '../../../../plugins/seo/components/placeholder'; import './style.scss'; import bigSkyIcon from './big-sky-icon.svg'; import SeoAssistantWizard from './seo-assistant-wizard'; -import type { SeoAssistantProps } from './types'; const debug = debugFactory( 'jetpack-ai:seo-assistant' ); -export default function SeoAssistant( { disabled, onStep }: SeoAssistantProps ) { +export default function SeoAssistant( { disabled } ) { const [ isOpen, setIsOpen ] = useState( false ); const postIsEmpty = useSelect( select => select( editorStore ).isEditedPostEmpty(), [] ); const { isLoadingModules, isChangingStatus, isModuleActive, changeStatus } = useModuleStatus( 'seo-tools' ); + const handleOpen = useCallback( () => setIsOpen( true ), [] ); + const handleClose = useCallback( () => setIsOpen( false ), [] ); + debug( 'rendering seo-assistant entry point' ); return (

      { __( 'Improve post engagement.', 'jetpack' ) }

      { ( isModuleActive || isLoadingModules ) && ( ) } { ! isModuleActive && ! isLoadingModules && ( @@ -42,7 +43,7 @@ export default function SeoAssistant( { disabled, onStep }: SeoAssistantProps ) changeStatus={ changeStatus } /> ) } - setIsOpen( false ) } /> + { isOpen && }
      ); } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx index 4fd874e0f2c16..641e2cda5d452 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx @@ -1,167 +1,82 @@ -import { Button, Icon, Tooltip } from '@wordpress/components'; -import { useState, useCallback, useEffect, useRef, useMemo } from '@wordpress/element'; +import { createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import { next, closeSmall, chevronLeft } from '@wordpress/icons'; import debugFactory from 'debug'; import './style.scss'; -import { useCompletionStep } from './use-completion-step'; -import { useKeywordsStep } from './use-keywords-step'; -import { useMetaDescriptionStep } from './use-meta-description-step'; -import { useTitleStep } from './use-title-step'; -import WizardInput from './wizard-input'; -import WizardMessages from './wizard-messages'; -import type { SeoAssistantProps, Step, Message } from './types'; +import AssistantWizard from './assistant-wizard'; const debug = debugFactory( 'jetpack-ai:seo-assistant-wizard' ); -export default function SeoAssistantWizard( { isOpen, close, onStep }: SeoAssistantProps ) { - const [ currentStep, setCurrentStep ] = useState( 0 ); - const [ messages, setMessages ] = useState< Message[] >( [] ); - const messagesEndRef = useRef< HTMLDivElement >( null ); - const [ isBusy, setIsBusy ] = useState( false ); - - const scrollToBottom = () => { - messagesEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); - }; - - useEffect( () => { - scrollToBottom(); - }, [ messages ] ); - - const addMessage = useCallback( async ( message: Message ) => { - const newMessage = { - ...message, - showIcon: message.showIcon === false ? false : ! message.isUser, - } as Message; - - setMessages( prev => [ ...prev, { ...newMessage, id: `message-${ prev.length }` } ] ); - }, [] ); - - /* Removes last message */ - const removeLastMessage = () => { - setMessages( prev => prev.slice( 0, -1 ) ); - }; - - const keywordsStep: Step = useKeywordsStep( { - addMessage, - onStep, - } ); - - const titleStep: Step = useTitleStep( { - addMessage, - removeLastMessage, - onStep, - contextData: keywordsStep.value, - setIsBusy, - } ); - - const metaStep: Step = useMetaDescriptionStep( { - addMessage, - removeLastMessage, - onStep, - setIsBusy, - } ); - - const completionStep: Step = useCompletionStep( { - steps: [ keywordsStep, titleStep, metaStep ], - addMessage, - } ); - - const steps: Step[] = useMemo( - () => [ keywordsStep, titleStep, metaStep, completionStep ], - [ keywordsStep, metaStep, titleStep, completionStep ] - ); - - const currentStepData = useMemo( () => steps[ currentStep ], [ steps, currentStep ] ); - - // initialize wizard, set completion monitors - useEffect( () => { - if ( ! isOpen ) { - return; - } - // add messageQueue.length check here for delayed messages - if ( messages.length === 0 ) { - debug( 'init' ); - // Initialize with first step messages - currentStepData.messages.forEach( addMessage ); - } - }, [ isOpen, currentStepData.messages, messages, addMessage ] ); - - const handleNext = useCallback( () => { - if ( currentStep < steps.length - 1 ) { - debug( 'moving to ' + ( currentStep + 1 ), steps[ currentStep + 1 ] ); - setCurrentStep( currentStep + 1 ); - // Add next step messages - // TODO: can we capture completion step here and craft the messages? - // Nothing else has worked so far to keep track of step completions - steps[ currentStep + 1 ].messages.forEach( addMessage ); - steps[ currentStep + 1 ].onStart?.(); - } - }, [ currentStep, steps, setCurrentStep, addMessage ] ); - - const handleSubmit = useCallback( async () => { - await currentStepData.onSubmit?.(); - handleNext(); - }, [ currentStepData, handleNext ] ); - - const handleBack = () => { - if ( currentStep > 0 ) { - setCurrentStep( currentStep - 1 ); - // Re-add previous step messages - steps[ currentStep - 1 ].messages.forEach( message => - addMessage( { - content: message.content, - showIcon: message.showIcon, - } ) - ); - } - }; - - const handleSkip = async () => { - await currentStepData?.onSkip?.(); - handleNext(); - }; - - // Reset states and close the wizard - const handleDone = useCallback( () => { - close(); - setCurrentStep( 0 ); - setMessages( [] ); - steps - .filter( step => step.type !== 'completion' ) - .forEach( step => step.setCompleted( false ) ); - }, [ close, steps ] ); - +export default function SeoAssistantWizard( { close }: { close?: () => void } ) { + debug( 'render' ); return ( - isOpen && ( -
      -
      - -

      { currentStepData.title }

      -
      - - - - -
      -
      - -
      - - - -
      -
      - ) + Hi there! 👋 Let's optimise your blog post for SEO.", 'jetpack' ), + { b: } + ), + showIcon: true, + id: '1', + }, + { + content: createInterpolateElement( + __( + "Here's what we can improve:
      1. Keywords
      2. Title
      3. Meta description", + 'jetpack' + ), + { br:
      } + ), + showIcon: false, + id: '2', + }, + ], + }, + { + id: 'completion', + title: __( 'Your post is SEO-ready', 'jetpack' ), + label: 'completion', + type: 'completion', + submitCtaLabel: __( 'Done!', 'jetpack' ), + onSubmit: () => close(), + messages: [ + { + content: __( "Here's your updated checklist:", 'jetpack' ), + showIcon: true, + id: '1', + }, + { + content: 'some summary here!', + showIcon: false, + id: '2', + }, + { + content: createInterpolateElement( + __( + 'SEO optimization complete! 🎉
      Your blog post is now search-engine friendly.', + 'jetpack' + ), + { br:
      } + ), + showIcon: true, + id: '3', + }, + { + content: __( 'Happy blogging! 😊', 'jetpack' ), + showIcon: false, + id: '4', + }, + ], + }, + ] } + /> ); } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss index e541444b6a5e1..48038e9b2829a 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -1,4 +1,4 @@ -.seo-assistant-wizard { +.assistant-wizard { position: fixed; bottom: 32px; left: 50%; @@ -11,6 +11,10 @@ z-index: 1000; display: flex; flex-direction: column; + // countering the Jetpack sidebar ai-feature styles: + button { + width: unset; + } &__header { flex: 0 0 auto; @@ -54,7 +58,7 @@ display: flex; flex-direction: column; gap: 8px; - padding: 16px 24px; + padding: 8px 24px; overflow-y: auto; scroll-behavior: smooth; align-items: flex-start; @@ -69,9 +73,9 @@ line-height: 1.5; display: flex; align-items: center; - min-width: 48px; + min-width: 80%; - .seo-assistant-wizard__message-icon { + .assistant-wizard__message-icon { flex-shrink: 0; align-self: center; flex-basis: 26px; @@ -81,7 +85,7 @@ } } - .seo-assistant-wizard__message-text { + .assistant-wizard__message-text { padding: 4px 12px; // flex: 1 0 200px; } @@ -90,8 +94,9 @@ background: #f3f4f6; align-self: flex-end; max-width: 85%; + min-width: 15%; - .seo-assistant-wizard__message-icon { + .assistant-wizard__message-icon { display: none; } } @@ -103,6 +108,7 @@ background: white; border-radius: 0 0 16px 16px; border-top: 1px solid var( --jp-gray-5, #e5e7eb ); + flex-basis: 77px; // seems better than min-height } &__input { @@ -113,15 +119,24 @@ align-items: center; padding-right: 6px; height: 44px; + animation: assistantInputAppear 0.3s ease-out; &:focus-within { outline-width: 2px; outline-color: var( --wp-components-color-accent, var( --wp-admin-theme-color, #007cba ) ); } + + // keyboardshortcuts component wraps the base control with a div + // This is a quick fix to mimic the rule below (components-base-control) + & > div:first-child { + flex-grow: 1; + } + .components-base-control { flex-grow: 1; } + .components-text-control__input, .components-text-control__input:focus { padding: 8px; @@ -176,6 +191,7 @@ justify-content: flex-end; align-items: center; gap: 16px; + animation: assistantInputAppear 0.3s ease-out; .components-button { border-radius: 20px; @@ -202,6 +218,14 @@ transform: translateY(0); } } +@keyframes assistantInputAppear { + from { + opacity: 0; + } + to { + opacity: 1; + } +} // Keep this around for magic: @keyframes typing-blink { diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx index d14a0d2578d19..04d51db8ef9d1 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx @@ -1,4 +1,4 @@ -type StepType = 'input' | 'options' | 'completion'; +type StepType = 'welcome' | 'input' | 'options' | 'completion'; export interface Message { id?: string; @@ -19,20 +19,20 @@ interface BaseStep { id: string; title: string; label?: string; - messages: StepMessage[]; + messages: Message[]; type: StepType; onStart?: () => void; onSubmit?: () => void; onSkip?: () => void; - value: string; - setValue: + value?: string; + setValue?: | React.Dispatch< React.SetStateAction< string > > | React.Dispatch< React.SetStateAction< Array< string > > >; setCompleted?: React.Dispatch< React.SetStateAction< boolean > >; completed?: boolean; } -interface InputStep extends BaseStep { +export interface InputStep extends BaseStep { type: 'input'; placeholder: string; } @@ -43,29 +43,11 @@ interface OptionsStep extends BaseStep { onSelect: ( option: Option ) => void; submitCtaLabel?: string; onRetry?: () => void; - onRetryCtaLabel?: string; + retryCtaLabel?: string; } interface CompletionStep extends BaseStep { type: 'completion'; } -interface StepMessage { - content: string | React.ReactNode; - showIcon?: boolean; -} - export type Step = InputStep | OptionsStep | CompletionStep; - -export type CompletionStepHookProps = { - steps: Step[]; - addMessage?: ( message: Message | string ) => void; -}; - -export interface SeoAssistantProps { - isBusy?: boolean; - disabled?: boolean; - onStep?: ( data: { value: string | Option | null } ) => void; - isOpen?: boolean; - close?: () => void; -} diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx deleted file mode 100644 index a46bc41eadd5f..0000000000000 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { createInterpolateElement, useCallback } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; -import type { Step, CompletionStepHookProps } from './types'; - -export const useCompletionStep = ( { steps }: CompletionStepHookProps ): Step => { - const getSummaryCheck = useCallback( () => { - const summaryString = steps - .map( step => { - const stepLabel = step.label || step.title; - return step.completed ? `✅ ${ stepLabel }` : `❌ ${ stepLabel }`; - } ) - .join( '
      ' ); - return createInterpolateElement( summaryString, { br:
      } ); - }, [ steps ] ); - - return { - id: 'completion', - title: __( 'Your post is SEO-ready', 'jetpack' ), - // onStart: handleSummaryChecks, - messages: [ - { - content: __( "Here's your updated checklist:", 'jetpack' ), - showIcon: true, - }, - { - content: getSummaryCheck(), - showIcon: false, - }, - { - content: createInterpolateElement( - __( - 'SEO optimization complete! 🎉
      Your blog post is now search-engine friendly.', - 'jetpack' - ), - { br:
      } - ), - showIcon: true, - }, - { - content: __( 'Happy blogging! 😊', 'jetpack' ), - showIcon: false, - }, - ], - type: 'completion', - // onStart: handleStart, - value: null, - setValue: () => null, - }; -}; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx index ac811cd2546af..c8a3a1df9b2ed 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx @@ -1,36 +1,56 @@ -import { createInterpolateElement, useCallback, useState } from '@wordpress/element'; +import { createInterpolateElement, useCallback, useState, useEffect } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; -import type { Step } from './types'; +import TypingMessage from './typing-message'; +import { useMessages } from './wizard-messages'; +import type { InputStep } from './types'; -export const useKeywordsStep = ( { addMessage, onStep } ): Step => { +export const useKeywordsStep = (): InputStep => { const [ keywords, setKeywords ] = useState( '' ); const [ completed, setCompleted ] = useState( false ); + const { messages, setMessages, addMessage, removeLastMessage } = useMessages(); + + useEffect( () => { + setMessages( [ + { + content: __( + 'To start, please enter 1–3 focus keywords that describe your blog post.', + 'jetpack' + ), + showIcon: true, + }, + ] ); + }, [ setMessages ] ); const handleSkip = useCallback( () => { addMessage( { content: __( 'Skipped!', 'jetpack' ) } ); - if ( onStep ) { - onStep( { value: '' } ); - } - }, [ addMessage, onStep ] ); + }, [ addMessage ] ); - const handleKeywordsSubmit = useCallback( () => { + const handleKeywordsSubmit = useCallback( async () => { if ( ! keywords.trim() ) { return handleSkip(); } addMessage( { content: keywords, isUser: true } ); + addMessage( { content: } ); + + const keywordlist = await new Promise( resolve => + setTimeout( () => { + const commaSeparatedKeywords = keywords + .split( ',' ) + .map( k => k.trim() ) + .reduce( ( acc, curr, i, arr ) => { + if ( arr.length === 1 ) { + return curr; + } + if ( i === arr.length - 1 ) { + return `${ acc }
      & ${ curr }`; + } + return i === 0 ? curr : `${ acc }, ${ curr }`; + }, '' ); + resolve( commaSeparatedKeywords ); + }, 500 ) + ); + removeLastMessage(); - const keywordlist = keywords - .split( ',' ) - .map( k => k.trim() ) - .reduce( ( acc, curr, i, arr ) => { - if ( arr.length === 1 ) { - return curr; - } - if ( i === arr.length - 1 ) { - return `${ acc } & ${ curr }`; - } - return i === 0 ? curr : `${ acc }, ${ curr }`; - }, '' ); const message = createInterpolateElement( /* Translators: wrapped string is list of keywords user has entered */ sprintf( __( `Got it! You're targeting %s. ✨✅`, 'jetpack' ), keywordlist ), @@ -40,41 +60,13 @@ export const useKeywordsStep = ( { addMessage, onStep } ): Step => { ); addMessage( { content: message } ); setCompleted( true ); - if ( onStep ) { - onStep( { value: keywords } ); - } - }, [ onStep, addMessage, keywords, handleSkip ] ); + }, [ addMessage, keywords, handleSkip, removeLastMessage ] ); return { id: 'keywords', title: __( 'Optimise for SEO', 'jetpack' ), label: __( 'Keywords', 'jetpack' ), - messages: [ - { - content: createInterpolateElement( - __( "Hi there! 👋 Let's optimise your blog post for SEO.", 'jetpack' ), - { b: } - ), - showIcon: true, - }, - { - content: createInterpolateElement( - __( - "Here's what we can improve:
      1. Keywords
      2. Title
      3. Meta description", - 'jetpack' - ), - { br:
      } - ), - showIcon: false, - }, - { - content: __( - 'To start, please enter 1–3 focus keywords that describe your blog post.', - 'jetpack' - ), - showIcon: true, - }, - ], + messages, type: 'input', placeholder: __( 'Photography, plants', 'jetpack' ), onSubmit: handleKeywordsSubmit, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx index 5b4699fd95872..6ad5f60bc960f 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx @@ -1,20 +1,28 @@ import { useDispatch } from '@wordpress/data'; -import { useCallback, useState } from '@wordpress/element'; +import { useCallback, useState, useEffect, createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import TypingMessage from './typing-message'; +import { useMessages } from './wizard-messages'; import type { Step, Option } from './types'; -export const useMetaDescriptionStep = ( { - addMessage, - removeLastMessage, - onStep, - setIsBusy, -} ): Step => { +export const useMetaDescriptionStep = (): Step => { const [ selectedMetaDescription, setSelectedMetaDescription ] = useState< string >(); const [ metaDescriptionOptions, setMetaDescriptionOptions ] = useState< Option[] >( [] ); + const { messages, setMessages, addMessage, removeLastMessage, editLastMessage } = useMessages(); const { editPost } = useDispatch( 'core/editor' ); const [ completed, setCompleted ] = useState( false ); + useEffect( () => { + if ( messages.length === 0 ) { + setMessages( [ + { + content: __( "Now, let's optimize your meta description.", 'jetpack' ), + showIcon: true, + }, + ] ); + } + }, [ setMessages, messages ] ); + const handleMetaDescriptionSelect = useCallback( ( option: Option ) => { setSelectedMetaDescription( option.content ); setMetaDescriptionOptions( prev => @@ -29,16 +37,11 @@ export const useMetaDescriptionStep = ( { addMessage( { content: } ); await editPost( { meta: { advanced_seo_description: selectedMetaDescription } } ); removeLastMessage(); - addMessage( { content: selectedMetaDescription, isUser: true } ); addMessage( { content: __( 'Meta description updated! ✅', 'jetpack' ) } ); setCompleted( true ); - if ( onStep ) { - onStep( { value: selectedMetaDescription } ); - } - }, [ selectedMetaDescription, onStep, addMessage, editPost, removeLastMessage ] ); + }, [ selectedMetaDescription, addMessage, editPost, removeLastMessage ] ); const handleMetaDescriptionGenerate = useCallback( async () => { - setIsBusy( true ); let newMetaDescriptions; // we only generate if options are empty if ( metaDescriptionOptions.length === 0 ) { @@ -58,13 +61,18 @@ export const useMetaDescriptionStep = ( { ); removeLastMessage(); } - addMessage( { content: __( "Here's a suggestion:", 'jetpack' ) } ); + const editedFirstMessage = createInterpolateElement( + __( "Now, let's optimize your meta description.
      Here's a suggestion:", 'jetpack' ), + { br:
      } + ); + // addMessage( { content: __( "Here's a suggestion:", 'jetpack' ) } ); + editLastMessage( editedFirstMessage ); setMetaDescriptionOptions( newMetaDescriptions || metaDescriptionOptions ); - setIsBusy( false ); - }, [ metaDescriptionOptions, addMessage, removeLastMessage, setIsBusy ] ); + }, [ metaDescriptionOptions, addMessage, removeLastMessage, editLastMessage ] ); const handleMetaDescriptionRegenerate = useCallback( async () => { setMetaDescriptionOptions( [] ); + editLastMessage( __( "Now, let's optimize your meta description.", 'jetpack' ) ); addMessage( { content: } ); const newMetaDescription = await new Promise< Array< Option > >( resolve => setTimeout( @@ -80,33 +88,30 @@ export const useMetaDescriptionStep = ( { ) ); removeLastMessage(); - addMessage( { content: __( "Here's a new suggestion:", 'jetpack' ) } ); + // addMessage( { content: __( "Here's a new suggestion:", 'jetpack' ) } ); + const editedFirstMessage = createInterpolateElement( + __( "Now, let's optimize your meta description.
      Here's a new suggestion:", 'jetpack' ), + { br:
      } + ); + editLastMessage( editedFirstMessage ); setMetaDescriptionOptions( newMetaDescription ); - }, [ addMessage, removeLastMessage ] ); + }, [ addMessage, removeLastMessage, editLastMessage ] ); const handleSkip = useCallback( () => { addMessage( { content: __( 'Skipped!', 'jetpack' ) } ); - if ( onStep ) { - onStep(); - } - }, [ addMessage, onStep ] ); + }, [ addMessage ] ); return { id: 'meta', title: __( 'Add meta description', 'jetpack' ), - messages: [ - { - content: __( "Now, let's optimize your meta description.", 'jetpack' ), - showIcon: true, - }, - ], + messages: messages, type: 'options', options: metaDescriptionOptions, onSelect: handleMetaDescriptionSelect, onSubmit: handleMetaDescriptionSubmit, submitCtaLabel: __( 'Insert', 'jetpack' ), onRetry: handleMetaDescriptionRegenerate, - onRetryCtaLabel: __( 'Regenerate', 'jetpack' ), + retryCtaLabel: __( 'Regenerate', 'jetpack' ), onStart: handleMetaDescriptionGenerate, onSkip: handleSkip, value: selectedMetaDescription, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx index 0153dab8dfaab..1ced6c572c62f 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx @@ -2,18 +2,14 @@ import { useDispatch } from '@wordpress/data'; import { useCallback, useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import TypingMessage from './typing-message'; +import { useMessages } from './wizard-messages'; import type { Step, Option } from './types'; -export const useTitleStep = ( { - addMessage, - removeLastMessage, - onStep, - contextData, - setIsBusy, -} ): Step => { +export const useTitleStep = (): Step => { const [ selectedTitle, setSelectedTitle ] = useState< string >(); const [ titleOptions, setTitleOptions ] = useState< Option[] >( [] ); const { editPost } = useDispatch( 'core/editor' ); + const { messages, setMessages, addMessage, removeLastMessage } = useMessages(); const [ completed, setCompleted ] = useState( false ); const handleTitleSelect = useCallback( ( option: Option ) => { @@ -26,10 +22,16 @@ export const useTitleStep = ( { ); }, [] ); - useEffect( () => setTitleOptions( [] ), [ contextData ] ); + useEffect( () => { + setMessages( [ + { + content: __( "Let's optimise your title.", 'jetpack' ), + showIcon: true, + }, + ] ); + }, [ setMessages ] ); const handleTitleGenerate = useCallback( async () => { - setIsBusy( true ); let newTitles; // we only generate if options are empty if ( titleOptions.length === 0 ) { @@ -53,43 +55,18 @@ export const useTitleStep = ( { ); removeLastMessage(); } - if ( contextData ) { - addMessage( { - content: __( - 'Here are two suggestions based on your keywords. Select the one you prefer:', - 'jetpack' - ), - } ); - } else { - addMessage( { - content: __( 'Here are two suggestions. Select the one you prefer:', 'jetpack' ), - } ); - } - setTitleOptions( newTitles || titleOptions ); - setIsBusy( false ); - }, [ titleOptions, addMessage, removeLastMessage, contextData, setIsBusy ] ); - - const replaceOptionsWithFauxUseMessages = useCallback( () => { - const optionsMessage = { - id: 'title-options-' + Math.random(), - content: '', - type: 'past-options', - options: [], - showIcon: false, - }; - // removeLastMessage(); - titleOptions.forEach( titleOption => { - optionsMessage.options.push( { ...titleOption } ); + addMessage( { + content: __( + 'Here are two suggestions based on your keywords. Select the one you prefer:', + 'jetpack' + ), } ); - addMessage( optionsMessage ); - }, [ titleOptions, addMessage ] ); + setTitleOptions( newTitles || titleOptions ); + }, [ titleOptions, addMessage, removeLastMessage ] ); const handleTitleRegenerate = useCallback( async () => { - // let the controller know we're working - setIsBusy( true ); - // This would typically be an async call to generate new titles - replaceOptionsWithFauxUseMessages(); + // replaceOptionsWithFauxUseMessages(); setTitleOptions( [] ); addMessage( { content: } ); const newTitles = await new Promise< Array< Option > >( resolve => @@ -117,54 +94,31 @@ export const useTitleStep = ( { ), } ); setTitleOptions( newTitles ); - setIsBusy( false ); - }, [ addMessage, removeLastMessage, replaceOptionsWithFauxUseMessages, setIsBusy ] ); + }, [ addMessage, removeLastMessage ] ); const handleTitleSubmit = useCallback( async () => { - replaceOptionsWithFauxUseMessages(); addMessage( { content: } ); await editPost( { title: selectedTitle, meta: { jetpack_seo_html_title: selectedTitle } } ); removeLastMessage(); addMessage( { content: __( 'Title updated! ✅', 'jetpack' ) } ); setCompleted( true ); - if ( onStep ) { - onStep( { value: selectedTitle } ); - } - }, [ - selectedTitle, - onStep, - addMessage, - replaceOptionsWithFauxUseMessages, - editPost, - removeLastMessage, - ] ); + }, [ selectedTitle, addMessage, editPost, removeLastMessage ] ); const handleSkip = useCallback( () => { - if ( titleOptions.length ) { - replaceOptionsWithFauxUseMessages(); - } - addMessage( __( 'Skipped!', 'jetpack' ) ); - if ( onStep ) { - onStep(); - } - }, [ addMessage, onStep, titleOptions, replaceOptionsWithFauxUseMessages ] ); + addMessage( { content: __( 'Skipped!', 'jetpack' ) } ); + }, [ addMessage ] ); return { id: 'title', title: __( 'Optimise Title', 'jetpack' ), - messages: [ - { - content: __( "Let's optimise your title.", 'jetpack' ), - showIcon: true, - }, - ], + messages, type: 'options', options: titleOptions, onSelect: handleTitleSelect, onSubmit: handleTitleSubmit, submitCtaLabel: __( 'Insert', 'jetpack' ), onRetry: handleTitleRegenerate, - onRetryCtaLabel: __( 'Regenerate', 'jetpack' ), + retryCtaLabel: __( 'Regenerate', 'jetpack' ), onStart: handleTitleGenerate, onSkip: handleSkip, value: selectedTitle, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx index f9263e0188088..536c5117f34e3 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx @@ -1,51 +1,55 @@ -import { Button, TextControl, Icon } from '@wordpress/components'; -import { __ } from '@wordpress/i18n'; +import { Button, TextControl, Icon, KeyboardShortcuts } from '@wordpress/components'; +import { forwardRef } from '@wordpress/element'; import { arrowRight } from '@wordpress/icons'; -export default function WizardInput( { currentStepData, handleSubmit, handleDone } ) { - const selectedOption = - currentStepData.type === 'options' ? currentStepData.options.find( opt => opt.selected ) : null; +export const OptionsInput = ( { + disabled, + handleRetry, + retryCtaLabel, + handleSubmit, + submitCtaLabel, +} ) => { return ( -
      - { currentStepData.type === 'input' && ( -
      - - -
      - ) } +
      + - { currentStepData.type === 'options' && ( -
      - - - -
      - ) } + +
      + ); +}; - { currentStepData.type === 'completion' && ( -
      - -
      - ) } +function UnforwardedKeywordsInput( { placeholder, value, setValue, handleSubmit }, ref ) { + return ( +
      + + + +
      ); } + +export const TextInput = forwardRef( UnforwardedKeywordsInput ); + +export const CompletionInput = ( { submitCtaLabel, handleSubmit } ) => { + return ( +
      + +
      + ); +}; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx index fc6e0af1dc98c..295086b82254d 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx @@ -1,27 +1,81 @@ -import { useEffect, useRef } from '@wordpress/element'; +import { useCallback, useEffect, useRef, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; import bigSkyIcon from './big-sky-icon.svg'; +import TypingMessage from './typing-message'; +import type { Message } from './types'; -const Message = ( { message } ) => { +const randomId = () => Math.random().toString( 32 ).substring( 2, 8 ); + +export const useMessages = () => { + const [ messages, setMessages ] = useState< Message[] >( [] ); + + const wrapMessagesWithId = useCallback( + rawMessages => { + setMessages( + rawMessages.map( rawMessage => ( { ...rawMessage, id: rawMessage.id || randomId() } ) ) + ); + }, + [ setMessages ] + ); + + const addMessage = async ( message: Message ) => { + const newMessage = { + ...message, + showIcon: message.showIcon === false ? false : ! message.isUser, + id: message.id || randomId(), + } as Message; + + setMessages( prev => [ ...prev, newMessage ] ); + }; + + /* Removes last message */ + const removeLastMessage = () => { + setMessages( prev => prev.slice( 0, -1 ) ); + }; + + /* Edits content of last message */ + const editLastMessage = ( content: Message[ 'content' ] ) => { + setMessages( prev => { + const prevMessages = [ ...prev ]; + if ( prevMessages.length > 0 ) { + prevMessages[ prevMessages.length - 1 ] = { + ...prevMessages[ prevMessages.length - 1 ], + content, + }; + } + return prevMessages; + } ); + }; + + return { + messages, + setMessages: wrapMessagesWithId, + addMessage, + removeLastMessage, + editLastMessage, + }; +}; + +export const MessageBubble = ( { message } ) => { return (
      -
      +
      { message.showIcon && ( { ) }
      { message.type === 'past-options' && ( -
      +
      { message.options.map( option => (
      @@ -32,29 +86,29 @@ const Message = ( { message } ) => { ) } { ( ! message.type || message.type === 'chat' ) && ( -
      { message.content }
      +
      { message.content }
      ) }
      ); }; -const OptionMessages = ( { currentStepData } ) => { - if ( currentStepData.type !== 'options' || ! currentStepData.options.length ) { +const OptionMessages = ( { options = [], onSelect } ) => { + if ( ! options.length ) { return null; } return ( -
      -
      -
      -
      - { currentStepData.options.map( option => ( +
      +
      +
      +
      + { options.map( option => ( @@ -65,7 +119,7 @@ const OptionMessages = ( { currentStepData } ) => { ); }; -export default function Messages( { currentStepData, messages } ) { +export default function Messages( { options, onSelect, messages, loading } ) { const messagesEndRef = useRef< HTMLDivElement >( null ); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); @@ -76,12 +130,15 @@ export default function Messages( { currentStepData, messages } ) { }, [ messages ] ); return ( -
      - { messages.map( message => ( - - ) ) } - + <> +
      + { messages.map( message => ( + + ) ) } + + { loading && } } /> } +
      -
      + ); } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx new file mode 100644 index 0000000000000..e2257e06a6723 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx @@ -0,0 +1,25 @@ +import { useRef } from '@wordpress/element'; +import clsx from 'clsx'; +import { default as WizardMessages } from './wizard-messages'; + +export default function WizardStep( { + className = '', + messages, + visible, + loading = false, + options = [], + onSelect, +} ) { + const stepRef = useRef( null ); + const classes = clsx( 'assistant-wizard-step', className ); + return ( +
      + +
      + ); +} From ec160be565808668fcfe54e6535e83f03da77fd7 Mon Sep 17 00:00:00 2001 From: Liam Sarsfield <43409125+LiamSarsfield@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:37:51 +0000 Subject: [PATCH 219/420] Update/boost/stable-tag (#41332) --- projects/plugins/boost/changelog/update-boost-stable-tag | 5 +++++ projects/plugins/boost/readme.txt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/boost/changelog/update-boost-stable-tag diff --git a/projects/plugins/boost/changelog/update-boost-stable-tag b/projects/plugins/boost/changelog/update-boost-stable-tag new file mode 100644 index 0000000000000..27b9b851f4e2a --- /dev/null +++ b/projects/plugins/boost/changelog/update-boost-stable-tag @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Update stable tag + + diff --git a/projects/plugins/boost/readme.txt b/projects/plugins/boost/readme.txt index fb0e08f55cf6c..a7b2c01e0ddee 100644 --- a/projects/plugins/boost/readme.txt +++ b/projects/plugins/boost/readme.txt @@ -5,7 +5,7 @@ Tags: performance, speed, web vitals, critical css, cache Requires at least: 6.6 Tested up to: 6.7 Requires PHP: 7.2 -Stable tag: 3.6.0 +Stable tag: 3.8.0 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html From dd5f0a850001b9ef88b8e1f6da486e2fc0a8f15d Mon Sep 17 00:00:00 2001 From: Calypso Bot Date: Mon, 27 Jan 2025 18:11:58 +0100 Subject: [PATCH 220/420] Update dependency webpack-cli to v6 (#41286) Co-authored-by: Renovate Bot --- pnpm-lock.yaml | 531 +++++++----------- .../changelog/renovate-webpack-cli-6.x | 4 + .../js-packages/boost-score-api/package.json | 2 +- .../charts/changelog/renovate-webpack-cli-6.x | 4 + projects/js-packages/charts/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/js-packages/components/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../js-packages/critical-css-gen/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../i18n-check-webpack-plugin/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../i18n-loader-webpack-plugin/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/js-packages/image-guide/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../react-data-sync-client/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../remove-asset-webpack-plugin/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/js-packages/storybook/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../svelte-data-sync-client/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../js-packages/videopress-core/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../js-packages/webpack-config/package.json | 2 +- .../assets/changelog/renovate-webpack-cli-6.x | 4 + projects/packages/assets/package.json | 2 +- .../backup/changelog/renovate-webpack-cli-6.x | 4 + projects/packages/backup/package.json | 2 +- .../blaze/changelog/renovate-webpack-cli-6.x | 4 + projects/packages/blaze/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/packages/calypsoify/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../classic-theme-helper/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/packages/connection/package.json | 2 +- .../explat/changelog/renovate-webpack-cli-6.x | 4 + projects/packages/explat/package.json | 2 +- .../forms/changelog/renovate-webpack-cli-6.x | 4 + projects/packages/forms/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../packages/jetpack-mu-wpcom/package.json | 2 +- .../jitm/changelog/renovate-webpack-cli-6.x | 4 + projects/packages/jitm/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/packages/masterbar/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/packages/my-jetpack/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../packages/plugin-deactivation/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/packages/publicize/package.json | 2 +- .../search/changelog/renovate-webpack-cli-6.x | 4 + projects/packages/search/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/packages/videopress/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/packages/wordads/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/packages/yoast-promo/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../package.json | 2 +- .../boost/changelog/renovate-webpack-cli-6.x | 4 + projects/plugins/boost/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + .../classic-theme-helper-plugin/package.json | 2 +- .../crm/changelog/renovate-webpack-cli-6.x | 4 + projects/plugins/crm/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/plugins/jetpack/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/plugins/protect/package.json | 2 +- .../social/changelog/renovate-webpack-cli-6.x | 4 + projects/plugins/social/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/plugins/starter-plugin/package.json | 2 +- .../changelog/renovate-webpack-cli-6.x | 4 + projects/plugins/videopress/package.json | 2 +- 81 files changed, 403 insertions(+), 368 deletions(-) create mode 100644 projects/js-packages/boost-score-api/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/charts/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/components/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/critical-css-gen/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/i18n-check-webpack-plugin/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/image-guide/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/react-data-sync-client/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/remove-asset-webpack-plugin/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/storybook/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/svelte-data-sync-client/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/videopress-core/changelog/renovate-webpack-cli-6.x create mode 100644 projects/js-packages/webpack-config/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/assets/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/backup/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/blaze/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/calypsoify/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/classic-theme-helper/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/connection/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/explat/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/forms/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/jitm/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/masterbar/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/my-jetpack/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/plugin-deactivation/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/publicize/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/search/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/videopress/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/wordads/changelog/renovate-webpack-cli-6.x create mode 100644 projects/packages/yoast-promo/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/boost/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/crm/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/jetpack/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/protect/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/social/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/starter-plugin/changelog/renovate-webpack-cli-6.x create mode 100644 projects/plugins/videopress/changelog/renovate-webpack-cli-6.x diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ae42e0b8bf6e..53ec99628d128 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -288,10 +288,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/js-packages/charts: dependencies: @@ -490,10 +490,10 @@ importers: version: 5.7.2 webpack: specifier: ^5.88.0 - version: 5.94.0(webpack-cli@5.1.4) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: ^5.1.0 - version: 5.1.4(webpack@5.94.0) + specifier: ^6.0.0 + version: 6.0.1(webpack@5.94.0) projects/js-packages/components: dependencies: @@ -632,10 +632,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/js-packages/config: devDependencies: @@ -796,10 +796,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) webpack-dev-middleware: specifier: 5.3.4 version: 5.3.4(webpack@5.94.0) @@ -868,10 +868,10 @@ importers: version: 29.7.0 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/js-packages/i18n-loader-webpack-plugin: dependencies: @@ -890,10 +890,10 @@ importers: version: 29.7.0 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/js-packages/idc: dependencies: @@ -1017,10 +1017,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/js-packages/licensing: dependencies: @@ -1329,10 +1329,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) zod: specifier: 3.22.3 version: 3.22.3 @@ -1348,10 +1348,10 @@ importers: version: 29.7.0 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/js-packages/scan: dependencies: @@ -1600,7 +1600,7 @@ importers: version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4) '@storybook/react-webpack5': specifier: 8.4.7 - version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1) + version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@6.0.1) '@storybook/source-loader': specifier: 8.4.7 version: 8.4.7(storybook@8.4.7) @@ -1696,10 +1696,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/js-packages/svelte-data-sync-client: devDependencies: @@ -1720,10 +1720,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) zod: specifier: 3.22.3 version: 3.22.3 @@ -1753,10 +1753,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/js-packages/webpack-config: dependencies: @@ -1844,10 +1844,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/account-protection: {} @@ -1879,10 +1879,10 @@ importers: version: 1.8.2 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/backup: dependencies: @@ -1985,10 +1985,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/blaze: dependencies: @@ -2055,10 +2055,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/boost-core: {} @@ -2082,10 +2082,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/chatbot: {} @@ -2126,10 +2126,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/connection: dependencies: @@ -2178,10 +2178,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/explat: dependencies: @@ -2227,10 +2227,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/forms: dependencies: @@ -2308,10 +2308,10 @@ importers: version: 7.6.3 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) optionalDependencies: react: specifier: 18.3.1 @@ -2541,10 +2541,10 @@ importers: version: 5.7.2 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/jitm: devDependencies: @@ -2562,10 +2562,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/masterbar: dependencies: @@ -2614,10 +2614,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/my-jetpack: dependencies: @@ -2759,10 +2759,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/plans: {} @@ -2785,10 +2785,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/protect-models: {} @@ -2814,10 +2814,10 @@ importers: version: 7.6.0 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/search: dependencies: @@ -2992,10 +2992,10 @@ importers: version: 11.1.6(@size-limit/preset-app@11.1.6) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/stats-admin: {} @@ -3180,10 +3180,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/wordads: dependencies: @@ -3328,10 +3328,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/packages/wp-js-data-sync: {} @@ -3394,10 +3394,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/automattic-for-agencies-client: dependencies: @@ -3482,10 +3482,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/automattic-for-agencies-client/tests/e2e: devDependencies: @@ -3639,10 +3639,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/boost/tests/e2e: devDependencies: @@ -3730,10 +3730,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/classic-theme-helper-plugin/tests/e2e: devDependencies: @@ -3857,10 +3857,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/inspect: dependencies: @@ -4137,10 +4137,10 @@ importers: version: 4.2.3 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) optionalDependencies: react: specifier: 18.3.1 @@ -4397,10 +4397,10 @@ importers: version: 5.0.4 webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/search: {} @@ -4538,10 +4538,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/social/tests/e2e: devDependencies: @@ -4629,10 +4629,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/starter-plugin/tests/e2e: devDependencies: @@ -4734,10 +4734,10 @@ importers: version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 - version: 5.94.0(webpack-cli@4.9.1) + version: 5.94.0(webpack-cli@6.0.1) webpack-cli: - specifier: 4.9.1 - version: 4.9.1(webpack@5.94.0) + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) projects/plugins/videopress/tests/e2e: devDependencies: @@ -5824,9 +5824,9 @@ packages: '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -7989,46 +7989,26 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - '@webpack-cli/configtest@1.2.0': - resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} - peerDependencies: - webpack: 4.x.x || 5.x.x - webpack-cli: 4.x.x - - '@webpack-cli/configtest@2.1.1': - resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} - engines: {node: '>=14.15.0'} - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - - '@webpack-cli/info@1.5.0': - resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} - peerDependencies: - webpack-cli: 4.x.x - - '@webpack-cli/info@2.0.2': - resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} - engines: {node: '>=14.15.0'} + '@webpack-cli/configtest@3.0.1': + resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x - '@webpack-cli/serve@1.7.0': - resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} + '@webpack-cli/info@3.0.1': + resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack-cli: 4.x.x - webpack-dev-server: '*' - peerDependenciesMeta: - webpack-dev-server: - optional: true + webpack: ^5.82.0 + webpack-cli: 6.x.x - '@webpack-cli/serve@2.0.5': - resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} - engines: {node: '>=14.15.0'} + '@webpack-cli/serve@3.0.1': + resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x webpack-dev-server: '*' peerDependenciesMeta: webpack-dev-server: @@ -9178,10 +9158,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -10902,10 +10878,6 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - interpret@2.2.0: - resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} - engines: {node: '>= 0.10'} - interpret@3.1.1: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} @@ -13117,10 +13089,6 @@ packages: resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} engines: {node: '>= 4'} - rechoir@0.7.1: - resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} - engines: {node: '>= 0.10'} - rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} @@ -14666,38 +14634,15 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - webpack-cli@4.9.1: - resolution: {integrity: sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - '@webpack-cli/generators': '*' - '@webpack-cli/migrate': '*' - webpack: 4.x.x || 5.x.x - webpack-bundle-analyzer: '*' - webpack-dev-server: '*' - peerDependenciesMeta: - '@webpack-cli/generators': - optional: true - '@webpack-cli/migrate': - optional: true - webpack-bundle-analyzer: - optional: true - webpack-dev-server: - optional: true - - webpack-cli@5.1.4: - resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} - engines: {node: '>=14.15.0'} + webpack-cli@6.0.1: + resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} + engines: {node: '>=18.12.0'} hasBin: true peerDependencies: - '@webpack-cli/generators': '*' - webpack: 5.x.x + webpack: ^5.82.0 webpack-bundle-analyzer: '*' webpack-dev-server: '*' peerDependenciesMeta: - '@webpack-cli/generators': - optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: @@ -14721,9 +14666,9 @@ packages: webpack-hot-middleware@2.26.1: resolution: {integrity: sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==} - webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} - engines: {node: '>=10.0.0'} + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} @@ -15141,7 +15086,7 @@ snapshots: '@automattic/webpack-rtl-plugin@6.0.0(webpack@5.94.0)': dependencies: rtlcss: 3.5.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) '@babel/code-frame@7.26.2': dependencies: @@ -15964,7 +15909,7 @@ snapshots: find-root: 1.1.0 lodash.groupby: 4.6.0 semver: 7.6.3 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) '@colors/colors@1.6.0': {} @@ -15978,7 +15923,7 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@discoveryjs/json-ext@0.5.7': {} + '@discoveryjs/json-ext@0.6.3': {} '@emotion/babel-plugin@11.13.5': dependencies: @@ -17326,7 +17271,7 @@ snapshots: '@remote-ui/rpc': 1.4.5 optionalDependencies: '@babel/core': 7.26.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) '@sideway/address@4.1.5': dependencies: @@ -17524,7 +17469,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-webpack5@8.4.7(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1)': + '@storybook/builder-webpack5@8.4.7(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@6.0.1)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7) '@types/node': 22.10.5 @@ -17548,7 +17493,7 @@ snapshots: url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) webpack-dev-middleware: 6.1.3(webpack@5.94.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 @@ -17625,7 +17570,7 @@ snapshots: dependencies: storybook: 8.4.7 - '@storybook/preset-react-webpack@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1)': + '@storybook/preset-react-webpack@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@6.0.1)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7) '@storybook/react': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4) @@ -17641,7 +17586,7 @@ snapshots: semver: 7.6.3 storybook: 8.4.7 tsconfig-paths: 4.2.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) optionalDependencies: typescript: 5.0.4 transitivePeerDependencies: @@ -17666,7 +17611,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.0.4) tslib: 2.5.0 typescript: 5.0.4 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) transitivePeerDependencies: - supports-color @@ -17676,10 +17621,10 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.4.7 - '@storybook/react-webpack5@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1)': + '@storybook/react-webpack5@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@6.0.1)': dependencies: - '@storybook/builder-webpack5': 8.4.7(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1) - '@storybook/preset-react-webpack': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@4.9.1) + '@storybook/builder-webpack5': 8.4.7(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@6.0.1) + '@storybook/preset-react-webpack': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4)(webpack-cli@6.0.1) '@storybook/react': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.0.4) '@types/node': 22.10.5 react: 18.3.1 @@ -18762,34 +18707,20 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@1.2.0(webpack-cli@4.9.1)(webpack@5.94.0)': - dependencies: - webpack: 5.94.0(webpack-cli@4.9.1) - webpack-cli: 4.9.1(webpack@5.94.0) - - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.94.0)': - dependencies: - webpack: 5.94.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.94.0) - - '@webpack-cli/info@1.5.0(webpack-cli@4.9.1)': - dependencies: - envinfo: 7.14.0 - webpack-cli: 4.9.1(webpack@5.94.0) - - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.94.0)': + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.94.0)': dependencies: - webpack: 5.94.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.94.0) + webpack: 5.94.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.94.0) - '@webpack-cli/serve@1.7.0(webpack-cli@4.9.1)': + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.94.0)': dependencies: - webpack-cli: 4.9.1(webpack@5.94.0) + webpack: 5.94.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.94.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.94.0)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.94.0)': dependencies: - webpack: 5.94.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.94.0) + webpack: 5.94.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.94.0) '@wordpress/a11y@4.16.0': dependencies: @@ -19904,7 +19835,7 @@ snapshots: '@wordpress/dependency-extraction-webpack-plugin@6.16.0(webpack@5.94.0)': dependencies: json2php: 0.0.7 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) '@wordpress/deprecated@4.16.0': dependencies: @@ -21663,14 +21594,14 @@ snapshots: '@babel/core': 7.26.0 find-cache-dir: 3.3.2 schema-utils: 4.3.0 - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@6.0.1) babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.94.0): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) babel-plugin-inline-json-import@0.3.2: dependencies: @@ -22082,7 +22013,7 @@ snapshots: clean-webpack-plugin@4.0.0(webpack@5.94.0): dependencies: del: 4.1.1 - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@6.0.1) cli-cursor@2.1.0: dependencies: @@ -22225,8 +22156,6 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@10.0.1: {} - commander@12.1.0: {} commander@13.0.0: {} @@ -22321,7 +22250,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) core-js-compat@3.40.0: dependencies: @@ -22414,7 +22343,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@6.0.1) css-loader@6.5.1(webpack@5.94.0): dependencies: @@ -22426,7 +22355,7 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.3 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) css-minimizer-webpack-plugin@5.0.1(webpack@5.94.0): dependencies: @@ -22436,7 +22365,7 @@ snapshots: postcss: 8.4.47 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) css-select@4.3.0: dependencies: @@ -23061,7 +22990,7 @@ snapshots: esbuild: 0.17.19 get-tsconfig: 4.8.1 loader-utils: 2.0.4 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) webpack-sources: 1.4.3 esbuild-register@3.6.0(esbuild@0.24.2): @@ -23757,7 +23686,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.0.4 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) fork-ts-checker-webpack-plugin@9.0.2(typescript@5.0.4)(webpack@5.94.0): dependencies: @@ -23774,7 +23703,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.0.4 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.94.0): dependencies: @@ -23791,7 +23720,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.7.2 - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@6.0.1) form-data-encoder@1.7.2: {} @@ -24117,7 +24046,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) htmlparser2@3.10.1: dependencies: @@ -24262,8 +24191,6 @@ snapshots: internmap@2.0.3: {} - interpret@2.2.0: {} - interpret@3.1.1: {} intl-messageformat@10.7.11: @@ -25847,7 +25774,7 @@ snapshots: dependencies: schema-utils: 4.3.0 tapable: 2.2.1 - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@6.0.1) minimatch@10.0.1: dependencies: @@ -26433,7 +26360,7 @@ snapshots: klona: 2.0.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.7.2)(webpack@5.94.0): dependencies: @@ -26441,7 +26368,7 @@ snapshots: jiti: 1.21.7 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@6.0.1) transitivePeerDependencies: - typescript @@ -27018,10 +26945,6 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.5.0 - rechoir@0.7.1: - dependencies: - resolve: 1.22.10 - rechoir@0.8.0: dependencies: resolve: 1.22.10 @@ -27440,14 +27363,14 @@ snapshots: dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) optionalDependencies: sass: 1.64.1 sass-loader@13.3.3(sass-embedded@1.83.0)(sass@1.64.1)(webpack@5.94.0): dependencies: neo-async: 2.6.2 - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@6.0.1) optionalDependencies: sass: 1.64.1 sass-embedded: 1.83.0 @@ -27944,11 +27867,11 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) style-loader@3.3.4(webpack@5.94.0): dependencies: - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) stylehacks@6.1.1(postcss@8.4.47): dependencies: @@ -28122,7 +28045,7 @@ snapshots: schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) terser-webpack-plugin@5.3.3(webpack@5.94.0): dependencies: @@ -28131,7 +28054,7 @@ snapshots: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) terser@5.37.0: dependencies: @@ -28161,7 +28084,7 @@ snapshots: loader-utils: 2.0.4 neo-async: 2.6.2 schema-utils: 3.3.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) through@2.3.8: {} @@ -28627,38 +28550,22 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-cli@4.9.1(webpack@5.94.0): - dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.9.1)(webpack@5.94.0) - '@webpack-cli/info': 1.5.0(webpack-cli@4.9.1) - '@webpack-cli/serve': 1.7.0(webpack-cli@4.9.1) - colorette: 2.0.20 - commander: 7.2.0 - execa: 5.1.1 - fastest-levenshtein: 1.0.16 - import-local: 3.2.0 - interpret: 2.2.0 - rechoir: 0.7.1 - webpack: 5.94.0(webpack-cli@4.9.1) - webpack-merge: 5.10.0 - - webpack-cli@5.1.4(webpack@5.94.0): + webpack-cli@6.0.1(webpack@5.94.0): dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.94.0) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.94.0) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.94.0) + '@discoveryjs/json-ext': 0.6.3 + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.94.0) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.94.0) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.94.0) colorette: 2.0.20 - commander: 10.0.1 + commander: 12.1.0 cross-spawn: 7.0.6 envinfo: 7.14.0 fastest-levenshtein: 1.0.16 import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.94.0(webpack-cli@5.1.4) - webpack-merge: 5.10.0 + webpack: 5.94.0(webpack-cli@6.0.1) + webpack-merge: 6.0.1 webpack-dev-middleware@5.3.4(webpack@5.94.0): dependencies: @@ -28667,7 +28574,7 @@ snapshots: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.0 - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) webpack-dev-middleware@6.1.3(webpack@5.94.0): dependencies: @@ -28677,7 +28584,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.0 optionalDependencies: - webpack: 5.94.0(webpack-cli@4.9.1) + webpack: 5.94.0(webpack-cli@6.0.1) webpack-hot-middleware@2.26.1: dependencies: @@ -28685,7 +28592,7 @@ snapshots: html-entities: 2.5.2 strip-ansi: 6.0.1 - webpack-merge@5.10.0: + webpack-merge@6.0.1: dependencies: clone-deep: 4.0.1 flat: 5.0.2 @@ -28700,39 +28607,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.94.0(webpack-cli@4.9.1): - dependencies: - '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 - acorn-import-attributes: 1.9.5(acorn@8.14.0) - browserslist: 4.24.3 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.0 - es-module-lexer: 1.6.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(webpack@5.94.0) - watchpack: 2.4.2 - webpack-sources: 3.2.3 - optionalDependencies: - webpack-cli: 4.9.1(webpack@5.94.0) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack@5.94.0(webpack-cli@5.1.4): + webpack@5.94.0(webpack-cli@6.0.1): dependencies: '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.14.1 @@ -28758,7 +28633,7 @@ snapshots: watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.94.0) + webpack-cli: 6.0.1(webpack@5.94.0) transitivePeerDependencies: - '@swc/core' - esbuild diff --git a/projects/js-packages/boost-score-api/changelog/renovate-webpack-cli-6.x b/projects/js-packages/boost-score-api/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/boost-score-api/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/boost-score-api/package.json b/projects/js-packages/boost-score-api/package.json index c460d0a6e126a..fa921767b4ca0 100644 --- a/projects/js-packages/boost-score-api/package.json +++ b/projects/js-packages/boost-score-api/package.json @@ -30,7 +30,7 @@ "jest-environment-jsdom": "29.7.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "exports": { ".": { diff --git a/projects/js-packages/charts/changelog/renovate-webpack-cli-6.x b/projects/js-packages/charts/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/charts/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 831884bb00ad5..21f2b6ee422a8 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -113,7 +113,7 @@ "tsconfig-paths-webpack-plugin": "4.2.0", "typescript": "5.7.2", "webpack": "^5.88.0", - "webpack-cli": "^5.1.0" + "webpack-cli": "^6.0.0" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0", diff --git a/projects/js-packages/components/changelog/renovate-webpack-cli-6.x b/projects/js-packages/components/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/components/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/components/package.json b/projects/js-packages/components/package.json index 486b340ed70a4..866e615bd1e3c 100644 --- a/projects/js-packages/components/package.json +++ b/projects/js-packages/components/package.json @@ -61,7 +61,7 @@ "ts-dedent": "2.2.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "peerDependencies": { "react": "^18.0.0", diff --git a/projects/js-packages/critical-css-gen/changelog/renovate-webpack-cli-6.x b/projects/js-packages/critical-css-gen/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/critical-css-gen/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/critical-css-gen/package.json b/projects/js-packages/critical-css-gen/package.json index 68386372282d1..be18e80f12b57 100644 --- a/projects/js-packages/critical-css-gen/package.json +++ b/projects/js-packages/critical-css-gen/package.json @@ -42,7 +42,7 @@ "tslib": "2.5.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1", + "webpack-cli": "6.0.1", "webpack-dev-middleware": "5.3.4" }, "exports": { diff --git a/projects/js-packages/i18n-check-webpack-plugin/changelog/renovate-webpack-cli-6.x b/projects/js-packages/i18n-check-webpack-plugin/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/i18n-check-webpack-plugin/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/i18n-check-webpack-plugin/package.json b/projects/js-packages/i18n-check-webpack-plugin/package.json index ddcd2248037d1..4b5997738202a 100644 --- a/projects/js-packages/i18n-check-webpack-plugin/package.json +++ b/projects/js-packages/i18n-check-webpack-plugin/package.json @@ -25,7 +25,7 @@ "@babel/core": "7.26.0", "jest": "29.7.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "peerDependencies": { "@babel/core": "^7.0.0", diff --git a/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-webpack-cli-6.x b/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/i18n-loader-webpack-plugin/package.json b/projects/js-packages/i18n-loader-webpack-plugin/package.json index 6c1a6f334b275..362caaa289fd8 100644 --- a/projects/js-packages/i18n-loader-webpack-plugin/package.json +++ b/projects/js-packages/i18n-loader-webpack-plugin/package.json @@ -25,7 +25,7 @@ "@wordpress/i18n": "5.16.0", "jest": "29.7.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "peerDependencies": { "webpack": "^5.94.0" diff --git a/projects/js-packages/image-guide/changelog/renovate-webpack-cli-6.x b/projects/js-packages/image-guide/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/image-guide/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/image-guide/package.json b/projects/js-packages/image-guide/package.json index f07e1e89e8a04..3347c9e25fa8f 100644 --- a/projects/js-packages/image-guide/package.json +++ b/projects/js-packages/image-guide/package.json @@ -54,7 +54,7 @@ "tslib": "2.5.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "exports": { ".": { diff --git a/projects/js-packages/react-data-sync-client/changelog/renovate-webpack-cli-6.x b/projects/js-packages/react-data-sync-client/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/react-data-sync-client/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/react-data-sync-client/package.json b/projects/js-packages/react-data-sync-client/package.json index 03b6024d29f23..37034b9b0ccf1 100644 --- a/projects/js-packages/react-data-sync-client/package.json +++ b/projects/js-packages/react-data-sync-client/package.json @@ -29,7 +29,7 @@ "tslib": "2.5.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1", + "webpack-cli": "6.0.1", "zod": "3.22.3" }, "exports": { diff --git a/projects/js-packages/remove-asset-webpack-plugin/changelog/renovate-webpack-cli-6.x b/projects/js-packages/remove-asset-webpack-plugin/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/remove-asset-webpack-plugin/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/remove-asset-webpack-plugin/package.json b/projects/js-packages/remove-asset-webpack-plugin/package.json index 53e023f78385b..3ebad07cd6d92 100644 --- a/projects/js-packages/remove-asset-webpack-plugin/package.json +++ b/projects/js-packages/remove-asset-webpack-plugin/package.json @@ -23,7 +23,7 @@ "devDependencies": { "jest": "29.7.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "peerDependencies": { "webpack": "^5.94.0" diff --git a/projects/js-packages/storybook/changelog/renovate-webpack-cli-6.x b/projects/js-packages/storybook/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/storybook/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/storybook/package.json b/projects/js-packages/storybook/package.json index 3377237bdaa01..84097dfe1cdfe 100644 --- a/projects/js-packages/storybook/package.json +++ b/projects/js-packages/storybook/package.json @@ -68,7 +68,7 @@ "ts-dedent": "2.2.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "dependencies": { "@wordpress/api-fetch": "7.16.0" diff --git a/projects/js-packages/svelte-data-sync-client/changelog/renovate-webpack-cli-6.x b/projects/js-packages/svelte-data-sync-client/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/svelte-data-sync-client/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/svelte-data-sync-client/package.json b/projects/js-packages/svelte-data-sync-client/package.json index 6278913887d03..08f620f1e63e6 100644 --- a/projects/js-packages/svelte-data-sync-client/package.json +++ b/projects/js-packages/svelte-data-sync-client/package.json @@ -29,7 +29,7 @@ "tslib": "2.5.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1", + "webpack-cli": "6.0.1", "zod": "3.22.3" }, "exports": { diff --git a/projects/js-packages/videopress-core/changelog/renovate-webpack-cli-6.x b/projects/js-packages/videopress-core/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/videopress-core/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/videopress-core/package.json b/projects/js-packages/videopress-core/package.json index 6def65c04d1d4..c012a20649586 100644 --- a/projects/js-packages/videopress-core/package.json +++ b/projects/js-packages/videopress-core/package.json @@ -29,7 +29,7 @@ "tslib": "2.5.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "exports": { ".": "./index.jsx", diff --git a/projects/js-packages/webpack-config/changelog/renovate-webpack-cli-6.x b/projects/js-packages/webpack-config/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/webpack-config/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/webpack-config/package.json b/projects/js-packages/webpack-config/package.json index 9f268370be7a4..3a92a23aae45c 100644 --- a/projects/js-packages/webpack-config/package.json +++ b/projects/js-packages/webpack-config/package.json @@ -46,7 +46,7 @@ "@babel/runtime": "7.26.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "peerDependencies": { "@babel/core": "^7.0.0", diff --git a/projects/packages/assets/changelog/renovate-webpack-cli-6.x b/projects/packages/assets/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/assets/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/assets/package.json b/projects/packages/assets/package.json index d425e2018a39d..701961d09ded8 100644 --- a/projects/packages/assets/package.json +++ b/projects/packages/assets/package.json @@ -22,6 +22,6 @@ "jest": "29.7.0", "md5-es": "1.8.2", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/backup/changelog/renovate-webpack-cli-6.x b/projects/packages/backup/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/backup/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/backup/package.json b/projects/packages/backup/package.json index 5775b5017923f..28e8bab6e0b87 100644 --- a/projects/packages/backup/package.json +++ b/projects/packages/backup/package.json @@ -62,6 +62,6 @@ "sass-loader": "12.4.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/blaze/changelog/renovate-webpack-cli-6.x b/projects/packages/blaze/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/blaze/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/blaze/package.json b/projects/packages/blaze/package.json index 5f3a848886953..e2fc93508a921 100644 --- a/projects/packages/blaze/package.json +++ b/projects/packages/blaze/package.json @@ -45,7 +45,7 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "browserslist": [ "extends @wordpress/browserslist-config" diff --git a/projects/packages/calypsoify/changelog/renovate-webpack-cli-6.x b/projects/packages/calypsoify/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/calypsoify/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/calypsoify/package.json b/projects/packages/calypsoify/package.json index 326fd8ba7f24f..db2e180eead3e 100644 --- a/projects/packages/calypsoify/package.json +++ b/projects/packages/calypsoify/package.json @@ -32,6 +32,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/classic-theme-helper/changelog/renovate-webpack-cli-6.x b/projects/packages/classic-theme-helper/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/classic-theme-helper/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/classic-theme-helper/package.json b/projects/packages/classic-theme-helper/package.json index 97e5f882bd51e..07ba3262cb77e 100644 --- a/projects/packages/classic-theme-helper/package.json +++ b/projects/packages/classic-theme-helper/package.json @@ -36,6 +36,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/connection/changelog/renovate-webpack-cli-6.x b/projects/packages/connection/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/connection/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/connection/package.json b/projects/packages/connection/package.json index 75bc5aa6c87bc..05e6452c719d3 100644 --- a/projects/packages/connection/package.json +++ b/projects/packages/connection/package.json @@ -42,6 +42,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/explat/changelog/renovate-webpack-cli-6.x b/projects/packages/explat/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/explat/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/explat/package.json b/projects/packages/explat/package.json index 9d9818dc802bb..faf2fea52fb8b 100644 --- a/projects/packages/explat/package.json +++ b/projects/packages/explat/package.json @@ -31,7 +31,7 @@ "jest": "29.7.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "exports": { ".": { diff --git a/projects/packages/forms/changelog/renovate-webpack-cli-6.x b/projects/packages/forms/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/forms/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/forms/package.json b/projects/packages/forms/package.json index f23a44628f4df..18f42726c0937 100644 --- a/projects/packages/forms/package.json +++ b/projects/packages/forms/package.json @@ -56,7 +56,7 @@ "sass": "1.64.1", "semver": "7.6.3", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "devDependencies": { "@automattic/color-studio": "4.0.0", diff --git a/projects/packages/jetpack-mu-wpcom/changelog/renovate-webpack-cli-6.x b/projects/packages/jetpack-mu-wpcom/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/jetpack-mu-wpcom/package.json b/projects/packages/jetpack-mu-wpcom/package.json index 1772f22b5e61e..e57128d21c2c8 100644 --- a/projects/packages/jetpack-mu-wpcom/package.json +++ b/projects/packages/jetpack-mu-wpcom/package.json @@ -43,7 +43,7 @@ "sass-loader": "12.4.0", "typescript": "^5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "dependencies": { "@automattic/calypso-color-schemes": "3.1.3", diff --git a/projects/packages/jitm/changelog/renovate-webpack-cli-6.x b/projects/packages/jitm/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/jitm/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/jitm/package.json b/projects/packages/jitm/package.json index c0b5d5e3d8704..696a1f4d0e8c8 100644 --- a/projects/packages/jitm/package.json +++ b/projects/packages/jitm/package.json @@ -28,6 +28,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/masterbar/changelog/renovate-webpack-cli-6.x b/projects/packages/masterbar/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/masterbar/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/masterbar/package.json b/projects/packages/masterbar/package.json index eb0d07e11ffed..16dead5779881 100644 --- a/projects/packages/masterbar/package.json +++ b/projects/packages/masterbar/package.json @@ -41,6 +41,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/my-jetpack/changelog/renovate-webpack-cli-6.x b/projects/packages/my-jetpack/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/my-jetpack/package.json b/projects/packages/my-jetpack/package.json index 18ffda790b6d8..c5fd957188a85 100644 --- a/projects/packages/my-jetpack/package.json +++ b/projects/packages/my-jetpack/package.json @@ -78,6 +78,6 @@ "storybook": "8.4.7", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/plugin-deactivation/changelog/renovate-webpack-cli-6.x b/projects/packages/plugin-deactivation/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/plugin-deactivation/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/plugin-deactivation/package.json b/projects/packages/plugin-deactivation/package.json index 03e4c990dfeac..b8434a08dd075 100644 --- a/projects/packages/plugin-deactivation/package.json +++ b/projects/packages/plugin-deactivation/package.json @@ -27,6 +27,6 @@ "tslib": "2.5.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/packages/publicize/changelog/renovate-webpack-cli-6.x b/projects/packages/publicize/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/publicize/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/publicize/package.json b/projects/packages/publicize/package.json index 1a048b04781b2..3de93476f47eb 100644 --- a/projects/packages/publicize/package.json +++ b/projects/packages/publicize/package.json @@ -31,7 +31,7 @@ "@wordpress/browserslist-config": "6.16.0", "concurrently": "7.6.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "dependencies": { "@automattic/jetpack-analytics": "workspace:*", diff --git a/projects/packages/search/changelog/renovate-webpack-cli-6.x b/projects/packages/search/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/search/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/search/package.json b/projects/packages/search/package.json index 83f1363488204..034765fd53fb9 100644 --- a/projects/packages/search/package.json +++ b/projects/packages/search/package.json @@ -91,7 +91,7 @@ "sass-loader": "12.4.0", "size-limit": "11.1.6", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "browserslist": [ "extends @wordpress/browserslist-config" diff --git a/projects/packages/videopress/changelog/renovate-webpack-cli-6.x b/projects/packages/videopress/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/videopress/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/videopress/package.json b/projects/packages/videopress/package.json index 3265c25493d52..66b35a3981fc4 100644 --- a/projects/packages/videopress/package.json +++ b/projects/packages/videopress/package.json @@ -55,7 +55,7 @@ "storybook": "8.4.7", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "dependencies": { "@automattic/jetpack-analytics": "workspace:*", diff --git a/projects/packages/wordads/changelog/renovate-webpack-cli-6.x b/projects/packages/wordads/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/wordads/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/wordads/package.json b/projects/packages/wordads/package.json index 5b66f900fc4a7..b4438478319b0 100644 --- a/projects/packages/wordads/package.json +++ b/projects/packages/wordads/package.json @@ -79,7 +79,7 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "browserslist": [ "extends @wordpress/browserslist-config" diff --git a/projects/packages/yoast-promo/changelog/renovate-webpack-cli-6.x b/projects/packages/yoast-promo/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/yoast-promo/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/yoast-promo/package.json b/projects/packages/yoast-promo/package.json index 7b8a7b27372cc..d9344bc634679 100644 --- a/projects/packages/yoast-promo/package.json +++ b/projects/packages/yoast-promo/package.json @@ -43,7 +43,7 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "browserslist": [ "extends @wordpress/browserslist-config" diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-webpack-cli-6.x b/projects/plugins/automattic-for-agencies-client/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/package.json b/projects/plugins/automattic-for-agencies-client/package.json index 99c8a40511e9e..aea55fc6a1c64 100644 --- a/projects/plugins/automattic-for-agencies-client/package.json +++ b/projects/plugins/automattic-for-agencies-client/package.json @@ -56,6 +56,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/plugins/boost/changelog/renovate-webpack-cli-6.x b/projects/plugins/boost/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/boost/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/boost/package.json b/projects/plugins/boost/package.json index fe8e1e7a743ab..6753d2d82e30f 100644 --- a/projects/plugins/boost/package.json +++ b/projects/plugins/boost/package.json @@ -52,7 +52,7 @@ "tslib": "2.5.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "browserslist": [ "extends @wordpress/browserslist-config" diff --git a/projects/plugins/classic-theme-helper-plugin/changelog/renovate-webpack-cli-6.x b/projects/plugins/classic-theme-helper-plugin/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/classic-theme-helper-plugin/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/classic-theme-helper-plugin/package.json b/projects/plugins/classic-theme-helper-plugin/package.json index ec6c9a447eb14..560d9fad27562 100644 --- a/projects/plugins/classic-theme-helper-plugin/package.json +++ b/projects/plugins/classic-theme-helper-plugin/package.json @@ -52,6 +52,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/plugins/crm/changelog/renovate-webpack-cli-6.x b/projects/plugins/crm/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/crm/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/crm/package.json b/projects/plugins/crm/package.json index ec514bd05dfe7..933f0b90ddbae 100644 --- a/projects/plugins/crm/package.json +++ b/projects/plugins/crm/package.json @@ -55,6 +55,6 @@ "sass-loader": "12.4.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/plugins/jetpack/changelog/renovate-webpack-cli-6.x b/projects/plugins/jetpack/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..1eaea6a769e84 --- /dev/null +++ b/projects/plugins/jetpack/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Updated package dependencies. diff --git a/projects/plugins/jetpack/package.json b/projects/plugins/jetpack/package.json index 1b1a3c0ae5eac..9fbb9c85aa850 100644 --- a/projects/plugins/jetpack/package.json +++ b/projects/plugins/jetpack/package.json @@ -114,7 +114,7 @@ "tinycolor2": "1.4.2", "tus-js-client": "4.2.3", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" }, "devDependencies": { "@automattic/color-studio": "4.0.0", diff --git a/projects/plugins/protect/changelog/renovate-webpack-cli-6.x b/projects/plugins/protect/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/protect/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/protect/package.json b/projects/plugins/protect/package.json index 677dca360c4b6..5381c47827c08 100644 --- a/projects/plugins/protect/package.json +++ b/projects/plugins/protect/package.json @@ -60,6 +60,6 @@ "sass-loader": "12.4.0", "typescript": "5.0.4", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/plugins/social/changelog/renovate-webpack-cli-6.x b/projects/plugins/social/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/social/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/social/package.json b/projects/plugins/social/package.json index 24bc0cb7e5a16..a43197c2e3f94 100644 --- a/projects/plugins/social/package.json +++ b/projects/plugins/social/package.json @@ -68,6 +68,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/plugins/starter-plugin/changelog/renovate-webpack-cli-6.x b/projects/plugins/starter-plugin/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/starter-plugin/package.json b/projects/plugins/starter-plugin/package.json index 8ffa6f4e10a67..e2573fe9ad72c 100644 --- a/projects/plugins/starter-plugin/package.json +++ b/projects/plugins/starter-plugin/package.json @@ -52,6 +52,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } diff --git a/projects/plugins/videopress/changelog/renovate-webpack-cli-6.x b/projects/plugins/videopress/changelog/renovate-webpack-cli-6.x new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/videopress/changelog/renovate-webpack-cli-6.x @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/videopress/package.json b/projects/plugins/videopress/package.json index cf180cd49235d..b1b89ae2519b2 100644 --- a/projects/plugins/videopress/package.json +++ b/projects/plugins/videopress/package.json @@ -36,6 +36,6 @@ "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", - "webpack-cli": "4.9.1" + "webpack-cli": "6.0.1" } } From c028019a7832d4bcc4b43daf28670b8950951d83 Mon Sep 17 00:00:00 2001 From: Adnan Haque <3737780+haqadn@users.noreply.github.com> Date: Mon, 27 Jan 2025 13:42:40 -0500 Subject: [PATCH 221/420] Boost: Add Liam as contributor to Jetpack Boost (#41335) * Add Liam as contributor to Jetpack Boost * changelog --- projects/plugins/boost/changelog/add-liam-as-contributor | 5 +++++ projects/plugins/boost/readme.txt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/boost/changelog/add-liam-as-contributor diff --git a/projects/plugins/boost/changelog/add-liam-as-contributor b/projects/plugins/boost/changelog/add-liam-as-contributor new file mode 100644 index 0000000000000..267d3c79c76a6 --- /dev/null +++ b/projects/plugins/boost/changelog/add-liam-as-contributor @@ -0,0 +1,5 @@ +Significance: patch +Type: added +Comment: Added Liam as a new contributor + + diff --git a/projects/plugins/boost/readme.txt b/projects/plugins/boost/readme.txt index a7b2c01e0ddee..44eda5354ba7a 100644 --- a/projects/plugins/boost/readme.txt +++ b/projects/plugins/boost/readme.txt @@ -1,5 +1,5 @@ === Jetpack Boost - Website Speed, Performance and Critical CSS === -Contributors: automattic, xwp, adnan007, bjorsch, danwalmsley, davidlonjon, dilirity, donncha, ebinnion, exelero, jeherve, jpolakovic, karthikbhatb, kraftbj, luchad0res, pyronaur, rheinardkorf, scruffian, thingalon +Contributors: automattic, xwp, adnan007, bjorsch, danwalmsley, davidlonjon, dilirity, donncha, ebinnion, exelero, jeherve, jpolakovic, karthikbhatb, kraftbj, lsarsfield, luchad0res, pyronaur, rheinardkorf, scruffian, thingalon Donate link: https://automattic.com Tags: performance, speed, web vitals, critical css, cache Requires at least: 6.6 From f7def131aff270e072902aa55fe42fc3c2ec3c24 Mon Sep 17 00:00:00 2001 From: Philip Jackson Date: Tue, 28 Jan 2025 09:32:25 +1300 Subject: [PATCH 222/420] Launchpad: disable launch site task on already launched sites (#41327) Disable launch site task if site is already launched --- .../changelog/update-disable-launch-site-task | 4 ++++ .../features/launchpad/launchpad-task-definitions.php | 10 ++++++++++ 2 files changed, 14 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-disable-launch-site-task diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-disable-launch-site-task b/projects/packages/jetpack-mu-wpcom/changelog/update-disable-launch-site-task new file mode 100644 index 0000000000000..3bda250532cbb --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-disable-launch-site-task @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Launchpad: Launch site task disabled for launched sites diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php index eb897a3bc8221..5f687c1117087 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php @@ -168,6 +168,7 @@ function wpcom_launchpad_get_task_definitions() { }, 'isLaunchTask' => true, 'is_complete_callback' => 'wpcom_launchpad_is_site_launched', + 'is_disabled_callback' => 'wpcom_launchpad_is_site_launched_disabled', 'add_listener_callback' => 'wpcom_launchpad_add_site_launch_listener', ), 'verify_email' => array( @@ -908,6 +909,15 @@ function wpcom_launchpad_is_site_launched( $task, $is_complete ) { } } +/** + * Disabled when the site is already launched. + * + * @return boolean + */ +function wpcom_launchpad_is_site_launched_disabled() { + return 'launched' === get_option( 'launch-status' ); +} + /** * Returns true if one of the site's WooCommerce tasks is complete. * From 155fe517a5d1f52f67babd746a95b5bacc84c311 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Tue, 28 Jan 2025 10:44:43 +1300 Subject: [PATCH 223/420] Line Chart: auto margin for axis labels (#41325) * auto-margin for axis labels * changelog --- .../update-auto-margin-for-axis-labels | 4 ++++ .../src/components/line-chart/line-chart.tsx | 18 ++++++++++++++++-- .../line-chart/stories/index.stories.tsx | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-auto-margin-for-axis-labels diff --git a/projects/js-packages/charts/changelog/update-auto-margin-for-axis-labels b/projects/js-packages/charts/changelog/update-auto-margin-for-axis-labels new file mode 100644 index 0000000000000..47e5070e818b2 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-auto-margin-for-axis-labels @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Automatic margin for axis labels diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index b332c1dbffc5d..f0cb4d936aecc 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -97,7 +97,7 @@ const LineChart: FC< LineChartProps > = ( { width, height, className, - margin = {}, + margin, withTooltips = true, showLegend = false, legendOrientation = 'horizontal', @@ -119,6 +119,20 @@ const LineChart: FC< LineChartProps > = ( { } ); }, [ providerTheme, data ] ); + margin = useMemo( () => { + // Auto-margin unless specified to make room for axis labels. + // Default margin is for bottom and left axis labels. + let defaultMargin = { top: 0, right: 0, bottom: 40, left: 40 }; + if ( options.axis?.y?.orientation === 'right' ) { + defaultMargin = { ...defaultMargin, right: 40, left: 0 }; + } + if ( options.axis?.x?.orientation === 'top' ) { + defaultMargin = { ...defaultMargin, top: 40, bottom: 0 }; + } + // Merge default margin with user-specified margin. + return { ...defaultMargin, ...margin }; + }, [ margin, options ] ); + const error = validateData( data ); if ( error ) { return
      { error }
      ; @@ -147,7 +161,7 @@ const LineChart: FC< LineChartProps > = ( { theme={ theme } width={ width } height={ height } - margin={ { top: 20, right: 20, bottom: 40, left: 40, ...margin } } + margin={ margin } xScale={ { type: 'time', ...options?.xScale } } yScale={ { type: 'linear', nice: true, zero: false, ...options?.yScale } } > diff --git a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx index c83e1ced0cec3..0baf56d371ffa 100644 --- a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx @@ -109,6 +109,7 @@ FixedDimensions.parameters = { export const GridientFilled: StoryObj< typeof LineChart > = Template.bind( {} ); GridientFilled.args = { ...Default.args, + margin: undefined, data: webTrafficData, withGradientFill: true, options: { From df67099b888ba72a4558fee7fbdc2e86f05ef992 Mon Sep 17 00:00:00 2001 From: Philip Jackson Date: Tue, 28 Jan 2025 14:59:28 +1300 Subject: [PATCH 224/420] Newsletter launchpad: replace preview task with "launch site" (#41344) * Newsletter goal uses "launch site" task instead of "preview site" * Remove unused "preview_site" task This task was added in #41158 specifically for the intent-newsletter-goal intent. Since that launchpad no longer uses the task, we can safely remove it. * changelog --- .../changelog/update-newsletter-goal-site-launched | 4 ++++ .../features/launchpad/launchpad-task-definitions.php | 9 --------- .../src/features/launchpad/launchpad.php | 2 +- 3 files changed, 5 insertions(+), 10 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-newsletter-goal-site-launched diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-newsletter-goal-site-launched b/projects/packages/jetpack-mu-wpcom/changelog/update-newsletter-goal-site-launched new file mode 100644 index 0000000000000..fd6d6d3cfc563 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-newsletter-goal-site-launched @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Launchpad: Replace newsletter preview task with launch task diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php index 5f687c1117087..4332c68f2bc51 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php @@ -181,15 +181,6 @@ function wpcom_launchpad_get_task_definitions() { return '/me/account'; }, ), - 'preview_site' => array( - 'get_title' => function () { - return __( 'Preview your site', 'jetpack-mu-wpcom' ); - }, - 'is_complete_callback' => 'wpcom_launchpad_is_task_option_completed', - 'get_calypso_path' => function ( $task, $default, $data ) { - return '/view/' . $data['site_slug_encoded']; - }, - ), // Newsletter pre-launch tasks. 'first_post_published_newsletter' => array( diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php index 73f9f285ee020..d8ce8c4332a13 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad.php @@ -112,7 +112,7 @@ function wpcom_launchpad_get_task_list_definitions() { 'start_building_your_audience', 'customize_welcome_message', 'first_post_published', - 'preview_site', + 'site_launched', ), 'is_enabled_callback' => 'wpcom_launchpad_get_fullscreen_enabled', ), From a898ff9b9c8f070802b72fe581a16397233c184c Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Tue, 28 Jan 2025 10:59:13 +0700 Subject: [PATCH 225/420] Hotfix: Fix Query Loop with excerpt outputting invalid HTML (#41333) --- .../changelog/hotfix-query-loop-bug | 4 +++ .../wpcom-hotfixes/wpcom-hotfixes.php | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/hotfix-query-loop-bug diff --git a/projects/packages/jetpack-mu-wpcom/changelog/hotfix-query-loop-bug b/projects/packages/jetpack-mu-wpcom/changelog/hotfix-query-loop-bug new file mode 100644 index 0000000000000..52bf91865d6aa --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/hotfix-query-loop-bug @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Hotfix for a {Gutenberg 20.0.0, WP 6.7.x} bug causing the Content block to output truncated HTML. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-hotfixes/wpcom-hotfixes.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-hotfixes/wpcom-hotfixes.php index 5b50ae0ea76d0..a0d6df40a2601 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-hotfixes/wpcom-hotfixes.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-hotfixes/wpcom-hotfixes.php @@ -24,3 +24,29 @@ function ( $args ) { }, 20 ); + +/** + * Hotfix for a {Gutenberg 20.0.0, WP 6.7.x} bug causing the Content block to output truncated HTML. + * See: https://github.com/WordPress/gutenberg/issues/68614 + */ +if ( + // WordPress 6.7.x contains the buggy remove_serialized_parent_block() function. + version_compare( get_bloginfo( 'version' ), '6.8', '<' ) ) { + + add_filter( + 'the_content', + function ( $content ) { + if ( has_filter( 'the_content', 'remove_serialized_parent_block' ) ) { + // We will revert the content manipulation done in https://github.com/WordPress/gutenberg/pull/67272. + + // Reverts https://github.com/WordPress/gutenberg/pull/67272/files#diff-611d9e2b5a9b00eb2fbe68d044eccb195759a422e36f525186d43d752bee3d71R65-R68 + remove_filter( 'the_content', 'remove_serialized_parent_block', 8 ); + + // Reverts https://github.com/WordPress/gutenberg/pull/67272/files#diff-611d9e2b5a9b00eb2fbe68d044eccb195759a422e36f525186d43d752bee3d71R57-R63 + return remove_serialized_parent_block( $content ); + } + return $content; + }, + 1 + ); +} From 3bb7e7828a9b2019e12d19b538fe2762fb6c0df7 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Tue, 28 Jan 2025 18:55:50 +1300 Subject: [PATCH 226/420] Line Charts: Draw X axis and ticks (#41346) * draw x axis and ticks * changelog * draw x axis and ticks * fix type errors --- .../charts/changelog/update-x-axis-tick-style | 4 ++++ .../src/components/line-chart/line-chart.tsx | 6 +----- .../charts/src/providers/theme/themes.ts | 16 +++++++++++----- projects/js-packages/charts/src/types.ts | 5 +++++ 4 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-x-axis-tick-style diff --git a/projects/js-packages/charts/changelog/update-x-axis-tick-style b/projects/js-packages/charts/changelog/update-x-axis-tick-style new file mode 100644 index 0000000000000..601f09d8dd64f --- /dev/null +++ b/projects/js-packages/charts/changelog/update-x-axis-tick-style @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Line chart: draw x-axis and ticks diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index f0cb4d936aecc..ad300d003c1b5 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -110,12 +110,8 @@ const LineChart: FC< LineChartProps > = ( { const seriesColors = data?.map( series => series.options?.stroke ?? '' ).filter( Boolean ) ?? []; return buildChartTheme( { - backgroundColor: providerTheme.backgroundColor, + ...providerTheme, colors: [ ...seriesColors, ...providerTheme.colors ], - gridStyles: providerTheme.gridStyles, - tickLength: providerTheme?.tickLength || 0, - gridColor: providerTheme?.gridColor || '', - gridColorDark: providerTheme?.gridColorDark || '', } ); }, [ providerTheme, data ] ); diff --git a/projects/js-packages/charts/src/providers/theme/themes.ts b/projects/js-packages/charts/src/providers/theme/themes.ts index d00aab9fcb6ef..07aa370ff1d2f 100644 --- a/projects/js-packages/charts/src/providers/theme/themes.ts +++ b/projects/js-packages/charts/src/providers/theme/themes.ts @@ -8,12 +8,14 @@ const defaultTheme: ChartTheme = { labelBackgroundColor: '#FFFFFF', // label background color colors: [ '#98C8DF', '#006DAB', '#A6DC80', '#1F9828', '#FF8C8F' ], gridStyles: { - stroke: '#787C82', + stroke: '#DCDCDE', strokeWidth: 1, }, - tickLength: 0, + tickLength: 4, gridColor: '', gridColorDark: '', + xTickLineStyles: { stroke: 'black' }, + xAxisLineStyles: { stroke: '#DCDCDE', strokeWidth: 1 }, }; /** @@ -24,12 +26,14 @@ const jetpackTheme: ChartTheme = { labelBackgroundColor: '#FFFFFF', // label background color colors: [ '#98C8DF', '#006DAB', '#A6DC80', '#1F9828', '#FF8C8F' ], gridStyles: { - stroke: '#787C82', + stroke: '#DCDCDE', strokeWidth: 1, }, - tickLength: 0, + tickLength: 4, gridColor: '', gridColorDark: '', + xTickLineStyles: { stroke: 'black' }, + xAxisLineStyles: { stroke: '#DCDCDE', strokeWidth: 1 }, }; /** @@ -43,9 +47,11 @@ const wooTheme: ChartTheme = { stroke: '#787C82', strokeWidth: 1, }, - tickLength: 0, + tickLength: 4, gridColor: '', gridColorDark: '', + xTickLineStyles: { stroke: 'black' }, + xAxisLineStyles: { stroke: '#DCDCDE', strokeWidth: 1 }, }; export { defaultTheme, jetpackTheme, wooTheme }; diff --git a/projects/js-packages/charts/src/types.ts b/projects/js-packages/charts/src/types.ts index 46a1e858b8ae0..14c98849031fb 100644 --- a/projects/js-packages/charts/src/types.ts +++ b/projects/js-packages/charts/src/types.ts @@ -1,5 +1,6 @@ import { Orientation } from '@visx/axis'; import { ScaleType } from '@visx/scale'; +import { LineStyles } from '@visx/xychart'; import type { CSSProperties } from 'react'; type ValueOf< T > = T[ keyof T ]; @@ -70,6 +71,10 @@ export type ChartTheme = { gridColor: string; /** Color of the grid lines in dark mode */ gridColorDark: string; + /** Styles for x-axis tick lines */ + xTickLineStyles?: LineStyles; + /** Styles for x-axis line */ + xAxisLineStyles?: LineStyles; }; declare type AxisOptions = { From 3ecc4b53dab030c2a371d79fe8f5113b6ddd4625 Mon Sep 17 00:00:00 2001 From: Juanma Rodriguez Escriche Date: Tue, 28 Jan 2025 07:17:56 +0100 Subject: [PATCH 227/420] Full sync comments return expected structure to avoid ending early (#41336) * Return array with structure instead of empty array to ensure we keep looping through all ids and avoid returning early * changelog --- ...mments-return-expected-structure-to-avoid-ending-early | 4 ++++ projects/packages/sync/src/modules/class-comments.php | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 projects/packages/sync/changelog/update-full-sync-comments-return-expected-structure-to-avoid-ending-early diff --git a/projects/packages/sync/changelog/update-full-sync-comments-return-expected-structure-to-avoid-ending-early b/projects/packages/sync/changelog/update-full-sync-comments-return-expected-structure-to-avoid-ending-early new file mode 100644 index 0000000000000..d95a7ef42d8cf --- /dev/null +++ b/projects/packages/sync/changelog/update-full-sync-comments-return-expected-structure-to-avoid-ending-early @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + + diff --git a/projects/packages/sync/src/modules/class-comments.php b/projects/packages/sync/src/modules/class-comments.php index c4281f68400c9..de7be8d175fa6 100644 --- a/projects/packages/sync/src/modules/class-comments.php +++ b/projects/packages/sync/src/modules/class-comments.php @@ -552,6 +552,7 @@ public function extract_comments_and_meta( $args ) { public function get_next_chunk( $config, $status, $chunk_size ) { $comment_ids = parent::get_next_chunk( $config, $status, $chunk_size ); + // If no comment IDs were fetched, return an empty array. if ( empty( $comment_ids ) ) { return array(); } @@ -562,8 +563,13 @@ public function get_next_chunk( $config, $status, $chunk_size ) { 'order' => 'DESC', ) ); + // If no comments were fetched, make sure to return the expected structure so that status is updated correctly. if ( empty( $comments ) ) { - return array(); + return array( + 'object_ids' => $comment_ids, + 'objects' => array(), + 'meta' => array(), + ); } // Get the comment IDs from the comments that were fetched. $fetched_comment_ids = wp_list_pluck( $comments, 'comment_ID' ); From 61e7e75d5062264934534c82f61c71baf33792f4 Mon Sep 17 00:00:00 2001 From: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:10:26 +1000 Subject: [PATCH 228/420] Forms: Prevent empty string values in block attributes for field styles (#41206) * Forms: Prevent empty string values in block attributes for field styles https://github.com/Automattic/jetpack/issues/41204 Previously, when an empty value was passed to the `setNumberAttribute` function it would fallback to an empty string. This caused the empty string value to be saved within the block attributes creating unnecessary noise and data to be stored. --- .../forms/changelog/fix-forms-clean-up-empty-style-attributes | 4 ++++ .../blocks/contact-form/components/jetpack-field-controls.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 projects/packages/forms/changelog/fix-forms-clean-up-empty-style-attributes diff --git a/projects/packages/forms/changelog/fix-forms-clean-up-empty-style-attributes b/projects/packages/forms/changelog/fix-forms-clean-up-empty-style-attributes new file mode 100644 index 0000000000000..46521002a80d4 --- /dev/null +++ b/projects/packages/forms/changelog/fix-forms-clean-up-empty-style-attributes @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Prevent empty style values within form field block attributes diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js index f9cefdd0bed6c..674ff0fa06053 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-controls.js @@ -44,7 +44,7 @@ const JetpackFieldControls = ( { const parsedValue = parse( value, 10 ); setAttributes( { - [ key ]: ! isNaN( parsedValue ) ? parsedValue : '', + [ key ]: ! isNaN( parsedValue ) ? parsedValue : undefined, } ); }; From c843f8fba16c023b16849f303ef2e46e68ed48fe Mon Sep 17 00:00:00 2001 From: Richard Ortiz Date: Tue, 28 Jan 2025 10:49:14 +0100 Subject: [PATCH 229/420] Add Global Styles on Personal experiment (#41132) * Code that enables retrieving the experiment assignment on wpcom * changelog * Updated the cache key to avoid colissions with the previous experiment * Fixed code style * Updated experiment key --- .../add-global-styles-on-personal-experiment | 4 ++ .../class-global-styles-status-rest-api.php | 5 +- .../features/wpcom-global-styles/index.php | 60 ++++++++++++++++++- 3 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-global-styles-on-personal-experiment diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-global-styles-on-personal-experiment b/projects/packages/jetpack-mu-wpcom/changelog/add-global-styles-on-personal-experiment new file mode 100644 index 0000000000000..b9b5a602d37ff --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-global-styles-on-personal-experiment @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Added logic for handling Global Styles on Personal experiment assignment diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/api/class-global-styles-status-rest-api.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/api/class-global-styles-status-rest-api.php index b70887381618c..8e2302fa152d6 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/api/class-global-styles-status-rest-api.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/api/class-global-styles-status-rest-api.php @@ -65,8 +65,9 @@ public function permissions_check() { */ public function get_global_styles_info() { return array( - 'globalStylesInUse' => wpcom_global_styles_in_use(), - 'shouldLimitGlobalStyles' => wpcom_should_limit_global_styles(), + 'globalStylesInUse' => wpcom_global_styles_in_use(), + 'shouldLimitGlobalStyles' => wpcom_should_limit_global_styles(), + 'globalStylesInPersonalPlan' => wpcom_site_has_global_styles_in_personal_plan(), ); } } diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php index 4915adfe8c4ae..d72e0efb8a11e 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php @@ -9,6 +9,16 @@ use Automattic\Jetpack\Jetpack_Mu_Wpcom\Common; use Automattic\Jetpack\Plans; +/** + * Checks if Global Styles on personal are available on the current site either by A/B test assign or feature flag. + * + * @return bool Whether Global Styles are available. + */ +function is_global_styles_on_personal_plan() { + return wpcom_site_has_global_styles_in_personal_plan() + || ( class_exists( 'WPCOM_Feature_Flags' ) && WPCOM_Feature_Flags::is_enabled( WPCOM_Feature_Flags::GLOBAL_STYLES_ON_PERSONAL_PLAN ) ); +} + /** * Checks if Global Styles should be limited on the given site. * @@ -178,7 +188,7 @@ function wpcom_global_styles_enqueue_block_editor_assets() { // @TODO Remove this once the global styles are available for all users on the Personal Plan. $upgrade_url = "$calypso_domain/plans/$site_slug?plan=value_bundle&feature=style-customization"; $plan_name = Plans::get_plan( 'value_bundle' )->product_name_short; - if ( class_exists( 'WPCOM_Feature_Flags' ) && WPCOM_Feature_Flags::is_enabled( WPCOM_Feature_Flags::GLOBAL_STYLES_ON_PERSONAL_PLAN ) ) { + if ( is_global_styles_on_personal_plan() ) { $plan_name = Plans::get_plan( 'personal-bundle' )->product_name_short; $upgrade_url = "$calypso_domain/plans/$site_slug?plan=personal-bundle&feature=style-customization"; } @@ -508,7 +518,7 @@ function wpcom_display_global_styles_launch_bar() { // @TODO Remove this once the global styles are available for all users on the Personal Plan. $gs_upgrade_plan = WPCOM_VALUE_BUNDLE; $upgrade_url = "https://wordpress.com/plans/$site_slug?plan=value_bundle&feature=style-customization"; - if ( class_exists( 'WPCOM_Feature_Flags' ) && WPCOM_Feature_Flags::is_enabled( WPCOM_Feature_Flags::GLOBAL_STYLES_ON_PERSONAL_PLAN ) ) { + if ( is_global_styles_on_personal_plan() ) { $gs_upgrade_plan = WPCOM_PERSONAL_BUNDLE; $upgrade_url = "https://wordpress.com/plans/$site_slug?plan=personal-bundle&feature=style-customization"; } @@ -724,7 +734,7 @@ function wpcom_site_has_global_styles_feature( $blog_id = 0 ) { } // If the GLOBAL_STYLES_ON_PERSONAL_PLAN feature is enabled, we need to check if the site has a Personal plan and add the sticker. - if ( class_exists( 'WPCOM_Feature_Flags' ) && WPCOM_Feature_Flags::is_enabled( 'GLOBAL_STYLES_ON_PERSONAL_PLAN' ) ) { + if ( is_global_styles_on_personal_plan() ) { if ( wpcom_site_has_personal_plan( $blog_id ) ) { $note = 'Automated sticker. See paYJgx-5w2-p2'; $user = 'a8c'; // A non-empty string avoids storing the current user as author of the sticker change. @@ -760,3 +770,47 @@ function wpcom_global_styles_is_previewing_premium_theme_without_premium_plan( $ return ! $has_premium_plan_or_higher; } + +/** + * Checks whether the site has access to Global Styles with a Personal plan as part of an A/B test. + * + * @param int $blog_id Blog ID. + * @return bool Whether the site has access to Global Styles with a Personal plan. + */ +function wpcom_site_has_global_styles_in_personal_plan( $blog_id = 0 ) { + if ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) { + return false; + } + + if ( ! function_exists( '\ExPlat\assign_given_user' ) ) { + return false; + } + + if ( ! $blog_id ) { + $blog_id = get_current_blog_id(); + } + + $cache_key = "global-styles-on-personal-feb-2025-$blog_id"; + $found_in_cache = false; + $has_global_styles_in_personal_plan = wp_cache_get( $cache_key, 'a8c_experiments', false, $found_in_cache ); + if ( $found_in_cache ) { + return $has_global_styles_in_personal_plan; + } + + $owner_id = wpcom_get_blog_owner( $blog_id ); + if ( ! $owner_id ) { + return false; + } + + $owner = get_userdata( $owner_id ); + if ( ! $owner ) { + return false; + } + + // Placeholder experiment key, we need to update this to the new experiment key once it's created. + $experiment_assignment = \ExPlat\assign_given_user( 'calypso_plans_global_styles_personal_20240127', $owner ); + $has_global_styles_in_personal_plan = 'treatment' === $experiment_assignment; + // Cache the experiment assignment to prevent duplicate DB queries in the frontend. + wp_cache_set( $cache_key, $has_global_styles_in_personal_plan, 'a8c_experiments', MONTH_IN_SECONDS ); + return $has_global_styles_in_personal_plan; +} From 3396f2173e54949f3ba12444648a314ca7955c58 Mon Sep 17 00:00:00 2001 From: Adnan Haque <3737780+haqadn@users.noreply.github.com> Date: Tue, 28 Jan 2025 04:59:39 -0500 Subject: [PATCH 230/420] Fix typo in the plugin description (#41343) --- projects/plugins/boost/changelog/fix-js-typo | 5 +++++ projects/plugins/boost/readme.txt | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/boost/changelog/fix-js-typo diff --git a/projects/plugins/boost/changelog/fix-js-typo b/projects/plugins/boost/changelog/fix-js-typo new file mode 100644 index 0000000000000..4369d56f98a8f --- /dev/null +++ b/projects/plugins/boost/changelog/fix-js-typo @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Fixed a couple of typos + + diff --git a/projects/plugins/boost/readme.txt b/projects/plugins/boost/readme.txt index 44eda5354ba7a..ecce347fff41c 100644 --- a/projects/plugins/boost/readme.txt +++ b/projects/plugins/boost/readme.txt @@ -43,9 +43,9 @@ Currently, the plugin has 6 performance modules available: 2. *Page Cache* speeds up your site by saving pages as static files. These files are quickly served to visitors, reducing load times and enhancing user experience. -3. *Defer Non-Essential Javascript* moves some tasks to after the page loads, so that important visual information can be seen sooner and your website loads quicker. +3. *Defer Non-Essential JavaScript* moves some tasks to after the page loads, so that important visual information can be seen sooner and your website loads quicker. - Read more about deferring javascript at [web.dev](https://jetpack.com/redirect/?source=jetpack-boost-defer-js) + Read more about deferring JavaScript at [web.dev](https://jetpack.com/redirect/?source=jetpack-boost-defer-js) 4. *Image Guide* is a must-have feature for anyone who wants to optimize the images on their website. With this guide, you can ensure that the images on your site are the right size and dimensions, which is critical for improving user experience, page speed, and site ranking. Following the tips and best practices outlined in the guide, you can reduce image file sizes and speed up your site. Check out our [support page](https://jetpack.com/support/jetpack-boost/image-performance-guide/) to learn more about this feature and how it can help you achieve a faster and smoother website experience for your users. From fc53f8f9a1875ffcf2795cf685db9c61ad33f2a4 Mon Sep 17 00:00:00 2001 From: Calypso Bot Date: Tue, 28 Jan 2025 11:10:44 +0100 Subject: [PATCH 231/420] phan: Update wpcom stubs (#41352) Co-authored-by: Phabricator Bot --- .phan/stubs/wpcom-stubs.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.phan/stubs/wpcom-stubs.php b/.phan/stubs/wpcom-stubs.php index 7bb02bf46dd56..b3026d3f57d23 100644 --- a/.phan/stubs/wpcom-stubs.php +++ b/.phan/stubs/wpcom-stubs.php @@ -4,7 +4,7 @@ * `bin/teamcity-builds/jetpack-stubs/stub-defs.php` and regenerate the stubs * by triggering the Jetpack Staging → Update WPCOM Stubs job in TeamCity. * - * Stubs automatically generated from WordPress.com commit 8455d799e19d81bab955e52ecf72bcda5d4e6e34. + * Stubs automatically generated from WordPress.com commit 25fe8874f126229252809211e216317f571c666f. */ namespace { @@ -1289,6 +1289,12 @@ public static function is_enabled(string $feature): bool { } } + /** + * @phan-return mixed + */ + function is_graylisted($_blog_id = \NULL) + { + } /** * @param string $new_path * @param string $path From 4da10aa7caa8d387fbb11a0bd0b6ac648453d6cb Mon Sep 17 00:00:00 2001 From: Ella <4710635+ellatrix@users.noreply.github.com> Date: Tue, 28 Jan 2025 11:47:54 +0100 Subject: [PATCH 232/420] MU WPCOM: Remove admin bar launch button from greylisted sites (#41340) --- .../changelog/fix-launch-button-wpcom | 5 +++++ .../src/features/launch-button/index.php | 16 ++++++++++++++++ .../changelog/fix-launch-button-wpcom | 5 +++++ .../wpcomsh/changelog/fix-launch-button-wpcom | 5 +++++ 4 files changed, 31 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-launch-button-wpcom create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/fix-launch-button-wpcom create mode 100644 projects/plugins/wpcomsh/changelog/fix-launch-button-wpcom diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-launch-button-wpcom b/projects/packages/jetpack-mu-wpcom/changelog/fix-launch-button-wpcom new file mode 100644 index 0000000000000..2eb16780dbdf0 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-launch-button-wpcom @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: restore an early return + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launch-button/index.php b/projects/packages/jetpack-mu-wpcom/src/features/launch-button/index.php index a95f2aeeaebba..4bafa3e325e20 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launch-button/index.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launch-button/index.php @@ -11,9 +11,25 @@ * @param WP_Admin_Bar $admin_bar The WordPress admin bar. */ function wpcom_add_launch_button_to_admin_bar( WP_Admin_Bar $admin_bar ) { + $current_blog_id = get_current_blog_id(); + + if ( function_exists( 'is_graylisted' ) && is_graylisted( $current_blog_id ) ) { + return false; + } + if ( ! current_user_can( 'manage_options' ) ) { return; } + + if ( function_exists( 'has_blog_sticker' ) && has_blog_sticker( 'difm-lite-in-progress' ) ) { + return false; + } + + // No button for agency-managed sites. + if ( ! empty( get_option( 'is_fully_managed_agency_site' ) ) ) { + return false; + } + $is_launched = get_option( 'launch-status' ) !== 'unlaunched'; if ( $is_launched ) { return; diff --git a/projects/plugins/mu-wpcom-plugin/changelog/fix-launch-button-wpcom b/projects/plugins/mu-wpcom-plugin/changelog/fix-launch-button-wpcom new file mode 100644 index 0000000000000..2eb16780dbdf0 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/fix-launch-button-wpcom @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: restore an early return + + diff --git a/projects/plugins/wpcomsh/changelog/fix-launch-button-wpcom b/projects/plugins/wpcomsh/changelog/fix-launch-button-wpcom new file mode 100644 index 0000000000000..2eb16780dbdf0 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/fix-launch-button-wpcom @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: restore an early return + + From 279090a4e0dc04354d29e85bb45603e0180ba728 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Tue, 28 Jan 2025 02:54:59 -0800 Subject: [PATCH 233/420] Social | Move admin page code to package (#41239) * Move the JS entrypoint * Update publicize webpack config to bundle the admin page * Move the Social admin page and assets logic to publicize package * Add changelog * Update pnpm-lock.yaml * Phan is not happy * Fix JS unit tests * Update composer lock files * Changelog * Dequeue old plugin assets * Add a fail-safe value to handle old plugin * Add plugin info * Ensure to build dependent packages for E2E tests * We are still on v6 * Use admin_menu instead of init * Update composer lock files * Update required social version following a release * Restore todo for version update * Use the hook suffix from Admin_Menu::add_menu * Use null as the default version * Reuse the plugin version from script data * Update class-social-admin-page.php * Since we enable the page only if Social plugin is active, we can remove the fallback --- pnpm-lock.yaml | 39 +++++ ...ate-social-move-admin-page-code-to-package | 4 + .../js-packages/publicize-components/index.ts | 1 - .../publicize-components/package.json | 3 +- .../components/admin-page/entry-point.tsx} | 2 +- .../src/components/admin-page/index.tsx | 4 +- .../components/admin-page/test/index.test.jsx | 4 +- ...ate-social-move-admin-page-code-to-package | 4 + projects/packages/publicize/composer.json | 1 + projects/packages/publicize/package.json | 13 ++ projects/packages/publicize/postcss.config.js | 21 +++ .../src/class-publicize-script-data.php | 32 ++++ .../publicize/src/class-publicize-setup.php | 2 + .../publicize/src/class-social-admin-page.php | 140 ++++++++++++++++++ .../publicize/src/js/social-admin-page.js | 1 + projects/packages/publicize/webpack.config.js | 102 +++++++------ ...ate-social-move-admin-page-code-to-package | 5 + projects/plugins/jetpack/composer.lock | 3 +- .../plugins/jetpack/tests/e2e/package.json | 2 +- ...ate-social-move-admin-page-code-to-package | 4 + projects/plugins/social/composer.lock | 3 +- .../social/src/class-jetpack-social.php | 102 +------------ .../plugins/social/tests/e2e/package.json | 2 +- projects/plugins/social/webpack.config.js | 17 --- 24 files changed, 340 insertions(+), 171 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/update-social-move-admin-page-code-to-package rename projects/{plugins/social/src/js/index.js => js-packages/publicize-components/src/components/admin-page/entry-point.tsx} (86%) create mode 100644 projects/packages/publicize/changelog/update-social-move-admin-page-code-to-package create mode 100644 projects/packages/publicize/postcss.config.js create mode 100644 projects/packages/publicize/src/class-social-admin-page.php create mode 100644 projects/packages/publicize/src/js/social-admin-page.js create mode 100644 projects/plugins/jetpack/changelog/update-social-move-admin-page-code-to-package create mode 100644 projects/plugins/social/changelog/update-social-move-admin-page-code-to-package diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53ec99628d128..ff2b608d0706e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2799,19 +2799,58 @@ importers: '@automattic/jetpack-analytics': specifier: workspace:* version: link:../../js-packages/analytics + '@automattic/jetpack-publicize-components': + specifier: workspace:* + version: link:../../js-packages/publicize-components '@wordpress/i18n': specifier: 5.16.0 version: 5.16.0 devDependencies: + '@automattic/calypso-color-schemes': + specifier: 3.1.3 + version: 3.1.3 + '@automattic/color-studio': + specifier: 4.0.0 + version: 4.0.0 '@automattic/jetpack-webpack-config': specifier: workspace:* version: link:../../js-packages/webpack-config + '@babel/core': + specifier: 7.26.0 + version: 7.26.0 + '@babel/preset-env': + specifier: 7.26.0 + version: 7.26.0(@babel/core@7.26.0) + '@babel/runtime': + specifier: 7.26.0 + version: 7.26.0 + '@csstools/postcss-global-data': + specifier: 2.1.1 + version: 2.1.1(postcss@8.4.47) '@wordpress/browserslist-config': specifier: 6.16.0 version: 6.16.0 + autoprefixer: + specifier: 10.4.20 + version: 10.4.20(postcss@8.4.47) concurrently: specifier: 7.6.0 version: 7.6.0 + postcss: + specifier: 8.4.47 + version: 8.4.47 + postcss-custom-properties: + specifier: 12.1.7 + version: 12.1.7(postcss@8.4.47) + postcss-loader: + specifier: 6.2.0 + version: 6.2.0(postcss@8.4.47)(webpack@5.94.0) + sass: + specifier: 1.64.1 + version: 1.64.1 + sass-loader: + specifier: 12.4.0 + version: 12.4.0(sass@1.64.1)(webpack@5.94.0) webpack: specifier: 5.94.0 version: 5.94.0(webpack-cli@6.0.1) diff --git a/projects/js-packages/publicize-components/changelog/update-social-move-admin-page-code-to-package b/projects/js-packages/publicize-components/changelog/update-social-move-admin-page-code-to-package new file mode 100644 index 0000000000000..51ecb14ab3cec --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/update-social-move-admin-page-code-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Moved Social admin page code and assets logic to publicize package diff --git a/projects/js-packages/publicize-components/index.ts b/projects/js-packages/publicize-components/index.ts index a18a2aded03fe..7f79279c8d3d8 100644 --- a/projects/js-packages/publicize-components/index.ts +++ b/projects/js-packages/publicize-components/index.ts @@ -18,7 +18,6 @@ export { default as PublicizePanel } from './src/components/panel'; export { default as ReviewPrompt } from './src/components/review-prompt'; export { default as PostPublishPanels } from './src/components/post-publish-panels'; export { default as ConnectionManagement } from './src/components/connection-management'; -export { default as SocialAdminPage } from './src/components/admin-page'; export { default as UtmToggle } from './src/components/utm-toggle'; export { default as useSocialMediaConnections } from './src/hooks/use-social-media-connections'; diff --git a/projects/js-packages/publicize-components/package.json b/projects/js-packages/publicize-components/package.json index 6464503f3f7a3..2309fc5bbe368 100644 --- a/projects/js-packages/publicize-components/package.json +++ b/projects/js-packages/publicize-components/package.json @@ -71,7 +71,8 @@ "react-dom": "18.3.1" }, "exports": { - ".": "./index.ts" + ".": "./index.ts", + "./social-admin-page": "./src/components/admin-page/entry-point.tsx" }, "peerDependencies": { "react-dom": "^18.0.0" diff --git a/projects/plugins/social/src/js/index.js b/projects/js-packages/publicize-components/src/components/admin-page/entry-point.tsx similarity index 86% rename from projects/plugins/social/src/js/index.js rename to projects/js-packages/publicize-components/src/components/admin-page/entry-point.tsx index 1fecb1209bc3c..0800bf6d47a76 100644 --- a/projects/plugins/social/src/js/index.js +++ b/projects/js-packages/publicize-components/src/components/admin-page/entry-point.tsx @@ -1,7 +1,7 @@ import { ThemeProvider } from '@automattic/jetpack-components'; -import { SocialAdminPage } from '@automattic/jetpack-publicize-components'; import * as WPElement from '@wordpress/element'; import React from 'react'; +import { SocialAdminPage } from './index'; /** * Initial render function. diff --git a/projects/js-packages/publicize-components/src/components/admin-page/index.tsx b/projects/js-packages/publicize-components/src/components/admin-page/index.tsx index 40bd63fffc54a..42a808cb28f6e 100644 --- a/projects/js-packages/publicize-components/src/components/admin-page/index.tsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/index.tsx @@ -24,7 +24,7 @@ import SocialModuleToggle from './toggles/social-module-toggle'; import SocialNotesToggle from './toggles/social-notes-toggle'; import UtmToggle from './toggles/utm-toggle'; -const SocialAdminPage = () => { +export const SocialAdminPage = () => { const { isUserConnected, isRegistered } = useConnection(); const showConnectionCard = ! isRegistered || ! isUserConnected; const [ forceDisplayPricingPage, setForceDisplayPricingPage ] = useState( false ); @@ -93,5 +93,3 @@ const SocialAdminPage = () => { ); }; - -export default SocialAdminPage; diff --git a/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx b/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx index e959c6f18cfcd..d0a8c92751099 100644 --- a/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx @@ -2,7 +2,7 @@ import { render, renderHook, screen } from '@testing-library/react'; import { useSelect, createReduxStore, register } from '@wordpress/data'; import React from 'react'; import { SOCIAL_STORE_CONFIG, SOCIAL_STORE_ID } from '../../../social-store'; -import Admin from '../index'; +import { SocialAdminPage } from '../index'; const store = createReduxStore( SOCIAL_STORE_ID, SOCIAL_STORE_CONFIG ); register( store ); @@ -28,7 +28,7 @@ describe( 'load the app', () => { jest.spyOn( storeSelect, 'getSocialPluginSettings' ).mockReset().mockReturnValue( { show_pricing_page: true, } ); - render( ); + render( ); expect( screen.getByText( `Jetpack Social ${ version }` ) ).toBeInTheDocument(); } ); } ); diff --git a/projects/packages/publicize/changelog/update-social-move-admin-page-code-to-package b/projects/packages/publicize/changelog/update-social-move-admin-page-code-to-package new file mode 100644 index 0000000000000..51ecb14ab3cec --- /dev/null +++ b/projects/packages/publicize/changelog/update-social-move-admin-page-code-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Moved Social admin page code and assets logic to publicize package diff --git a/projects/packages/publicize/composer.json b/projects/packages/publicize/composer.json index 9c7672a02e161..52131815e9e1e 100644 --- a/projects/packages/publicize/composer.json +++ b/projects/packages/publicize/composer.json @@ -5,6 +5,7 @@ "license": "GPL-2.0-or-later", "require": { "php": ">=7.2", + "automattic/jetpack-admin-ui": "@dev", "automattic/jetpack-connection": "@dev", "automattic/jetpack-autoloader": "@dev", "automattic/jetpack-config": "@dev", diff --git a/projects/packages/publicize/package.json b/projects/packages/publicize/package.json index 3de93476f47eb..7eca2206215ba 100644 --- a/projects/packages/publicize/package.json +++ b/projects/packages/publicize/package.json @@ -27,14 +27,27 @@ "extends @wordpress/browserslist-config" ], "devDependencies": { + "@automattic/calypso-color-schemes": "3.1.3", + "@automattic/color-studio": "4.0.0", "@automattic/jetpack-webpack-config": "workspace:*", + "@babel/core": "7.26.0", + "@babel/preset-env": "7.26.0", + "@babel/runtime": "7.26.0", + "@csstools/postcss-global-data": "2.1.1", "@wordpress/browserslist-config": "6.16.0", + "autoprefixer": "10.4.20", "concurrently": "7.6.0", + "postcss": "8.4.47", + "postcss-custom-properties": "12.1.7", + "postcss-loader": "6.2.0", + "sass": "1.64.1", + "sass-loader": "12.4.0", "webpack": "5.94.0", "webpack-cli": "6.0.1" }, "dependencies": { "@automattic/jetpack-analytics": "workspace:*", + "@automattic/jetpack-publicize-components": "workspace:*", "@wordpress/i18n": "5.16.0" } } diff --git a/projects/packages/publicize/postcss.config.js b/projects/packages/publicize/postcss.config.js new file mode 100644 index 0000000000000..2d7e7fa74e8a9 --- /dev/null +++ b/projects/packages/publicize/postcss.config.js @@ -0,0 +1,21 @@ +module.exports = () => ( { + plugins: [ + require( '@csstools/postcss-global-data' )( { + // Provide the properties that postcss-custom-properties is going to work with. + files: [ require.resolve( '@automattic/calypso-color-schemes/root-only/index.css' ) ], + } ), + require( 'postcss-custom-properties' )( { + // Use of `preserve: false` dates back to when we still used @automattic/calypso-build. + // Ideally we'd get rid of it to properly make use of CSS vars, but first we have to + // figure out how to ensure the vars actually get defined in the browser without + // including them in every bundle. Some base stylesheet (wp_register_style) the other + // stylesheets depend on maybe? And also deal with extremely generic vars like "--color-text". + // + // See also https://github.com/Automattic/jetpack/pull/13854#issuecomment-550898168, + // where people were confused about what was going on when calypso-build stopped + // including a postcss.config.js like this by default. + preserve: false, + } ), + require( 'autoprefixer' ), + ], +} ); diff --git a/projects/packages/publicize/src/class-publicize-script-data.php b/projects/packages/publicize/src/class-publicize-script-data.php index 0c42234e95630..760a00ccdb484 100644 --- a/projects/packages/publicize/src/class-publicize-script-data.php +++ b/projects/packages/publicize/src/class-publicize-script-data.php @@ -124,6 +124,7 @@ public static function get_admin_script_data() { 'shares_data' => array(), 'urls' => array(), 'settings' => self::get_social_settings(), + 'plugin_info' => self::get_plugin_info(), ); if ( ! Utils::is_publicize_active() ) { @@ -164,6 +165,37 @@ public static function get_social_settings() { ); } + /** + * Get the plugin info. + * + * @return array + */ + public static function get_plugin_info() { + + $social_version = null; + $jetpack_version = null; + + if ( defined( 'JETPACK_SOCIAL_PLUGIN_ROOT_FILE' ) ) { + + $plugin_data = get_plugin_data( (string) constant( 'JETPACK_SOCIAL_PLUGIN_ROOT_FILE' ), false, false ); + + $social_version = $plugin_data['Version']; + } + + if ( defined( 'JETPACK__VERSION' ) ) { + $jetpack_version = constant( 'JETPACK__VERSION' ); + } + + return array( + 'social' => array( + 'version' => $social_version, + ), + 'jetpack' => array( + 'version' => $jetpack_version, + ), + ); + } + /** * Get the social store initial state. * diff --git a/projects/packages/publicize/src/class-publicize-setup.php b/projects/packages/publicize/src/class-publicize-setup.php index 77a31cf3c72f9..6b7c7b7e7a9c0 100644 --- a/projects/packages/publicize/src/class-publicize-setup.php +++ b/projects/packages/publicize/src/class-publicize-setup.php @@ -50,6 +50,8 @@ public static function pre_initialization() { new $controller(); } } + + Social_Admin_Page::init(); } /** diff --git a/projects/packages/publicize/src/class-social-admin-page.php b/projects/packages/publicize/src/class-social-admin-page.php new file mode 100644 index 0000000000000..4c4ee52418e1a --- /dev/null +++ b/projects/packages/publicize/src/class-social-admin-page.php @@ -0,0 +1,140 @@ + +
      + true, + 'textdomain' => 'jetpack-publicize-pkg', + 'enqueue' => true, + ) + ); + } +} diff --git a/projects/packages/publicize/src/js/social-admin-page.js b/projects/packages/publicize/src/js/social-admin-page.js new file mode 100644 index 0000000000000..e0f102cb471b3 --- /dev/null +++ b/projects/packages/publicize/src/js/social-admin-page.js @@ -0,0 +1 @@ +export * from '@automattic/jetpack-publicize-components/social-admin-page'; diff --git a/projects/packages/publicize/webpack.config.js b/projects/packages/publicize/webpack.config.js index bb472b1e9cc68..3bbc9c00325f0 100644 --- a/projects/packages/publicize/webpack.config.js +++ b/projects/packages/publicize/webpack.config.js @@ -1,56 +1,72 @@ const path = require( 'path' ); const jetpackWebpackConfig = require( '@automattic/jetpack-webpack-config/webpack' ); +const socialWebpackConfig = { + mode: jetpackWebpackConfig.mode, + devtool: jetpackWebpackConfig.devtool, + output: { + ...jetpackWebpackConfig.output, + path: path.resolve( './build' ), + }, + optimization: { + ...jetpackWebpackConfig.optimization, + }, + resolve: { + ...jetpackWebpackConfig.resolve, + }, + node: false, + plugins: [ ...jetpackWebpackConfig.StandardPlugins() ], + module: { + strictExportPresence: true, + rules: [ + // Transpile JavaScript + jetpackWebpackConfig.TranspileRule( { + exclude: /node_modules\//, + } ), + + // Transpile @automattic/* in node_modules too. + jetpackWebpackConfig.TranspileRule( { + includeNodeModules: [ '@automattic/' ], + } ), + // Handle CSS. + jetpackWebpackConfig.CssRule( { + extensions: [ 'css', 'sass', 'scss' ], + extraLoaders: [ + { + loader: 'postcss-loader', + options: { + postcssOptions: { config: path.join( __dirname, 'postcss.config.js' ) }, + }, + }, + 'sass-loader', + ], + } ), + + // Handle images. + jetpackWebpackConfig.FileRule(), + ], + }, + externals: { + ...jetpackWebpackConfig.externals, + jetpackConfig: JSON.stringify( { + consumer_slug: 'jetpack-social', + } ), + }, +}; + module.exports = [ { + ...socialWebpackConfig, entry: { 'classic-editor-share-limits': './src/js/classic-editor-share-limits.js', 'classic-editor-connections': './src/js/classic-editor-connections.js', }, - mode: jetpackWebpackConfig.mode, - devtool: jetpackWebpackConfig.devtool, - output: { - ...jetpackWebpackConfig.output, - path: path.resolve( './build' ), - }, - optimization: { - ...jetpackWebpackConfig.optimization, - }, - resolve: { - ...jetpackWebpackConfig.resolve, - }, - node: false, - plugins: [ ...jetpackWebpackConfig.StandardPlugins() ], - module: { - strictExportPresence: true, - rules: [ - // Transpile JavaScript - jetpackWebpackConfig.TranspileRule( { - exclude: /node_modules\//, - } ), - - // Transpile @automattic/* in node_modules too. - jetpackWebpackConfig.TranspileRule( { - includeNodeModules: [ '@automattic/' ], - } ), - - // Handle CSS. - jetpackWebpackConfig.CssRule( { - extensions: [ 'css', 'sass', 'scss' ], - extraLoaders: [ - { - loader: 'postcss-loader', - options: { - postcssOptions: { config: path.join( __dirname, 'postcss.config.js' ) }, - }, - }, - 'sass-loader', - ], - } ), + }, - // Handle images. - jetpackWebpackConfig.FileRule(), - ], + { + ...socialWebpackConfig, + entry: { + 'social-admin-page': './src/js/social-admin-page.js', }, }, ]; diff --git a/projects/plugins/jetpack/changelog/update-social-move-admin-page-code-to-package b/projects/plugins/jetpack/changelog/update-social-move-admin-page-code-to-package new file mode 100644 index 0000000000000..234b1440747ed --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-social-move-admin-page-code-to-package @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Updated composer lock file + + diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index 931fbc89862b2..0b2dd6881f968 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -2288,9 +2288,10 @@ "dist": { "type": "path", "url": "../../packages/publicize", - "reference": "4f697dcdd12b550101de882bd997839907281ba6" + "reference": "65042f11130f6641281e873ad49d6ce66033a7b0" }, "require": { + "automattic/jetpack-admin-ui": "@dev", "automattic/jetpack-assets": "@dev", "automattic/jetpack-autoloader": "@dev", "automattic/jetpack-config": "@dev", diff --git a/projects/plugins/jetpack/tests/e2e/package.json b/projects/plugins/jetpack/tests/e2e/package.json index 5f29079ed847b..f2a29c53349d8 100644 --- a/projects/plugins/jetpack/tests/e2e/package.json +++ b/projects/plugins/jetpack/tests/e2e/package.json @@ -13,7 +13,7 @@ "license": "GPL-2.0-or-later", "author": "Automattic", "scripts": { - "build": "pnpm jetpack build packages/forms packages/assets packages/connection packages/blaze plugins/jetpack -v --no-pnpm-install --production", + "build": "pnpm jetpack build packages/forms packages/assets packages/connection packages/publicize packages/blaze plugins/jetpack -v --no-pnpm-install --production", "clean": "rm -rf output", "config:decrypt": "pnpm test-decrypt-default-config && pnpm test-decrypt-config", "distclean": "rm -rf node_modules", diff --git a/projects/plugins/social/changelog/update-social-move-admin-page-code-to-package b/projects/plugins/social/changelog/update-social-move-admin-page-code-to-package new file mode 100644 index 0000000000000..51ecb14ab3cec --- /dev/null +++ b/projects/plugins/social/changelog/update-social-move-admin-page-code-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Moved Social admin page code and assets logic to publicize package diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index 24c943f0a2cfb..f29e71be57c0d 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -1539,9 +1539,10 @@ "dist": { "type": "path", "url": "../../packages/publicize", - "reference": "4f697dcdd12b550101de882bd997839907281ba6" + "reference": "65042f11130f6641281e873ad49d6ce66033a7b0" }, "require": { + "automattic/jetpack-admin-ui": "@dev", "automattic/jetpack-assets": "@dev", "automattic/jetpack-autoloader": "@dev", "automattic/jetpack-config": "@dev", diff --git a/projects/plugins/social/src/class-jetpack-social.php b/projects/plugins/social/src/class-jetpack-social.php index a22e76ee54980..d71fafdb7db8f 100644 --- a/projects/plugins/social/src/class-jetpack-social.php +++ b/projects/plugins/social/src/class-jetpack-social.php @@ -9,7 +9,6 @@ exit( 0 ); } -use Automattic\Jetpack\Admin_UI\Admin_Menu; use Automattic\Jetpack\Assets; use Automattic\Jetpack\Connection\Initial_State as Connection_Initial_State; use Automattic\Jetpack\Connection\Manager as Connection_Manager; @@ -18,6 +17,7 @@ use Automattic\Jetpack\Modules; use Automattic\Jetpack\My_Jetpack\Initializer as My_Jetpack_Initializer; use Automattic\Jetpack\Publicize\Jetpack_Social_Settings\Dismissed_Notices; +use Automattic\Jetpack\Publicize\Social_Admin_Page; use Automattic\Jetpack\Status; use Automattic\Jetpack\Terms_Of_Service; use Automattic\Jetpack\Tracking; @@ -82,6 +82,8 @@ function () { 1 ); + Social_Admin_Page::init(); + add_action( 'init', array( $this, 'do_init' ) ); // Activate the module as the plugin is activated @@ -125,27 +127,9 @@ function () { * plugins_loaded is firing. This includes translated strings. */ public function do_init() { - $page_suffix = Admin_Menu::add_menu( - __( 'Jetpack Social', 'jetpack-social' ), - _x( 'Social', 'The Jetpack Social product name, without the Jetpack prefix', 'jetpack-social' ), - 'manage_options', - 'jetpack-social', - array( $this, 'plugin_settings_page' ), - 4 - ); - - add_action( 'load-' . $page_suffix, array( $this, 'admin_init' ) ); - ( new Automattic\Jetpack\Social\Note() )->init(); } - /** - * Initialize the admin resources. - */ - public function admin_init() { - add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) ); - } - /** * Check if we have a paid Jetpack Social plan. */ @@ -170,40 +154,6 @@ public function get_plugin_version() { return ! empty( $plugin_version ) ? $plugin_version : ''; } - /** - * Enqueue plugin admin scripts and styles. - */ - public function enqueue_admin_scripts() { - $screen = get_current_screen(); - if ( ! empty( $screen ) && 'jetpack_page_jetpack-social' !== $screen->base ) { - return; - } - - Assets::register_script( - 'jetpack-social', - 'build/index.js', - JETPACK_SOCIAL_PLUGIN_ROOT_FILE, - array( - 'in_footer' => true, - 'textdomain' => 'jetpack-social', - ) - ); - - Assets::enqueue_script( 'jetpack-social' ); - // Initial JS state including JP Connection data. - Connection_Initial_State::render_script( 'jetpack-social' ); - wp_add_inline_script( 'jetpack-social', $this->render_initial_state(), 'before' ); - } - - /** - * Render the initial state into a JavaScript variable. - * - * @return string - */ - public function render_initial_state() { - return 'var jetpackSocialInitialState=JSON.parse(decodeURIComponent("' . rawurlencode( wp_json_encode( $this->initial_state() ) ) . '"));'; - } - /** * Refresh plan data. */ @@ -260,52 +210,6 @@ public function set_social_admin_script_data( $data ) { return $data; } - /** - * Get the initial state data for hydrating the React UI. - * - * @return array - */ - public function initial_state() { - global $publicize; - - $state = array( - 'siteData' => array( - 'adminUrl' => esc_url( admin_url() ), - 'apiRoot' => esc_url_raw( rest_url() ), - 'apiNonce' => wp_create_nonce( 'wp_rest' ), - 'registrationNonce' => wp_create_nonce( 'jetpack-registration-nonce' ), - 'siteSuffix' => ( new Status() )->get_site_suffix(), - 'blogID' => Connection_Manager::get_site_id( true ), - 'pluginVersion' => $this->get_plugin_version(), - ), - ); - - if ( $this->is_connected() ) { - $jetpack_social_settings = new Automattic\Jetpack\Publicize\Jetpack_Social_Settings\Settings(); - $initial_state = $jetpack_social_settings->get_initial_state(); - - $state = array_merge( - $state, - array( - 'jetpackSettings' => array( - 'publicize_active' => self::is_publicize_active(), - 'show_pricing_page' => self::should_show_pricing_page(), - 'showNudge' => ! $publicize->has_paid_plan( true ), - 'isEnhancedPublishingEnabled' => $publicize->has_enhanced_publishing_feature(), - 'dismissedNotices' => Dismissed_Notices::get_dismissed_notices(), - 'supportedAdditionalConnections' => $publicize->get_supported_additional_connections(), - 'social_notes_enabled' => $jetpack_social_settings->is_social_notes_enabled(), - 'social_notes_config' => $jetpack_social_settings->get_social_notes_config(), - ), - 'sharesData' => $publicize->get_publicize_shares_info( Jetpack_Options::get_option( 'id' ) ), - ), - $initial_state - ); - } - - return $state; - } - /** * Returns a boolean as to whether we have a plan that supports * sharing beyond the free limit. diff --git a/projects/plugins/social/tests/e2e/package.json b/projects/plugins/social/tests/e2e/package.json index 3aae91eaad655..32fdb0c1913fe 100644 --- a/projects/plugins/social/tests/e2e/package.json +++ b/projects/plugins/social/tests/e2e/package.json @@ -14,7 +14,7 @@ "license": "GPL-2.0-or-later", "author": "Automattic", "scripts": { - "build": "pnpm jetpack build packages/assets packages/connection plugins/social plugins/jetpack -v --no-pnpm-install --production", + "build": "pnpm jetpack build packages/assets packages/connection packages/publicize plugins/social plugins/jetpack -v --no-pnpm-install --production", "clean": "rm -rf output", "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/_jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", "distclean": "rm -rf node_modules", diff --git a/projects/plugins/social/webpack.config.js b/projects/plugins/social/webpack.config.js index 30ce24491fd8e..c91374497c784 100644 --- a/projects/plugins/social/webpack.config.js +++ b/projects/plugins/social/webpack.config.js @@ -64,21 +64,4 @@ module.exports = [ ], }, }, - { - ...socialWebpackConfig, - entry: { - index: './src/js/index.js', - }, - module: { - ...socialWebpackConfig.module, - rules: [ - ...socialWebpackConfig.module.rules, - // Handle CSS. - jetpackWebpackConfig.CssRule( { - extensions: [ 'css', 'sass', 'scss' ], - extraLoaders: [ postcssLoader, 'sass-loader' ], - } ), - ], - }, - }, ]; From 3da8248a147454f4a1723a08c3f12f1de65af360 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Tue, 28 Jan 2025 03:55:33 -0800 Subject: [PATCH 234/420] Forms: Fixes date picker field compatibility for dark themes (#41342) * Forms: Improve date picker for dark themes * changelog --- projects/packages/forms/changelog/fix-editor-select-field | 4 ++++ .../forms/src/contact-form/css/jquery-ui-datepicker.css | 7 +++++++ projects/plugins/jetpack/changelog/fix-editor-select-field | 4 ++++ 3 files changed, 15 insertions(+) create mode 100644 projects/packages/forms/changelog/fix-editor-select-field create mode 100644 projects/plugins/jetpack/changelog/fix-editor-select-field diff --git a/projects/packages/forms/changelog/fix-editor-select-field b/projects/packages/forms/changelog/fix-editor-select-field new file mode 100644 index 0000000000000..16a185045434e --- /dev/null +++ b/projects/packages/forms/changelog/fix-editor-select-field @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: fix dark themes date picker styles diff --git a/projects/packages/forms/src/contact-form/css/jquery-ui-datepicker.css b/projects/packages/forms/src/contact-form/css/jquery-ui-datepicker.css index 10024b6feade7..7525a02e4776a 100644 --- a/projects/packages/forms/src/contact-form/css/jquery-ui-datepicker.css +++ b/projects/packages/forms/src/contact-form/css/jquery-ui-datepicker.css @@ -12,6 +12,13 @@ width: auto; } +.ui-datepicker-calendar, +.ui-datepicker-header .ui-datepicker-title, +.ui-datepicker-header a { + color: #444; + text-decoration: none; +} + .ui-datepicker * { padding: 0; -webkit-border-radius: 0; diff --git a/projects/plugins/jetpack/changelog/fix-editor-select-field b/projects/plugins/jetpack/changelog/fix-editor-select-field new file mode 100644 index 0000000000000..722f203b9183d --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-editor-select-field @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Forms: Fixed datepicker appearance on dark themes From 58a5a3befca99a553849137bf1b4ee70de9e9648 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Tue, 28 Jan 2025 03:55:48 -0800 Subject: [PATCH 235/420] Forms: Fixes permenatly delete form responses (#41321) * Forms: fix permenatly delete form response inline * changelog --- .../forms/changelog/fix-permenatly-delete-form-responses | 4 ++++ projects/packages/forms/src/contact-form/class-admin.php | 8 ++++++++ .../packages/forms/src/contact-form/js/grunion-admin.js | 5 +++++ .../changelog/fix-permenatly-delete-form-responses | 4 ++++ 4 files changed, 21 insertions(+) create mode 100644 projects/packages/forms/changelog/fix-permenatly-delete-form-responses create mode 100644 projects/plugins/jetpack/changelog/fix-permenatly-delete-form-responses diff --git a/projects/packages/forms/changelog/fix-permenatly-delete-form-responses b/projects/packages/forms/changelog/fix-permenatly-delete-form-responses new file mode 100644 index 0000000000000..73fbc4f4c5c08 --- /dev/null +++ b/projects/packages/forms/changelog/fix-permenatly-delete-form-responses @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Fix permently deleting form reponses via the quicklinks diff --git a/projects/packages/forms/src/contact-form/class-admin.php b/projects/packages/forms/src/contact-form/class-admin.php index 99c847bddf859..2a42907b44810 100644 --- a/projects/packages/forms/src/contact-form/class-admin.php +++ b/projects/packages/forms/src/contact-form/class-admin.php @@ -1200,6 +1200,14 @@ public function grunion_ajax_spam() { if ( ! wp_trash_post( $post_id ) ) { wp_die( esc_html__( 'Error in moving to Trash.', 'jetpack-forms' ) ); } + } elseif ( $_POST['make_it'] === 'delete' ) { + if ( ! current_user_can( $post_type_object->cap->delete_post, $post_id ) ) { + wp_die( esc_html__( 'You are not allowed to move this item to the Trash.', 'jetpack-forms' ) ); + } + + if ( ! wp_delete_post( $post_id, true ) ) { + wp_die( esc_html__( 'Error in deleting post.', 'jetpack-forms' ) ); + } } $sql = " diff --git a/projects/packages/forms/src/contact-form/js/grunion-admin.js b/projects/packages/forms/src/contact-form/js/grunion-admin.js index f1cf836ff2a29..7852e86dde29a 100644 --- a/projects/packages/forms/src/contact-form/js/grunion-admin.js +++ b/projects/packages/forms/src/contact-form/js/grunion-admin.js @@ -187,6 +187,11 @@ jQuery( function ( $ ) { e.preventDefault(); updateStatus( postId, 'publish', '#59C859' ); } + + if ( $( e.target ).parent().hasClass( 'delete' ) ) { + e.preventDefault(); + updateStatus( postId, 'delete', '#FF7979' ); + } } ); } ); diff --git a/projects/plugins/jetpack/changelog/fix-permenatly-delete-form-responses b/projects/plugins/jetpack/changelog/fix-permenatly-delete-form-responses new file mode 100644 index 0000000000000..8027a3353ed14 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-permenatly-delete-form-responses @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Forms: Fix permently deleting form reponses via the quicklinks From 8f2c943b70ca2c14f29dfa230daa546a189b6fd9 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Tue, 28 Jan 2025 04:44:46 -0800 Subject: [PATCH 236/420] Social | Enable social post UI on WPCOM (#41219) * Enable the feature * Add connections data based on feature flag * Fix profile image for facebook preview * Add changelogs --- .../changelog/social-enable-social-post-ui-4-wpcom | 4 ++++ .../src/components/social-post-modal/post-preview.tsx | 10 ++++++++-- .../changelog/social-enable-social-post-ui-4-wpcom | 4 ++++ .../publicize/src/class-publicize-script-data.php | 4 +++- .../changelog/social-enable-social-post-ui-4-wpcom | 4 ++++ .../changelog/social-enable-social-post-ui-4-wpcom | 4 ++++ .../changelog/social-enable-social-post-ui-4-wpcom | 4 ++++ .../wpcomsh/wpcom-features/class-wpcom-features.php | 7 +------ 8 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/social-enable-social-post-ui-4-wpcom create mode 100644 projects/packages/publicize/changelog/social-enable-social-post-ui-4-wpcom create mode 100644 projects/plugins/jetpack/changelog/social-enable-social-post-ui-4-wpcom create mode 100644 projects/plugins/social/changelog/social-enable-social-post-ui-4-wpcom create mode 100644 projects/plugins/wpcomsh/changelog/social-enable-social-post-ui-4-wpcom diff --git a/projects/js-packages/publicize-components/changelog/social-enable-social-post-ui-4-wpcom b/projects/js-packages/publicize-components/changelog/social-enable-social-post-ui-4-wpcom new file mode 100644 index 0000000000000..b7c444de6c1cb --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/social-enable-social-post-ui-4-wpcom @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Social | Enable Social Post UI for WPCOM diff --git a/projects/js-packages/publicize-components/src/components/social-post-modal/post-preview.tsx b/projects/js-packages/publicize-components/src/components/social-post-modal/post-preview.tsx index a89ddc5ad3f75..c107d506cb078 100644 --- a/projects/js-packages/publicize-components/src/components/social-post-modal/post-preview.tsx +++ b/projects/js-packages/publicize-components/src/components/social-post-modal/post-preview.tsx @@ -93,14 +93,20 @@ export function PostPreview( { connection }: PostPreviewProps ) { { ...commonProps } type="article" customText={ message || excerpt || title } - user={ user } + user={ { + ...user, + avatarUrl: user.profileImage, + } } /> ) : ( ); diff --git a/projects/packages/publicize/changelog/social-enable-social-post-ui-4-wpcom b/projects/packages/publicize/changelog/social-enable-social-post-ui-4-wpcom new file mode 100644 index 0000000000000..b7c444de6c1cb --- /dev/null +++ b/projects/packages/publicize/changelog/social-enable-social-post-ui-4-wpcom @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Social | Enable Social Post UI for WPCOM diff --git a/projects/packages/publicize/src/class-publicize-script-data.php b/projects/packages/publicize/src/class-publicize-script-data.php index 760a00ccdb484..ba91b575649b0 100644 --- a/projects/packages/publicize/src/class-publicize-script-data.php +++ b/projects/packages/publicize/src/class-publicize-script-data.php @@ -212,9 +212,11 @@ public static function get_store_initial_state() { $share_status[ $post->ID ] = self::publicize()->get_post_share_status( $post->ID ); } + $should_have_connections = self::has_feature_flag( 'connections-management' ) || self::has_feature_flag( 'editor-preview' ); + return array( 'connectionData' => array( - 'connections' => self::has_feature_flag( 'connections-management' ) ? Connections::get_all_for_user() : array(), + 'connections' => $should_have_connections ? Connections::get_all_for_user() : array(), ), 'shareStatus' => $share_status, ); diff --git a/projects/plugins/jetpack/changelog/social-enable-social-post-ui-4-wpcom b/projects/plugins/jetpack/changelog/social-enable-social-post-ui-4-wpcom new file mode 100644 index 0000000000000..d6d48b7648acb --- /dev/null +++ b/projects/plugins/jetpack/changelog/social-enable-social-post-ui-4-wpcom @@ -0,0 +1,4 @@ +Significance: patch +Type: enhancement + +Social | Enable Social post UI for WPCOM sites diff --git a/projects/plugins/social/changelog/social-enable-social-post-ui-4-wpcom b/projects/plugins/social/changelog/social-enable-social-post-ui-4-wpcom new file mode 100644 index 0000000000000..fcd4e161cb775 --- /dev/null +++ b/projects/plugins/social/changelog/social-enable-social-post-ui-4-wpcom @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Enabled Social Post UI for WPCOM sites diff --git a/projects/plugins/wpcomsh/changelog/social-enable-social-post-ui-4-wpcom b/projects/plugins/wpcomsh/changelog/social-enable-social-post-ui-4-wpcom new file mode 100644 index 0000000000000..b7c444de6c1cb --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/social-enable-social-post-ui-4-wpcom @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Social | Enable Social Post UI for WPCOM diff --git a/projects/plugins/wpcomsh/wpcom-features/class-wpcom-features.php b/projects/plugins/wpcomsh/wpcom-features/class-wpcom-features.php index 98af37a637d87..d13ce74a7cc4f 100644 --- a/projects/plugins/wpcomsh/wpcom-features/class-wpcom-features.php +++ b/projects/plugins/wpcomsh/wpcom-features/class-wpcom-features.php @@ -1096,12 +1096,7 @@ class WPCOM_Features { self::WPCOM_ALL_SITES, ), self::SOCIAL_EDITOR_PREVIEW => array( - array( - // This feature isn't launched yet, so we're ensuring that it's not available on any plans. - 'before' => '1900-01-01', - self::WPCOM_ALL_SITES, - self::JETPACK_ALL_SITES, - ), + self::WPCOM_ALL_SITES, ), self::SOCIAL_SHARE_STATUS => array( array( From 51dd4605e092c672fcbc4599615eb5b307d2eb29 Mon Sep 17 00:00:00 2001 From: Erick Danzer Date: Tue, 28 Jan 2025 05:45:35 -0700 Subject: [PATCH 237/420] Forms: Fix translation issue with % (#41345) --- .../forms/changelog/fix-spam-percent-translation | 4 ++++ .../packages/forms/src/contact-form/class-admin.php | 2 +- .../forms/src/contact-form/js/grunion-admin.js | 10 ++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-spam-percent-translation diff --git a/projects/packages/forms/changelog/fix-spam-percent-translation b/projects/packages/forms/changelog/fix-spam-percent-translation new file mode 100644 index 0000000000000..35535644f657f --- /dev/null +++ b/projects/packages/forms/changelog/fix-spam-percent-translation @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Translations: Fix spam % character. diff --git a/projects/packages/forms/src/contact-form/class-admin.php b/projects/packages/forms/src/contact-form/class-admin.php index 2a42907b44810..985c7345323f1 100644 --- a/projects/packages/forms/src/contact-form/class-admin.php +++ b/projects/packages/forms/src/contact-form/class-admin.php @@ -1323,7 +1323,7 @@ public function grunion_add_admin_scripts() { $button_parameters = array( /* translators: The placeholder is for showing how much of the process has completed, as a percent. e.g., "Emptying Spam (40%)" */ - 'progress_label' => __( 'Emptying Spam (%1$s%)', 'jetpack-forms' ), + 'progress_label' => __( 'Emptying Spam (%1$s%%)', 'jetpack-forms' ), 'success_url' => $success_url, 'failure_url' => $failure_url, 'spam_count' => $spam_count, diff --git a/projects/packages/forms/src/contact-form/js/grunion-admin.js b/projects/packages/forms/src/contact-form/js/grunion-admin.js index 7852e86dde29a..e657ab3318c3f 100644 --- a/projects/packages/forms/src/contact-form/js/grunion-admin.js +++ b/projects/packages/forms/src/contact-form/js/grunion-admin.js @@ -83,7 +83,10 @@ jQuery( function ( $ ) { // Update the label on the "Empty Spam" button to use the active "Emptying Spam" language. $( '.jetpack-empty-spam' ).text( - $( '.jetpack-empty-spam' ).data( 'progress-label' ).replace( '%1$s', '0' ) + $( '.jetpack-empty-spam' ) + .data( 'progress-label' ) + .replace( '%1$s', '0' ) + .replace( '%%', '%' ) // Convert escaped %% into a single % ); initial_spam_count = parseInt( $( this ).data( 'spam-feedbacks-count' ), 10 ); @@ -106,7 +109,10 @@ jQuery( function ( $ ) { // Update the progress counter on the "Check for Spam" button. empty_spam_buttons.text( - empty_spam_buttons.data( 'progress-label' ).replace( '%1$s', percentage_complete ) + empty_spam_buttons + .data( 'progress-label' ) + .replace( '%1$s', percentage_complete ) + .replace( '%%', '%' ) // Convert escaped %% into a single % ); $.post( ajaxurl, { From 8589707a289c16e777bc53104058ea1c7a7b7b9d Mon Sep 17 00:00:00 2001 From: Richard Ortiz Date: Tue, 28 Jan 2025 18:10:11 +0100 Subject: [PATCH 238/420] Global Styles on Personal AB: Change group assignment for n-treatments (#41353) * Changed the logic for assigning if GS on personal is enabled or not based on the experiment group * changelog * Updated condition * Remove control check and we now check for null * Inverterd the check so that it is in yoda case * Removed comment --- ...d-change-gs-on-personal-assignment-for-multiple-treatments | 4 ++++ .../src/features/wpcom-global-styles/index.php | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-change-gs-on-personal-assignment-for-multiple-treatments diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-change-gs-on-personal-assignment-for-multiple-treatments b/projects/packages/jetpack-mu-wpcom/changelog/add-change-gs-on-personal-assignment-for-multiple-treatments new file mode 100644 index 0000000000000..8470b1962d02b --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-change-gs-on-personal-assignment-for-multiple-treatments @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +We now use the control group as discriminator for enabling Global Styles on Personal experiment. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php index d72e0efb8a11e..c4ab88901c5b8 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php @@ -807,9 +807,8 @@ function wpcom_site_has_global_styles_in_personal_plan( $blog_id = 0 ) { return false; } - // Placeholder experiment key, we need to update this to the new experiment key once it's created. $experiment_assignment = \ExPlat\assign_given_user( 'calypso_plans_global_styles_personal_20240127', $owner ); - $has_global_styles_in_personal_plan = 'treatment' === $experiment_assignment; + $has_global_styles_in_personal_plan = null !== $experiment_assignment; // Cache the experiment assignment to prevent duplicate DB queries in the frontend. wp_cache_set( $cache_key, $has_global_styles_in_personal_plan, 'a8c_experiments', MONTH_IN_SECONDS ); return $has_global_styles_in_personal_plan; From bf6cfa861ec86b1979285ec1c14c4dccd4a185b3 Mon Sep 17 00:00:00 2001 From: Bogdan Ungureanu Date: Tue, 28 Jan 2025 19:20:02 +0200 Subject: [PATCH 239/420] Revert "RDV: Fix the performance issue on AT sites (#41248)" (#41362) This reverts commit cbd695796d1c55fd7c0b4c3ce01a6f2fc519e209. --- .../changelog/fix-experiment-performance-issue | 5 ----- .../wpcom-admin-interface.php | 14 +++----------- 2 files changed, 3 insertions(+), 16 deletions(-) delete mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-experiment-performance-issue diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-experiment-performance-issue b/projects/packages/jetpack-mu-wpcom/changelog/fix-experiment-performance-issue deleted file mode 100644 index 9cb8a9b757f1e..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/changelog/fix-experiment-performance-issue +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Fixed a performance issue on AT that was reproducing only for a12s. - - diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index 5292643ed800e..4e037bb5755cf 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -451,24 +451,16 @@ function wpcom_is_duplicate_views_experiment_enabled() { $data = json_decode( wp_remote_retrieve_body( $response ), true ); - if ( isset( $data['variations'][ $experiment_name ] ) ) { + if ( isset( $data['variations'] ) && isset( $data['variations'][ $experiment_name ] ) ) { $variation = $data['variations'][ $experiment_name ]; update_user_option( get_current_user_id(), RDV_EXPERIMENT_FORCE_ASSIGN_OPTION, $variation, true ); $is_enabled = 'treatment' === $variation; - } elseif ( isset( $data['variations'] ) ) { - /** - * If the variations array is set but the variation value is null chances are this is an a11n (since ExPlat returns null for a12s). - * - * We set treatment for all a12s. - */ - update_user_option( get_current_user_id(), RDV_EXPERIMENT_FORCE_ASSIGN_OPTION, 'treatment', true ); - $is_enabled = true; + return $is_enabled; } else { $is_enabled = false; + return $is_enabled; } - - return $is_enabled; } /** From 8ce8c2e83e02351d1e1c7f1bbb2b24af05de1961 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Tue, 28 Jan 2025 12:22:27 -0500 Subject: [PATCH 240/420] docs: Remove references to wpcom `production` symlink (#41360) --- docs/unison-wordpress-com.md | 6 +++--- .../changelog/remove-references-to-wpcom-production-symlink | 5 +++++ .../jetpack-mu-wpcom/src/features/verbum-comments/README.md | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/remove-references-to-wpcom-production-symlink diff --git a/docs/unison-wordpress-com.md b/docs/unison-wordpress-com.md index 4da876364146b..e3678787544e7 100644 --- a/docs/unison-wordpress-com.md +++ b/docs/unison-wordpress-com.md @@ -2,8 +2,8 @@ Jetpack currently uses a `sun`/`moon` strategy where the current production files are in one folder and the "staging/test" version are in the other folder. - If you don't want to keep track of which folder is in use during development, you can update your Unison preference file to point to `wp-content/mu-plugins/jetpack-plugin/production` on your sandbox. The `production` directory will always be pointed at the current production files. - + If you don't want to keep track of which folder is in use during development, you can update your Unison preference file to point to `wp-content/mu-plugins/jetpack-plugin/dev` on your sandbox. If this directory exists, it will be used instead of `sun` or `moon`. + In the event that you want to sync changes to both `sun` and `moon`, you may want to create _two_ Unison preference files, one file which syncs to the `sun` location and one file which syncs to the `moon` location. Then you would run two separate instances of `unison watch` (as described above). For even more advanced usage, you can use the following command to launch tmux with each unison command running in a separate window. @@ -12,4 +12,4 @@ tmux new-session -d 'unison -ui text -repeat watch jetpack-plugin-moon' \; split-window -d 'unison -ui text -repeat watch jetpack-plugin-sun' \; attach ``` - Note: You will need to adjust the above command depending on the name(s) of your Unison configuration files. \ No newline at end of file + Note: You will need to adjust the above command depending on the name(s) of your Unison configuration files. diff --git a/projects/packages/jetpack-mu-wpcom/changelog/remove-references-to-wpcom-production-symlink b/projects/packages/jetpack-mu-wpcom/changelog/remove-references-to-wpcom-production-symlink new file mode 100644 index 0000000000000..6a225964a59c8 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/remove-references-to-wpcom-production-symlink @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Update documentation for wpcom change. + + diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/README.md b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/README.md index 3292f1e8cccc7..fa578427e1107 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/README.md +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/README.md @@ -96,7 +96,7 @@ Note: These commands should be ran from `/jetpack-mu-wpcom` root directory. * `pnpm build-production-js` - Build Verbum production code. * `pnpm lint` - Check for lint issues in the code. * `pnpm run watch` - Watch file changes -* `jetpack rsync mu-wpcom-plugin` - Sync local files to development environment. This command tool will ask you for the remote destination after your input it in the command line. Ensure the remote path is correct depending on the environment you're targetting. If you're targetting your sandbox, the remote destination should look like this: `USERNAME@HOSTNAME:~/public_html/wp-content/mu-plugins/jetpack-plugin/production`. You will also need to add `define( 'JETPACK_AUTOLOAD_DEV', true );` to mu-plugins/0-sandbox.php. More details for Simple site testing: [PCYsg-Osp-p2#simple-testing]. If you're targetting your WoA site, the remote destination should look like this: `mywoadevsite.wordpress.com@sftp.wp.com:htdocs/wp-content/plugins/jetpack-mu-wpcom-plugin-dev`. More details for WoA testing: [PCYsg-Osp-p2#woa]. +* `jetpack rsync mu-wpcom-plugin` - Sync local files to development environment. This command tool will ask you for the remote destination after your input it in the command line. Ensure the remote path is correct depending on the environment you're targetting. If you're targetting your sandbox, the remote destination should look like this: `USERNAME@HOSTNAME:~/public_html/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun` or `USERNAME@HOSTNAME:~/public_html/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon`, depending which is active, or `USERNAME@HOSTNAME:~/public_html/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/dev` which overrides sun/moon when it exists. You will also need to add `define( 'JETPACK_AUTOLOAD_DEV', true );` to mu-plugins/0-sandbox.php. More details for Simple site testing: [PCYsg-Osp-p2#simple-testing]. If you're targetting your WoA site, the remote destination should look like this: `mywoadevsite.wordpress.com@sftp.wp.com:htdocs/wp-content/plugins/jetpack-mu-wpcom-plugin-dev`. More details for WoA testing: [PCYsg-Osp-p2#woa]. In most cases you will only need to sync the code to your sandbox, since Verbum is loaded through a Simple Site in all scenarios. There may be a case where you want to confirm that your PHP changes are not negatively impacting WoA sites (for example, checking for any errors/warning on wp-admin pages). In this case, you will want to sync the code directly to your WoA using the steps above. From 67353e68f5da303fd2b89d11e24a417d721974cf Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Tue, 28 Jan 2025 12:26:40 -0500 Subject: [PATCH 241/420] ci: Comment with code coverage summary (#41231) After uploading the code coverage data, the server will reply with a summary of the code coverage and a recommended state. Post that as a comment to the PR. --- .../files/coverage-munger/upload-coverage.sh | 85 +++++++++++++++++++ .github/workflows/tests.yml | 4 + 2 files changed, 89 insertions(+) diff --git a/.github/files/coverage-munger/upload-coverage.sh b/.github/files/coverage-munger/upload-coverage.sh index 4dace87c5b189..cb6aa1c42119f 100755 --- a/.github/files/coverage-munger/upload-coverage.sh +++ b/.github/files/coverage-munger/upload-coverage.sh @@ -3,9 +3,15 @@ ## Environment used by this script: # # Required: +# - API_TOKEN_GITHUB: GitHub API token. +# - GITHUB_API_URL: GitHub API URL. +# - GITHUB_TOKEN: GitHub API token. +# - GITHUB_REPOSITORY: GitHub repo. # - GITHUB_SHA: Commit SHA. +# - PR_HEAD: SHA for the PR head commit (versus GITHUB_SHA which is a merge commit) # - PR_ID: PR number or "trunk". # - SECRET: Shared secret. +# - STATUS: Status of the coverage run. set -eo pipefail @@ -95,3 +101,82 @@ done do_req "op=finish&token=$TOKEN" TOKEN= echo '::endgroup::' + +if [[ "$PR_ID" != "trunk" ]]; then + echo "::group::Setting GitHub status" + if jq -e '.covinfo' <<<"$JSON" &>/dev/null; then + JSON=$( jq '.covinfo' <<<"$JSON" ) + if [[ "$STATUS" != 'success' ]]; then + JSON=$( jq '.state |= "pending" | .description |= "Waiting for tests to pass" | .msg |= "Cannot generate coverage summary while tests are failing. :zipper_mouth_face:\n\nPlease fix the tests, or re-run the Code coverage job if it was something being flaky."' <<<"$JSON" ) + fi + else + JSON='{"state":"error","description":"No covinfo received from server","msg":"","footer":""}' + fi + jq . <<<"$JSON" + curl -v -L --fail \ + --url "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/statuses/$( jq --arg V "$PR_HEAD" -nr '$V | @uri' )" \ + --header "authorization: Bearer $API_TOKEN_GITHUB" \ + --header 'content-type: application/json' \ + --data "$( jq -c --arg PR "$PR_ID" '{ + context: "Code coverage requirement", + state: .state, + target_url: "https://jetpackcodecoverage.atomicsites.blog/prs/\( $PR | @uri )/", + description: .description, + }' <<<"$JSON" )" + echo "::endgroup::" + + # Find the last comment starting with "### Code Coverage Summary" + echo "::group::Looking for existing comment" + PAGE=1 + while true; do + J=$( curl -v -L fail \ + --url "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/issues/${ID}/comments?per_page=100&page=$PAGE" \ + --header "authorization: Bearer $API_TOKEN_GITHUB" + ) + CID=$( jq -r --arg CID "$CID" '[ { id: $CID }, ( .[] | select( .user.login == "github-actions[bot]" ) | select( .body | test( "^### Code Coverage Summary" ) ) ) ] | last | .id' <<<"$J" ) + if jq -e 'length < 100' <<<"$J" &>/dev/null; then + break + fi + PAGE=$(( PAGE + 1 )) + done + echo "::endgroup::" + if [[ -n "$CID" ]]; then + echo "Existing comment ID=$CID" + else + echo "No existing comment found" + fi + + if jq -e '.msg != ""' <<<"$JSON" &>/dev/null; then + if [[ -n "$CID" ]]; then + echo "::group::Updating comment" + curl -v -L --fail \ + -X PATCH \ + --url "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/issues/comments/${CID}" \ + --header "authorization: Bearer $API_TOKEN_GITHUB" \ + --header 'content-type: application/json' \ + --data "$( jq -c '{ + body: "### Code Coverage Summary\n\n\( .msg )\n\n\( .footer )", + }' <<<"$JSON" )" + echo "::endgroup::" + else + echo "::group::Creating comment" + curl -v -L --fail \ + -X POST \ + --url "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/issues/${ID}/comments" \ + --header "authorization: Bearer $API_TOKEN_GITHUB" \ + --header 'content-type: application/json' \ + --data "$( jq -c '{ + body: "### Code Coverage Summary\n\n\( .msg )\n\n\( .footer )", + }' <<<"$JSON" )" + echo "::endgroup::" + fi + elif [[ -n "$CID" ]]; then + # No message, delete existing comment. + echo "::group::Deleting comment" + curl -v -L --fail \ + -X DELETE \ + --url "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/issues/comments/${CID}" \ + --header "authorization: Bearer $API_TOKEN_GITHUB" + echo "::endgroup::" + fi +fi diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3d7d30bed5a8f..5fd123c99f809 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -57,6 +57,7 @@ jobs: # Note matrix-job outputs are kind of weird. Last-to-run job that sets a non-empty value wins. outputs: did-coverage: ${{ ( steps.run-tests.conclusion != 'cancelled' && steps.process-coverage.conclusion == 'success' && steps.upload-artifacts.conclusion == 'success' ) && 'true' || '' }} + coverage-status: ${{ matrix.script == 'test-coverage' && steps.run-tests.conclusion || '' }} steps: - uses: actions/checkout@v4 @@ -305,6 +306,9 @@ jobs: env: PR_ID: ${{ github.event_name != 'pull_request' && 'trunk' || github.event.pull_request.number }} SECRET: ${{ secrets.CODECOV_SECRET }} + STATUS: ${{ needs.run-tests.outputs.coverage-status }} + PR_HEAD: ${{ github.event.pull_request.head.sha }} + API_TOKEN_GITHUB: ${{ secrets.GITHUB_TOKEN }} run: .github/files/coverage-munger/upload-coverage.sh storybook-test: From 827502b2291053562f6194585b7fa825d74455ee Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Tue, 28 Jan 2025 12:39:36 -0500 Subject: [PATCH 242/420] renovate: Work around bug in `atomically` package (#41261) When #40842 updated `configstore`, that brought in `atomically` v2.0.3 which has a bug where it crashes if the current user is not listed in `/etc/passwd`, which happens inside our docker container during the renovate run. Work around this by making sure an appropriate entry is added to `/etc/passwd` inside the container. --- .github/files/renovate-post-upgrade-run.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/files/renovate-post-upgrade-run.sh b/.github/files/renovate-post-upgrade-run.sh index 3ceaf2d6f8c13..797d1df1bb5fb 100755 --- a/.github/files/renovate-post-upgrade-run.sh +++ b/.github/files/renovate-post-upgrade-run.sh @@ -7,4 +7,15 @@ if [[ ! -e /tmp/dummy-log/xdebug_remote.log ]]; then fi docker pull --quiet ghcr.io/automattic/jetpack-wordpress-dev:latest -docker run --rm --workdir "$PWD" --user $EUID --volume /tmp/:/tmp/ --volume /tmp/dummy-log:/var/log/php ghcr.io/automattic/jetpack-wordpress-dev:latest /tmp/monorepo/.github/files/renovate-post-upgrade.sh "$@" + +# Work around https://github.com/fabiospampinato/atomically/issues/13 by extracting /etc/passwd from the container and appending the entry for $EUID to it. +TMPFILE=$( mktemp ) +function cleanup { + rm -f "$TMPFILE" +} +trap cleanup exit +chmod 0644 "$TMPFILE" +docker run --rm ghcr.io/automattic/jetpack-wordpress-dev:latest cat /etc/passwd > "$TMPFILE" +getent passwd $EUID >> "$TMPFILE" + +docker run --rm --workdir "$PWD" --user $EUID --volume "$TMPFILE":/etc/passwd --volume /tmp/:/tmp/ --volume /tmp/dummy-log:/var/log/php ghcr.io/automattic/jetpack-wordpress-dev:latest /tmp/monorepo/.github/files/renovate-post-upgrade.sh "$@" From 1671042be5701de41fbfd47995276f3c0f24f45a Mon Sep 17 00:00:00 2001 From: Dognose Date: Wed, 29 Jan 2025 01:52:47 +0800 Subject: [PATCH 243/420] WPAdmin always loads Odyssey Stats widget regardless of "wpcom_admin_interface" (#40992) --- .../update-wpadmin_always_loads_odyssey_stats_widget | 4 ++++ .../packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-wpadmin_always_loads_odyssey_stats_widget diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-wpadmin_always_loads_odyssey_stats_widget b/projects/packages/jetpack-mu-wpcom/changelog/update-wpadmin_always_loads_odyssey_stats_widget new file mode 100644 index 0000000000000..720b98a8bc13a --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-wpadmin_always_loads_odyssey_stats_widget @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Always loads Odyssey Stats widget regardless of wpcom_admin_interface diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index 2b7dadb584711..603874b5fac36 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -475,9 +475,7 @@ public static function load_verbum_comments_admin() { * Load Odyssey Stats in Simple sites. */ public static function load_wpcom_simple_odyssey_stats() { - if ( get_option( 'wpcom_admin_interface' ) === 'wp-admin' || ( function_exists( 'wpcom_is_duplicate_views_experiment_enabled' ) && wpcom_is_duplicate_views_experiment_enabled() ) ) { - require_once __DIR__ . '/features/wpcom-simple-odyssey-stats/wpcom-simple-odyssey-stats.php'; - } + require_once __DIR__ . '/features/wpcom-simple-odyssey-stats/wpcom-simple-odyssey-stats.php'; } /** From 13838d903f47192033662fe0cb4e8a6f8505011d Mon Sep 17 00:00:00 2001 From: Dean Sas Date: Tue, 28 Jan 2025 17:52:57 +0000 Subject: [PATCH 244/420] Fix copy/blaze quick links disappearing after quick edit (#41339) --- projects/packages/blaze/changelog/fix-quickedit-blaze-cpt | 4 ++++ projects/packages/blaze/src/class-blaze.php | 4 +++- projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt | 4 ++++ projects/plugins/jetpack/modules/copy-post.php | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 projects/packages/blaze/changelog/fix-quickedit-blaze-cpt create mode 100644 projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt diff --git a/projects/packages/blaze/changelog/fix-quickedit-blaze-cpt b/projects/packages/blaze/changelog/fix-quickedit-blaze-cpt new file mode 100644 index 0000000000000..bf93098e4878c --- /dev/null +++ b/projects/packages/blaze/changelog/fix-quickedit-blaze-cpt @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Blaze: Ensure Blaze still available after quick edit in post list diff --git a/projects/packages/blaze/src/class-blaze.php b/projects/packages/blaze/src/class-blaze.php index dff0ef06aeecb..fed2e40818f03 100644 --- a/projects/packages/blaze/src/class-blaze.php +++ b/projects/packages/blaze/src/class-blaze.php @@ -46,7 +46,9 @@ public static function init() { // On the edit screen, add a row action to promote the post. add_action( 'load-edit.php', array( __CLASS__, 'add_post_links_actions' ) ); // After the quick-edit screen is processed, ensure the blaze row action is still present - if ( 'admin-ajax.php' === $GLOBALS['pagenow'] && ! empty( $_POST['screen'] ) && 'edit-post' === $_POST['screen'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verification is not needed here, we're not saving anything. + if ( 'edit.php' === $GLOBALS['pagenow'] || + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verification is not needed here, we're not saving anything. + ( 'admin-ajax.php' === $GLOBALS['pagenow'] && ! empty( $_POST['post_view'] ) && 'list' === $_POST['post_view'] && ! empty( $_POST['action'] ) && 'inline-save' === $_POST['action'] ) ) { self::add_post_links_actions(); } // In the post editor, add a post-publish panel to allow promoting the post. diff --git a/projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt b/projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt new file mode 100644 index 0000000000000..25fc3474dd4c5 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Copy Post: Ensure Copy still available after quick edit in post list on all CPTs diff --git a/projects/plugins/jetpack/modules/copy-post.php b/projects/plugins/jetpack/modules/copy-post.php index 85512f024a347..38afc654a5a24 100644 --- a/projects/plugins/jetpack/modules/copy-post.php +++ b/projects/plugins/jetpack/modules/copy-post.php @@ -29,7 +29,7 @@ class Jetpack_Copy_Post { * @return void */ public function __construct() { - if ( 'edit.php' === $GLOBALS['pagenow'] || ( 'admin-ajax.php' === $GLOBALS['pagenow'] && ! empty( $_POST['screen'] ) && 'edit-post' === $_POST['screen'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- update_post_data() handles access check. + if ( 'edit.php' === $GLOBALS['pagenow'] || ( 'admin-ajax.php' === $GLOBALS['pagenow'] && ! empty( $_POST['post_view'] ) && 'list' === $_POST['post_view'] && ! empty( $_POST['action'] ) && 'inline-save' === $_POST['action'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- update_post_data() handles access check. add_action( 'admin_head', array( $this, 'print_inline_styles' ) ); add_filter( 'post_row_actions', array( $this, 'add_row_action' ), 10, 2 ); add_filter( 'page_row_actions', array( $this, 'add_row_action' ), 10, 2 ); From fd115d107a5618a6d2917f7c7a0b6fc075af88bf Mon Sep 17 00:00:00 2001 From: Daniel Richards Date: Wed, 29 Jan 2025 01:53:06 +0800 Subject: [PATCH 245/420] Form: Remove old block editor back-compat code and improve code quality (#41348) --- .../update-contact-form-block-code-quality | 4 + .../forms/src/blocks/contact-form/edit.js | 176 ++++-------------- .../blocks/contact-form/variation-picker.js | 119 ++++++++++++ 3 files changed, 158 insertions(+), 141 deletions(-) create mode 100644 projects/packages/forms/changelog/update-contact-form-block-code-quality create mode 100644 projects/packages/forms/src/blocks/contact-form/variation-picker.js diff --git a/projects/packages/forms/changelog/update-contact-form-block-code-quality b/projects/packages/forms/changelog/update-contact-form-block-code-quality new file mode 100644 index 0000000000000..e55a9fa62aae0 --- /dev/null +++ b/projects/packages/forms/changelog/update-contact-form-block-code-quality @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Forms: Remove old back compat code and improve code quality diff --git a/projects/packages/forms/src/blocks/contact-form/edit.js b/projects/packages/forms/src/blocks/contact-form/edit.js index a1279826cc9b9..244bbed0f9865 100644 --- a/projects/packages/forms/src/blocks/contact-form/edit.js +++ b/projects/packages/forms/src/blocks/contact-form/edit.js @@ -1,22 +1,17 @@ import { ThemeProvider } from '@automattic/jetpack-components'; import { - getJetpackData, isAtomicSite, isSimpleSite, useModuleStatus, } from '@automattic/jetpack-shared-extension-utils'; import { - InnerBlocks, InspectorControls, URLInput, useBlockProps, - __experimentalBlockVariationPicker as BlockVariationPicker, // eslint-disable-line @wordpress/no-unsafe-wp-apis - __experimentalBlockPatternSetup as BlockPatternSetup, // eslint-disable-line @wordpress/no-unsafe-wp-apis + useInnerBlocksProps, + store as blockEditorStore, } from '@wordpress/block-editor'; -import { createBlock, registerBlockVariation } from '@wordpress/blocks'; import { - Button, - Modal, PanelBody, SelectControl, TextareaControl, @@ -24,11 +19,13 @@ import { Notice, } from '@wordpress/components'; import { useInstanceId } from '@wordpress/compose'; -import { useDispatch, useSelect } from '@wordpress/data'; -import { useEffect, useRef, useState } from '@wordpress/element'; +import { store as coreStore } from '@wordpress/core-data'; +import { useSelect } from '@wordpress/data'; +import { store as editorStore } from '@wordpress/editor'; +import { useRef } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; -import { filter, get, isArray, map } from 'lodash'; +import { filter, isArray, map } from 'lodash'; import { childBlocks } from './child-blocks'; import InspectorHint from './components/inspector-hint'; import { ContactFormPlaceholder } from './components/jetpack-contact-form-placeholder'; @@ -38,7 +35,7 @@ import JetpackEmailConnectionSettings from './components/jetpack-email-connectio import JetpackManageResponsesSettings from './components/jetpack-manage-responses-settings'; import NewsletterIntegrationSettings from './components/jetpack-newsletter-integration-settings'; import SalesforceLeadFormSettings from './components/jetpack-salesforce-lead-form/jetpack-salesforce-lead-form-settings'; -import defaultVariations from './variations'; +import VariationPicker from './variation-picker'; import './util/form-styles.js'; const validFields = filter( childBlocks, ( { settings } ) => { @@ -66,12 +63,8 @@ const ALLOWED_BLOCKS = [ 'core/subhead', 'core/video', ]; - const PRIORITIZED_INSERTER_BLOCKS = [ ...map( validFields, block => `jetpack/${ block.name }` ) ]; -const RESPONSES_PATH = `${ get( getJetpackData(), 'adminUrl', false ) }edit.php?post_type=feedback`; -const CUSTOMIZING_FORMS_URL = 'https://jetpack.com/support/jetpack-blocks/contact-form/'; - function JetpackContactFormEdit( { name, attributes, setAttributes, clientId, className } ) { const { to, @@ -84,25 +77,15 @@ function JetpackContactFormEdit( { name, attributes, setAttributes, clientId, cl salesforceData, } = attributes; const instanceId = useInstanceId( JetpackContactFormEdit ); - const { replaceInnerBlocks, selectBlock } = useDispatch( 'core/block-editor' ); - const { - blockType, - canUserInstallPlugins, - defaultVariation, - variations, - hasInnerBlocks, - postAuthorEmail, - } = useSelect( + const { canUserInstallPlugins, hasInnerBlocks, postAuthorEmail } = useSelect( select => { - const { getBlockType, getBlockVariations, getDefaultBlockVariation } = - select( 'core/blocks' ); - const { getBlocks } = select( 'core/block-editor' ); - const { getEditedPostAttribute } = select( 'core/editor' ); - const { getUser, canUser } = select( 'core' ); + const { getBlocks } = select( blockEditorStore ); + const { getEditedPostAttribute } = select( editorStore ); + const { getUser, canUser } = select( coreStore ); const innerBlocks = getBlocks( clientId ); const authorId = getEditedPostAttribute( 'author' ); - const authorEmail = authorId && getUser( authorId ) && getUser( authorId ).email; + const authorEmail = authorId && getUser( authorId )?.email; const submitButton = innerBlocks.find( block => block.name === 'jetpack/button' ); if ( submitButton && ! submitButton.attributes.lock ) { const lock = { move: false, remove: true }; @@ -110,71 +93,37 @@ function JetpackContactFormEdit( { name, attributes, setAttributes, clientId, cl } return { - blockType: getBlockType && getBlockType( name ), canUserInstallPlugins: canUser( 'create', 'plugins' ), - defaultVariation: getDefaultBlockVariation && getDefaultBlockVariation( name, 'block' ), - variations: getBlockVariations && getBlockVariations( name, 'block' ), hasInnerBlocks: innerBlocks.length > 0, postAuthorEmail: authorEmail, }; }, - [ clientId, name ] + [ clientId ] ); - const [ isPatternsModalOpen, setIsPatternsModalOpen ] = useState( false ); const wrapperRef = useRef(); const innerRef = useRef(); const blockProps = useBlockProps( { ref: wrapperRef } ); + const formClassnames = clsx( className, 'jetpack-contact-form' ); + const innerBlocksProps = useInnerBlocksProps( + { + ref: innerRef, + className: formClassnames, + style: window.jetpackForms.generateStyleVariables( innerRef.current ), + }, + { + allowedBlocks: ALLOWED_BLOCKS, + prioritizedInserterBlocks: PRIORITIZED_INSERTER_BLOCKS, + templateInsertUpdatesSelection: false, + } + ); const { isLoadingModules, isChangingStatus, isModuleActive, changeStatus } = useModuleStatus( 'contact-form' ); - const formClassnames = clsx( className, 'jetpack-contact-form', { - 'is-placeholder': ! hasInnerBlocks && registerBlockVariation, - } ); - const isSalesForceExtensionEnabled = !! window?.Jetpack_Editor_Initial_State?.available_blocks[ 'contact-form/salesforce-lead-form' ]; - const createBlocksFromInnerBlocksTemplate = innerBlocksTemplate => { - const blocks = map( innerBlocksTemplate, ( [ blockName, attr, innerBlocks = [] ] ) => - createBlock( blockName, attr, createBlocksFromInnerBlocksTemplate( innerBlocks ) ) - ); - - return blocks; - }; - - const setVariation = variation => { - if ( variation.attributes ) { - setAttributes( variation.attributes ); - } - - if ( variation.innerBlocks ) { - replaceInnerBlocks( clientId, createBlocksFromInnerBlocksTemplate( variation.innerBlocks ) ); - } - - selectBlock( clientId ); - }; - - useEffect( () => { - // Populate default variation on older versions of WP or GB that don't support variations. - if ( ! hasInnerBlocks && ! registerBlockVariation ) { - setVariation( defaultVariations[ 0 ] ); - } - } ); - - useEffect( () => { - if ( - ! hasInnerBlocks && - registerBlockVariation && - ! isPatternsModalOpen && - window.location.search.indexOf( 'showJetpackFormsPatterns' ) !== -1 - ) { - setIsPatternsModalOpen( true ); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [] ); - let elt; if ( ! isModuleActive ) { @@ -189,64 +138,16 @@ function JetpackContactFormEdit( { name, attributes, setAttributes, clientId, cl /> ); } - } else if ( ! hasInnerBlocks && registerBlockVariation ) { + } else if ( ! hasInnerBlocks ) { elt = ( -
      - ! v.hiddenFromPicker ) } - onSelect={ ( nextVariation = defaultVariation ) => { - setVariation( nextVariation ); - } } - /> -
      - -
      - - -
      -
      - { isPatternsModalOpen && ( - setIsPatternsModalOpen( false ) } - > - { - return pattern.content.indexOf( 'jetpack/contact-form' ) !== -1; - } } - clientId={ clientId } - /> - - ) } -
      + ); } else { - const style = window.jetpackForms.generateStyleVariables( innerRef.current ); elt = ( <> @@ -348,14 +249,7 @@ function JetpackContactFormEdit( { name, attributes, setAttributes, clientId, cl ) } - -
      - -
      +
      ); } diff --git a/projects/packages/forms/src/blocks/contact-form/variation-picker.js b/projects/packages/forms/src/blocks/contact-form/variation-picker.js new file mode 100644 index 0000000000000..7f710409b62c0 --- /dev/null +++ b/projects/packages/forms/src/blocks/contact-form/variation-picker.js @@ -0,0 +1,119 @@ +import { getJetpackData } from '@automattic/jetpack-shared-extension-utils'; +import { + __experimentalBlockVariationPicker as BlockVariationPicker, // eslint-disable-line @wordpress/no-unsafe-wp-apis + __experimentalBlockPatternSetup as BlockPatternSetup, // eslint-disable-line @wordpress/no-unsafe-wp-apis + store as blockEditorStore, +} from '@wordpress/block-editor'; +import { createBlock, store as blocksStore } from '@wordpress/blocks'; +import { Button, Modal } from '@wordpress/components'; +import { useDispatch, useSelect } from '@wordpress/data'; +import { useEffect, useState } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import clsx from 'clsx'; +import { filter, get, map } from 'lodash'; +import './util/form-styles.js'; + +const RESPONSES_PATH = `${ get( getJetpackData(), 'adminUrl', false ) }edit.php?post_type=feedback`; +const CUSTOMIZING_FORMS_URL = 'https://jetpack.com/support/jetpack-blocks/contact-form/'; + +const createBlocksFromInnerBlocksTemplate = innerBlocksTemplate => { + const blocks = map( innerBlocksTemplate, ( [ blockName, attr, innerBlocks = [] ] ) => + createBlock( blockName, attr, createBlocksFromInnerBlocksTemplate( innerBlocks ) ) + ); + + return blocks; +}; + +export default function VariationPicker( { blockName, setAttributes, clientId, classNames } ) { + const [ isPatternsModalOpen, setIsPatternsModalOpen ] = useState( false ); + const { replaceInnerBlocks, selectBlock } = useDispatch( blockEditorStore ); + const { blockType, defaultVariation, variations } = useSelect( + select => { + const { getBlockType, getBlockVariations, getDefaultBlockVariation } = select( blocksStore ); + + return { + blockType: getBlockType( blockName ), + defaultVariation: getDefaultBlockVariation( blockName, 'block' ), + variations: getBlockVariations( blockName, 'block' ), + }; + }, + [ blockName ] + ); + + useEffect( () => { + if ( + ! isPatternsModalOpen && + window.location.search.indexOf( 'showJetpackFormsPatterns' ) !== -1 + ) { + setIsPatternsModalOpen( true ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [] ); + + return ( +
      + ! v.hiddenFromPicker ) } + onSelect={ ( nextVariation = defaultVariation ) => { + if ( nextVariation.attributes ) { + setAttributes( nextVariation.attributes ); + } + + if ( nextVariation.innerBlocks ) { + replaceInnerBlocks( + clientId, + createBlocksFromInnerBlocksTemplate( nextVariation.innerBlocks ) + ); + } + + selectBlock( clientId ); + } } + /> +
      + +
      + + +
      +
      + { isPatternsModalOpen && ( + setIsPatternsModalOpen( false ) } + > + { + return pattern.content.indexOf( 'jetpack/contact-form' ) !== -1; + } } + clientId={ clientId } + /> + + ) } +
      + ); +} From 6cd9bb714e339fee1910d435f8f6227e83299d04 Mon Sep 17 00:00:00 2001 From: Matias Benedetto Date: Tue, 28 Jan 2025 09:54:38 -0800 Subject: [PATCH 246/420] Remove the "A powerful new way to style your site" modal (#40939) --- .../changelog/remove-global-styles-modal | 4 + .../features/wpcom-global-styles/image.svg | 38 ------ .../src/features/wpcom-global-styles/index.js | 2 - .../features/wpcom-global-styles/index.php | 1 - .../src/features/wpcom-global-styles/modal.js | 112 ------------------ 5 files changed, 4 insertions(+), 153 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/remove-global-styles-modal delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/image.svg delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/modal.js diff --git a/projects/packages/jetpack-mu-wpcom/changelog/remove-global-styles-modal b/projects/packages/jetpack-mu-wpcom/changelog/remove-global-styles-modal new file mode 100644 index 0000000000000..4806bb21dc750 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/remove-global-styles-modal @@ -0,0 +1,4 @@ +Significance: minor +Type: deprecated + +Remove global styles modal diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/image.svg b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/image.svg deleted file mode 100644 index 741a14bd9bfd9..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/image.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.js index 6b09e813b7067..82e80995e306e 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.js @@ -1,7 +1,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import domReady from '@wordpress/dom-ready'; import { registerPlugin } from '@wordpress/plugins'; -import GlobalStylesModal from './modal'; import GlobalStylesNotices from './notices'; import './store'; @@ -9,7 +8,6 @@ const showGlobalStylesComponents = () => { registerPlugin( 'wpcom-global-styles', { render: () => ( - ), diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php index c4ab88901c5b8..7ad3474998821 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/index.php @@ -200,7 +200,6 @@ function wpcom_global_styles_enqueue_block_editor_assets() { 'upgradeUrl' => $upgrade_url, 'wpcomBlogId' => wpcom_global_styles_get_wpcom_current_blog_id(), 'planName' => $plan_name, - 'modalImage' => plugins_url( 'image.svg', __FILE__ ), 'learnMoreAboutStylesUrl' => $learn_more_about_styles_support_url, 'learnMoreAboutStylesPostId' => $learn_more_about_styles_post_id, ) diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/modal.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/modal.js deleted file mode 100644 index 478d7f927b7a7..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-global-styles/modal.js +++ /dev/null @@ -1,112 +0,0 @@ -/* global wpcomGlobalStyles */ - -import { Button, Modal } from '@wordpress/components'; -import { useDispatch, useSelect } from '@wordpress/data'; -import { useEffect } from '@wordpress/element'; -import { __, sprintf } from '@wordpress/i18n'; -import React from 'react'; -import { wpcomTrackEvent } from '../../common/tracks'; -import { useCanvas } from './use-canvas'; - -import './modal.scss'; - -const GlobalStylesModal = () => { - const isSiteEditor = useSelect( select => !! select( 'core/edit-site' ), [] ); - const { viewCanvasPath } = useCanvas(); - - const isVisible = useSelect( - select => { - if ( ! isSiteEditor ) { - return false; - } - - const currentSidebar = - select( 'core/interface' ).getActiveComplementaryArea( 'core/edit-site' ); - - return select( 'automattic/wpcom-global-styles' ).isModalVisible( - currentSidebar, - viewCanvasPath - ); - }, - [ viewCanvasPath, isSiteEditor ] - ); - - const { dismissModal } = useDispatch( 'automattic/wpcom-global-styles' ); - const { set: setPreference } = useDispatch( 'core/preferences' ); - - // Hide the welcome guide modal, so it doesn't conflict with our modal. - useEffect( () => { - if ( isSiteEditor ) { - setPreference( 'core/edit-site', 'welcomeGuideStyles', false ); - } - }, [ setPreference, isSiteEditor ] ); - - useEffect( () => { - if ( isVisible ) { - wpcomTrackEvent( 'calypso_global_styles_gating_modal_show', { - context: 'site-editor', - } ); - } - }, [ isVisible ] ); - - const closeModal = () => { - dismissModal(); - wpcomTrackEvent( 'calypso_global_styles_gating_modal_dismiss', { - context: 'site-editor', - } ); - }; - - if ( ! isSiteEditor || ! isVisible ) { - return null; - } - - const planName = wpcomGlobalStyles.planName; - const description = sprintf( - /* translators: %s is the short-form Premium plan name */ - __( - "Change all of your site's fonts, colors and more. Available on the %s plan.", - 'jetpack-mu-wpcom' - ), - planName - ); - - return ( - -
      -
      -

      - { __( 'A powerful new way to style your site', 'jetpack-mu-wpcom' ) } -

      -

      { description }

      -
      - - -
      -
      -
      - -
      -
      -
      - ); -}; - -export default GlobalStylesModal; From fe927e2df51f3e23fe1fa2635ae003d507be17ed Mon Sep 17 00:00:00 2001 From: Ben Dwyer Date: Tue, 28 Jan 2025 17:55:48 +0000 Subject: [PATCH 247/420] Subscriptions: Adjust the button width when the button is not on a new line (#41156) --- projects/plugins/jetpack/changelog/fix-31063 | 4 ++++ .../jetpack/extensions/blocks/subscriptions/subscriptions.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-31063 diff --git a/projects/plugins/jetpack/changelog/fix-31063 b/projects/plugins/jetpack/changelog/fix-31063 new file mode 100644 index 0000000000000..2a75752d26abf --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-31063 @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Bug fix for Subscriptions block button diff --git a/projects/plugins/jetpack/extensions/blocks/subscriptions/subscriptions.php b/projects/plugins/jetpack/extensions/blocks/subscriptions/subscriptions.php index ec3b6f1d915aa..9a67b43588365 100644 --- a/projects/plugins/jetpack/extensions/blocks/subscriptions/subscriptions.php +++ b/projects/plugins/jetpack/extensions/blocks/subscriptions/subscriptions.php @@ -483,8 +483,8 @@ function get_element_styles_from_attributes( $attributes ) { // Account for custom margins on inline forms. $submit_button_styles .= true === get_attribute( $attributes, 'buttonOnNewLine' ) - ? sprintf( 'width: calc(100%% - %dpx);', get_attribute( $attributes, 'spacing', DEFAULT_SPACING_VALUE ) ) - : 'width: 100%;'; + ? 'width: 100%;' + : sprintf( 'width: calc(100%% - %dpx);', get_attribute( $attributes, 'spacing', DEFAULT_SPACING_VALUE ) ); } $font_size = get_attribute( $attributes, 'customFontSize', DEFAULT_FONTSIZE_VALUE ); From 9f231372a80b77a7f6a6fd014efde3e8d41e5439 Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Tue, 28 Jan 2025 18:56:42 +0100 Subject: [PATCH 248/420] OG Tags: do not output our tags when SEOPress is active (#41331) --- .../jetpack/changelog/update-og-tags-conflicting-plugins | 4 ++++ projects/plugins/jetpack/class.jetpack.php | 3 ++- .../social/changelog/update-og-tags-conflicting-plugins | 4 ++++ projects/plugins/social/src/class-meta-tags.php | 2 ++ 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/update-og-tags-conflicting-plugins create mode 100644 projects/plugins/social/changelog/update-og-tags-conflicting-plugins diff --git a/projects/plugins/jetpack/changelog/update-og-tags-conflicting-plugins b/projects/plugins/jetpack/changelog/update-og-tags-conflicting-plugins new file mode 100644 index 0000000000000..7a3625d46be4c --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-og-tags-conflicting-plugins @@ -0,0 +1,4 @@ +Significance: patch +Type: compat + +Open Graph Meta Tags: do not display Jetpack's tags when the SEOPress plugin is active. diff --git a/projects/plugins/jetpack/class.jetpack.php b/projects/plugins/jetpack/class.jetpack.php index 64501849deb3d..f0cc66d929424 100644 --- a/projects/plugins/jetpack/class.jetpack.php +++ b/projects/plugins/jetpack/class.jetpack.php @@ -258,7 +258,6 @@ class Jetpack { * * - All in One SEO Pack, All in one SEO Pack Pro * - WordPress SEO by Yoast, WordPress SEO Premium by Yoast - * - SEOPress, SEOPress Pro * * Plugin authors: If you'd like to prevent Jetpack's Open Graph tag generation in your plugin, you can do so via this filter: * add_filter( 'jetpack_enable_open_graph', '__return_false' ); @@ -303,6 +302,8 @@ class Jetpack { 'wp-facebook-like-send-open-graph-meta/wp-facebook-like-send-open-graph-meta.php', // WP Facebook Like Send & Open Graph Meta. 'wp-facebook-open-graph-protocol/wp-facebook-ogp.php', // WP Facebook Open Graph protocol. 'wp-ogp/wp-ogp.php', // WP-OGP. + 'wp-seopress/seopress.php', // SEOPress. + 'wp-seopress-pro/seopress-pro.php', // SEOPress Pro. 'zoltonorg-social-plugin/zosp.php', // Zolton.org Social Plugin. 'wp-fb-share-like-button/wp_fb_share-like_widget.php', // WP Facebook Like Button. 'open-graph-metabox/open-graph-metabox.php', // Open Graph Metabox. diff --git a/projects/plugins/social/changelog/update-og-tags-conflicting-plugins b/projects/plugins/social/changelog/update-og-tags-conflicting-plugins new file mode 100644 index 0000000000000..14169a9e5c0df --- /dev/null +++ b/projects/plugins/social/changelog/update-og-tags-conflicting-plugins @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Open Graph Meta Tags: do not display Jetpack's tags when the SEOPress plugin is active. diff --git a/projects/plugins/social/src/class-meta-tags.php b/projects/plugins/social/src/class-meta-tags.php index ab3d2ee03fcef..efdba22a87275 100644 --- a/projects/plugins/social/src/class-meta-tags.php +++ b/projects/plugins/social/src/class-meta-tags.php @@ -61,6 +61,8 @@ class Meta_Tags { 'wp-facebook-like-send-open-graph-meta/wp-facebook-like-send-open-graph-meta.php', // WP Facebook Like Send & Open Graph Meta. 'wp-facebook-open-graph-protocol/wp-facebook-ogp.php', // WP Facebook Open Graph protocol. 'wp-ogp/wp-ogp.php', // WP-OGP. + 'wp-seopress/seopress.php', // SEOPress. + 'wp-seopress-pro/seopress-pro.php', // SEOPress Pro. 'zoltonorg-social-plugin/zosp.php', // Zolton.org Social Plugin. 'wp-fb-share-like-button/wp_fb_share-like_widget.php', // WP Facebook Like Button. 'open-graph-metabox/open-graph-metabox.php', // Open Graph Metabox. From 611ab706d43ead228378389807f917c80e599e45 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Tue, 28 Jan 2025 12:22:52 -0700 Subject: [PATCH 249/420] Testing: Add manual testing instructions for Jetpack 14.3 (#41364) * Add testing instructions * Add changelog --- .../changelog/update-jetpack-to-test-for-14.3 | 4 +++ projects/plugins/jetpack/to-test.md | 35 ++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/update-jetpack-to-test-for-14.3 diff --git a/projects/plugins/jetpack/changelog/update-jetpack-to-test-for-14.3 b/projects/plugins/jetpack/changelog/update-jetpack-to-test-for-14.3 new file mode 100644 index 0000000000000..f7388e221af2a --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-jetpack-to-test-for-14.3 @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Testing: Add manual testing instructions. diff --git a/projects/plugins/jetpack/to-test.md b/projects/plugins/jetpack/to-test.md index 0cd47c56900d0..5171a6b044de1 100644 --- a/projects/plugins/jetpack/to-test.md +++ b/projects/plugins/jetpack/to-test.md @@ -14,6 +14,39 @@ You can see a [full list of changes in this release here](https://github.com/Aut ## General testing -Once ready for testing, you'll find instructions here. +### Ensure Tiled Gallery images can be reordered and removed + +1. Install and activate the Gutenberg plugin (v19.9+). +2. Add a Tiled Gallery block to a post or page, and add multiple images. +3. Try rearranging and deleting individual images within the Tiled Gallery block. + +PR: https://github.com/Automattic/jetpack/pull/40779 + +### Allow HTML block within forms + +1. Add a Form block to a page. +2. Add an HTML block inside the Form block. +3. Verify that the editor and frontend both function as expected. + +PR: https://github.com/Automattic/jetpack/pull/41040 + +### Add a new default block when pressing enter on Form fields + +1. Add a Form block to a page. +2. Add one or all of the following fields: + * Text + * Name + * Email + * URL + * Telephone + * Date + * Single Checkbox + * Consent +3. While a field block listed above is selected, press Enter. +4. Verify a new default block is created. + +PRs: +* https://github.com/Automattic/jetpack/pull/41177 +* https://github.com/Automattic/jetpack/pull/41297 **Thank you for all your help!** From 272f048c91167524e10690bc76e432d0b2aecb0a Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Tue, 28 Jan 2025 13:01:11 -0800 Subject: [PATCH 250/420] Forms: Fixes the missing spacing between the export and (#41367) * Forms: fix missing spacing in the trash feedback list * changelog * Forms: the extra spacing added by the whitespace * Add space when the rows are collapsed * Added the minor space before the selector --- .../forms/changelog/fix-spacing-button-export-form | 4 ++++ .../forms/src/contact-form/css/grunion-admin.css | 9 +++++++++ .../jetpack/changelog/fix-spacing-button-export-form | 5 +++++ 3 files changed, 18 insertions(+) create mode 100644 projects/packages/forms/changelog/fix-spacing-button-export-form create mode 100644 projects/plugins/jetpack/changelog/fix-spacing-button-export-form diff --git a/projects/packages/forms/changelog/fix-spacing-button-export-form b/projects/packages/forms/changelog/fix-spacing-button-export-form new file mode 100644 index 0000000000000..5d0d0c0503c72 --- /dev/null +++ b/projects/packages/forms/changelog/fix-spacing-button-export-form @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: fixed missing spacing bug in the feedback list view diff --git a/projects/packages/forms/src/contact-form/css/grunion-admin.css b/projects/packages/forms/src/contact-form/css/grunion-admin.css index f68eaeebc8d12..020d784285c76 100644 --- a/projects/packages/forms/src/contact-form/css/grunion-admin.css +++ b/projects/packages/forms/src/contact-form/css/grunion-admin.css @@ -27,6 +27,15 @@ } } +#export-modal-opener { + margin-right: 8px; +} + +.post-type-feedback .actions { + display: inline-flex; + margin-bottom: 4px; +} + .column-feedback_response .feedback_response__item { display: grid; grid-template-columns: 35% 1fr; diff --git a/projects/plugins/jetpack/changelog/fix-spacing-button-export-form b/projects/plugins/jetpack/changelog/fix-spacing-button-export-form new file mode 100644 index 0000000000000..aebdd75c5d1a0 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-spacing-button-export-form @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Minor bug fix + + From fcd09210d580948a1933017ba16df502a2d23f11 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Tue, 28 Jan 2025 13:01:32 -0800 Subject: [PATCH 251/420] Forms: Fix encoding when feedback marked as spam (#41359) * Forms: Fix encoding when going from regular to spam and from spam to regular feedback * changelog --- .../fix-endcoding-when-marking-as-spam | 4 ++++ .../forms/src/contact-form/class-admin.php | 17 +++++++++++++---- .../fix-endcoding-when-marking-as-spam | 4 ++++ 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-endcoding-when-marking-as-spam create mode 100644 projects/plugins/jetpack/changelog/fix-endcoding-when-marking-as-spam diff --git a/projects/packages/forms/changelog/fix-endcoding-when-marking-as-spam b/projects/packages/forms/changelog/fix-endcoding-when-marking-as-spam new file mode 100644 index 0000000000000..14f355db2dd31 --- /dev/null +++ b/projects/packages/forms/changelog/fix-endcoding-when-marking-as-spam @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Form: Fix encoding when going from spam to regular type diff --git a/projects/packages/forms/src/contact-form/class-admin.php b/projects/packages/forms/src/contact-form/class-admin.php index 985c7345323f1..0f2ec1379352c 100644 --- a/projects/packages/forms/src/contact-form/class-admin.php +++ b/projects/packages/forms/src/contact-form/class-admin.php @@ -1116,14 +1116,23 @@ public function grunion_ajax_spam() { $post_type_object = get_post_type_object( $post->post_type ); $akismet_values = get_post_meta( $post_id, '_feedback_akismet_values', true ); if ( $_POST['make_it'] === 'spam' ) { - $post->post_status = 'spam'; - $status = wp_insert_post( $post ); + + $status = wp_update_post( + array( + 'ID' => $post_id, + 'post_status' => 'spam', + ) + ); /** This action is already documented in \Automattic\Jetpack\Forms\ContactForm\Admin */ do_action( 'contact_form_akismet', 'spam', $akismet_values ); } elseif ( $_POST['make_it'] === 'ham' ) { - $post->post_status = 'publish'; - $status = wp_insert_post( $post ); + $status = wp_update_post( + array( + 'ID' => $post_id, + 'post_status' => 'publish', + ) + ); /** This action is already documented in \Automattic\Jetpack\Forms\ContactForm\Admin */ do_action( 'contact_form_akismet', 'ham', $akismet_values ); diff --git a/projects/plugins/jetpack/changelog/fix-endcoding-when-marking-as-spam b/projects/plugins/jetpack/changelog/fix-endcoding-when-marking-as-spam new file mode 100644 index 0000000000000..e01afdc1002e1 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-endcoding-when-marking-as-spam @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Forms: keep content as is when going from spam to publish and from publish to spam feedback. From 40ae22f1aaff60cc4f5579125a7e02d2d96c42dd Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Tue, 28 Jan 2025 13:03:18 -0800 Subject: [PATCH 252/420] Forms: Fix html block rendering inside the form by wrapping the block (#41269) * Forms: wrap html form blocks with an extra div * changelog --- .../fix-html-block-rendering-wrap-block | 4 ++ .../contact-form/class-contact-form-block.php | 38 +++++++++++++++++++ .../fix-html-block-rendering-wrap-block | 5 +++ 3 files changed, 47 insertions(+) create mode 100644 projects/packages/forms/changelog/fix-html-block-rendering-wrap-block create mode 100644 projects/plugins/jetpack/changelog/fix-html-block-rendering-wrap-block diff --git a/projects/packages/forms/changelog/fix-html-block-rendering-wrap-block b/projects/packages/forms/changelog/fix-html-block-rendering-wrap-block new file mode 100644 index 0000000000000..1dceb8d48ecf4 --- /dev/null +++ b/projects/packages/forms/changelog/fix-html-block-rendering-wrap-block @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Form: Add wrapping div to the core html block when inserted inside the form block diff --git a/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php b/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php index a1bdb1a39b9b6..852834d577dbf 100644 --- a/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php +++ b/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php @@ -30,6 +30,44 @@ public static function register_block() { 'render_callback' => array( __CLASS__, 'gutenblock_render_form' ), ) ); + + add_filter( 'render_block_data', array( __CLASS__, 'find_nested_html_block' ), 10, 3 ); + add_filter( 'render_block_core/html', array( __CLASS__, 'render_wrapped_html_block' ), 10, 2 ); + } + + /** + * Find nested html block that reside in the contact form block. + * We are using this to wrap the html block with div if it is nested inside contact form block. So that the elements render as expected. + * + * @param array $parsed_block - the parsed block. + * @param array $source_block - the source block. + * @param object $parent_block - the parent WP_Block. + * + * @return array + */ + public static function find_nested_html_block( $parsed_block, $source_block, $parent_block ) { + if ( $parsed_block['blockName'] === 'core/html' && isset( $parent_block->parsed_block ) && $parent_block->parsed_block['blockName'] === 'jetpack/contact-form' ) { + $parsed_block['hasJPFormParent'] = true; + } + return $parsed_block; + } + + /** + * Render wrapped html block that is inside the form block with a wrapped div so that the elements render as expected. + * The extra div is needed because the form block has a `flex: 0 0 100%;` applied to all the children of the form block. + * This cases all the elementes inside the block to render in a single line and make it not possible to add have inline elements. + * + * @param string $content - the content of the block. + * @param array $parsed_block - the parsed block. + * + * @return string + */ + public static function render_wrapped_html_block( $content, $parsed_block ) { + if ( ! empty( $parsed_block['hasJPFormParent'] ) ) { + return '
      ' . $content . '
      '; + } + + return $content; } /** diff --git a/projects/plugins/jetpack/changelog/fix-html-block-rendering-wrap-block b/projects/plugins/jetpack/changelog/fix-html-block-rendering-wrap-block new file mode 100644 index 0000000000000..61a6a2dba8752 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-html-block-rendering-wrap-block @@ -0,0 +1,5 @@ +Significance: patch +Type: bugfix +Comment: this is a new block + + From 8ffa52d3a56fb579bb1edd1cc060dd71116056d6 Mon Sep 17 00:00:00 2001 From: Bryan Elliott Date: Tue, 28 Jan 2025 16:50:59 -0500 Subject: [PATCH 253/420] My Jetpack: Add red bubble and notice when paid plan needs plugin install or activation. (#41013) * Add redbubble and notice when paid plan is missing plugin(s). --- .../connected-product-card/index.tsx | 9 +- .../connection-status-card/index.tsx | 2 +- .../components/connections-section/index.jsx | 2 +- .../components/my-jetpack-screen/index.jsx | 2 + .../my-jetpack-screen/styles.module.scss | 17 ++ .../_inc/components/plans-section/index.tsx | 2 +- .../product-card/use-pricing-data.ts | 8 +- .../components/product-interstitial/index.jsx | 4 +- .../data/products/use-activate-plugins.ts | 92 ++++++ .../_inc/data/products/use-activate.ts | 74 ----- .../_inc/data/products/use-all-products.ts | 16 ++ .../_inc/data/products/use-install-plugins.ts | 46 +++ .../products/use-install-standalone-plugin.ts | 31 --- .../_inc/data/products/use-product.ts | 82 +----- .../_inc/data/products/use-products.ts | 50 ++++ .../_inc/data/utils/prepare-product-data.ts | 29 ++ .../hooks/use-notification-watcher/index.ts | 2 + ...needs-plugin-install-activation-notice.tsx | 261 ++++++++++++++++++ .../use-site-connection-notice.tsx | 2 +- ...-bubble-notice-when-plugins-need-installed | 4 + projects/packages/my-jetpack/global.d.ts | 4 + .../my-jetpack/src/class-initializer.php | 87 +++++- .../my-jetpack/src/class-products.php | 51 +++- .../my-jetpack/src/class-rest-products.php | 238 ++++++++++------ .../my-jetpack/src/products/class-product.php | 2 +- .../tests/php/test-products-rest.php | 41 ++- .../update-my-jetpack-products-endpoint | 4 + projects/plugins/protect/src/js/api.ts | 11 +- 28 files changed, 856 insertions(+), 317 deletions(-) create mode 100644 projects/packages/my-jetpack/_inc/data/products/use-activate-plugins.ts delete mode 100644 projects/packages/my-jetpack/_inc/data/products/use-activate.ts create mode 100644 projects/packages/my-jetpack/_inc/data/products/use-all-products.ts create mode 100644 projects/packages/my-jetpack/_inc/data/products/use-install-plugins.ts delete mode 100644 projects/packages/my-jetpack/_inc/data/products/use-install-standalone-plugin.ts create mode 100644 projects/packages/my-jetpack/_inc/data/products/use-products.ts create mode 100644 projects/packages/my-jetpack/_inc/data/utils/prepare-product-data.ts create mode 100644 projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-paid-plan-needs-plugin-install-activation-notice.tsx create mode 100644 projects/packages/my-jetpack/changelog/add-mj-red-bubble-notice-when-plugins-need-installed create mode 100644 projects/plugins/protect/changelog/update-my-jetpack-products-endpoint diff --git a/projects/packages/my-jetpack/_inc/components/connected-product-card/index.tsx b/projects/packages/my-jetpack/_inc/components/connected-product-card/index.tsx index 5953fda2cb767..fc5401327fad9 100644 --- a/projects/packages/my-jetpack/_inc/components/connected-product-card/index.tsx +++ b/projects/packages/my-jetpack/_inc/components/connected-product-card/index.tsx @@ -8,8 +8,8 @@ import { useCallback, useEffect } from 'react'; * Internal dependencies */ import { MyJetpackRoutes, PRODUCT_STATUSES } from '../../constants'; -import useActivate from '../../data/products/use-activate'; -import useInstallStandalonePlugin from '../../data/products/use-install-standalone-plugin'; +import useActivatePlugins from '../../data/products/use-activate-plugins'; +import useInstallPlugins from '../../data/products/use-install-plugins'; import useProduct from '../../data/products/use-product'; import useAnalytics from '../../hooks/use-analytics'; import useMyJetpackConnection from '../../hooks/use-my-jetpack-connection'; @@ -54,9 +54,8 @@ const ConnectedProductCard: FC< ConnectedProductCardProps > = ( { const { isRegistered, isUserConnected } = useMyJetpackConnection(); const { recordEvent } = useAnalytics(); - const { install: installStandalonePlugin, isPending: isInstalling } = - useInstallStandalonePlugin( slug ); - const { activate, isPending: isActivating } = useActivate( slug ); + const { install: installStandalonePlugin, isPending: isInstalling } = useInstallPlugins( slug ); + const { activate, isPending: isActivating } = useActivatePlugins( slug ); const { detail, refetch, isLoading: isProductDataLoading } = useProduct( slug ); const { name, diff --git a/projects/packages/my-jetpack/_inc/components/connection-status-card/index.tsx b/projects/packages/my-jetpack/_inc/components/connection-status-card/index.tsx index f2e8827c01da6..d42b832ff6adf 100644 --- a/projects/packages/my-jetpack/_inc/components/connection-status-card/index.tsx +++ b/projects/packages/my-jetpack/_inc/components/connection-status-card/index.tsx @@ -5,7 +5,7 @@ import { __, sprintf } from '@wordpress/i18n'; import { Icon, info, check, lockOutline } from '@wordpress/icons'; import clsx from 'clsx'; import { useState, useCallback, useMemo } from 'react'; -import { useAllProducts } from '../../data/products/use-product'; +import { useAllProducts } from '../../data/products/use-all-products'; import { getMyJetpackWindowInitialState } from '../../data/utils/get-my-jetpack-window-state'; import getProductSlugsThatRequireUserConnection from '../../data/utils/get-product-slugs-that-require-user-connection'; import useAnalytics from '../../hooks/use-analytics'; diff --git a/projects/packages/my-jetpack/_inc/components/connections-section/index.jsx b/projects/packages/my-jetpack/_inc/components/connections-section/index.jsx index a1ba26eff727f..6972da9b2d778 100644 --- a/projects/packages/my-jetpack/_inc/components/connections-section/index.jsx +++ b/projects/packages/my-jetpack/_inc/components/connections-section/index.jsx @@ -1,5 +1,5 @@ import { MyJetpackRoutes } from '../../constants'; -import { useAllProducts } from '../../data/products/use-product'; +import { useAllProducts } from '../../data/products/use-all-products'; import getProductSlugsThatRequireUserConnection from '../../data/utils/get-product-slugs-that-require-user-connection'; import useMyJetpackConnection from '../../hooks/use-my-jetpack-connection'; import useMyJetpackNavigate from '../../hooks/use-my-jetpack-navigate'; diff --git a/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/index.jsx b/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/index.jsx index 2c7947a35a907..813ee79519064 100644 --- a/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/index.jsx +++ b/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/index.jsx @@ -10,6 +10,7 @@ import { ZendeskChat, useBreakpointMatch, ActionButton, + GlobalNotices, } from '@automattic/jetpack-components'; import { __, _x } from '@wordpress/i18n'; import clsx from 'clsx'; @@ -165,6 +166,7 @@ export default function MyJetpackScreen() {
      + { ! isNewUser && ( diff --git a/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/styles.module.scss b/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/styles.module.scss index 48fa729fd473c..456169813c217 100644 --- a/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/styles.module.scss +++ b/projects/packages/my-jetpack/_inc/components/my-jetpack-screen/styles.module.scss @@ -93,6 +93,14 @@ flex-grow: 1; display: flex; + a { + color: var( --jp-black ); + &:hover, &:focus { + text-decoration: underline; + text-decoration-thickness: 2px; + } + } + & :global(.terms-of-service) { font-size: var(--font-body-small); color: var( --jp-gray-70 ); @@ -120,6 +128,15 @@ background-color: #f1f1f1 } } + + & :global(.plugins-list) { + & :global(.plugin-item) { + > span { + font-size: calc( var( --font-body-extra-small ) + 1px ); + margin-inline-start: 5px; + } + } + } } .separator { diff --git a/projects/packages/my-jetpack/_inc/components/plans-section/index.tsx b/projects/packages/my-jetpack/_inc/components/plans-section/index.tsx index 59922bcd6ef4f..40472ba69ebc4 100644 --- a/projects/packages/my-jetpack/_inc/components/plans-section/index.tsx +++ b/projects/packages/my-jetpack/_inc/components/plans-section/index.tsx @@ -5,7 +5,7 @@ import clsx from 'clsx'; import { useCallback } from 'react'; import { MyJetpackRoutes, PRODUCT_STATUSES } from '../../constants'; import { QUERY_PURCHASES_KEY, REST_API_SITE_PURCHASES_ENDPOINT } from '../../data/constants'; -import { useAllProducts } from '../../data/products/use-product'; +import { useAllProducts } from '../../data/products/use-all-products'; import useSimpleQuery from '../../data/use-simple-query'; import { getMyJetpackWindowInitialState } from '../../data/utils/get-my-jetpack-window-state'; import useAnalytics from '../../hooks/use-analytics'; diff --git a/projects/packages/my-jetpack/_inc/components/product-card/use-pricing-data.ts b/projects/packages/my-jetpack/_inc/components/product-card/use-pricing-data.ts index 1105c8ece68d2..b6f3f93a6cf1d 100644 --- a/projects/packages/my-jetpack/_inc/components/product-card/use-pricing-data.ts +++ b/projects/packages/my-jetpack/_inc/components/product-card/use-pricing-data.ts @@ -2,8 +2,8 @@ import { useProductCheckoutWorkflow } from '@automattic/jetpack-connection'; import { __ } from '@wordpress/i18n'; import { useCallback } from 'react'; import { PRODUCT_STATUSES } from '../../constants'; -import useActivate from '../../data/products/use-activate'; -import useInstallStandalonePlugin from '../../data/products/use-install-standalone-plugin'; +import useActivatePlugins from '../../data/products/use-activate-plugins'; +import useInstallPlugins from '../../data/products/use-install-plugins'; import useProduct from '../../data/products/use-product'; import { ProductCamelCase } from '../../data/types'; import { getMyJetpackWindowInitialState } from '../../data/utils/get-my-jetpack-window-state'; @@ -138,11 +138,11 @@ const usePricingData = ( slug: string ) => { const { wpcomProductSlug, wpcomFreeProductSlug, ...data } = parsePricingData( detail.pricingForUi ); - const { install: installPlugin, isPending: isInstalling } = useInstallStandalonePlugin( slug ); + const { install: installPlugin, isPending: isInstalling } = useInstallPlugins( slug ); const { isUserConnected } = useMyJetpackConnection(); const { myJetpackUrl, siteSuffix } = getMyJetpackWindowInitialState(); - const { activate, isPending: isActivating } = useActivate( slug ); + const { activate, isPending: isActivating } = useActivatePlugins( slug ); const { run: runCheckout } = useProductCheckoutWorkflow( { from: 'my-jetpack', productSlug: wpcomProductSlug, diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial/index.jsx b/projects/packages/my-jetpack/_inc/components/product-interstitial/index.jsx index 407d454801462..4a9a43bda95fa 100644 --- a/projects/packages/my-jetpack/_inc/components/product-interstitial/index.jsx +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial/index.jsx @@ -18,7 +18,7 @@ import React, { useCallback, useEffect } from 'react'; */ import { useParams } from 'react-router-dom'; import { MyJetpackRoutes } from '../../constants'; -import useActivate from '../../data/products/use-activate'; +import useActivatePlugins from '../../data/products/use-activate-plugins'; import useProduct from '../../data/products/use-product'; import { getMyJetpackWindowInitialState } from '../../data/utils/get-my-jetpack-window-state'; import useAnalytics from '../../hooks/use-analytics'; @@ -78,7 +78,7 @@ export default function ProductInterstitial( { } ) { const { detail } = useProduct( slug ); const { detail: bundleDetail } = useProduct( bundle ); - const { activate, isPending: isActivating, isSuccess } = useActivate( slug ); + const { activate, isPending: isActivating, isSuccess } = useActivatePlugins( slug ); // Get the post activation URL for the product. let redirectUri = detail?.postActivationUrl || null; diff --git a/projects/packages/my-jetpack/_inc/data/products/use-activate-plugins.ts b/projects/packages/my-jetpack/_inc/data/products/use-activate-plugins.ts new file mode 100644 index 0000000000000..e10ed2c8fa37c --- /dev/null +++ b/projects/packages/my-jetpack/_inc/data/products/use-activate-plugins.ts @@ -0,0 +1,92 @@ +import { useGlobalNotices } from '@automattic/jetpack-components'; +import { __, sprintf } from '@wordpress/i18n'; +import useAnalytics from '../../hooks/use-analytics'; +import { REST_API_SITE_PRODUCTS_ENDPOINT, QUERY_ACTIVATE_PRODUCT_KEY } from '../constants'; +import useSimpleMutation from '../use-simple-mutation'; +import { getMyJetpackWindowInitialState } from '../utils/get-my-jetpack-window-state'; +import useProducts from './use-products'; +import type { ProductCamelCase, ProductSnakeCase } from '../types'; + +const setPluginActiveState = ( productId: string ) => { + const { items } = getMyJetpackWindowInitialState( 'products' ); + if ( items[ productId ]?.plugin_slug === 'jetpack' ) { + return; + } + if ( items[ productId ]?.standalone_plugin_info.has_standalone_plugin ) { + window.myJetpackInitialState.products.items[ + productId + ].standalone_plugin_info.is_standalone_active = true; + window.myJetpackInitialState.products.items[ + productId + ].standalone_plugin_info.is_standalone_installed = true; + } +}; + +const getIsPluginAlreadyActive = ( detail: ProductCamelCase ) => { + const { standalonePluginInfo, isPluginActive } = detail; + + if ( standalonePluginInfo?.hasStandalonePlugin ) { + return standalonePluginInfo?.isStandaloneActive; + } + + return isPluginActive; +}; + +const useActivatePlugins = ( productSlugs: string | string[] ) => { + const productIds = Array.isArray( productSlugs ) ? productSlugs : [ productSlugs ]; + + const { products, refetch } = useProducts( productIds ); + const { recordEvent } = useAnalytics(); + const { createSuccessNotice } = useGlobalNotices(); + + const { + mutate: activate, + isPending, + isSuccess, + } = useSimpleMutation< { [ key: string ]: ProductSnakeCase } >( { + name: QUERY_ACTIVATE_PRODUCT_KEY, + query: { + path: `${ REST_API_SITE_PRODUCTS_ENDPOINT }/activate`, + method: 'POST', + data: { products: productIds }, + }, + options: { + onSuccess: () => { + products?.forEach( product => { + if ( ! getIsPluginAlreadyActive( product ) ) { + recordEvent( 'jetpack_myjetpack_product_activated', { + product: product.slug, + } ); + + // This is to handle an edge case where a user is redirected somewhere after activation + // and goes back in the browser and "activates" the product again. This will manually update + // the window state so that the tracking is not recorded twice for one activation. + setPluginActiveState( product.slug ); + } + } ); + refetch().then( () => { + createSuccessNotice( + sprintf( + /* translators: %s is either the product name, i.e.- "Jetpack Backup" or the word "Plugins". */ + __( '%s activated successfully!', 'jetpack-my-jetpack' ), + products?.length === 1 ? products[ 0 ].title : __( 'Plugins', 'jetpack-my-jetpack' ) + ) + ); + } ); + }, + }, + errorMessage: sprintf( + // translators: %s is the Jetpack product name or comma seperated list of multiple Jetpack product names. + __( 'There was a problem activating %s.', 'jetpack-my-jetpack' ), + products?.map( product => product?.name ).join( ', ' ) + ), + } ); + + return { + activate, + isPending, + isSuccess, + }; +}; + +export default useActivatePlugins; diff --git a/projects/packages/my-jetpack/_inc/data/products/use-activate.ts b/projects/packages/my-jetpack/_inc/data/products/use-activate.ts deleted file mode 100644 index f0997ce15b6c5..0000000000000 --- a/projects/packages/my-jetpack/_inc/data/products/use-activate.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { __, sprintf } from '@wordpress/i18n'; -import useAnalytics from '../../hooks/use-analytics'; -import { REST_API_SITE_PRODUCTS_ENDPOINT, QUERY_ACTIVATE_PRODUCT_KEY } from '../constants'; -import useSimpleMutation from '../use-simple-mutation'; -import { getMyJetpackWindowInitialState } from '../utils/get-my-jetpack-window-state'; -import useProduct from './use-product'; -import type { ProductCamelCase } from '../types'; - -const setPluginActiveState = ( productId: string ) => { - const { items } = getMyJetpackWindowInitialState( 'products' ); - if ( items[ productId ]?.standalone_plugin_info.has_standalone_plugin ) { - window.myJetpackInitialState.products.items[ - productId - ].standalone_plugin_info.is_standalone_active = true; - window.myJetpackInitialState.products.items[ - productId - ].standalone_plugin_info.is_standalone_installed = true; - } -}; - -const getIsPluginAlreadyActive = ( detail: ProductCamelCase ) => { - const { standalonePluginInfo, isPluginActive } = detail; - - if ( standalonePluginInfo?.hasStandalonePlugin ) { - return standalonePluginInfo?.isStandaloneActive; - } - - return isPluginActive; -}; - -const useActivate = ( productId: string ) => { - const { detail, refetch } = useProduct( productId ); - const { recordEvent } = useAnalytics(); - - const { - mutate: activate, - isPending, - isSuccess, - } = useSimpleMutation( { - name: QUERY_ACTIVATE_PRODUCT_KEY, - query: { - path: `${ REST_API_SITE_PRODUCTS_ENDPOINT }/${ productId }`, - method: 'POST', - }, - options: { - onSuccess: () => { - if ( ! getIsPluginAlreadyActive( detail ) ) { - recordEvent( 'jetpack_myjetpack_product_activated', { - product: productId, - } ); - - // This is to handle an edge case where a user is redirected somewhere after activation - // and goes back in the browser and "activates" the product again. This will manually update - // the window state so that the tracking is not recorded twice for one activation. - setPluginActiveState( productId ); - } - refetch(); - }, - }, - errorMessage: sprintf( - // translators: %$1s: Jetpack Product name - __( 'Failed to activate %1$s. Please try again', 'jetpack-my-jetpack' ), - detail.name - ), - } ); - - return { - activate, - isPending, - isSuccess, - }; -}; - -export default useActivate; diff --git a/projects/packages/my-jetpack/_inc/data/products/use-all-products.ts b/projects/packages/my-jetpack/_inc/data/products/use-all-products.ts new file mode 100644 index 0000000000000..002486ecedabd --- /dev/null +++ b/projects/packages/my-jetpack/_inc/data/products/use-all-products.ts @@ -0,0 +1,16 @@ +import { getMyJetpackWindowInitialState } from '../utils/get-my-jetpack-window-state'; +import { prepareProductData } from '../utils/prepare-product-data'; +import type { ProductCamelCase } from '../types'; + +export const useAllProducts = (): { [ key: string ]: ProductCamelCase } => { + const { items: products } = getMyJetpackWindowInitialState( 'products' ); + + if ( ! products ) { + return {}; + } + + return Object.entries( products ).reduce( + ( acc, [ key, product ] ) => ( { ...acc, [ key ]: prepareProductData( product ) } ), + {} + ); +}; diff --git a/projects/packages/my-jetpack/_inc/data/products/use-install-plugins.ts b/projects/packages/my-jetpack/_inc/data/products/use-install-plugins.ts new file mode 100644 index 0000000000000..fe6ed38e4f137 --- /dev/null +++ b/projects/packages/my-jetpack/_inc/data/products/use-install-plugins.ts @@ -0,0 +1,46 @@ +import { useGlobalNotices } from '@automattic/jetpack-components'; +import { __, sprintf } from '@wordpress/i18n'; +import { REST_API_SITE_PRODUCTS_ENDPOINT, QUERY_INSTALL_PRODUCT_KEY } from '../constants'; +import useSimpleMutation from '../use-simple-mutation'; +import useProducts from './use-products'; + +const useInstallPlugins = ( productSlugs: string | string[] ) => { + const productIds = Array.isArray( productSlugs ) ? productSlugs : [ productSlugs ]; + + const { products, refetch } = useProducts( productIds ); + const { createSuccessNotice } = useGlobalNotices(); + + const { mutate: install, isPending } = useSimpleMutation( { + name: QUERY_INSTALL_PRODUCT_KEY, + query: { + path: `${ REST_API_SITE_PRODUCTS_ENDPOINT }/install`, + method: 'POST', + data: { products: productIds }, + }, + options: { + onSuccess: () => { + refetch().then( () => { + createSuccessNotice( + sprintf( + /* translators: %s is the word "Plugin" or "Pluigns" (singular or plural). */ + __( '%s installed successfully!', 'jetpack-my-jetpack' ), + products?.length === 1 ? products[ 0 ].title : __( 'Plugins', 'jetpack-my-jetpack' ) + ) + ); + } ); + }, + }, + errorMessage: sprintf( + // translators: %s is the Jetpack product name or comma seperated list of multiple Jetpack product names. + __( 'There was a problem installing and activating %s.', 'jetpack-my-jetpack' ), + products?.map( product => product?.name ).join( ', ' ) + ), + } ); + + return { + install, + isPending, + }; +}; + +export default useInstallPlugins; diff --git a/projects/packages/my-jetpack/_inc/data/products/use-install-standalone-plugin.ts b/projects/packages/my-jetpack/_inc/data/products/use-install-standalone-plugin.ts deleted file mode 100644 index b9256a809a427..0000000000000 --- a/projects/packages/my-jetpack/_inc/data/products/use-install-standalone-plugin.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { __, sprintf } from '@wordpress/i18n'; -import { REST_API_SITE_PRODUCTS_ENDPOINT, QUERY_INSTALL_PRODUCT_KEY } from '../constants'; -import useSimpleMutation from '../use-simple-mutation'; -import useProduct from './use-product'; - -const useInstallStandalonePlugin = ( productId: string ) => { - const { detail, refetch } = useProduct( productId ); - - const { mutate: install, isPending } = useSimpleMutation( { - name: QUERY_INSTALL_PRODUCT_KEY, - query: { - path: `${ REST_API_SITE_PRODUCTS_ENDPOINT }/${ productId }/install-standalone`, - method: 'POST', - }, - options: { - onSuccess: refetch, - }, - errorMessage: sprintf( - // translators: %$1s: Jetpack Product name - __( 'Failed to install standalone plugin for %1$s. Please try again', 'jetpack-my-jetpack' ), - detail.name - ), - } ); - - return { - install, - isPending, - }; -}; - -export default useInstallStandalonePlugin; diff --git a/projects/packages/my-jetpack/_inc/data/products/use-product.ts b/projects/packages/my-jetpack/_inc/data/products/use-product.ts index d5f310085ceac..bde4e51aff17c 100644 --- a/projects/packages/my-jetpack/_inc/data/products/use-product.ts +++ b/projects/packages/my-jetpack/_inc/data/products/use-product.ts @@ -1,84 +1,10 @@ -import { useCallback } from 'react'; -import { REST_API_SITE_PRODUCTS_ENDPOINT, QUERY_PRODUCT_KEY } from '../constants'; -import useSimpleQuery from '../use-simple-query'; -import { getMyJetpackWindowInitialState } from '../utils/get-my-jetpack-window-state'; -import mapObjectKeysToCamel from '../utils/to-camel'; -import type { ProductCamelCase, ProductSnakeCase, WP_Error } from '../types'; -import type { RefetchOptions, QueryObserverResult } from '@tanstack/react-query'; - -const getFullPricePerMonth = ( product: ProductCamelCase ) => { - return product.pricingForUi.productTerm === 'year' - ? Math.round( ( product.pricingForUi.fullPrice / 12 ) * 100 ) / 100 - : product.pricingForUi.fullPrice; -}; - -const getDiscountPricePerMonth = ( product: ProductCamelCase ) => { - return product.pricingForUi.productTerm === 'year' - ? Math.round( ( product.pricingForUi.discountPrice / 12 ) * 100 ) / 100 - : product.pricingForUi.discountPrice; -}; - -export const useAllProducts = (): { [ key: string ]: ProductCamelCase } => { - const { items: products } = getMyJetpackWindowInitialState( 'products' ); - - if ( ! products ) { - return {}; - } - - return Object.entries( products ).reduce( - ( acc, [ key, product ] ) => ( { ...acc, [ key ]: prepareProductData( product ) } ), - {} - ); -}; - -// Create query to fetch new product data from the server -const useFetchProduct = ( productId: string ) => { - const queryResult = useSimpleQuery< ProductSnakeCase >( { - name: `${ QUERY_PRODUCT_KEY }${ productId }`, - query: { - path: `${ REST_API_SITE_PRODUCTS_ENDPOINT }/${ productId }`, - }, - options: { enabled: false }, - } ); - - return queryResult; -}; - -// Fetch the product data from the server and update the global state -const refetchProduct = async ( - productId: string, - refetch: ( - options?: RefetchOptions - ) => Promise< QueryObserverResult< ProductSnakeCase, WP_Error > > -) => { - const { data: refetchedProduct } = await refetch(); - - window.myJetpackInitialState.products.items[ productId ] = refetchedProduct; -}; - -const prepareProductData = ( product: ProductSnakeCase ) => { - // The mapObjectKeysToCamel is typed correctly, however we are adding new fields - // to the product object that don't exist on the global state object - // Therefore we still need to cast the object to the correct type - const camelProduct = mapObjectKeysToCamel( product ) as ProductCamelCase; - - camelProduct.features = camelProduct.features || []; - camelProduct.supportedProducts = camelProduct.supportedProducts || []; - - camelProduct.pricingForUi.fullPricePerMonth = getFullPricePerMonth( camelProduct ); - camelProduct.pricingForUi.discountPricePerMonth = getDiscountPricePerMonth( camelProduct ); - - return camelProduct; -}; +import useProducts from './use-products'; const useProduct = ( productId: string ) => { - const allProducts = useAllProducts(); - const product = allProducts?.[ productId ]; - const { refetch, isLoading } = useFetchProduct( productId ); - + const { products, refetch, isLoading } = useProducts( [ productId ] ); return { - detail: product, - refetch: useCallback( () => refetchProduct( productId, refetch ), [ productId, refetch ] ), + detail: products[ 0 ], + refetch, isLoading, }; }; diff --git a/projects/packages/my-jetpack/_inc/data/products/use-products.ts b/projects/packages/my-jetpack/_inc/data/products/use-products.ts new file mode 100644 index 0000000000000..bc35960e1d223 --- /dev/null +++ b/projects/packages/my-jetpack/_inc/data/products/use-products.ts @@ -0,0 +1,50 @@ +import { useCallback } from 'react'; +import { REST_API_SITE_PRODUCTS_ENDPOINT, QUERY_PRODUCT_KEY } from '../constants'; +import useSimpleQuery from '../use-simple-query'; +import { useAllProducts } from './use-all-products'; +import type { ProductSnakeCase, WP_Error } from '../types'; +import type { RefetchOptions, QueryObserverResult } from '@tanstack/react-query'; + +// Create query to fetch new product data from the server +const useFetchProducts = ( productIds: string[] ) => { + const productsQueryArg = + productIds && productIds?.length ? `?products=${ productIds?.join( ',' ) }` : ''; + const queryResult = useSimpleQuery< { [ key: string ]: ProductSnakeCase } >( { + name: `${ QUERY_PRODUCT_KEY }`, + query: { + path: `${ REST_API_SITE_PRODUCTS_ENDPOINT }${ productsQueryArg }`, + }, + options: { enabled: false }, + } ); + + return queryResult; +}; + +// Fetch the product data from the server and update the global state +const refetchProducts = async ( + refetch: ( + options?: RefetchOptions + ) => Promise< QueryObserverResult< { [ key: string ]: ProductSnakeCase }, WP_Error > > +) => { + const { data: refetchedProducts } = await refetch(); + + Object.keys( refetchedProducts ).forEach( productSlug => { + window.myJetpackInitialState.products.items[ productSlug ] = refetchedProducts[ productSlug ]; + } ); +}; + +const useProducts = ( productSlugs: string | string[] ) => { + const productIds = Array.isArray( productSlugs ) ? productSlugs : [ productSlugs ]; + + const allProducts = useAllProducts(); + const products = productIds?.map( productId => allProducts?.[ productId ] ); + const { refetch, isLoading } = useFetchProducts( productIds ); + + return { + products, + refetch: useCallback( () => refetchProducts( refetch ), [ refetch ] ), + isLoading, + }; +}; + +export default useProducts; diff --git a/projects/packages/my-jetpack/_inc/data/utils/prepare-product-data.ts b/projects/packages/my-jetpack/_inc/data/utils/prepare-product-data.ts new file mode 100644 index 0000000000000..41eeceb3d70bc --- /dev/null +++ b/projects/packages/my-jetpack/_inc/data/utils/prepare-product-data.ts @@ -0,0 +1,29 @@ +import mapObjectKeysToCamel from './to-camel'; +import type { ProductCamelCase, ProductSnakeCase } from '../types'; + +const getFullPricePerMonth = ( product: ProductCamelCase ) => { + return product.pricingForUi.productTerm === 'year' + ? Math.round( ( product.pricingForUi.fullPrice / 12 ) * 100 ) / 100 + : product.pricingForUi.fullPrice; +}; + +const getDiscountPricePerMonth = ( product: ProductCamelCase ) => { + return product.pricingForUi.productTerm === 'year' + ? Math.round( ( product.pricingForUi.discountPrice / 12 ) * 100 ) / 100 + : product.pricingForUi.discountPrice; +}; + +export const prepareProductData = ( product: ProductSnakeCase ) => { + // The mapObjectKeysToCamel is typed correctly, however we are adding new fields + // to the product object that don't exist on the global state object + // Therefore we still need to cast the object to the correct type + const camelProduct = mapObjectKeysToCamel( product ) as ProductCamelCase; + + camelProduct.features = camelProduct.features || []; + camelProduct.supportedProducts = camelProduct.supportedProducts || []; + + camelProduct.pricingForUi.fullPricePerMonth = getFullPricePerMonth( camelProduct ); + camelProduct.pricingForUi.discountPricePerMonth = getDiscountPricePerMonth( camelProduct ); + + return camelProduct; +}; diff --git a/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/index.ts b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/index.ts index 37c1be01d288b..92c32d8579a83 100644 --- a/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/index.ts +++ b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/index.ts @@ -4,12 +4,14 @@ import useBadInstallNotice from './use-bad-install-notice'; import useConnectionErrorsNotice from './use-connection-errors-notice'; import useDeprecateFeatureNotice from './use-deprecate-feature-notice'; import useExpiringPlansNotice from './use-expiring-plans-notice'; +import usePaidPlanNeedsPluginInstallActivationNotice from './use-paid-plan-needs-plugin-install-activation-notice'; import useProtectThreatsDetectedNotice from './use-protect-threats-detected-notice'; import useSiteConnectionNotice from './use-site-connection-notice'; const useNotificationWatcher = () => { const { redBubbleAlerts } = getMyJetpackWindowInitialState(); + usePaidPlanNeedsPluginInstallActivationNotice( redBubbleAlerts ); useProtectThreatsDetectedNotice( redBubbleAlerts ); useExpiringPlansNotice( redBubbleAlerts ); useBackupNeedsAttentionNotice( redBubbleAlerts ); diff --git a/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-paid-plan-needs-plugin-install-activation-notice.tsx b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-paid-plan-needs-plugin-install-activation-notice.tsx new file mode 100644 index 0000000000000..dfc0678bd19c9 --- /dev/null +++ b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-paid-plan-needs-plugin-install-activation-notice.tsx @@ -0,0 +1,261 @@ +import { Col, Text, getRedirectUrl } from '@automattic/jetpack-components'; +import { ExternalLink } from '@wordpress/components'; +import { createInterpolateElement } from '@wordpress/element'; +import { __, _n, sprintf } from '@wordpress/i18n'; +import { useContext, useEffect, useMemo, useCallback } from 'react'; +import { NOTICE_PRIORITY_MEDIUM } from '../../context/constants'; +import { NoticeContext } from '../../context/notices/noticeContext'; +import { QUERY_PURCHASES_KEY, REST_API_SITE_PURCHASES_ENDPOINT } from '../../data/constants'; +import useActivatePlugins from '../../data/products/use-activate-plugins'; +import useInstallPlugins from '../../data/products/use-install-plugins'; +import useSimpleQuery from '../../data/use-simple-query'; +import { getMyJetpackWindowInitialState } from '../../data/utils/get-my-jetpack-window-state'; +import useMyJetpackConnection from '../../hooks/use-my-jetpack-connection'; +import useAnalytics from '../use-analytics'; +import type { NoticeOptions } from '../../context/notices/types'; +import type { MyJetpackInitialState } from '../../data/types'; + +type RedBubbleAlerts = MyJetpackInitialState[ 'redBubbleAlerts' ]; +type Purchase = MyJetpackInitialState[ 'purchases' ][ 'items' ][ 0 ]; + +const usePaidPlanNeedsPluginInstallActivationNotice = ( redBubbleAlerts: RedBubbleAlerts ) => { + const { setNotice, resetNotice } = useContext( NoticeContext ); + const { recordEvent } = useAnalytics(); + + const { isSiteConnected } = useMyJetpackConnection(); + const response = useSimpleQuery( { + name: QUERY_PURCHASES_KEY, + query: { path: REST_API_SITE_PURCHASES_ENDPOINT }, + options: { enabled: isSiteConnected }, + } ); + + const { isLoading, isError } = response; + const purchases = response.data as Purchase[]; + + const isPurchasesDataLoaded = purchases && ! isLoading && ! isError; + + const pluginsNeedingActionAlerts = Object.keys( redBubbleAlerts ).filter( key => + key.endsWith( '--plugins_needing_installed_activated' ) + ) as Array< `${ string }--plugins_needing_installed_activated` >; + + const alert = redBubbleAlerts[ pluginsNeedingActionAlerts[ 0 ] ]; + const alertSlug = pluginsNeedingActionAlerts[ 0 ]; + const planSlug = alertSlug?.split( '--' )[ 0 ]; + const planPurchase = useMemo( () => { + return ( + isPurchasesDataLoaded && purchases.find( purchase => purchase.product_slug === planSlug ) + ); + }, [ isPurchasesDataLoaded, planSlug, purchases ] ); + const planName = planPurchase && planPurchase.product_name; + const { needs_installed, needs_activated_only } = alert || {}; + const numPluginsNeedingAction = + ( needs_installed?.length ?? 0 ) + ( needs_activated_only?.length ?? 0 ); + + const { + siteSuffix, + products: { items: products }, + } = getMyJetpackWindowInitialState(); + + const getPluginInfo = useCallback( + productSlug => ( { + productSlug: productSlug, + pluginSlug: products[ productSlug ].plugin_slug, + pluginName: + products[ productSlug ].plugin_slug === 'jetpack' + ? 'Jetpack' + : products[ productSlug ].title, + pluginUri: `https://wordpress.org/plugins/${ products[ productSlug ].plugin_slug }/`, + } ), + [ products ] + ); + + const pluginsList = useMemo( () => { + if ( needs_installed && needs_activated_only ) { + const slugs = new Set(); + return [ ...needs_installed, ...needs_activated_only ] + .map( getPluginInfo ) + .filter( ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) ); // filters out duplicates + } else if ( needs_installed ) { + const slugs = new Set(); + return needs_installed + .map( getPluginInfo ) + .filter( ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) ); + } + const slugs = new Set(); + return needs_activated_only + ?.map( getPluginInfo ) + .filter( ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) ); + }, [ getPluginInfo, needs_activated_only, needs_installed ] ); + + const actionNoun = useMemo( () => { + if ( needs_installed && needs_activated_only ) { + return 'installation and/or activation'; + } else if ( needs_installed ) { + return 'installation'; + } + return 'activation'; + }, [ needs_activated_only, needs_installed ] ); + + const actionVerb = useMemo( () => { + if ( needs_installed && needs_activated_only ) { + return 'install and/or activate'; + } else if ( needs_installed ) { + return 'install and activate'; + } + return 'activate'; + }, [ needs_activated_only, needs_installed ] ); + + const { install: installAndActivatePlugins, isPending: isInstalling } = + useInstallPlugins( needs_installed ); + const { activate: activatePlugins, isPending: isActivating } = + useActivatePlugins( needs_activated_only ); + + const handleInstallActivateInOneClick = useCallback( () => { + recordEvent( 'jetpack_my_jetpack_plugin_needs_installed_notice_cta_click' ); + + if ( needs_installed ) { + installAndActivatePlugins( null, { + onSuccess: () => { + delete redBubbleAlerts[ pluginsNeedingActionAlerts[ 0 ] ]; + resetNotice(); + }, + } ); + } + if ( needs_activated_only ) { + activatePlugins( null, { + onSuccess: () => { + delete redBubbleAlerts[ pluginsNeedingActionAlerts[ 0 ] ]; + resetNotice(); + }, + } ); + } + }, [ + recordEvent, + needs_installed, + needs_activated_only, + installAndActivatePlugins, + redBubbleAlerts, + pluginsNeedingActionAlerts, + resetNotice, + activatePlugins, + ] ); + + useEffect( () => { + if ( pluginsNeedingActionAlerts.length === 0 || ! isPurchasesDataLoaded ) { + return; + } + + const noticeTitle = sprintf( + /* translators: %s is the word(s), "installation", or "activation", or "installation and/or activation". */ + _n( + 'Plugin %s needed', + 'Some plugins need %s', + numPluginsNeedingAction, + 'jetpack-my-jetpack' + ), + actionNoun + ); + + const noticeMessage = ( + <> + + + { createInterpolateElement( + sprintf( + // translators: %1$s is the name of the Jetpack paid plan, i.e.- "Jetpack Security", %2$s is either "the [plugin name] plugin" or "the following plugins", and %3$s is a verb being either "installed", or "activated", or "installed and/or activated". + __( + 'To get the most out of your %1$s paid subscription and have access to all it’s features, we recommend you %2$s the following %3$s:', + 'jetpack-my-jetpack' + ), + planName, + actionVerb, + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ), + { + link: ( + + ), + } + ) } + +
        + { pluginsList.map( ( pluginInfo, index ) => ( +
      • + { actionVerb === 'activate' ? ( + { pluginInfo.pluginName } + ) : ( + + { pluginInfo.pluginName } + + ) } + (Needs { actionNoun }) +
      • + ) ) } +
      + + + ); + + const buttonLabel = sprintf( + /* translators: %1$s is either "Install and activate", or "Install and/or activate", or "Activate"; And %2$s is "plugin" or "plugins" (singular/plural). */ + __( '%1$s %2$s in one click', 'jetpack-my-jetpack' ), + actionVerb.charAt( 0 ).toUpperCase() + actionVerb.slice( 1 ), + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ); + + const isinstallingOrActivating = isActivating || isInstalling; + + const noticeOptions: NoticeOptions = { + id: 'plugin_needs_installed_activated', + level: 'warning', + actions: [ + { + label: buttonLabel, + onClick: handleInstallActivateInOneClick, + isLoading: isinstallingOrActivating, + loadingText: + actionVerb === 'activate' + ? sprintf( + /* translators: %s is the singular or plural "plugin" or "plugins". */ + __( 'Activating %s…', 'jetpack-my-jetpack' ), + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ) + : sprintf( + /* translators: %s is the singular or plural "plugin" or "plugins". */ + __( 'Installing and activating %s…', 'jetpack-my-jetpack' ), + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ), + noDefaultClasses: true, + }, + ], + priority: NOTICE_PRIORITY_MEDIUM + ( isinstallingOrActivating ? 1 : 0 ), + }; + + setNotice( { + title: noticeTitle, + message: noticeMessage, + options: noticeOptions, + } ); + }, [ + actionNoun, + actionVerb, + isPurchasesDataLoaded, + numPluginsNeedingAction, + handleInstallActivateInOneClick, + planName, + planPurchase, + pluginsList, + pluginsNeedingActionAlerts.length, + setNotice, + siteSuffix, + isInstalling, + isActivating, + ] ); +}; + +export default usePaidPlanNeedsPluginInstallActivationNotice; diff --git a/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-site-connection-notice.tsx b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-site-connection-notice.tsx index aee80801246ee..e30fa28c32c83 100644 --- a/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-site-connection-notice.tsx +++ b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-site-connection-notice.tsx @@ -4,7 +4,7 @@ import { useContext, useEffect } from 'react'; import { MyJetpackRoutes } from '../../constants'; import { NOTICE_PRIORITY_HIGH } from '../../context/constants'; import { NoticeContext } from '../../context/notices/noticeContext'; -import { useAllProducts } from '../../data/products/use-product'; +import { useAllProducts } from '../../data/products/use-all-products'; import useProductsByOwnership from '../../data/products/use-products-by-ownership'; import getProductSlugsThatRequireUserConnection from '../../data/utils/get-product-slugs-that-require-user-connection'; import useAnalytics from '../use-analytics'; diff --git a/projects/packages/my-jetpack/changelog/add-mj-red-bubble-notice-when-plugins-need-installed b/projects/packages/my-jetpack/changelog/add-mj-red-bubble-notice-when-plugins-need-installed new file mode 100644 index 0000000000000..26e39e2dcb86a --- /dev/null +++ b/projects/packages/my-jetpack/changelog/add-mj-red-bubble-notice-when-plugins-need-installed @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +My Jetpack: Add red bubble and notice when pain plan is missing plugin. diff --git a/projects/packages/my-jetpack/global.d.ts b/projects/packages/my-jetpack/global.d.ts index 940aceb078f83..117857b70ec97 100644 --- a/projects/packages/my-jetpack/global.d.ts +++ b/projects/packages/my-jetpack/global.d.ts @@ -426,6 +426,10 @@ interface Window { fixable_threat_ids: number[]; }; }; + [ key: `${ string }--plugins_needing_installed_activated` ]: { + needs_installed?: string[]; + needs_activated_only?: string[]; + }; }; recommendedModules: { modules: JetpackModule[] | null; diff --git a/projects/packages/my-jetpack/src/class-initializer.php b/projects/packages/my-jetpack/src/class-initializer.php index 58eccc75b8644..6d54d3241c6d9 100644 --- a/projects/packages/my-jetpack/src/class-initializer.php +++ b/projects/packages/my-jetpack/src/class-initializer.php @@ -821,6 +821,38 @@ public static function get_idc_container_id() { return static::IDC_CONTAINER_ID; } + /** + * Gets the plugins that need installed or activated for each paid plan. + * + * @return array + */ + public static function get_paid_plans_plugins_requirements() { + $plugin_requirements = array(); + foreach ( Products::get_products_classes() as $slug => $product_class ) { + // Skip these- we don't show them in My Jetpack. + if ( in_array( $slug, Products::get_not_shown_products(), true ) ) { + continue; + } + if ( ! $product_class::has_paid_plan_for_product() ) { + continue; + } + $purchase = $product_class::get_paid_plan_purchase_for_product(); + if ( ! $purchase ) { + continue; + } + // Check if required plugin needs installed or activated. + if ( ! $product_class::is_plugin_installed() ) { + // Plugin needs installed (and activated) + $plugin_requirements[ $purchase->product_slug ]['needs_installed'][] = $product_class::$slug; + } elseif ( ! $product_class::is_plugin_active() ) { + // Plugin is installed, but not activated. + $plugin_requirements[ $purchase->product_slug ]['needs_activated_only'][] = $product_class::$slug; + } + } + + return $plugin_requirements; + } + /** * Conditionally append the red bubble notification to the "Jetpack" menu item if there are alerts to show * @@ -958,7 +990,8 @@ public static function add_red_bubble_alerts( array $red_bubble_slugs ) { self::alert_if_missing_connection( $red_bubble_slugs ), self::alert_if_last_backup_failed( $red_bubble_slugs ), self::alert_if_paid_plan_expiring( $red_bubble_slugs ), - self::alert_if_protect_has_threats( $red_bubble_slugs ) + self::alert_if_protect_has_threats( $red_bubble_slugs ), + self::alert_if_paid_plan_requires_plugin_install_or_activation( $red_bubble_slugs ) ); } } @@ -1012,22 +1045,12 @@ public static function alert_if_paid_plan_expiring( array $red_bubble_slugs ) { if ( ! $connection->is_connected() ) { return $red_bubble_slugs; } - $product_classes = Products::get_products_classes(); - $not_shown_products = array( - 'scan', - 'extras', - 'ai', - 'newsletter', - 'site-accelerator', - 'related-posts', - ); + $product_classes = Products::get_products_classes(); $products_included_in_expiring_plan = array(); foreach ( $product_classes as $key => $product ) { // Skip these- we don't show them in My Jetpack. - // ('ai' is a duplicate class of 'jetpack-ai', and therefore not needed). - // See `get_product_classes() in projects/packages/my-jetpack/src/class-products.php for more info. - if ( in_array( $key, $not_shown_products, true ) ) { + if ( in_array( $key, Products::get_not_shown_products(), true ) ) { continue; } @@ -1073,10 +1096,19 @@ public static function alert_if_paid_plan_expiring( array $red_bubble_slugs ) { * @return array */ public static function alert_if_last_backup_failed( array $red_bubble_slugs ) { - // Make sure we're dealing with the Backup product only - if ( ! Products\Backup::has_paid_plan_for_product() ) { + // Make sure there's a Backup paid plan + if ( ! Products\Backup::is_plugin_active() || ! Products\Backup::has_paid_plan_for_product() ) { return $red_bubble_slugs; } + // Make sure the plan isn't just recently purchased in last 30min. + // Give some time to queue & run the first backup. + $purchase = Products\Backup::get_paid_plan_purchase_for_product(); + if ( $purchase ) { + $thirty_minutes_after_plan_purchase = strtotime( $purchase->subscribed_date . ' +30 minutes' ); + if ( strtotime( 'now' ) < $thirty_minutes_after_plan_purchase ) { + return $red_bubble_slugs; + } + } $backup_failed_status = Products\Backup::does_module_need_attention(); if ( $backup_failed_status ) { @@ -1103,6 +1135,31 @@ public static function alert_if_protect_has_threats( array $red_bubble_slugs ) { $red_bubble_slugs['protect_has_threats'] = $protect_threats_status; } + return $red_bubble_slugs; + } + /** + * Add an alert slug if a site's paid plan requires a plugin install and/or activation. + * + * @param array $red_bubble_slugs - slugs that describe the reasons the red bubble is showing. + * @return array + */ + public static function alert_if_paid_plan_requires_plugin_install_or_activation( array $red_bubble_slugs ) { + $connection = new Connection_Manager(); + // Don't trigger red bubble (and show notice) when the site is not connected or if the + // user doesn't have plugin installation/activation permissions. + if ( ! $connection->is_connected() || ! current_user_can( 'activate_plugins' ) ) { + return $red_bubble_slugs; + } + + $plugins_needing_installed_activated = self::get_paid_plans_plugins_requirements(); + if ( empty( $plugins_needing_installed_activated ) ) { + return $red_bubble_slugs; + } + + foreach ( $plugins_needing_installed_activated as $plan_slug => $plugins_requirements ) { + $red_bubble_slugs[ "$plan_slug--plugins_needing_installed_activated" ] = $plugins_requirements; + } + return $red_bubble_slugs; } } diff --git a/projects/packages/my-jetpack/src/class-products.php b/projects/packages/my-jetpack/src/class-products.php index f45ad5b9d1237..5fa9af2db4c22 100644 --- a/projects/packages/my-jetpack/src/class-products.php +++ b/projects/packages/my-jetpack/src/class-products.php @@ -176,17 +176,58 @@ public static function get_products_classes() { return $final_classes; } + /** + * List of product slugs that are displayed on the main My Jetpack page + * + * @var array + */ + public static $shown_products = array( + 'anti-spam', + 'backup', + 'boost', + 'crm', + 'jetpack-ai', + 'search', + 'social', + 'protect', + 'videopress', + 'stats', + ); + + /** + * Gets the list of product slugs that are Not displayed on the main My Jetpack page + * + * @return array + */ + public static function get_not_shown_products() { + return array_diff( array_keys( static::get_products_classes() ), self::$shown_products ); + } + /** * Product data * + * @param array $product_slugs (optional) An array of specified product slugs. * @return array Jetpack products on the site and their availability. */ - public static function get_products() { - $products = array(); - foreach ( self::get_products_classes() as $class ) { - $product_slug = $class::$slug; - $products[ $product_slug ] = $class::get_info(); + public static function get_products( $product_slugs = array() ) { + $all_classes = self::get_products_classes(); + $products = array(); + // If an array of $product_slugs are passed, return only the products specified in $product_slugs array + if ( $product_slugs ) { + foreach ( $product_slugs as $product_slug ) { + if ( isset( $all_classes[ $product_slug ] ) ) { + $class = $all_classes[ $product_slug ]; + $products[ $product_slug ] = $class::get_info(); + } + } + + return $products; } + // Otherwise return All products. + foreach ( $all_classes as $slug => $class ) { + $products[ $slug ] = $class::get_info(); + } + return $products; } diff --git a/projects/packages/my-jetpack/src/class-rest-products.php b/projects/packages/my-jetpack/src/class-rest-products.php index dfa60108b7c56..a92cda17b204d 100644 --- a/projects/packages/my-jetpack/src/class-rest-products.php +++ b/projects/packages/my-jetpack/src/class-rest-products.php @@ -25,45 +25,55 @@ public function __construct() { 'methods' => \WP_REST_Server::READABLE, 'callback' => __CLASS__ . '::get_products', 'permission_callback' => __CLASS__ . '::permissions_callback', + 'args' => array( + 'products' => array( + 'description' => __( 'Comma seperated list of product slugs that should be retrieved.', 'jetpack-my-jetpack' ), + 'type' => 'string', + 'required' => false, + 'validate_callback' => __CLASS__ . '::check_products_string', + ), + ), ), 'schema' => array( $this, 'get_products_schema' ), ) ); - $product_arg = array( - 'description' => __( 'Product slug', 'jetpack-my-jetpack' ), - 'type' => 'string', - 'enum' => Products::get_products_slugs(), + $products_arg = array( + 'description' => __( 'Array of Product slugs', 'jetpack-my-jetpack' ), + 'type' => 'array', + 'items' => array( + 'enum' => Products::get_products_slugs(), + 'type' => 'string', + ), 'required' => true, - 'validate_callback' => __CLASS__ . '::check_product_argument', + 'validate_callback' => __CLASS__ . '::check_products_argument', ); register_rest_route( 'my-jetpack/v1', - 'site/products/(?P[a-z\-]+)', + 'site/products/install', array( - array( - 'methods' => \WP_REST_Server::READABLE, - 'callback' => __CLASS__ . '::get_product', - 'permission_callback' => __CLASS__ . '::permissions_callback', - 'args' => array( - 'product' => $product_arg, - ), - ), array( 'methods' => \WP_REST_Server::EDITABLE, - 'callback' => __CLASS__ . '::activate_product', + 'callback' => __CLASS__ . '::install_plugins', 'permission_callback' => __CLASS__ . '::edit_permissions_callback', 'args' => array( - 'product' => $product_arg, + 'products' => $products_arg, ), ), + ) + ); + + register_rest_route( + 'my-jetpack/v1', + 'site/products/activate', + array( array( - 'methods' => \WP_REST_Server::DELETABLE, - 'callback' => __CLASS__ . '::deactivate_product', + 'methods' => \WP_REST_Server::EDITABLE, + 'callback' => __CLASS__ . '::activate_products', 'permission_callback' => __CLASS__ . '::edit_permissions_callback', 'args' => array( - 'product' => $product_arg, + 'products' => $products_arg, ), ), ) @@ -71,12 +81,15 @@ public function __construct() { register_rest_route( 'my-jetpack/v1', - 'site/products/(?P[a-z\-]+)/install-standalone', + 'site/products/deactivate', array( array( - 'methods' => \WP_REST_Server::EDITABLE, - 'callback' => __CLASS__ . '::install_standalone', + 'methods' => \WP_REST_Server::DELETABLE, + 'callback' => __CLASS__ . '::deactivate_products', 'permission_callback' => __CLASS__ . '::edit_permissions_callback', + 'args' => array( + 'products' => $products_arg, + ), ), ) ); @@ -121,7 +134,7 @@ public static function permissions_callback() { } /** - * Check Product arguments. + * Check Products string (comma separated string). * * @access public * @static @@ -129,7 +142,7 @@ public static function permissions_callback() { * @param mixed $value - Value of the 'product' argument. * @return true|WP_Error True if the value is valid, WP_Error otherwise. */ - public static function check_product_argument( $value ) { + public static function check_products_string( $value ) { if ( ! is_string( $value ) ) { return new WP_Error( 'rest_invalid_param', @@ -138,16 +151,59 @@ public static function check_product_argument( $value ) { ); } + $products_array = explode( ',', $value ); + $all_products = Products::get_products_slugs(); + + foreach ( $products_array as $product_slug ) { + if ( ! in_array( $product_slug, $all_products, true ) ) { + return new WP_Error( + 'rest_invalid_param', + esc_html( + sprintf( + /* translators: %s is the product_slug, it should Not be translated. */ + __( 'The specified product argument %s is an invalid product.', 'jetpack-my-jetpack' ), + $product_slug + ) + ), + array( 'status' => 400 ) + ); + } + } + + return true; + } + /** + * Check Products argument. + * + * @access public + * @static + * + * @param mixed $value - Value of the 'product' argument. + * @return true|WP_Error True if the value is valid, WP_Error otherwise. + */ + public static function check_products_argument( $value ) { + if ( ! is_array( $value ) ) { + return new WP_Error( + 'rest_invalid_param', + esc_html__( 'The product argument must be an array.', 'jetpack-my-jetpack' ), + array( 'status' => 400 ) + ); + } + return true; } /** * Site products endpoint. * + * @param \WP_REST_Request $request The request object. * @return array of site products list. */ - public static function get_products() { - $response = Products::get_products(); + public static function get_products( $request ) { + $slugs = $request->get_param( 'products' ); + $product_slugs = ! empty( $slugs ) ? array_map( 'trim', explode( ',', $slugs ) ) : array(); + + $response = Products::get_products( $product_slugs ); return rest_ensure_response( $response, 200 ); } @@ -164,17 +220,6 @@ public static function get_products_by_ownership() { return rest_ensure_response( $response, 200 ); } - /** - * Site single product endpoint. - * - * @param \WP_REST_Request $request The request object. - * @return array of site products list. - */ - public static function get_product( $request ) { - $product_slug = $request->get_param( 'product' ); - return rest_ensure_response( Products::get_product( $product_slug ), 200 ); - } - /** * Check permission to edit product * @@ -191,81 +236,102 @@ public static function edit_permissions_callback() { } /** - * Callback for activating a product + * Callback for activating products * * @param \WP_REST_Request $request The request object. * @return \WP_REST_Response */ - public static function activate_product( $request ) { - $product_slug = $request->get_param( 'product' ); - $product = Products::get_product( $product_slug ); - if ( ! isset( $product['class'] ) ) { - return new \WP_Error( - 'not_implemented', - esc_html__( 'The product class handler is not implemented', 'jetpack-my-jetpack' ), - array( 'status' => 501 ) - ); - } + public static function activate_products( $request ) { + $products_array = $request->get_param( 'products' ); + + foreach ( $products_array as $product_slug ) { + $product = Products::get_product( $product_slug ); + if ( ! isset( $product['class'] ) ) { + return new \WP_Error( + 'product_class_handler_not_found', + sprintf( + /* translators: %s is the product_slug */ + __( 'The product slug %s does not have an associated class handler.', 'jetpack-my-jetpack' ), + $product_slug + ), + array( 'status' => 501 ) + ); + } - $activate_product_result = call_user_func( array( $product['class'], 'activate' ) ); - if ( is_wp_error( $activate_product_result ) ) { - $activate_product_result->add_data( array( 'status' => 400 ) ); - return $activate_product_result; + $activate_product_result = call_user_func( array( $product['class'], 'activate' ) ); + if ( is_wp_error( $activate_product_result ) ) { + $activate_product_result->add_data( array( 'status' => 400 ) ); + return $activate_product_result; + } } - set_transient( 'my_jetpack_product_activated', $product_slug, 10 ); + set_transient( 'my_jetpack_product_activated', implode( ',', $products_array ), 10 ); - return rest_ensure_response( Products::get_product( $product_slug ), 200 ); + return rest_ensure_response( Products::get_products( $products_array ), 200 ); } /** - * Callback for deactivating a product + * Callback for deactivating products * * @param \WP_REST_Request $request The request object. * @return \WP_REST_Response */ - public static function deactivate_product( $request ) { - $product_slug = $request->get_param( 'product' ); - $product = Products::get_product( $product_slug ); - if ( ! isset( $product['class'] ) ) { - return new \WP_Error( - 'not_implemented', - esc_html__( 'The product class handler is not implemented', 'jetpack-my-jetpack' ), - array( 'status' => 501 ) - ); - } + public static function deactivate_products( $request ) { + $products_array = $request->get_param( 'products' ); + + foreach ( $products_array as $product_slug ) { + $product = Products::get_product( $product_slug ); + if ( ! isset( $product['class'] ) ) { + return new \WP_Error( + 'product_class_handler_not_found', + sprintf( + /* translators: %s is the product_slug */ + __( 'The product slug %s does not have an associated class handler.', 'jetpack-my-jetpack' ), + $product_slug + ), + array( 'status' => 501 ) + ); + } - $deactivate_product_result = call_user_func( array( $product['class'], 'deactivate' ) ); - if ( is_wp_error( $deactivate_product_result ) ) { - $deactivate_product_result->add_data( array( 'status' => 400 ) ); - return $deactivate_product_result; + $deactivate_product_result = call_user_func( array( $product['class'], 'deactivate' ) ); + if ( is_wp_error( $deactivate_product_result ) ) { + $deactivate_product_result->add_data( array( 'status' => 400 ) ); + return $deactivate_product_result; + } } - return rest_ensure_response( Products::get_product( $product_slug ), 200 ); + return rest_ensure_response( Products::get_products( $products_array ), 200 ); } /** - * Callback for installing the standalone plugin on a Hybrid Product. + * Callback for installing (and activating) multiple product plugins. * * @param \WP_REST_Request $request The request object. * @return \WP_REST_Response */ - public static function install_standalone( $request ) { - $product_slug = $request->get_param( 'product' ); - $product = Products::get_product( $product_slug ); - if ( ! isset( $product['class'] ) ) { - return new \WP_Error( - 'not_implemented', - __( 'The product class handler is not implemented', 'jetpack-my-jetpack' ), - array( 'status' => 501 ) - ); - } + public static function install_plugins( $request ) { + $products_array = $request->get_param( 'products' ); + + foreach ( $products_array as $product_slug ) { + $product = Products::get_product( $product_slug ); + if ( ! isset( $product['class'] ) ) { + return new \WP_Error( + 'product_class_handler_not_found', + sprintf( + /* translators: %s is the product_slug */ + __( 'The product slug %s does not have an associated class handler.', 'jetpack-my-jetpack' ), + $product_slug + ), + array( 'status' => 501 ) + ); + } - $install_product_result = call_user_func( array( $product['class'], 'install_and_activate_standalone' ) ); - if ( is_wp_error( $install_product_result ) ) { - $install_product_result->add_data( array( 'status' => 400 ) ); - return $install_product_result; + $install_product_result = call_user_func( array( $product['class'], 'install_and_activate_standalone' ) ); + if ( is_wp_error( $install_product_result ) ) { + $install_product_result->add_data( array( 'status' => 400 ) ); + return $install_product_result; + } } - return rest_ensure_response( Products::get_product( $product_slug ), 200 ); + return rest_ensure_response( Products::get_products( $products_array ), 200 ); } } diff --git a/projects/packages/my-jetpack/src/products/class-product.php b/projects/packages/my-jetpack/src/products/class-product.php index f48f51c729be2..4455b8fccf0a4 100644 --- a/projects/packages/my-jetpack/src/products/class-product.php +++ b/projects/packages/my-jetpack/src/products/class-product.php @@ -180,7 +180,7 @@ public static function get_info() { } return array( 'slug' => static::$slug, - 'plugin_slug' => static::$plugin_slug, + 'plugin_slug' => static::get_plugin_slug(), 'name' => static::get_name(), 'title' => static::get_title(), 'description' => static::get_description(), diff --git a/projects/packages/my-jetpack/tests/php/test-products-rest.php b/projects/packages/my-jetpack/tests/php/test-products-rest.php index 1a3bf47c62d7e..6c302c669a3b5 100644 --- a/projects/packages/my-jetpack/tests/php/test-products-rest.php +++ b/projects/packages/my-jetpack/tests/php/test-products-rest.php @@ -167,20 +167,30 @@ public function test_get_products_not_logged() { public function test_get_product() { $product = Products::get_product( 'boost' ); - $request = new WP_REST_Request( 'GET', '/my-jetpack/v1/site/products/boost' ); + $request = new WP_REST_Request( 'GET', '/my-jetpack/v1/site/products' ); + $request->set_query_params( + array( + 'products' => 'boost', + ) + ); $response = $this->server->dispatch( $request ); $data = $response->get_data(); $this->assertEquals( 200, $response->get_status() ); - $this->assertEquals( $product, $data ); + $this->assertEquals( $product, $data['boost'] ); } /** * Test GET invalid product */ public function test_get_invalid_product() { - $request = new WP_REST_Request( 'GET', '/my-jetpack/v1/site/products/invalid' ); + $request = new WP_REST_Request( 'GET', '/my-jetpack/v1/site/products' ); + $request->set_query_params( + array( + 'products' => 'invalid', + ) + ); $response = $this->server->dispatch( $request ); @@ -194,14 +204,19 @@ public function test_activate_boost() { $this->assertFalse( is_plugin_active( $this->boost_mock_filename ) ); + $body = array( + 'products' => array( 'boost' ), + ); // Activate. - $request = new WP_REST_Request( 'POST', '/my-jetpack/v1/site/products/boost' ); + $request = new WP_REST_Request( 'POST', '/my-jetpack/v1/site/products/activate' ); + $request->set_header( 'content-type', 'application/json' ); + $request->set_body( wp_json_encode( $body ) ); $response = $this->server->dispatch( $request ); $data = $response->get_data(); $this->assertEquals( 200, $response->get_status() ); - $this->assertEquals( 'can_upgrade', $data['status'] ); + $this->assertEquals( 'can_upgrade', $data['boost']['status'] ); $this->assertTrue( is_plugin_active( $this->boost_mock_filename ) ); } @@ -213,14 +228,19 @@ public function test_deactivate_boost() { activate_plugin( $this->boost_mock_filename ); $this->assertTrue( is_plugin_active( $this->boost_mock_filename ) ); + $body = array( + 'products' => array( 'boost' ), + ); // Deactivate. - $request = new WP_REST_Request( 'DELETE', '/my-jetpack/v1/site/products/boost' ); + $request = new WP_REST_Request( 'DELETE', '/my-jetpack/v1/site/products/deactivate' ); + $request->set_header( 'content-type', 'application/json' ); + $request->set_body( wp_json_encode( $body ) ); $response = $this->server->dispatch( $request ); $data = $response->get_data(); $this->assertEquals( 200, $response->get_status() ); - $this->assertEquals( 'needs_activation', $data['status'] ); + $this->assertEquals( 'needs_activation', $data['boost']['status'] ); $this->assertFalse( is_plugin_active( $this->boost_mock_filename ) ); } @@ -233,8 +253,13 @@ public function test_activate_uninstallable() { $this->assertFalse( is_plugin_active( $this->boost_mock_filename ) ); + $body = array( + 'products' => array( 'boost' ), + ); // Activate. - $request = new WP_REST_Request( 'POST', '/my-jetpack/v1/site/products/boost' ); + $request = new WP_REST_Request( 'POST', '/my-jetpack/v1/site/products/activate' ); + $request->set_header( 'content-type', 'application/json' ); + $request->set_body( wp_json_encode( $body ) ); $response = $this->server->dispatch( $request ); $data = $response->get_data(); diff --git a/projects/plugins/protect/changelog/update-my-jetpack-products-endpoint b/projects/plugins/protect/changelog/update-my-jetpack-products-endpoint new file mode 100644 index 0000000000000..c79fb6f21d013 --- /dev/null +++ b/projects/plugins/protect/changelog/update-my-jetpack-products-endpoint @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated My Jetpack my-jetpack-v1/site/products route to pass a "?products" query param. diff --git a/projects/plugins/protect/src/js/api.ts b/projects/plugins/protect/src/js/api.ts index 2b98a6164bf8b..8a2437e629402 100644 --- a/projects/plugins/protect/src/js/api.ts +++ b/projects/plugins/protect/src/js/api.ts @@ -1,6 +1,7 @@ import { type FixersStatus, type ScanStatus, type WafStatus } from '@automattic/jetpack-scan'; import apiFetch from '@wordpress/api-fetch'; import camelize from 'camelize'; +import type { ProductData } from './types/products'; const API = { getWaf: (): Promise< WafStatus > => @@ -108,10 +109,12 @@ const API = { } ), getProductData: () => - apiFetch( { - path: '/my-jetpack/v1/site/products/scan', - method: 'GET', - } ).then( camelize ), + ( + apiFetch( { + path: '/my-jetpack/v1/site/products?products=scan', + method: 'GET', + } ) as Promise< { [ key: string ]: ProductData } > + ).then( products => camelize( products?.scan ) ), }; export default API; From f6cbc5a61735a95f1150ee1242ebf6de4073b9dc Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Tue, 28 Jan 2025 19:28:38 -0300 Subject: [PATCH 254/420] Jetpack SEO Assistant: add steps codependency flow (#41341) * make assistant wider and its height respond to content with a max of 434px * add options to onStart handler, acepting if the previous step was skipped and the current value of it * comment out skip action on steps, they are now next step's responsibility * refactor onStart handler for title step, it now composes the messages based on previous step skip and value conditions * refactor onStart handler for meta step, it now composes the messages based on previous step skip condition * use autoAdvance on starting step without delays * changelog * change onSubmit to return a string as step value * remove empty and duped keywords * concat messages as in design * remove unused code * better alignment of the wizard icon * refactor options into message[type=option] * add conditional message to meta step --- ...e-jetpack-seo-assistant-steps-codependency | 4 + .../seo-assistant/assistant-wizard.tsx | 40 ++-- .../seo-assistant/seo-assistant-wizard.tsx | 2 +- .../components/seo-assistant/style.scss | 10 +- .../components/seo-assistant/types.tsx | 20 +- .../seo-assistant/use-keywords-step.tsx | 14 +- .../use-meta-description-step.tsx | 143 ++++++++------ .../seo-assistant/use-title-step.tsx | 184 +++++++++++------- .../seo-assistant/wizard-messages.tsx | 63 ++---- .../components/seo-assistant/wizard-step.tsx | 8 +- 10 files changed, 262 insertions(+), 226 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-steps-codependency diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-steps-codependency b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-steps-codependency new file mode 100644 index 0000000000000..1bd07b085d511 --- /dev/null +++ b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-steps-codependency @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack SEO Assistant: improve assistant flow by letting steps depend on previous steps diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx index 5e8254095acd1..f6c82b9ed2fb4 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx @@ -8,7 +8,7 @@ import { useMetaDescriptionStep } from './use-meta-description-step'; import { useTitleStep } from './use-title-step'; import { OptionsInput, TextInput, CompletionInput } from './wizard-input'; import WizardStep from './wizard-step'; -import type { Step, Option } from './types'; +import type { Step, OptionMessage, OnStartFunction } from './types'; const debug = debugFactory( 'jetpack-seo:assistant-wizard' ); @@ -37,20 +37,25 @@ export default function AssistantWizard( { close, tasks } ) { [ tasks, keywordsStepData, titleStepData, metaStepData ] ); - const handleNext = useCallback( () => { - if ( currentStep + 1 < steps.length ) { - debug( 'moving to ' + ( currentStep + 1 ) ); - setCurrentStep( currentStep + 1 ); - setCurrentStepData( steps[ currentStep + 1 ] ); - steps[ currentStep + 1 ].onStart?.(); - } - }, [ currentStep, steps ] ); + const handleNext = useCallback( + ( options: Parameters< OnStartFunction >[ 0 ] ) => { + debug( 'step value', steps[ currentStep ].value ); + debug( 'next step value', steps[ currentStep + 1 ].value ); + if ( currentStep + 1 < steps.length ) { + debug( 'moving to ' + ( currentStep + 1 ) ); + setCurrentStep( currentStep + 1 ); + setCurrentStepData( steps[ currentStep + 1 ] ); + steps[ currentStep + 1 ].onStart?.( options ); + } + }, + [ currentStep, steps ] + ); const handleStepSubmit = useCallback( async () => { - await steps[ currentStep ]?.onSubmit?.(); + const stepValue = await steps[ currentStep ]?.onSubmit?.(); debug( 'step submitted, moving next' ); // always give half a second before moving forward - setTimeout( handleNext, 500 ); + setTimeout( () => handleNext( { fromSkip: ! stepValue.trim(), stepValue } ), 500 ); }, [ currentStep, handleNext, steps ] ); const jumpToStep = useCallback( @@ -64,7 +69,7 @@ export default function AssistantWizard( { close, tasks } ) { ); const handleSelect = useCallback( - ( stepNumber: number, option: Option ) => { + ( stepNumber: number, option: OptionMessage ) => { if ( stepNumber !== currentStep ) { jumpToStep( stepNumber ); } @@ -91,10 +96,14 @@ export default function AssistantWizard( { close, tasks } ) { } }; - const handleSkip = async () => { + const handleSkip = useCallback( async () => { await currentStepData?.onSkip?.(); - handleNext(); - }; + handleNext( { + fromSkip: true, + // if skip is NOT meant to reset, pass stepValue as steps[ currentStep ].value + stepValue: '', + } ); + }, [ currentStepData, handleNext ] ); // Reset states and close the wizard const handleDone = () => { @@ -128,7 +137,6 @@ export default function AssistantWizard( { close, tasks } ) { key={ step.id } messages={ step.messages } visible={ currentStep >= index } - options={ step.options || [] } onSelect={ option => handleSelect( index, option ) } /> ) ) } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx index 641e2cda5d452..c2027ef409601 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx @@ -17,7 +17,7 @@ export default function SeoAssistantWizard( { close }: { close?: () => void } ) title: __( 'Optimise for SEO', 'jetpack' ), label: 'welcome', type: 'welcome', - autoAdvance: 1000, + autoAdvance: 1, messages: [ { content: createInterpolateElement( diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss index 48038e9b2829a..2c4d3c41e5567 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -3,8 +3,8 @@ bottom: 32px; left: 50%; transform: translateX(-50%); - width: 384px; - height: 434px; + width: 440px; + max-height: 434px; background: white; border-radius: 24px; outline: 0.5px solid var( --jp-gray-5 ); @@ -67,7 +67,6 @@ &__message { border-radius: 16px; - white-space: pre-line; animation: messageAppear 0.3s ease-out; font-size: 13px; line-height: 1.5; @@ -77,8 +76,9 @@ .assistant-wizard__message-icon { flex-shrink: 0; - align-self: center; + align-self: baseline; flex-basis: 26px; + line-height: 2; img { vertical-align: middle; @@ -86,7 +86,7 @@ } .assistant-wizard__message-text { - padding: 4px 12px; + padding: 0px 12px; // flex: 1 0 200px; } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx index 04d51db8ef9d1..55f6b23149c14 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx @@ -2,27 +2,23 @@ type StepType = 'welcome' | 'input' | 'options' | 'completion'; export interface Message { id?: string; - content?: string | React.ReactNode; + content: string | React.ReactNode; isUser?: boolean; showIcon?: boolean; type?: string; - options?: Option[]; -} - -export interface Option { - id: string; - content: string; selected?: boolean; } +export type OptionMessage = Pick< Message, 'id' | 'content' >; + interface BaseStep { id: string; title: string; label?: string; messages: Message[]; type: StepType; - onStart?: () => void; - onSubmit?: () => void; + onStart?: OnStartFunction; + onSubmit?: () => Promise< string >; onSkip?: () => void; value?: string; setValue?: @@ -39,8 +35,8 @@ export interface InputStep extends BaseStep { interface OptionsStep extends BaseStep { type: 'options'; - options: Option[]; - onSelect: ( option: Option ) => void; + options: OptionMessage[]; + onSelect: ( option: OptionMessage ) => void; submitCtaLabel?: string; onRetry?: () => void; retryCtaLabel?: string; @@ -51,3 +47,5 @@ interface CompletionStep extends BaseStep { } export type Step = InputStep | OptionsStep | CompletionStep; + +export type OnStartFunction = ( options?: { fromSkip: boolean; stepValue: string } ) => void; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx index c8a3a1df9b2ed..274487f76dc51 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx @@ -21,13 +21,9 @@ export const useKeywordsStep = (): InputStep => { ] ); }, [ setMessages ] ); - const handleSkip = useCallback( () => { - addMessage( { content: __( 'Skipped!', 'jetpack' ) } ); - }, [ addMessage ] ); - const handleKeywordsSubmit = useCallback( async () => { if ( ! keywords.trim() ) { - return handleSkip(); + return ''; } addMessage( { content: keywords, isUser: true } ); addMessage( { content: } ); @@ -37,6 +33,10 @@ export const useKeywordsStep = (): InputStep => { const commaSeparatedKeywords = keywords .split( ',' ) .map( k => k.trim() ) + // remove empty entries + .filter( v => v ) + // remove duped entries, inefficient but we don't expect a lot of entries here + .filter( ( v, i, arr ) => arr.indexOf( v ) === i ) .reduce( ( acc, curr, i, arr ) => { if ( arr.length === 1 ) { return curr; @@ -60,7 +60,8 @@ export const useKeywordsStep = (): InputStep => { ); addMessage( { content: message } ); setCompleted( true ); - }, [ addMessage, keywords, handleSkip, removeLastMessage ] ); + return keywords; + }, [ addMessage, keywords, removeLastMessage ] ); return { id: 'keywords', @@ -70,7 +71,6 @@ export const useKeywordsStep = (): InputStep => { type: 'input', placeholder: __( 'Photography, plants', 'jetpack' ), onSubmit: handleKeywordsSubmit, - onSkip: handleSkip, completed, setCompleted, value: keywords, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx index 6ad5f60bc960f..3f7aa984ec183 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx @@ -1,37 +1,31 @@ import { useDispatch } from '@wordpress/data'; -import { useCallback, useState, useEffect, createInterpolateElement } from '@wordpress/element'; +import { useCallback, useState, createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import TypingMessage from './typing-message'; import { useMessages } from './wizard-messages'; -import type { Step, Option } from './types'; +import type { Step, OptionMessage } from './types'; export const useMetaDescriptionStep = (): Step => { const [ selectedMetaDescription, setSelectedMetaDescription ] = useState< string >(); - const [ metaDescriptionOptions, setMetaDescriptionOptions ] = useState< Option[] >( [] ); - const { messages, setMessages, addMessage, removeLastMessage, editLastMessage } = useMessages(); + const [ metaDescriptionOptions, setMetaDescriptionOptions ] = useState< OptionMessage[] >( [] ); + const { + messages, + setMessages, + addMessage, + removeLastMessage, + editLastMessage, + setSelectedMessage, + } = useMessages(); const { editPost } = useDispatch( 'core/editor' ); const [ completed, setCompleted ] = useState( false ); - useEffect( () => { - if ( messages.length === 0 ) { - setMessages( [ - { - content: __( "Now, let's optimize your meta description.", 'jetpack' ), - showIcon: true, - }, - ] ); - } - }, [ setMessages, messages ] ); - - const handleMetaDescriptionSelect = useCallback( ( option: Option ) => { - setSelectedMetaDescription( option.content ); - setMetaDescriptionOptions( prev => - prev.map( opt => ( { - ...opt, - selected: opt.id === option.id, - } ) ) - ); - }, [] ); + const handleMetaDescriptionSelect = useCallback( + ( option: OptionMessage ) => { + setSelectedMetaDescription( option.content as string ); + setSelectedMessage( option ); + }, + [ setSelectedMessage ] + ); const handleMetaDescriptionSubmit = useCallback( async () => { addMessage( { content: } ); @@ -39,47 +33,79 @@ export const useMetaDescriptionStep = (): Step => { removeLastMessage(); addMessage( { content: __( 'Meta description updated! ✅', 'jetpack' ) } ); setCompleted( true ); + return selectedMetaDescription; }, [ selectedMetaDescription, addMessage, editPost, removeLastMessage ] ); - const handleMetaDescriptionGenerate = useCallback( async () => { - let newMetaDescriptions; - // we only generate if options are empty - if ( metaDescriptionOptions.length === 0 ) { - addMessage( { content: } ); - newMetaDescriptions = await new Promise( resolve => - setTimeout( - () => - resolve( [ - { - id: 'meta-1', - content: - 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', - }, - ] ), - 2000 - ) + const handleMetaDescriptionGenerate = useCallback( + async ( { fromSkip } ) => { + const initialMessage = fromSkip + ? { + content: createInterpolateElement( + __( "Skipped!
      Now, let's optimize your meta description.", 'jetpack' ), + { br:
      } + ), + showIcon: true, + } + : { + content: __( "Now, let's optimize your meta description.", 'jetpack' ), + showIcon: true, + }; + let newMetaDescriptions = [ ...metaDescriptionOptions ]; + // we only generate if options are empty + setMessages( [ initialMessage ] ); + if ( newMetaDescriptions.length === 0 ) { + addMessage( { content: } ); + newMetaDescriptions = await new Promise( resolve => + setTimeout( + () => + resolve( [ + { + id: 'meta-1', + content: + 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', + }, + ] ), + 2000 + ) + ); + removeLastMessage(); + } + setMetaDescriptionOptions( newMetaDescriptions ); + const editedFirstMessage = fromSkip + ? createInterpolateElement( + __( + "Skipped!
      Now, let's optimize your meta description.
      Here's a new suggestion:", + 'jetpack' + ), + { br:
      } + ) + : createInterpolateElement( + __( + "Now, let's optimize your meta description.
      Here's a new suggestion:", + 'jetpack' + ), + { br:
      } + ); + editLastMessage( editedFirstMessage ); + newMetaDescriptions.forEach( meta => + addMessage( { ...meta, type: 'option', isUser: true } ) ); - removeLastMessage(); - } - const editedFirstMessage = createInterpolateElement( - __( "Now, let's optimize your meta description.
      Here's a suggestion:", 'jetpack' ), - { br:
      } - ); - // addMessage( { content: __( "Here's a suggestion:", 'jetpack' ) } ); - editLastMessage( editedFirstMessage ); - setMetaDescriptionOptions( newMetaDescriptions || metaDescriptionOptions ); - }, [ metaDescriptionOptions, addMessage, removeLastMessage, editLastMessage ] ); + }, + [ metaDescriptionOptions, addMessage, removeLastMessage, setMessages, editLastMessage ] + ); const handleMetaDescriptionRegenerate = useCallback( async () => { setMetaDescriptionOptions( [] ); - editLastMessage( __( "Now, let's optimize your meta description.", 'jetpack' ) ); + setMessages( [ + { content: __( "Now, let's optimize your meta description.", 'jetpack' ), showIcon: true }, + ] ); addMessage( { content: } ); - const newMetaDescription = await new Promise< Array< Option > >( resolve => + const newMetaDescription = await new Promise< Array< OptionMessage > >( resolve => setTimeout( () => resolve( [ { - id: 'meta-1', + id: 'meta-1' + Math.random(), content: 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', }, @@ -88,18 +114,14 @@ export const useMetaDescriptionStep = (): Step => { ) ); removeLastMessage(); - // addMessage( { content: __( "Here's a new suggestion:", 'jetpack' ) } ); const editedFirstMessage = createInterpolateElement( __( "Now, let's optimize your meta description.
      Here's a new suggestion:", 'jetpack' ), { br:
      } ); editLastMessage( editedFirstMessage ); setMetaDescriptionOptions( newMetaDescription ); - }, [ addMessage, removeLastMessage, editLastMessage ] ); - - const handleSkip = useCallback( () => { - addMessage( { content: __( 'Skipped!', 'jetpack' ) } ); - }, [ addMessage ] ); + newMetaDescription.forEach( meta => addMessage( { ...meta, type: 'option', isUser: true } ) ); + }, [ addMessage, removeLastMessage, editLastMessage, setMessages ] ); return { id: 'meta', @@ -113,7 +135,6 @@ export const useMetaDescriptionStep = (): Step => { onRetry: handleMetaDescriptionRegenerate, retryCtaLabel: __( 'Regenerate', 'jetpack' ), onStart: handleMetaDescriptionGenerate, - onSkip: handleSkip, value: selectedMetaDescription, setValue: setSelectedMetaDescription, completed, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx index 1ced6c572c62f..b29e9683bf570 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx @@ -1,84 +1,129 @@ import { useDispatch } from '@wordpress/data'; -import { useCallback, useState, useEffect } from '@wordpress/element'; +import { useCallback, useState, createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import TypingMessage from './typing-message'; import { useMessages } from './wizard-messages'; -import type { Step, Option } from './types'; +import type { Step, OptionMessage } from './types'; export const useTitleStep = (): Step => { - const [ selectedTitle, setSelectedTitle ] = useState< string >(); - const [ titleOptions, setTitleOptions ] = useState< Option[] >( [] ); + const [ selectedTitle, setSelectedTitle ] = useState< string >( '' ); + const [ titleOptions, setTitleOptions ] = useState< OptionMessage[] >( [] ); const { editPost } = useDispatch( 'core/editor' ); - const { messages, setMessages, addMessage, removeLastMessage } = useMessages(); + const { + messages, + setMessages, + addMessage, + removeLastMessage, + editLastMessage, + setSelectedMessage, + } = useMessages(); const [ completed, setCompleted ] = useState( false ); + const [ prevStepValue, setPrevStepValue ] = useState(); - const handleTitleSelect = useCallback( ( option: Option ) => { - setSelectedTitle( option.content ); - setTitleOptions( prev => - prev.map( opt => ( { - ...opt, - selected: opt.id === option.id, - } ) ) - ); - }, [] ); - - useEffect( () => { - setMessages( [ - { - content: __( "Let's optimise your title.", 'jetpack' ), - showIcon: true, - }, - ] ); - }, [ setMessages ] ); + const handleTitleSelect = useCallback( + ( option: OptionMessage ) => { + setSelectedTitle( option.content as string ); + setSelectedMessage( option ); + }, + [ setSelectedMessage ] + ); - const handleTitleGenerate = useCallback( async () => { - let newTitles; - // we only generate if options are empty - if ( titleOptions.length === 0 ) { - addMessage( { content: } ); - newTitles = await new Promise( resolve => - setTimeout( - () => - resolve( [ - { - id: '1', - content: 'A Photo Gallery for Gardening Enthusiasths: Flora Guide', - }, - { - id: '2', - content: - 'Flora Guide: Beautiful Photos of Flowers and Plants for Gardening Enthusiasts', - }, - ] ), - 2000 - ) - ); - removeLastMessage(); - } - addMessage( { - content: __( - 'Here are two suggestions based on your keywords. Select the one you prefer:', - 'jetpack' - ), - } ); - setTitleOptions( newTitles || titleOptions ); - }, [ titleOptions, addMessage, removeLastMessage ] ); + const handleTitleGenerate = useCallback( + async ( { fromSkip, stepValue: keywords } ) => { + const prevStepHasChanged = keywords !== prevStepValue; + if ( ! prevStepHasChanged ) { + return; + } + setPrevStepValue( keywords ); + const initialMessage = fromSkip + ? { + content: createInterpolateElement( + __( "Skipped!
      Let's optimise your title.", 'jetpack' ), + { br:
      } + ), + showIcon: true, + } + : { + content: __( "Let's optimise your title.", 'jetpack' ), + showIcon: true, + }; + setMessages( [ initialMessage ] ); + let newTitles = [ ...titleOptions ]; + // we only generate if options are empty + if ( newTitles.length === 0 || prevStepHasChanged ) { + addMessage( { content: } ); + newTitles = await new Promise( resolve => + setTimeout( + () => + resolve( [ + { + id: '1', + content: 'A Photo Gallery for Gardening Enthusiasths: Flora Guide', + }, + { + id: '2', + content: + 'Flora Guide: Beautiful Photos of Flowers and Plants for Gardening Enthusiasts', + }, + ] ), + 2000 + ) + ); + removeLastMessage(); + } + let editedMessage; + if ( keywords ) { + if ( fromSkip ) { + editedMessage = createInterpolateElement( + __( + 'Skipped!
      Here are some suggestions for a better title based on your keywords:', + 'jetpack' + ), + { br:
      } + ); + } else { + editedMessage = __( + 'Here are some suggestions for a better title based on your keywords:', + 'jetpack' + ); + } + } else if ( fromSkip ) { + editedMessage = createInterpolateElement( + __( + 'Skipped!
      Here are some suggestions for a better title based on your post:', + 'jetpack' + ), + { br:
      } + ); + } else { + editedMessage = __( + 'Here are some suggestions for a better title based on your post:', + 'jetpack' + ); + } + editLastMessage( editedMessage ); + if ( newTitles.length ) { + // this sets the title options for internal state + setTitleOptions( newTitles ); + // this addes title options as message-buttons + newTitles.forEach( title => addMessage( { ...title, type: 'option', isUser: true } ) ); + } + }, + [ titleOptions, addMessage, removeLastMessage, setMessages, prevStepValue, editLastMessage ] + ); const handleTitleRegenerate = useCallback( async () => { - // This would typically be an async call to generate new titles - // replaceOptionsWithFauxUseMessages(); - setTitleOptions( [] ); addMessage( { content: } ); - const newTitles = await new Promise< Array< Option > >( resolve => + const newTitles = await new Promise< Array< OptionMessage > >( resolve => setTimeout( () => resolve( [ { - id: '1', + id: '1' + Math.random(), content: 'A Photo Gallery for Gardening Enthusiasths: Flora Guide', }, { - id: '2', + id: '2' + Math.random(), content: 'Flora Guide: Beautiful Photos of Flowers and Plants for Gardening Enthusiasts', }, @@ -87,14 +132,9 @@ export const useTitleStep = (): Step => { ) ); removeLastMessage(); - addMessage( { - content: __( - 'Here are two new suggestions based on your keywords. Select the one you prefer:', - 'jetpack' - ), - } ); - setTitleOptions( newTitles ); - }, [ addMessage, removeLastMessage ] ); + setTitleOptions( [ ...titleOptions, ...newTitles ] ); + newTitles.forEach( title => addMessage( { ...title, type: 'option', isUser: true } ) ); + }, [ addMessage, removeLastMessage, titleOptions ] ); const handleTitleSubmit = useCallback( async () => { addMessage( { content: } ); @@ -102,12 +142,9 @@ export const useTitleStep = (): Step => { removeLastMessage(); addMessage( { content: __( 'Title updated! ✅', 'jetpack' ) } ); setCompleted( true ); + return selectedTitle; }, [ selectedTitle, addMessage, editPost, removeLastMessage ] ); - const handleSkip = useCallback( () => { - addMessage( { content: __( 'Skipped!', 'jetpack' ) } ); - }, [ addMessage ] ); - return { id: 'title', title: __( 'Optimise Title', 'jetpack' ), @@ -120,7 +157,6 @@ export const useTitleStep = (): Step => { onRetry: handleTitleRegenerate, retryCtaLabel: __( 'Regenerate', 'jetpack' ), onStart: handleTitleGenerate, - onSkip: handleSkip, value: selectedTitle, setValue: setSelectedTitle, completed, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx index 295086b82254d..3d9c47f187acb 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx @@ -48,16 +48,23 @@ export const useMessages = () => { } ); }; + const setSelectedMessage = message => { + setMessages( prev => + prev.map( prevMessage => ( { ...prevMessage, selected: message.id === prevMessage.id } ) ) + ); + }; + return { messages, setMessages: wrapMessagesWithId, addMessage, removeLastMessage, editLastMessage, + setSelectedMessage, }; }; -export const MessageBubble = ( { message } ) => { +export const MessageBubble = ( { message, onSelect = a => a } ) => { return (
      { ) }
      - { message.type === 'past-options' && ( -
      - { message.options.map( option => ( -
      - { option.content } -
      - ) ) } -
      + { message.type === 'option' && ( + ) } { ( ! message.type || message.type === 'chat' ) && ( @@ -92,34 +95,7 @@ export const MessageBubble = ( { message } ) => { ); }; -const OptionMessages = ( { options = [], onSelect } ) => { - if ( ! options.length ) { - return null; - } - - return ( -
      -
      -
      -
      - { options.map( option => ( - - ) ) } -
      -
      -
      - ); -}; - -export default function Messages( { options, onSelect, messages, loading } ) { +export default function Messages( { onSelect, messages, loading } ) { const messagesEndRef = useRef< HTMLDivElement >( null ); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); @@ -133,9 +109,8 @@ export default function Messages( { options, onSelect, messages, loading } ) { <>
      { messages.map( message => ( - + ) ) } - { loading && } } /> }
      diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx index e2257e06a6723..13345cbcdea6b 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx @@ -7,19 +7,13 @@ export default function WizardStep( { messages, visible, loading = false, - options = [], onSelect, } ) { const stepRef = useRef( null ); const classes = clsx( 'assistant-wizard-step', className ); return (
      - +
      ); } From e74c5ebc26dc87c5838d65da9465bc03dadc3c87 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Tue, 28 Jan 2025 18:13:17 -0500 Subject: [PATCH 255/420] cli: Link pdWQjU-Jb-p2 from `jetpack phan` output (#41363) --- tools/cli/commands/phan.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/cli/commands/phan.js b/tools/cli/commands/phan.js index f9973bc07b04b..71d8b9795c1cc 100644 --- a/tools/cli/commands/phan.js +++ b/tools/cli/commands/phan.js @@ -568,6 +568,7 @@ export async function handler( argv ) { '%0A%0ASuggestion: ' + issue.suggestion.replace( /[%\r\n]/g, m => encodeURIComponent( m[ 0 ] ) ); } + msg += '%0A%0AFAQ on Phan issues: pdWQjU-Jb-p2'; await writeln( msg ); } break; @@ -661,6 +662,9 @@ export async function handler( argv ) { await writeln( issues.length === 1 ? 'FOUND 1 ISSUE TOTAL' : `FOUND ${ issues.length } ISSUES TOTAL` ); + if ( issues.length > 0 ) { + await writeln( chalk.green( 'FAQ on Phan issues: https://wp.me/pdWQjU-Jb' ) ); + } } break; } From 9a9f08e7bf866d9bc5c8b090191acabb54edfb92 Mon Sep 17 00:00:00 2001 From: Grzegorz Chudzinski-Pawlowski <112354940+grzegorz-cp@users.noreply.github.com> Date: Wed, 29 Jan 2025 10:40:48 +1100 Subject: [PATCH 256/420] Update modal elements for My Jetpack modal interstitial (#41300) * My Jetpack: Updating new interstitial modal * changelog * Updating modal styles and cleanup * Improving modal props --- .../product-interstitial-modal/index.tsx | 148 +------------ .../product-interstifial-feature-list.tsx | 44 ++++ .../product-interstitial-modal.tsx | 204 ++++++++++++++++++ .../product-interstitial-plugin.tsx | 111 ++++++++++ .../stories/index.stories.jsx | 35 +-- .../style.module.scss | 52 ++++- .../update-myjetpack-interstitial-modal | 4 + 7 files changed, 436 insertions(+), 162 deletions(-) create mode 100644 projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstifial-feature-list.tsx create mode 100644 projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstitial-modal.tsx create mode 100644 projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstitial-plugin.tsx create mode 100644 projects/packages/my-jetpack/changelog/update-myjetpack-interstitial-modal diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/index.tsx b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/index.tsx index dd8b799868a1c..f767c14a831a3 100644 --- a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/index.tsx +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/index.tsx @@ -1,145 +1,3 @@ -import { Text, Button, ThemeProvider, Col, Container } from '@automattic/jetpack-components'; -import { Modal } from '@wordpress/components'; -import { __ } from '@wordpress/i18n'; -import clsx from 'clsx'; -import { useCallback, useState, type FC } from 'react'; -import styles from './style.module.scss'; - -interface ProductInterstitialModalProps { - title: string; - hideCloseButton?: boolean; - triggerButton?: React.ReactNode; - className?: string; - children?: React.ReactNode; - secondaryColumn?: React.ReactNode; - additionalColumn?: React.ReactNode; - onOpen?: () => void; - onClose?: () => void; - onClick?: () => void; - secondaryButtonExternalLink?: boolean; - secondaryButtonHref?: string; - buttonDisabled?: boolean; - buttonExternalLink?: boolean; - buttonHref?: string; - buttonContent?: string; -} - -const ProductInterstitialModal: FC< ProductInterstitialModalProps > = props => { - const { - title, - className, - children, - triggerButton, - onOpen, - onClose, - onClick, - buttonDisabled, - buttonExternalLink, - buttonHref, - buttonContent, - secondaryButtonExternalLink, - secondaryButtonHref, - secondaryColumn, - additionalColumn = false, - } = props; - - const [ isOpen, setOpen ] = useState( false ); - const openModal = useCallback( () => { - onOpen?.(); - setOpen( true ); - }, [ onOpen ] ); - const closeModal = useCallback( () => { - onClose?.(); - setOpen( false ); - }, [ onClose ] ); - - if ( ! title || ! children || ! triggerButton ) { - return null; - } - - return ( - <> - - { - // TODO: use any component as a trigger - } - - { isOpen && ( - - - { - // left column - always takes 33% of the width or the full with for small breakpoint - } - -
      -
      - - { title } - -
      - { children } -
      -
      - - -
      - - { - // middle column for three columns layout and the right column for two columns layout - // small breakpoint: takes full width - // medium breakpoint: ~63% of the width without the additional column or 50% of the second row with the additional column - // large breakpoint: 66% of the width without the additional column or 33% with the additional column - } - - { secondaryColumn } - - { - // additional column for three columns layout - // small breakpoint (max 4 cols): takes full width - // medium breakpoint (max 8 cols): 50% of the second row width - // large breakpoint (max 12 cols): 33% of the width - additionalColumn && ( - - { additionalColumn } - - ) - } -
      -
      - ) } -
      - - ); -}; - -export default ProductInterstitialModal; +export { default, default as ProductInterstitialModal } from './product-interstitial-modal'; +export { default as ProductInterstitialPlugin } from './product-interstitial-plugin'; +export { default as ProductInterstitialFeatureList } from './product-interstifial-feature-list'; diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstifial-feature-list.tsx b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstifial-feature-list.tsx new file mode 100644 index 0000000000000..ae8f29817635b --- /dev/null +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstifial-feature-list.tsx @@ -0,0 +1,44 @@ +import { Text } from '@automattic/jetpack-components'; +import { Icon, check } from '@wordpress/icons'; +import clsx from 'clsx'; +import { type FC } from 'react'; +import styles from './style.module.scss'; + +interface ProductInterstitialFeatureListProps { + /** + * List of features to display + */ + features: string[]; + /** + * Optional className for custom styling + */ + className?: string; +} + +/** + * Component that renders a list of features for the product interstitial + * + * @param {ProductInterstitialFeatureListProps} props - Component properties + * @return {React.ReactElement} The rendered component + */ +const ProductInterstitialFeatureList: FC< ProductInterstitialFeatureListProps > = ( { + features, + className, +} ) => { + if ( ! features?.length ) { + return null; + } + + return ( +
        + { features.map( ( feature, id ) => ( + + + { feature } + + ) ) } +
      + ); +}; + +export default ProductInterstitialFeatureList; diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstitial-modal.tsx b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstitial-modal.tsx new file mode 100644 index 0000000000000..0a848f2bd18c0 --- /dev/null +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstitial-modal.tsx @@ -0,0 +1,204 @@ +import { Text, Button, ThemeProvider, Col, Container } from '@automattic/jetpack-components'; +import { Modal } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import clsx from 'clsx'; +import { useCallback, useState, type FC } from 'react'; +import styles from './style.module.scss'; + +interface ProductInterstitialModalProps { + /** + * Title of the modal + */ + title: string; + /** + * Description of the modal + */ + description?: string; + /** + * Trigger button of the modal + */ + triggerButton?: React.ReactNode; + /** + * Class name of the modal + */ + className?: string; + /** + * Children of the modal, placed in the left column between the description and the price component + */ + children?: React.ReactNode; + /** + * Secondary column of the modal, placed in the right column or the middle column (if hasAdditionalColumn is true) + */ + secondaryColumn?: React.ReactNode; + /** + * Show additional column in the modal switching to three columns layout (additional column is always on the right) + */ + additionalColumn?: React.ReactNode; + /** + * On open callback of the modal + */ + onOpen?: () => void; + /** + * On close callback of the modal + */ + onClose?: () => void; + /** + * On click callback of the modal + */ + onClick?: () => void; + /** + * Href of the CTA button in the modal + */ + buttonHref?: string; + /** + * Is CTA button disabled + */ + isButtonDisabled?: boolean; + /** + * Show an external link icon for the CTA button + */ + buttonHasExternalLink?: boolean; + /** + * Label of the CTA button + */ + buttonLabel?: string; + /** + * Show an external link icon for the secondary button + */ + secondaryButtonHasExternalLink?: boolean; + /** + * Href of the secondary button + */ + secondaryButtonHref?: string; + /** + * Price component of the modal + */ + priceComponent?: React.ReactNode; +} + +const ProductInterstitialModal: FC< ProductInterstitialModalProps > = props => { + const { + title, + description, + className, + children, + triggerButton, + onOpen, + onClose, + onClick, + isButtonDisabled, + buttonHasExternalLink = false, + buttonHref, + buttonLabel, + secondaryButtonHasExternalLink = true, + secondaryButtonHref, + secondaryColumn, + additionalColumn = false, + priceComponent, + } = props; + + const [ isOpen, setOpen ] = useState( false ); + const openModal = useCallback( () => { + onOpen?.(); + setOpen( true ); + }, [ onOpen ] ); + const closeModal = useCallback( () => { + onClose?.(); + setOpen( false ); + }, [ onClose ] ); + + if ( ! title || ! children || ! triggerButton ) { + return null; + } + + return ( + <> + + + { isOpen && ( + + + { + // left column - always takes 33% of the width or the full width for small breakpoint + } + +
      +
      + + { title } + +
      + { description && ( + + { description } + + ) } + { children } + { priceComponent && ( +
      { priceComponent }
      + ) } +
      +
      + + +
      + + { + // middle column for three columns layout and the right column for two columns layout + // small breakpoint: takes full width + // medium breakpoint: ~63% of the width without the additional column or 50% of the second row with the additional column + // large breakpoint: 66% of the width without the additional column or 33% with the additional column + } + + { secondaryColumn } + + { + // additional column for three columns layout + // small breakpoint (max 4 cols): takes full width + // medium breakpoint (max 8 cols): 50% of the second row width + // large breakpoint (max 12 cols): 33% of the width + additionalColumn && ( + + { additionalColumn } + + ) + } +
      +
      + ) } +
      + + ); +}; + +export default ProductInterstitialModal; diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstitial-plugin.tsx b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstitial-plugin.tsx new file mode 100644 index 0000000000000..0ccc48b31b097 --- /dev/null +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial-modal/product-interstitial-plugin.tsx @@ -0,0 +1,111 @@ +import { Button, ProductPrice, getRedirectUrl } from '@automattic/jetpack-components'; +import { createInterpolateElement } from '@wordpress/element'; +import { __, sprintf } from '@wordpress/i18n'; +import { type FC } from 'react'; +import useProduct from '../../data/products/use-product'; +import ProductInterstitialModal, { ProductInterstitialFeatureList } from './'; + +interface ProductInterstitialPluginProps { + /** + * Child elements to be rendered within the placement + */ + children?: React.ReactNode; + slug: string; +} + +/** + * Component that handles the placement of product interstitial content for a product slug + * + * @param {ProductInterstitialPluginProps} props - Component properties + * @return {React.ReactElement|null} The rendered component + */ +const ProductInterstitialPlugin: FC< ProductInterstitialPluginProps > = ( { + slug, + children, + ...props +} ) => { + const { detail } = useProduct( slug ); + + const { title, longDescription, features, pricingForUi } = detail; + + const { + fullPricePerMonth: price, + currencyCode, + discountPricePerMonth: discountPrice, + introductoryOffer, + productTerm, + } = pricingForUi; + + let priceDescription; + if ( introductoryOffer?.intervalUnit === 'month' && introductoryOffer?.intervalCount === 1 ) { + priceDescription = sprintf( + // translators: %s is the monthly price for a product + __( 'trial for the first month, then $%s /month, billed yearly', 'jetpack-my-jetpack' ), + price + ); + } else if ( productTerm === 'year' ) { + priceDescription = __( '/month, paid yearly', 'jetpack-my-jetpack' ); + } else { + priceDescription = __( '/month', 'jetpack-my-jetpack' ); + } + + const productPrice = introductoryOffer?.reason ? price : discountPrice; + + // TODO: check referrer url from product-details-card + + const priceComponent = ( + price } + legend={ priceDescription } + /> + ); + + let additionalContent = null; + + if ( slug === 'jetpack-ai' ) { + additionalContent = ( +

      + { createInterpolateElement( + __( + '* Limits apply for high request capacity. Learn more about it here.', + 'jetpack-my-jetpack' + ), + { + link: ( + + { ' ' } + +

      +
      +
      + + { __( 'Post Answer', 'jetpack-mu-wpcom' ) } + + { prompt.answered_users_sample.length > 0 && ( +
      + { prompt.answered_users_count > 0 && ( + + { __( 'View all responses', 'jetpack-mu-wpcom' ) } + + ) }{ ' ' } + + { prompt.answered_users_sample.map( sample => { + return ( + { + ); + } ) } + +
      + ) } +
      + + ); +}; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-daily-writing-prompt/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-daily-writing-prompt/style.scss new file mode 100644 index 0000000000000..d1a263b1ac94c --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-daily-writing-prompt/style.scss @@ -0,0 +1,48 @@ +.wpcom-daily-writing-prompt--prompt { + background-color: #f0f0f1; + padding: 1px 16px; + border-radius: 4px; + margin: 1em 0; + + button.button-link { + line-height: inherit; + min-height: auto; + // Override mobile styles. + padding: 0; + margin: 0; + + &[disabled] { + background-color: transparent !important; + } + } +} + +.wpcom-daily-writing-prompt--previous-next { + display: flex; + justify-content: flex-end; + margin: 1em 0; +} + +.wpcom-daily-writing-prompt--action-row { + display: flex; + flex-direction: row; + justify-content: space-between; + gap: 10px; + + img { + vertical-align: middle; + border-radius: 100%; + border: 2px solid #fff; + margin-left: -10px; + } + + img:first-child { + margin-left: 0; + } + + .wpcom-daily-writing-prompt--previous-next { + display: flex; + flex-direction: row; + gap: 5px; + } +} diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.js index c43566acda982..f390d13b67f4d 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.js @@ -2,6 +2,7 @@ import '../../common/public-path'; import React from 'react'; import ReactDOM from 'react-dom/client'; import CelebrateLaunchModal from './celebrate-launch/celebrate-launch-modal'; +import WpcomDailyWritingPrompt from './wpcom-daily-writing-prompt'; import WpcomLaunchpadWidget from './wpcom-launchpad-widget'; import WpcomSiteManagementWidget from './wpcom-site-management-widget'; const data = typeof window === 'object' ? window.JETPACK_MU_WPCOM_DASHBOARD_WIDGETS : {}; @@ -11,6 +12,10 @@ const widgets = [ id: 'wpcom_launchpad_widget_main', Widget: WpcomLaunchpadWidget, }, + { + id: 'wpcom_daily_writing_prompt_main', + Widget: WpcomDailyWritingPrompt, + }, { id: 'wpcom_site_preview_widget_main', Widget: WpcomSiteManagementWidget, diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php index 7b5b7ace0748a..cba899c1a7a6f 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php @@ -22,6 +22,12 @@ function load_wpcom_dashboard_widgets() { 'context' => 'side', 'priority' => 'high', ), + array( + 'id' => 'wpcom_daily_writing_prompt', + 'name' => __( 'Daily Writing Prompt', 'jetpack-mu-wpcom' ), + 'context' => 'side', + 'priority' => 'high', + ), ); $launchpad_context = 'customer-home'; @@ -45,7 +51,7 @@ function load_wpcom_dashboard_widgets() { $wpcom_dashboard_widget['id'], $wpcom_dashboard_widget['name'], 'render_wpcom_dashboard_widget', - function () {}, + null, // @phan-suppress-current-line PhanTypeMismatchArgumentProbablyReal -- Core should ideally document null for no-callback arg. See https://core.trac.wordpress.org/ticket/52539. array( 'id' => $wpcom_dashboard_widget['id'], 'name' => $wpcom_dashboard_widget['name'], diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/style.scss index f7ac7b2e60d62..2552bd7925d21 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/style.scss +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/wpcom-site-management-widget/style.scss @@ -1,9 +1,5 @@ #wpcom_site_preview_widget { color: #1e1e1e; - - .postbox-title-action { - display: none; - } } #wpcom_site_preview_widget_main { @@ -11,6 +7,7 @@ background: #f0f0f1; margin-bottom: 12px; padding: 12px 12px 0; + border-radius: 4px; } .wpcom_site_preview { diff --git a/projects/plugins/mu-wpcom-plugin/changelog/add-dashboard-daily-prompt b/projects/plugins/mu-wpcom-plugin/changelog/add-dashboard-daily-prompt new file mode 100644 index 0000000000000..9317b3ad21ea6 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/add-dashboard-daily-prompt @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Dashboard: added Daily Writing Prompt widget diff --git a/projects/plugins/wpcomsh/changelog/add-dashboard-daily-prompt b/projects/plugins/wpcomsh/changelog/add-dashboard-daily-prompt new file mode 100644 index 0000000000000..9317b3ad21ea6 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/add-dashboard-daily-prompt @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Dashboard: added Daily Writing Prompt widget From b0985b72aeb17b0949acc101d7f8885283364e1a Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Fri, 31 Jan 2025 13:02:00 -0300 Subject: [PATCH 308/420] Jetpack SEO update copy edits (#41469) * implement completion step * review copy edits * changelog --- .../changelog/change-jetpack-seo-copy-edits | 4 + .../seo-assistant/assistant-wizard.tsx | 45 ++++++----- .../seo-assistant/seo-assistant-wizard.tsx | 38 +--------- .../components/seo-assistant/style.scss | 5 +- .../components/seo-assistant/types.tsx | 5 +- .../seo-assistant/use-completion-step.tsx | 76 +++++++++++++++++++ .../use-meta-description-step.tsx | 13 ++-- .../seo-assistant/use-title-step.tsx | 36 ++++----- .../seo-assistant/wizard-messages.tsx | 6 +- .../components/seo-assistant/wizard-step.tsx | 10 +-- 10 files changed, 133 insertions(+), 105 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-copy-edits create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-copy-edits b/projects/plugins/jetpack/changelog/change-jetpack-seo-copy-edits new file mode 100644 index 0000000000000..17a082b248b68 --- /dev/null +++ b/projects/plugins/jetpack/changelog/change-jetpack-seo-copy-edits @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack SEO Assistant: implement completion step and review copy edits diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx index f6c82b9ed2fb4..d6a0ff0e0d08f 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx @@ -3,6 +3,7 @@ import { useState, useEffect, useRef, useMemo, useCallback } from '@wordpress/el import { __ } from '@wordpress/i18n'; import { next, closeSmall, chevronLeft } from '@wordpress/icons'; import debugFactory from 'debug'; +import { useCompletionStep } from './use-completion-step'; import { useKeywordsStep } from './use-keywords-step'; import { useMetaDescriptionStep } from './use-meta-description-step'; import { useTitleStep } from './use-title-step'; @@ -30,11 +31,11 @@ export default function AssistantWizard( { close, tasks } ) { const keywordsStepData = useKeywordsStep(); const titleStepData = useTitleStep(); const metaStepData = useMetaDescriptionStep(); - + const completionStepData = useCompletionStep(); // Memoize steps array to prevent unnecessary recreations const steps = useMemo( - () => [ tasks[ 0 ], keywordsStepData, titleStepData, metaStepData, tasks[ 1 ] ], - [ tasks, keywordsStepData, titleStepData, metaStepData ] + () => [ tasks[ 0 ], keywordsStepData, titleStepData, metaStepData, completionStepData ], + [ tasks, keywordsStepData, titleStepData, metaStepData, completionStepData ] ); const handleNext = useCallback( @@ -51,18 +52,29 @@ export default function AssistantWizard( { close, tasks } ) { [ currentStep, steps ] ); + // Reset states and close the wizard + const handleDone = useCallback( () => { + close(); + setCurrentStep( 0 ); + setCurrentStepData( steps[ 0 ] ); + }, [ close, steps ] ); + const handleStepSubmit = useCallback( async () => { const stepValue = await steps[ currentStep ]?.onSubmit?.(); debug( 'step submitted, moving next' ); - // always give half a second before moving forward - setTimeout( () => handleNext( { fromSkip: ! stepValue.trim(), stepValue } ), 500 ); - }, [ currentStep, handleNext, steps ] ); + if ( steps[ currentStep ].type === 'completion' ) { + handleDone(); + } else { + // always give half a second before moving forward + setTimeout( () => handleNext( { fromSkip: ! stepValue.trim(), stepValue } ), 500 ); + } + }, [ currentStep, handleNext, steps, handleDone ] ); const jumpToStep = useCallback( - stepNumber => { + ( stepNumber: number ) => { if ( stepNumber < steps.length - 1 ) { setCurrentStep( stepNumber ); - setCurrentStepData( stepNumber ); + setCurrentStepData( steps[ stepNumber ] ); } }, [ steps ] @@ -86,7 +98,7 @@ export default function AssistantWizard( { close, tasks } ) { setTimeout( handleNext, steps[ 0 ].autoAdvance ); } } - }, [ currentStep, steps, handleNext ] ); + }, [ currentStep, handleNext, steps ] ); const handleBack = () => { if ( currentStep > 1 ) { @@ -105,13 +117,6 @@ export default function AssistantWizard( { close, tasks } ) { } ); }, [ currentStepData, handleNext ] ); - // Reset states and close the wizard - const handleDone = () => { - close(); - setCurrentStep( 0 ); - setCurrentStepData( steps[ 0 ] ); - }; - return (
      @@ -131,7 +136,7 @@ export default function AssistantWizard( { close, tasks } ) {
      -
      +
      { steps.map( ( step, index ) => (
      - { currentStep === 1 && ( + { currentStep === 1 && steps[ currentStep ].type === 'input' && ( ) } - { currentStep === 2 && ( + { currentStep === 2 && steps[ currentStep ].type === 'options' && ( ) } - { currentStep === 3 && ( + { currentStep === 3 && steps[ currentStep ].type === 'options' && ( void } ) title: __( 'Optimise for SEO', 'jetpack' ), label: 'welcome', type: 'welcome', - autoAdvance: 1, + autoAdvance: 1500, messages: [ { content: createInterpolateElement( @@ -40,42 +40,6 @@ export default function SeoAssistantWizard( { close }: { close?: () => void } ) }, ], }, - { - id: 'completion', - title: __( 'Your post is SEO-ready', 'jetpack' ), - label: 'completion', - type: 'completion', - submitCtaLabel: __( 'Done!', 'jetpack' ), - onSubmit: () => close(), - messages: [ - { - content: __( "Here's your updated checklist:", 'jetpack' ), - showIcon: true, - id: '1', - }, - { - content: 'some summary here!', - showIcon: false, - id: '2', - }, - { - content: createInterpolateElement( - __( - 'SEO optimization complete! 🎉
      Your blog post is now search-engine friendly.', - 'jetpack' - ), - { br:
      } - ), - showIcon: true, - id: '3', - }, - { - content: __( 'Happy blogging! 😊', 'jetpack' ), - showIcon: false, - id: '4', - }, - ], - }, ] } /> ); diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss index 2c4d3c41e5567..1221776bf97be 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -50,7 +50,7 @@ display: flex; flex-direction: column; height: 100%; - overflow: hidden; + overflow: auto; } &__messages { @@ -87,7 +87,6 @@ .assistant-wizard__message-text { padding: 0px 12px; - // flex: 1 0 200px; } &.is-user { @@ -108,7 +107,7 @@ background: white; border-radius: 0 0 16px 16px; border-top: 1px solid var( --jp-gray-5, #e5e7eb ); - flex-basis: 77px; // seems better than min-height + flex-basis: 60px; // seems better than min-height } &__input { diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx index 55f6b23149c14..3b8da1f87dc82 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx @@ -42,10 +42,11 @@ interface OptionsStep extends BaseStep { retryCtaLabel?: string; } -interface CompletionStep extends BaseStep { +export interface CompletionStep extends BaseStep { type: 'completion'; + submitCtaLabel?: string; } -export type Step = InputStep | OptionsStep | CompletionStep; +export type Step = BaseStep | InputStep | OptionsStep | CompletionStep; export type OnStartFunction = ( options?: { fromSkip: boolean; stepValue: string } ) => void; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx new file mode 100644 index 0000000000000..f359a39738e24 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx @@ -0,0 +1,76 @@ +import { createInterpolateElement, useCallback, useState } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import TypingMessage from './typing-message'; +import { useMessages } from './wizard-messages'; +import type { CompletionStep } from './types'; + +export const useCompletionStep = (): CompletionStep => { + const [ keywords, setKeywords ] = useState( '' ); + const [ completed, setCompleted ] = useState( false ); + const { messages, setMessages, addMessage, removeLastMessage } = useMessages(); + + const startHandler = useCallback( + async ( { fromSkip } ) => { + const firstMessages = [ + { + content: , + showIcon: true, + id: '2', + }, + ]; + if ( fromSkip ) { + firstMessages.unshift( { + // @ts-expect-error - type is properly defined, unsure why it's erroring + content: __( 'Skipped!', 'jetpack' ), + showIcon: true, + id: 'a', + } ); + } + setMessages( firstMessages ); + await new Promise( resolve => setTimeout( resolve, 2000 ) ); + removeLastMessage(); + // await new Promise( resolve => setTimeout( resolve, 1000 ) ); + addMessage( { + content: createInterpolateElement( + "Here's your updated checklist:
      ✅ Title
      ✅ Meta description

      ", + { + br:
      , + } + ), + id: '1', + } ); + addMessage( { + content: createInterpolateElement( + __( + 'SEO optimization complete! 🎉
      Your blog post is now search-engine friendly.', + 'jetpack' + ), + { br:
      , strong: } + ), + showIcon: false, + id: '3', + } ); + addMessage( { + content: __( 'Happy blogging! 😊', 'jetpack' ), + showIcon: false, + id: '4', + } ); + return 'completion'; + }, + [ setMessages, addMessage, removeLastMessage ] + ); + + return { + id: 'completion', + title: __( 'Your post is SEO-ready', 'jetpack' ), + label: 'completion', + messages, + type: 'completion', + onStart: startHandler, + submitCtaLabel: __( 'Done!', 'jetpack' ), + completed, + setCompleted, + value: keywords, + setValue: setKeywords, + }; +}; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx index 3f7aa984ec183..f853a5942e292 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx @@ -65,7 +65,7 @@ export const useMetaDescriptionStep = (): Step => { 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', }, ] ), - 2000 + 3000 ) ); removeLastMessage(); @@ -74,16 +74,13 @@ export const useMetaDescriptionStep = (): Step => { const editedFirstMessage = fromSkip ? createInterpolateElement( __( - "Skipped!
      Now, let's optimize your meta description.
      Here's a new suggestion:", + "Skipped!
      Now, let's optimize your meta description.
      Here's a suggestion:", 'jetpack' ), { br:
      } ) : createInterpolateElement( - __( - "Now, let's optimize your meta description.
      Here's a new suggestion:", - 'jetpack' - ), + __( "Now, let's optimize your meta description.
      Here's a suggestion:", 'jetpack' ), { br:
      } ); editLastMessage( editedFirstMessage ); @@ -110,12 +107,12 @@ export const useMetaDescriptionStep = (): Step => { 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', }, ] ), - 2000 + 3000 ) ); removeLastMessage(); const editedFirstMessage = createInterpolateElement( - __( "Now, let's optimize your meta description.
      Here's a new suggestion:", 'jetpack' ), + __( "Now, let's optimize your meta description.
      Here's a suggestion:", 'jetpack' ), { br:
      } ); editLastMessage( editedFirstMessage ); diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx index b29e9683bf570..fa275f58afda0 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx @@ -38,13 +38,13 @@ export const useTitleStep = (): Step => { const initialMessage = fromSkip ? { content: createInterpolateElement( - __( "Skipped!
      Let's optimise your title.", 'jetpack' ), + __( "Skipped!
      Let's optimise your title first.", 'jetpack' ), { br:
      } ), showIcon: true, } : { - content: __( "Let's optimise your title.", 'jetpack' ), + content: __( "Let's optimise your title first.", 'jetpack' ), showIcon: true, }; setMessages( [ initialMessage ] ); @@ -66,41 +66,31 @@ export const useTitleStep = (): Step => { 'Flora Guide: Beautiful Photos of Flowers and Plants for Gardening Enthusiasts', }, ] ), - 2000 + 3000 ) ); removeLastMessage(); } let editedMessage; - if ( keywords ) { - if ( fromSkip ) { - editedMessage = createInterpolateElement( - __( - 'Skipped!
      Here are some suggestions for a better title based on your keywords:', - 'jetpack' - ), - { br:
      } - ); - } else { - editedMessage = __( - 'Here are some suggestions for a better title based on your keywords:', - 'jetpack' - ); - } - } else if ( fromSkip ) { + + if ( fromSkip ) { editedMessage = createInterpolateElement( __( - 'Skipped!
      Here are some suggestions for a better title based on your post:', + "Skipped!
      Let's optimise your title first.
      Here are two suggestions based on your keywords:", 'jetpack' ), { br:
      } ); } else { - editedMessage = __( - 'Here are some suggestions for a better title based on your post:', - 'jetpack' + editedMessage = createInterpolateElement( + __( + "Let's optimise your title first.
      Here are two suggestions based on your keywords:", + 'jetpack' + ), + { br:
      } ); } + editLastMessage( editedMessage ); if ( newTitles.length ) { // this sets the title options for internal state diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx index 3d9c47f187acb..6f74603631e6e 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx @@ -2,7 +2,6 @@ import { useCallback, useEffect, useRef, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; import bigSkyIcon from './big-sky-icon.svg'; -import TypingMessage from './typing-message'; import type { Message } from './types'; const randomId = () => Math.random().toString( 32 ).substring( 2, 8 ); @@ -64,7 +63,7 @@ export const useMessages = () => { }; }; -export const MessageBubble = ( { message, onSelect = a => a } ) => { +export const MessageBubble = ( { message, onSelect } ) => { return (
      a } ) => { ); }; -export default function Messages( { onSelect, messages, loading } ) { +export default function Messages( { onSelect, messages } ) { const messagesEndRef = useRef< HTMLDivElement >( null ); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); @@ -111,7 +110,6 @@ export default function Messages( { onSelect, messages, loading } ) { { messages.map( message => ( ) ) } - { loading && } } /> }
      diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx index 13345cbcdea6b..a169f0bdc5bf3 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx @@ -2,18 +2,12 @@ import { useRef } from '@wordpress/element'; import clsx from 'clsx'; import { default as WizardMessages } from './wizard-messages'; -export default function WizardStep( { - className = '', - messages, - visible, - loading = false, - onSelect, -} ) { +export default function WizardStep( { className = '', messages, visible, onSelect } ) { const stepRef = useRef( null ); const classes = clsx( 'assistant-wizard-step', className ); return (
      - +
      ); } From 73ea5d148f08935750c58f9491a94839a7d82f65 Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Fri, 31 Jan 2025 14:29:53 -0300 Subject: [PATCH 309/420] Jetpack SEO assistant: fine tune css (#41473) * fine tune css on buttons and spacings * changelog * reinstate completion step submit handler --- ...change-jetpack-seo-assistant-fine-tune-css | 4 +++ .../seo-assistant/assistant-wizard.tsx | 2 +- .../components/seo-assistant/style.scss | 33 ++++++++----------- .../components/seo-assistant/wizard-input.tsx | 11 +++++-- .../components/seo-assistant/wizard-step.tsx | 8 +++-- 5 files changed, 32 insertions(+), 26 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-fine-tune-css diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-fine-tune-css b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-fine-tune-css new file mode 100644 index 0000000000000..b1998cfbd7999 --- /dev/null +++ b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-fine-tune-css @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack SEO assistant: fine tune css to address designs diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx index d6a0ff0e0d08f..08a486d0bd3f2 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx @@ -179,7 +179,7 @@ export default function AssistantWizard( { close, tasks } ) { { currentStep === steps.length - 1 && ( ) }
      diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss index 1221776bf97be..89faed7c1e6d4 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -11,6 +11,7 @@ z-index: 1000; display: flex; flex-direction: column; + padding: 24px; // countering the Jetpack sidebar ai-feature styles: button { width: unset; @@ -21,10 +22,9 @@ display: flex; align-items: center; justify-content: space-between; - padding: 16px; - // border-bottom: 1px solid #e5e7eb; + padding-bottom: 24px; background: white; - border-radius: 16px 16px 0 0; + border-radius: 24px 24px 0 0; h2 { margin: 0; @@ -51,6 +51,7 @@ flex-direction: column; height: 100%; overflow: auto; + mask-image: linear-gradient( 180deg, transparent, white 24px ); } &__messages { @@ -58,11 +59,10 @@ display: flex; flex-direction: column; gap: 8px; - padding: 8px 24px; + padding: 8px 8px 8px 0; overflow-y: auto; scroll-behavior: smooth; align-items: flex-start; - mask-image: linear-gradient( 180deg, transparent, white 24px ); } &__message { @@ -95,6 +95,10 @@ max-width: 85%; min-width: 15%; + .assistant-wizard__message-text { + padding: 4px 12px; + } + .assistant-wizard__message-icon { display: none; } @@ -103,11 +107,9 @@ &__input-container { flex: 0 0 auto; - padding: 16px; + padding-top: 16px; background: white; - border-radius: 0 0 16px 16px; - border-top: 1px solid var( --jp-gray-5, #e5e7eb ); - flex-basis: 60px; // seems better than min-height + border-radius: 0 0 24px 24px; } &__input { @@ -146,8 +148,9 @@ } } + // submit and retry buttons &__submit { - border-radius: 20px; + border-radius: 24px; max-height: 34px; } @@ -162,7 +165,7 @@ padding: 12px; background: #f3f4f6; border: 2px solid transparent; - border-radius: 12px; + border-radius: 16px; text-align: left; font-size: 14px; line-height: 1.4; @@ -191,19 +194,11 @@ align-items: center; gap: 16px; animation: assistantInputAppear 0.3s ease-out; - - .components-button { - border-radius: 20px; - } } &__completion { display: flex; justify-content: flex-end; - - .components-button { - border-radius: 20px; - } } } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx index 536c5117f34e3..abe3bc5ed02fb 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx @@ -11,11 +11,16 @@ export const OptionsInput = ( { } ) => { return (
      - - @@ -47,7 +52,7 @@ export const TextInput = forwardRef( UnforwardedKeywordsInput ); export const CompletionInput = ( { submitCtaLabel, handleSubmit } ) => { return (
      -
      diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx index a169f0bdc5bf3..f2ee01f2ed073 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-step.tsx @@ -6,8 +6,10 @@ export default function WizardStep( { className = '', messages, visible, onSelec const stepRef = useRef( null ); const classes = clsx( 'assistant-wizard-step', className ); return ( -
      - -
      + visible && ( +
      + +
      + ) ); } From 3ab4b71f044c76703ced80741033a67784c32523 Mon Sep 17 00:00:00 2001 From: Adnan Haque <3737780+haqadn@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:35:11 -0500 Subject: [PATCH 310/420] Boost: Refactor ISA recommendation styles (#41375) * Refactor ISA recomendation styles * changelog * Remove unused file --- .../boost/app/assets/src/css/admin-style.scss | 5 -- .../components/isa/recommendations-page.scss | 25 ------ .../components/isa/recommendations/table.scss | 61 ------------- .../broken-data-row/broken-data-row.tsx | 3 +- .../image-missing-row/image-missing-row.tsx | 18 ++-- .../image-size-row/image-size-row.tsx | 11 +-- .../table-row/table-row.module.scss} | 87 ++++++------------- .../row-types/table-row/table-row.tsx | 23 ++++- .../recommendations/row.module.scss | 67 ++++++++++++++ .../recommendations/table/table.module.scss | 63 ++++++++++++++ .../recommendations/table/table.tsx | 15 ++-- .../changelog/update-recommendations-scss | 5 ++ 12 files changed, 204 insertions(+), 179 deletions(-) delete mode 100644 projects/plugins/boost/app/assets/src/css/components/isa/recommendations-page.scss delete mode 100644 projects/plugins/boost/app/assets/src/css/components/isa/recommendations/table.scss rename projects/plugins/boost/app/assets/src/{css/components/isa/recommendations/row-types/table-row.scss => js/features/image-size-analysis/recommendations/row-types/table-row/table-row.module.scss} (53%) create mode 100644 projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row.module.scss create mode 100644 projects/plugins/boost/changelog/update-recommendations-scss diff --git a/projects/plugins/boost/app/assets/src/css/admin-style.scss b/projects/plugins/boost/app/assets/src/css/admin-style.scss index 422d23e25eb0a..bbffd620ded44 100644 --- a/projects/plugins/boost/app/assets/src/css/admin-style.scss +++ b/projects/plugins/boost/app/assets/src/css/admin-style.scss @@ -8,8 +8,3 @@ // Components @import 'components/button'; @import 'components/snackbar'; - -// React Migration CSS -@import 'components/isa/recommendations-page.scss'; -@import 'components/isa/recommendations/table.scss'; -@import 'components/isa/recommendations/row-types/table-row.scss'; diff --git a/projects/plugins/boost/app/assets/src/css/components/isa/recommendations-page.scss b/projects/plugins/boost/app/assets/src/css/components/isa/recommendations-page.scss deleted file mode 100644 index 6694d3fac09ad..0000000000000 --- a/projects/plugins/boost/app/assets/src/css/components/isa/recommendations-page.scss +++ /dev/null @@ -1,25 +0,0 @@ -.jb-recommendation-page-grid { - display: grid; - padding: var( --padding ); - gap: var( --gap ); - align-items: center; - grid-template-columns: - [thumbnail] var( --thumbnail-size ) - [title] var( --table-column-title ) - [potential-size] var( --table-column-potential-size ) - [device] var( --table-column-device ) - [page] 1fr - [expand] var( --table-column-expand ); - - /** - * Narrow screen overrides. - */ - @media ( max-width: 782px ) { - // Remove some columns - grid-template-columns: - [thumbnail] var( --thumbnail-size ) - [title] 1fr - [expand] var( --table-column-expand ); - } -} - diff --git a/projects/plugins/boost/app/assets/src/css/components/isa/recommendations/table.scss b/projects/plugins/boost/app/assets/src/css/components/isa/recommendations/table.scss deleted file mode 100644 index 7b59c8e1cb0ca..0000000000000 --- a/projects/plugins/boost/app/assets/src/css/components/isa/recommendations/table.scss +++ /dev/null @@ -1,61 +0,0 @@ -.jb-loading-spinner { - position: fixed; - top: 50%; - left: 50%; - transform: translate( -50%, -50% ); - z-index: 9000; - - &:not( .active ) { - display: none; - } -} - -.jb-table { - will-change: opacity, filter; - transition: - opacity 0.3s ease-in-out, - filter 0.3s ease-in-out; - - h1 { - padding-top: 16px; - width: 100%; - text-align: center; - } - - &.jb-loading { - filter: grayscale( 0.5 ); - opacity: 0.2; - position: relative; - } -} - -.jb-table-header { - @media ( max-width: 782px ) { - display: none !important; - } - - font-size: 0.875rem; - color: var( --gray-60 ); - border: var( --border ); - border-top-left-radius: var( --border-radius ); - border-top-right-radius: var( --border-radius ); - border-bottom: 0; - background-color: #fff; -} - -.jb-table-header__image { - grid-column: thumbnail / title; -} - -.jb-table-header__device { - grid-column: device; - text-align: center; -} - -.jb-table-header__potential-size { - grid-column: potential-size; -} - -.jb-table-header__page { - grid-column: page / expand; -} diff --git a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/broken-data-row/broken-data-row.tsx b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/broken-data-row/broken-data-row.tsx index 5707030c66cce..4688b3f47c8ef 100644 --- a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/broken-data-row/broken-data-row.tsx +++ b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/broken-data-row/broken-data-row.tsx @@ -1,10 +1,11 @@ import { __ } from '@wordpress/i18n'; import TableRow from '../table-row/table-row'; +import rowStyles from '../../row.module.scss'; const BrokenDataRow: React.FC = () => { return ( -
      +
      { __( 'An error occurred while loading this entry.', 'jetpack-boost' ) }
      diff --git a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/image-missing-row/image-missing-row.tsx b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/image-missing-row/image-missing-row.tsx index 1c292c0ac3712..bc61aebf6a918 100644 --- a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/image-missing-row/image-missing-row.tsx +++ b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/image-missing-row/image-missing-row.tsx @@ -6,7 +6,7 @@ import Pill from '$features/image-size-analysis/recommendations/ui/pill/pill'; import RowTitle from '$features/image-size-analysis/recommendations/ui/row-title/row-title'; import { removeGetParams } from '$lib/utils/remove-get-params'; import TableRowHover from '../table-row-hover/table-row-hover'; - +import rowStyles from '../../row.module.scss'; interface ImageMissingRowProps { enableTransition: boolean; details: IsaImage; @@ -17,23 +17,23 @@ const ImageMissingRow: React.FC< ImageMissingRowProps > = ( { details } ) => { return ( -
      { __( 'Image Missing', 'jetpack-boost' ) }
      +
      { __( 'Image Missing', 'jetpack-boost' ) }
      -
      +
      -
      +
      ? KB -
      +
      ? KB
      -
      +
      = ( { details } ) => { />
      -
      +
      -
      + diff --git a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/image-size-row/image-size-row.tsx b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/image-size-row/image-size-row.tsx index 8979fe60c5bae..0f338634d1f54 100644 --- a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/image-size-row/image-size-row.tsx +++ b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/image-size-row/image-size-row.tsx @@ -11,6 +11,7 @@ import TableRowHover from '../table-row-hover/table-row-hover'; import { removeGetParams } from '$lib/utils/remove-get-params'; import { recordBoostEventAndRedirect } from '$lib/utils/analytics'; import styles from './image-size-row.module.scss'; +import rowStyles from '../../row.module.scss'; import clsx from 'clsx'; interface ImageSizeRowProps { @@ -63,7 +64,7 @@ const TableRowContent: React.FC< ContentProps > = ( { title, details, toggleImag
      -
      +
      = ( { title, details, toggleImag { potentialSize } KB
      -
      +
      = ( { title, details, toggleImag />
      -
      +
      -
      +
      { details.page.title } diff --git a/projects/plugins/boost/app/assets/src/css/components/isa/recommendations/row-types/table-row.scss b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/table-row/table-row.module.scss similarity index 53% rename from projects/plugins/boost/app/assets/src/css/components/isa/recommendations/row-types/table-row.scss rename to projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/table-row/table-row.module.scss index e18c2cd2037e0..2aec470f26db7 100644 --- a/projects/plugins/boost/app/assets/src/css/components/isa/recommendations/row-types/table-row.scss +++ b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/table-row/table-row.module.scss @@ -1,4 +1,16 @@ -.jb-table-row-container { +@mixin bottom-border-radius { + border-bottom-right-radius: var(--border-radius); + border-bottom-left-radius: var(--border-radius); + border-bottom: var(--border); +} + +@mixin top-border-radius { + border-top-right-radius: var(--border-radius); + border-top-left-radius: var(--border-radius); + border-top: var(--border); +} + +.table-row-container { background-color: #fff; border-top: var(--border); border-left: var(--border); @@ -27,74 +39,32 @@ } &:last-child { - border-bottom-right-radius: var(--border-radius); - border-bottom-left-radius: var(--border-radius); - border-bottom: var(--border); + @include bottom-border-radius; } } // Expanded view, but not the one at the very top. -:not(.jb-table-header) + .jb-table-row-container.expanded { +.table-row-container + .table-row-container.expanded { margin-top: var(--expanded-gap); - border-top-right-radius: var(--border-radius); - border-top-left-radius: var(--border-radius); + @include top-border-radius; } // The row after the expanded view. -.expanded + .jb-table-row-container { - border-top-right-radius: var(--border-radius); - border-top-left-radius: var(--border-radius); +.expanded + .table-row-container { + @include top-border-radius; } // The row before the expanded view. -.jb-table-row-container:has(+ .expanded) { - border-bottom-right-radius: var(--border-radius); - border-bottom-left-radius: var(--border-radius); - border-bottom: var(--border); +.table-row-container:has(+ .expanded) { + @include bottom-border-radius; } -.jb-table-row-container.expanded { +.table-row-container.expanded { margin-bottom: var(--expanded-gap); + @include bottom-border-radius; } -.jb-table-row { - min-height: 115px; - cursor: pointer; - - .jb-table-row__hover-content { - display: none; - } - - &:hover { - background-color: #f6f7f7; - - // Can't use overflow because of the box-shadow workaround above. - // So instead, repeating the border radius. - .jb-table-row__expanded & { - border-top-right-radius: var(--border-radius); - border-top-left-radius: var(--border-radius); - } - - .jb-table-row__hover-content { - display: block; - - @media (max-width: 782px) { - display: none; - } - } - - .jb-table-row__device, - .jb-table-row__page { - display: none; - } - } - - .jb-table-row__page a { - text-decoration: none; - } -} - -.jb-table-row__expand { +.expand-indicator { cursor: pointer; text-align: center; grid-column: expand; @@ -105,25 +75,18 @@ } } -.jb-table-row__expanded { +.expanded-content-row { display: flex; justify-content: space-between; padding: var(--gap); padding-left: calc(var(--thumbnail-size) + var(--gap) * 2); .expanded & { - border-bottom-right-radius: var(--border-radius); - border-bottom-left-radius: var(--border-radius); - border-bottom: var(--border); + @include bottom-border-radius; } - @media (max-width: 782px) { flex-direction: column; padding-left: var(--gap); } } - -.jb-table-row__title { - grid-column: title; -} diff --git a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/table-row/table-row.tsx b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/table-row/table-row.tsx index d56f849c2901c..044ec70260596 100644 --- a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/table-row/table-row.tsx +++ b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row-types/table-row/table-row.tsx @@ -1,5 +1,8 @@ import React, { useState, useCallback } from 'react'; import clsx from 'clsx'; +import styles from './table-row.module.scss'; +import rowStyles from '../../row.module.scss'; + interface TableRowProps { children: React.ReactNode; expandedContent?: React.ReactNode; @@ -26,15 +29,27 @@ const TableRow: React.FC< TableRowProps > = ( { children, expandedContent } ) => ); return ( -
      +
      { /* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */ } -
      +
      { children } - { canExpand &&
      { expanded ? '↑' : '↓' }
      } + { canExpand && ( +
      { expanded ? '↑' : '↓' }
      + ) }
      - { expanded && canExpand &&
      { expandedContent }
      } + { expanded && canExpand && ( +
      { expandedContent }
      + ) }
      ); }; diff --git a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row.module.scss b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row.module.scss new file mode 100644 index 0000000000000..9d1f4b52a3278 --- /dev/null +++ b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/row.module.scss @@ -0,0 +1,67 @@ +.row-grid { + display: grid; + padding: var( --padding ); + gap: var( --gap ); + align-items: center; + grid-template-columns: + [thumbnail] var( --thumbnail-size ) + [title] var( --table-column-title ) + [potential-size] var( --table-column-potential-size ) + [device] var( --table-column-device ) + [page] 1fr + [expand] var( --table-column-expand ); + + /** + * Narrow screen overrides. + */ + @media ( max-width: 782px ) { + // Remove some columns + grid-template-columns: + [thumbnail] var( --thumbnail-size ) + [title] 1fr + [expand] var( --table-column-expand ); + } +} + +.table-row-title { + grid-column: title; +} + + + +.table-row { + min-height: 115px; + cursor: pointer; + + .hover-content { + display: none; + } + + &:hover { + background-color: #f6f7f7; + + // Can't use overflow because of the box-shadow workaround above. + // So instead, repeating the border radius. + .expanded & { + border-top-right-radius: var(--border-radius); + border-top-left-radius: var(--border-radius); + } + + .hover-content { + display: block; + + @media (max-width: 782px) { + display: none; + } + } + + .device, + .page { + display: none; + } + } + + .page a { + text-decoration: none; + } +} \ No newline at end of file diff --git a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/table/table.module.scss b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/table/table.module.scss index 6aeac2b6fe337..35b695400466e 100644 --- a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/table/table.module.scss +++ b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/table/table.module.scss @@ -2,3 +2,66 @@ max-width: 1320px; margin: 0 auto; } + +.table { + will-change: opacity, filter; + transition: + opacity 0.3s ease-in-out, + filter 0.3s ease-in-out; + + h1 { + padding-top: 16px; + width: 100%; + text-align: center; + } + + &.loading { + filter: grayscale( 0.5 ); + opacity: 0.2; + position: relative; + } +} + +.loading-spinner { + position: fixed; + top: 50%; + left: 50%; + transform: translate( -50%, -50% ); + z-index: 9000; + + &:not( .active ) { + display: none; + } +} + +.table-header { + @media ( max-width: 782px ) { + display: none !important; + } + + font-size: 0.875rem; + color: var( --gray-60 ); + border: var( --border ); + border-top-left-radius: var( --border-radius ); + border-top-right-radius: var( --border-radius ); + border-bottom: 0; + background-color: #fff; + + .image { + grid-column: thumbnail / title; + } + + .device { + grid-column: device; + text-align: center; + } + + .potential-size { + grid-column: potential-size; + } + + .page { + grid-column: page / expand; + } + +} \ No newline at end of file diff --git a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/table/table.tsx b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/table/table.tsx index 51149541d79ad..4a91bbb763e7c 100644 --- a/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/table/table.tsx +++ b/projects/plugins/boost/app/assets/src/js/features/image-size-analysis/recommendations/table/table.tsx @@ -12,6 +12,7 @@ import { } from '$features/image-size-analysis'; import clsx from 'clsx'; import styles from './table.module.scss'; +import rowStyles from '../row.module.scss'; const toggleImageFix = ( imageDetails: IsaImage ) => { const imageFixer = useImageFixer(); @@ -46,7 +47,7 @@ interface TableProps { const Table = ( { isaDataLoading, images, isaReport }: TableProps ) => { return ( <> -
      +
      @@ -57,12 +58,12 @@ const Table = ( { isaDataLoading, images, isaReport }: TableProps ) => { : __( 'No image size issues found yet…', 'jetpack-boost' ) } ) : ( -
      -
      -
      Image
      -
      Potential Size
      -
      Device
      -
      Page/Post
      +
      +
      +
      Image
      +
      Potential Size
      +
      Device
      +
      Page/Post
      { isaDataLoading diff --git a/projects/plugins/boost/changelog/update-recommendations-scss b/projects/plugins/boost/changelog/update-recommendations-scss new file mode 100644 index 0000000000000..297c62ed6dcd9 --- /dev/null +++ b/projects/plugins/boost/changelog/update-recommendations-scss @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Refactor styles by moving them from global to modules + + From 4a02ca9c7bd7daec83bf30f3f2a8a20cd663a6f1 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Fri, 31 Jan 2025 10:42:03 -0700 Subject: [PATCH 311/420] CRM: Use version constant for monorepo tooling compatibility (#41408) * Add version constant to class * Flag version constant for auto-update * Defer to version constant * Use version constant everywhere * Remove unneeded file * Add changelog * Update composer.lock file * Suppress Phan error --- .../crm/admin/activation/before-you-go.php | 9 +- .../crm/admin/activation/welcome-to-jpcrm.php | 22 +- .../crm/admin/activation/wizard.ajax.php | 2 +- .../crm/admin/settings/mail-delivery.page.php | 6 +- projects/plugins/crm/api/status.php | 2 +- .../changelog/fix-crm-add_version_constant | 4 + projects/plugins/crm/composer.json | 3 + projects/plugins/crm/composer.lock | 2 +- .../crm/includes/ZeroBSCRM.AdminStyling.php | 2 +- .../crm/includes/ZeroBSCRM.CSVImporter.php | 2 +- .../plugins/crm/includes/ZeroBSCRM.Core.php | 29 +- .../includes/ZeroBSCRM.MetaBoxes3.Forms.php | 2 +- .../crm/includes/ZeroBSCRM.NotifyMe.php | 61 ++-- .../crm/includes/ZeroBSCRM.OnboardMe.php | 6 +- ...eroBSCRM.PluginUpdates.ImminentRelease.php | 81 ----- .../crm/includes/ZeroBSCRM.PluginUpdates.php | 48 +-- .../crm/includes/ZeroBSCRM.ScriptsStyles.php | 281 +++++++----------- .../crm/includes/ZeroBSCRM.SystemChecks.php | 9 +- .../crm/includes/jpcrm-dependency-checker.php | 2 +- .../crm/includes/jpcrm-usage-tracking.php | 2 +- .../crm/modules/givewp/class-jpcrm-givewp.php | 2 +- .../mailpoet/admin/mailpoet-hub/main.page.php | 4 +- ...ss-mailpoet-export-segment-to-mailpoet.php | 2 +- .../mailpoet/includes/class-mailpoet.php | 6 +- .../modules/portal/class-client-portal.php | 4 +- .../endpoints/class-single-quote-endpoint.php | 2 +- tools/phpcs-excludelist.json | 1 - 27 files changed, 221 insertions(+), 375 deletions(-) create mode 100644 projects/plugins/crm/changelog/fix-crm-add_version_constant delete mode 100644 projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.ImminentRelease.php diff --git a/projects/plugins/crm/admin/activation/before-you-go.php b/projects/plugins/crm/admin/activation/before-you-go.php index 1239127dfd57c..8e34acf5bbe71 100644 --- a/projects/plugins/crm/admin/activation/before-you-go.php +++ b/projects/plugins/crm/admin/activation/before-you-go.php @@ -22,13 +22,12 @@ // js wp_enqueue_script( 'jquery' ); - // not really needed. wp_enqueue_script('zbsbeforeyougojs', plugins_url('/js/before-you-go/jquery.blockUI.min.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version); // css - wp_enqueue_style( 'zbsbeforeyougocssloadstyles', plugins_url( '/css/before-you-go/loadstyles.min.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbsbeforeyougocssopensans', plugins_url( '/css/before-you-go/opensans' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbsbeforeyougocssadminmin', plugins_url( '/css/before-you-go/admin.min.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbsbeforeyougocssexitform', plugins_url( '/css/before-you-go/zbs-exitform.min.css', ZBS_ROOTFILE ), array(), $zbs->version ); + wp_enqueue_style( 'zbsbeforeyougocssloadstyles', plugins_url( '/css/before-you-go/loadstyles.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbsbeforeyougocssopensans', plugins_url( '/css/before-you-go/opensans' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbsbeforeyougocssadminmin', plugins_url( '/css/before-you-go/admin.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbsbeforeyougocssexitform', plugins_url( '/css/before-you-go/zbs-exitform.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); $style_handles = array( 'zbsbeforeyougocssloadstyles', 'zbsbeforeyougocssopensans', 'zbsbeforeyougocssadminmin', 'zbsbeforeyougocssexitform' ); ?> diff --git a/projects/plugins/crm/admin/activation/welcome-to-jpcrm.php b/projects/plugins/crm/admin/activation/welcome-to-jpcrm.php index 08f4bdf61ccf6..7b6df0e426032 100644 --- a/projects/plugins/crm/admin/activation/welcome-to-jpcrm.php +++ b/projects/plugins/crm/admin/activation/welcome-to-jpcrm.php @@ -23,20 +23,22 @@ // } Assets we need specifically here // js + // phpcs:disable WordPress.WP.EnqueuedResourceParameters.NotInFooter wp_enqueue_script( 'jquery' ); - wp_enqueue_script( 'zbswelcomeblock', plugins_url( '/js/welcome-to-zbs/jquery.blockUI.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs->version ); - wp_enqueue_script( 'zbswelcomebootstrap', plugins_url( '/js/welcome-to-zbs/bootstrap.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs->version ); - wp_enqueue_script( 'zbswelcomewizard', plugins_url( '/js/welcome-to-zbs/wizard2' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs->version ); + wp_enqueue_script( 'zbswelcomeblock', plugins_url( '/js/welcome-to-zbs/jquery.blockUI.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); + wp_enqueue_script( 'zbswelcomebootstrap', plugins_url( '/js/welcome-to-zbs/bootstrap.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); + wp_enqueue_script( 'zbswelcomewizard', plugins_url( '/js/welcome-to-zbs/wizard2' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // css - wp_enqueue_style( 'zbswelcomebootstrap', plugins_url( '/css/welcome-to-zbs/bootstrap.min.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbswelcomeloadstyles', plugins_url( '/css/welcome-to-zbs/loadstyles' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbswelcomeopensans', plugins_url( '/css/welcome-to-zbs/opensans' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbswelcomeadmin', plugins_url( '/css/welcome-to-zbs/admin.min.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbswelcomeexitform', plugins_url( '/css/welcome-to-zbs/zbs-exitform' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbswelcomeactivation', plugins_url( '/css/welcome-to-zbs/activation.min.css', ZBS_ROOTFILE ), array(), $zbs->version ); - wp_enqueue_style( 'zbswelcomewizard', plugins_url( '/css/welcome-to-zbs/wizard' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs->version ); + wp_enqueue_style( 'zbswelcomebootstrap', plugins_url( '/css/welcome-to-zbs/bootstrap.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbswelcomeloadstyles', plugins_url( '/css/welcome-to-zbs/loadstyles' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbswelcomeopensans', plugins_url( '/css/welcome-to-zbs/opensans' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbswelcomeadmin', plugins_url( '/css/welcome-to-zbs/admin.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbswelcomeexitform', plugins_url( '/css/welcome-to-zbs/zbs-exitform' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbswelcomeactivation', plugins_url( '/css/welcome-to-zbs/activation.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbswelcomewizard', plugins_url( '/css/welcome-to-zbs/wizard' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); $style_handles = array( 'zbswelcomebootstrap', 'zbswelcomeloadstyles', 'zbswelcomeopensans', 'zbswelcomeadmin', 'zbswelcomeexitform', 'zbswelcomeactivation', 'zbswelcomewizard' ); + // phpcs:enable WordPress.WP.EnqueuedResourceParameters.NotInFooter // } Image URLS $assetsURLI = ZEROBSCRM_URL . 'i/'; diff --git a/projects/plugins/crm/admin/activation/wizard.ajax.php b/projects/plugins/crm/admin/activation/wizard.ajax.php index 23828601dbd64..608585c885ae2 100644 --- a/projects/plugins/crm/admin/activation/wizard.ajax.php +++ b/projects/plugins/crm/admin/activation/wizard.ajax.php @@ -60,7 +60,7 @@ function zbs_wizard_fin() { 'ef' => $crm_enable_forms, 'ew' => $crm_enable_woo_module, 'ems' => $crm_menu_style, - 'v' => $zbs->version, + 'v' => $zbs::VERSION, 'cu' => $crm_curr, ); update_option( 'zbs_initopts_' . time(), $init_options, false ); diff --git a/projects/plugins/crm/admin/settings/mail-delivery.page.php b/projects/plugins/crm/admin/settings/mail-delivery.page.php index aefa2a124eb07..46bc4c65fb50b 100644 --- a/projects/plugins/crm/admin/settings/mail-delivery.page.php +++ b/projects/plugins/crm/admin/settings/mail-delivery.page.php @@ -556,5 +556,9 @@ -version ); ?> +
      diff --git a/projects/plugins/crm/api/status.php b/projects/plugins/crm/api/status.php index 32f70ed30fe21..7a96836d32246 100644 --- a/projects/plugins/crm/api/status.php +++ b/projects/plugins/crm/api/status.php @@ -12,7 +12,7 @@ $reply = array( 'status' => __( 'Successful Connection', 'zero-bs-crm' ), 'message' => __( 'Your API Connection with Jetpack CRM is functioning correctly.', 'zero-bs-crm' ), - 'crm_version' => $zbs->version, + 'crm_version' => $zbs::VERSION, 'db_version' => $zbs->db_version, ); diff --git a/projects/plugins/crm/changelog/fix-crm-add_version_constant b/projects/plugins/crm/changelog/fix-crm-add_version_constant new file mode 100644 index 0000000000000..7afa129702692 --- /dev/null +++ b/projects/plugins/crm/changelog/fix-crm-add_version_constant @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code: Introduce version constant in main plugin class. diff --git a/projects/plugins/crm/composer.json b/projects/plugins/crm/composer.json index 32d791f02e343..b3d42ebf35f82 100644 --- a/projects/plugins/crm/composer.json +++ b/projects/plugins/crm/composer.json @@ -86,6 +86,9 @@ "link-template": "https://github.com/Automattic/jetpack-crm/compare/${old}...${new}" }, "release-branch-prefix": "crm", + "version-constants": { + "::VERSION": "includes/ZeroBSCRM.Core.php" + }, "wp-plugin-slug": "zero-bs-crm", "wp-svn-autopublish": true } diff --git a/projects/plugins/crm/composer.lock b/projects/plugins/crm/composer.lock index 688602919861a..9a39526c7f8ce 100644 --- a/projects/plugins/crm/composer.lock +++ b/projects/plugins/crm/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "aded1a2522c87b6342a26d0190d55e66", + "content-hash": "fef026928b9662d509c55e8b50543101", "packages": [ { "name": "automattic/jetpack-assets", diff --git a/projects/plugins/crm/includes/ZeroBSCRM.AdminStyling.php b/projects/plugins/crm/includes/ZeroBSCRM.AdminStyling.php index 8b1b314f73960..8260f04b6ce8d 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.AdminStyling.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.AdminStyling.php @@ -215,7 +215,7 @@ function jpcrm_footer_credit_version( $content ) { global $zbs; $showpoweredby_admin = $zbs->settings->get( 'showpoweredby_admin' ) === 1 ? true : false; if ( $showpoweredby_admin ) { - return sprintf( 'Jetpack CRM v%s', $zbs->version ); + return sprintf( 'Jetpack CRM v%s', $zbs::VERSION ); } ##/WLREMOVE diff --git a/projects/plugins/crm/includes/ZeroBSCRM.CSVImporter.php b/projects/plugins/crm/includes/ZeroBSCRM.CSVImporter.php index a57a354b7bf2c..b991ecaa51cd2 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.CSVImporter.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.CSVImporter.php @@ -79,7 +79,7 @@ function zeroBSCRM_CSVImporterLiteadmin_menu() { global $zbs,$zeroBSCRM_CSVImporterLiteslugs; // req - wp_register_style( 'zerobscrm-csvimporter-admcss', ZEROBSCRM_URL . 'css/ZeroBSCRM.admin.csvimporter' . wp_scripts_get_suffix() . '.css', array(), $zbs->version ); + wp_register_style( 'zerobscrm-csvimporter-admcss', ZEROBSCRM_URL . 'css/ZeroBSCRM.admin.csvimporter' . wp_scripts_get_suffix() . '.css', array(), $zbs::VERSION ); $csv_admin_page = add_submenu_page( 'jpcrm-hidden', 'CSV Importer', 'CSV Importer', 'admin_zerobs_customers', $zbs->slugs['csvlite'], 'zeroBSCRM_CSVImporterLitepages_app', 1 ); // phpcs:ignore WordPress.WP.Capabilities.Unknown add_action( "admin_print_styles-{$csv_admin_page}", 'zeroBSCRM_CSVImporter_lite_admin_styles' ); add_action( "admin_print_styles-{$csv_admin_page}", 'zeroBSCRM_global_admin_styles' ); // } and this. diff --git a/projects/plugins/crm/includes/ZeroBSCRM.Core.php b/projects/plugins/crm/includes/ZeroBSCRM.Core.php index 79c216c28a6a6..7b282700a4e4b 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.Core.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.Core.php @@ -20,11 +20,19 @@ final class ZeroBSCRM { /** - * ZeroBSCRM version. + * Jetpack CRM version. * * @var string */ - public $version = '6.5.1'; + const VERSION = '6.5.1'; + + /** + * Jetpack CRM version (used in various extensions as of January 2025). + * + * @deprecated + * @var string + */ + public $version = ''; /** * WordPress version tested with. @@ -545,6 +553,8 @@ public function __get( $key ) { * Jetpack CRM Constructor. */ public function __construct() { + // @phan-suppress-next-line PhanDeprecatedProperty - Define old property for backward compatibility. + $this->version = $this::VERSION; // Simple global definitions without loading any core files... // required for verify_minimum_requirements() @@ -619,10 +629,10 @@ private function verify_minimum_requirements() { $this->setupUrlsSlugsEtc(); // build message - $message_html = '

      ' . sprintf( esc_html__( 'This version of CRM (%1$s) requires an upgraded database (3.0). Your database is using an older version than this (%2$s). To use CRM you will need to install version 4 of CRM and run the database upgrade.', 'zero-bs-crm' ), $this->version, $this->dal_version ) . '

      '; // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment + $message_html = '

      ' . sprintf( esc_html__( 'This version of CRM (%1$s) requires an upgraded database (3.0). Your database is using an older version than this (%2$s). To use CRM you will need to install version 4 of CRM and run the database upgrade.', 'zero-bs-crm' ), $this::VERSION, $this->dal_version ) . '

      '; // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment ##WLREMOVE - $message_html = '

      ' . sprintf( esc_html__( 'This version of Jetpack CRM (%1$s) requires an upgraded database (3.0). Your database is using an older version than this (%2$s). To use Jetpack CRM you will need to install version 4 of Jetpack CRM and run the database upgrade.', 'zero-bs-crm' ), $this->version, $this->dal_version ) . '

      '; // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment + $message_html = '

      ' . sprintf( esc_html__( 'This version of Jetpack CRM (%1$s) requires an upgraded database (3.0). Your database is using an older version than this (%2$s). To use Jetpack CRM you will need to install version 4 of Jetpack CRM and run the database upgrade.', 'zero-bs-crm' ), $this::VERSION, $this->dal_version ) . '

      '; // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment $message_html .= '

      ' . __( 'Read the guide on migrating', 'zero-bs-crm' ) . '

      '; ##/WLREMOVE @@ -639,7 +649,7 @@ private function verify_minimum_requirements() { } elseif ( ! function_exists( 'openssl_get_cipher_methods' ) ) { // build message - $message_html = '

      ' . sprintf( __( 'Jetpack CRM uses the OpenSSL extension for PHP to properly protect sensitive data. Most PHP environments have this installed by default, but it seems yours does not; we recommend contacting your host for further help.', 'zero-bs-crm' ), $this->version, $this->dal_version ) . '

      '; + $message_html = '

      ' . sprintf( __( 'Jetpack CRM uses the OpenSSL extension for PHP to properly protect sensitive data. Most PHP environments have this installed by default, but it seems yours does not; we recommend contacting your host for further help.', 'zero-bs-crm' ), $this::VERSION, $this->dal_version ) . '

      '; $message_html .= '

      ' . __( 'PHP docs on OpenSSL', 'zero-bs-crm' ) . '

      '; $this->add_wp_admin_notice( @@ -1326,9 +1336,6 @@ public function includes() { // } Put Plugin update message (notifications into the transient /wp-admin/plugins.php) page.. that way the nag message is not needed at the top of pages (and will always show, not need to be dismissed) require_once ZEROBSCRM_INCLUDE_PATH . 'ZeroBSCRM.PluginUpdates.php'; - // v3.0 update coming, warning - require_once ZEROBSCRM_INCLUDE_PATH . 'ZeroBSCRM.PluginUpdates.ImminentRelease.php'; - // } FROM PLUGIN HUNT THEME - LOT OF USEFUL CODE IN HERE. require_once ZEROBSCRM_INCLUDE_PATH . 'ZeroBSCRM.NotifyMe.php'; @@ -1596,7 +1603,7 @@ public function preInit() { // } Setup Config (centralises version numbers temp) global $zeroBSCRM_Conf_Setup; - $zeroBSCRM_Conf_Setup['conf_pluginver'] = $this->version; + $zeroBSCRM_Conf_Setup['conf_pluginver'] = $this::VERSION; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase $zeroBSCRM_Conf_Setup['conf_plugindbver'] = $this->db_version; // Not needed yet :) do_action( 'before_zerobscrm_settings_init' ); @@ -2192,8 +2199,8 @@ public function include_updater() { $this->update_api_version, ZBS_ROOTFILE, array( - 'version' => $this->version, - 'license' => false, // license initiated to false.. + 'version' => $this::VERSION, + 'license' => false, // license initiated to false.. ) ); } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Forms.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Forms.php index 44b720325e556..0ea91605ef8f8 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Forms.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Forms.php @@ -584,7 +584,7 @@ public function html( $form, $metabox ) { $zbsfs = 'simple'; if (is_array($form) && isset($form['style'])) $zbsfs = $form['style']; // get js url - $formjs = ZEROBSCRM_URL . 'js/ZeroBSCRM.leadform.js?ver='.$zbs->version; + $formjs = ZEROBSCRM_URL . 'js/ZeroBSCRM.leadform.js?ver=' . $zbs::VERSION; ?>

      diff --git a/projects/plugins/crm/includes/ZeroBSCRM.NotifyMe.php b/projects/plugins/crm/includes/ZeroBSCRM.NotifyMe.php index 599e27fbe5603..8d05324d972b1 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.NotifyMe.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.NotifyMe.php @@ -62,40 +62,39 @@ function zeroBSCRM_notifyme_createDBtable(){ function zeroBSCRM_notifyme_scripts(){ - - global $zbs; - wp_enqueue_script("jquery"); - wp_enqueue_script('notifyme-front', ZEROBSCRM_URL . 'js/lib/notifyme-front.min.js',array('jquery'), $zbs->version ); - wp_enqueue_style('notifyme-css', ZEROBSCRM_URL . 'css/lib/notifyme-front.min.css', array(), $zbs->version ); - - #} this does the browser notifications - wp_register_script( 'notifyme_push', ZEROBSCRM_URL . 'js/lib/push.min.js', array( 'jquery' ) , $zbs->version, true ); - wp_enqueue_script( 'notifyme_push' ); - - #} this stores things in cookies, so not to keep notifying - wp_register_script( 'notifyme_cookie', ZEROBSCRM_URL . 'js/lib/cookie.min.js', array( 'jquery' ) , $zbs->version, true ); - wp_enqueue_script( 'notifyme_cookie' ); - - #} this is the browser notification icon. - $notify_logo = jpcrm_get_logo(); - - #} this is which user to notify for.. - $cid = get_current_user_id(); - - #} we want to browser notify our users :-) - $notification_meta['browser_push'] = 1; - $args = array( - 'ph_notify_logo' => $notify_logo, - 'current_user' => $cid, - 'notification_nonce' => wp_create_nonce( "notifyme_nonce" ), - 'notification_settings' => $notification_meta, - 'ajaxurl' => admin_url( 'admin-ajax.php' ) - ); - wp_localize_script('notifyme_push','notifyme',$args); + global $zbs; + wp_enqueue_script( 'jquery' ); + wp_enqueue_script( 'notifyme-front', ZEROBSCRM_URL . 'js/lib/notifyme-front.min.js', array( 'jquery' ), $zbs::VERSION ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter + wp_enqueue_style( 'notifyme-css', ZEROBSCRM_URL . 'css/lib/notifyme-front.min.css', array(), $zbs::VERSION ); + + #} this does the browser notifications + wp_register_script( 'notifyme_push', ZEROBSCRM_URL . 'js/lib/push.min.js', array( 'jquery' ), $zbs::VERSION, true ); + wp_enqueue_script( 'notifyme_push' ); + + #} this stores things in cookies, so not to keep notifying + wp_register_script( 'notifyme_cookie', ZEROBSCRM_URL . 'js/lib/cookie.min.js', array( 'jquery' ), $zbs::VERSION, true ); + wp_enqueue_script( 'notifyme_cookie' ); + + #} this is the browser notification icon. + $notify_logo = jpcrm_get_logo(); + + #} this is which user to notify for.. + $cid = get_current_user_id(); + + #} we want to browser notify our users :-) + $notification_meta = array( 'browser_push' => 1 ); + + $args = array( + 'ph_notify_logo' => $notify_logo, + 'current_user' => $cid, + 'notification_nonce' => wp_create_nonce( 'notifyme_nonce' ), + 'notification_settings' => $notification_meta, + 'ajaxurl' => admin_url( 'admin-ajax.php' ), + ); + wp_localize_script( 'notifyme_push', 'notifyme', $args ); } add_action( 'zbs-global-admin-styles', 'zeroBSCRM_notifyme_scripts' ); - //ADD ANY CORE FUNCTIONS FOR THE PLUGIN HERE function zeroBSCRM_notify_me(){ global $zbs; diff --git a/projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php b/projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php index 5bc0cf6b8ba61..8923cd1015967 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php @@ -29,9 +29,9 @@ function zeroBS_onboardme_scripts(){ // Changed from bootstrap tour to hopscotch wp_enqueue_script( 'jquery' ); - wp_enqueue_script( 'onboardme-front', ZEROBSCRM_URL . 'js/lib/hopscotch.min.js', array( 'jquery' ), $zbs->version, true ); - wp_enqueue_style( 'onboardme-css', ZEROBSCRM_URL . 'css/lib/hopscotch.min.css', array(), $zbs->version ); - wp_enqueue_script( 'tour-front', ZEROBSCRM_URL . 'js/ZeroBSCRM.admin.tour' . wp_scripts_get_suffix() . '.js', array( 'jquery', 'onboardme-front' ), $zbs->version, true ); + wp_enqueue_script( 'onboardme-front', ZEROBSCRM_URL . 'js/lib/hopscotch.min.js', array( 'jquery' ), $zbs::VERSION, true ); + wp_enqueue_style( 'onboardme-css', ZEROBSCRM_URL . 'css/lib/hopscotch.min.css', array(), $zbs::VERSION ); + wp_enqueue_script( 'tour-front', ZEROBSCRM_URL . 'js/ZeroBSCRM.admin.tour' . wp_scripts_get_suffix() . '.js', array( 'jquery', 'onboardme-front' ), $zbs::VERSION, true ); $zbs_tour_root = admin_url(); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.ImminentRelease.php b/projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.ImminentRelease.php deleted file mode 100644 index 7c6f6c581e0c6..0000000000000 --- a/projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.ImminentRelease.php +++ /dev/null @@ -1,81 +0,0 @@ - v5 (Jetpack CRM) - ====================================================== */ - -// this makes it only fire when loading plugins.php :) -add_action( 'pre_current_active_plugins', 'jpcrm_update_checks_v5_check' ); - -// Checks to see if we're upgrading from <5.0 to 5.0 + warns -function jpcrm_update_checks_v5_check() { - - // only for users who can ;) - if ( current_user_can( 'activate_plugins' ) ) { - - global $zbs; - - $update_data = zeroBSCRM_updates_pluginHasUpdate( 'Zero BS CRM', 'zero-bs-crm' ); - - if ( is_object( $update_data ) && isset( $update_data->update ) && is_object( $update_data->update ) && isset( $update_data->update->new_version ) ) { - - // has update available - // is it v5, and current is pre v5? - if ( - version_compare( $update_data->update->new_version, '5.0' ) > -1 - && // current is pre 5.0: - version_compare( $zbs->version, '5.0' ) < 0 ) { - - // show on plugin updates - add_action( 'in_plugin_update_message-' . ZBS_ROOTPLUGIN, 'jpcrm_update_checks_v5_available_notice', 10, 2 ); - - } - - } // has update - - } // users who can - -} - -// Plugin updates page inline msg: -function jpcrm_update_checks_v5_available_notice( $data, $response ) { - - global $zbs; - - $upgrade_title = __( 'CRM v5.0', 'zero-bs-crm' ); - $button_html = ''; - - ##WLREMOVE - $upgrade_title = __( 'Jetpack CRM v5.0', 'zero-bs-crm' ); - ##/WLREMOVE - - // see #734-gh - - // simpler upgrade notice - $secondary_message = __( 'This major release brings WooCommerce syncing directly into CRM core!', 'zero-bs-crm' ); - ##WLREMOVE - $button_html = '' . __( 'Read about version 5.0', 'zero-bs-crm' ) . ''; - ##/WLREMOVE - - // build inline message - $msg = '

      ' . $upgrade_title . ' - ' . $secondary_message . '
      '; - $msg .= ' ' . $button_html . '
      '; - echo wp_kses_post( $msg ) . '

      '; - - - // .upgrade-notice-dummy is a workaround for seemingly a wp bug (adapted from Woo:in_plugin_update_message()) - // just put inline ^^ .upgrade-notice-dummy { display:none !important; } - -} diff --git a/projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.php b/projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.php index 52f3a687fb0e1..d83479ea56ffa 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.php @@ -710,14 +710,14 @@ public function api_request($action, $data){ // build request data package $api_params = array( - 'zbs-action' => $action, - 'license' => $this->get_license_key(), - 'url' => home_url(), - 'method' => 'POST', - 'is_multi_site' => $multisite, - 'is_wl' => $wl, - 'country' => '', - 'core_ver' => $zbs->version + 'zbs-action' => $action, + 'license' => $this->get_license_key(), + 'url' => home_url(), + 'method' => 'POST', + 'is_multi_site' => $multisite, + 'is_wl' => $wl, + 'country' => '', + 'core_ver' => $zbs::VERSION, ); // sites @@ -727,35 +727,6 @@ public function api_request($action, $data){ $api_params = array_merge($api_params, $sites); $api_params = array_merge($api_params, $data); - /* Ultimately that'll make this remote post: - - 1 big array: - - $api_params = array( - 'zbs-action' => $action, - 'license' => $this->get_license_key(), - 'url' => home_url(), - 'method' => 'POST', - 'is_multi_site' => $multisite, - 'is_wl' => $wl, - 'country' => $country, - 'core_ver' => $zbs->version - - ++ - 'slug'=> 'all', - 'zbs-extensions'=> $zbs_extensions_on_site, - 'active-extensions' => $active_plugins, - 'telemetry-active' => $zbs_active_plugins, - 'telemetry-all' => $zbs_all_plugins_and_ver - - ++ - 'sites' => array() - - ); - - */ - - // got cache? (we don't cache ext_info) global $zbsExtUpdateCache; if ($action !== 'ext_info' && isset($zbsExtUpdateCache) && is_array($zbsExtUpdateCache)){ @@ -1106,8 +1077,7 @@ function zeroBSCRM_localDblCheck(){ // checks if a plugin has an update. - // adapted from https://wordpress.stackexchange.com/questions/228468/plugin-update-warning - // ... for pre-checking new ver releases (e.g. <3.0 to 3.0) to enable pre-warning as in ZeroBSCRM.PluginUpdates.ImminentRelease.php + // adapted from https://wordpress.stackexchange.com/questions/228468/plugin-update-warning // name = Jetpack CRM // textdom = zero-bs-crm (in lieu of slug) function zeroBSCRM_updates_pluginHasUpdate($name='',$textDomain=''){ diff --git a/projects/plugins/crm/includes/ZeroBSCRM.ScriptsStyles.php b/projects/plugins/crm/includes/ZeroBSCRM.ScriptsStyles.php index d1c63564413be..5ddf9ef60a339 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.ScriptsStyles.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.ScriptsStyles.php @@ -8,6 +8,7 @@ * * Date: 06/02/18 */ +// phpcs:disable WordPress.WP.EnqueuedResourceParameters.NotInFooter,Generic.WhiteSpace.ScopeIndent.Incorrect #} =============================================================================== #} === INIT registration & Global Style & Script setups @@ -23,15 +24,15 @@ function zeroBSCRM_scriptStyles_initStyleRegister(){ // ================ Global ================= //registers the styles on admin init - wp_register_style('zbs-wp-semanticui', plugins_url('/css/ZeroBSCRM.admin.semantic-ui'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_register_script('semanticuijs' ,plugins_url('/js/lib/semantic.min.js',ZBS_ROOTFILE), array(), $zbs->version ); + wp_register_style( 'zbs-wp-semanticui', plugins_url( '/css/ZeroBSCRM.admin.semantic-ui' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_register_script( 'semanticuijs', plugins_url( '/js/lib/semantic.min.js', ZBS_ROOTFILE ), array(), $zbs::VERSION ); // global - wp_register_style('zerobscrmadmcss', plugins_url('/css/ZeroBSCRM.admin.global'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE),array('zbs-wp-semanticui'), $zbs->version ); - wp_enqueue_script('zerobscrmadmjs', plugins_url('/js/ZeroBSCRM.admin.global'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); + wp_register_style( 'zerobscrmadmcss', plugins_url( '/css/ZeroBSCRM.admin.global' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array( 'zbs-wp-semanticui' ), $zbs::VERSION ); + wp_enqueue_script( 'zerobscrmadmjs', plugins_url( '/js/ZeroBSCRM.admin.global' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // emerald styles - wp_register_style( 'jpcrm-emerald', plugins_url( '/css/jpcrm-emerald' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs->version ); + wp_register_style( 'jpcrm-emerald', plugins_url( '/css/jpcrm-emerald' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); // ================ / Global ================ // =========================================== @@ -41,44 +42,44 @@ function zeroBSCRM_scriptStyles_initStyleRegister(){ // ============ Page-specific ============== // list view - wp_register_style('zerobscrmlistview', plugins_url('/css/ZeroBSCRM.admin.listview'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_register_script('zerobscrmlistviewjs', plugins_url('/js/ZeroBSCRM.admin.listview'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery' ),$zbs->version ); + wp_register_style( 'zerobscrmlistview', plugins_url( '/css/ZeroBSCRM.admin.listview' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_register_script( 'zerobscrmlistviewjs', plugins_url( '/js/ZeroBSCRM.admin.listview' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); #} localise the list view... // WH note: Pretty sure we do this on page, so should janitor this up (later) $zbs_translation_array = array( 'zbs_edit' => __( 'Edit', 'zero-bs-crm' ), - 'zbs_view'=> __( 'View', "zero-bs-crm") + 'zbs_view' => __( 'View', 'zero-bs-crm' ), ); wp_localize_script( 'zerobscrmlistviewjs', 'zbs_lang', $zbs_translation_array ); // Single view - wp_register_style('zerobscrmsingleview', plugins_url('/css/ZeroBSCRM.admin.singleview'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_register_script('zerobscrmsingleview' ,plugins_url('/js/ZeroBSCRM.admin.singleview'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery' ),$zbs->version ); + wp_register_style( 'zerobscrmsingleview', plugins_url( '/css/ZeroBSCRM.admin.singleview' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_register_script( 'zerobscrmsingleview', plugins_url( '/js/ZeroBSCRM.admin.singleview' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // edit view - wp_register_style('zerobscrmeditview', plugins_url('/css/ZeroBSCRM.admin.editview'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_register_script('zerobscrmeditviewjs', plugins_url('/js/ZeroBSCRM.admin.editview'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); - wp_register_script('zerobscrmtagmetaboxjs', plugins_url('/js/ZeroBSCRM.admin.tags.metabox'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); + wp_register_style( 'zerobscrmeditview', plugins_url( '/css/ZeroBSCRM.admin.editview' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_register_script( 'zerobscrmeditviewjs', plugins_url( '/js/ZeroBSCRM.admin.editview' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); + wp_register_script( 'zerobscrmtagmetaboxjs', plugins_url( '/js/ZeroBSCRM.admin.tags.metabox' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // Metabox manager (rearrange them) - wp_register_script('zerobscrmmm', plugins_url('/js/ZeroBSCRM.admin.metabox.manager'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE),array('jquery'), $zbs->version); + wp_register_script( 'zerobscrmmm', plugins_url( '/js/ZeroBSCRM.admin.metabox.manager' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // Segment Editor - wp_register_style('zbs-segmentedit-css', plugins_url('/css/ZeroBSCRM.admin.segmentedit'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_register_script('zbs-segmentedit-js',ZEROBSCRM_URL.'/js/ZeroBSCRM.admin.segmentedit'.wp_scripts_get_suffix().'.js',array('jquery'), $zbs->version ); + wp_register_style( 'zbs-segmentedit-css', plugins_url( '/css/ZeroBSCRM.admin.segmentedit' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_register_script( 'zbs-segmentedit-js', ZEROBSCRM_URL . '/js/ZeroBSCRM.admin.segmentedit' . wp_scripts_get_suffix() . '.js', array( 'jquery' ), $zbs::VERSION ); // home dash - wp_register_style('zerobscrmhomedash', plugins_url('/css/ZeroBSCRM.admin.homedash'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array('zbs-wp-semanticui'), $zbs->version ); - + wp_register_style( 'zerobscrmhomedash', plugins_url( '/css/ZeroBSCRM.admin.homedash' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array( 'zbs-wp-semanticui' ), $zbs::VERSION ); + // settings page - wp_register_style('zerobscrmsettings', plugins_url('/css/ZeroBSCRM.admin.settings'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - + wp_register_style( 'zerobscrmsettings', plugins_url( '/css/ZeroBSCRM.admin.settings' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + // mail delivery wizard - wp_register_style('zerobscrmmaildeliverywizard', plugins_url('/css/ZeroBSCRM.admin.maildeliverywizard'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); + wp_register_style( 'zerobscrmmaildeliverywizard', plugins_url( '/css/ZeroBSCRM.admin.maildeliverywizard' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); // systems page: - wp_register_script('jpcrmadminsystem' ,plugins_url('/js/jpcrm-admin-system'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); + wp_register_script( 'jpcrmadminsystem', plugins_url( '/js/jpcrm-admin-system' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // ============ / Page-specific ============== // =========================================== @@ -87,32 +88,31 @@ function zeroBSCRM_scriptStyles_initStyleRegister(){ // ============ Libs ======================= // jq ui - wp_register_script('zerobscrmadmjqui', plugins_url('/js/lib/jquery-ui.min.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); + wp_register_script( 'zerobscrmadmjqui', plugins_url( '/js/lib/jquery-ui.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // above didn't seem to include all libs req for draggable, this does, specific build for listviews // 29/07/2017 http://jqueryui.com/download/#!version=1.12.1&components=111111111111111110000000010000000000000000000000 - wp_register_script('zerobscrmadmjquidraggable', plugins_url('/js/lib/jquery-ui.1.12.1.dragdrop.listview.min.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); - + wp_register_script( 'zerobscrmadmjquidraggable', plugins_url( '/js/lib/jquery-ui.1.12.1.dragdrop.listview.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); + // jq modal - wp_register_style('zerobsjsmodal', plugins_url('/css/lib/jquery.modal.min.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_register_script('zerobsjsmodal' ,plugins_url('/js/lib/jquery.modal.min.js',ZBS_ROOTFILE), array('jquery'), $zbs->version ); - + wp_register_style( 'zerobsjsmodal', plugins_url( '/css/lib/jquery.modal.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_register_script( 'zerobsjsmodal', plugins_url( '/js/lib/jquery.modal.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); + // font awesome - wp_register_style('jpcrm-fontawesome-v4-4-0-core-css', plugins_url('/css/font-awesome.min.css',ZBS_ROOTFILE), array(), $zbs->version ); - + wp_register_style( 'jpcrm-fontawesome-v4-4-0-core-css', plugins_url( '/css/font-awesome.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + // chart.js - wp_register_script('zerobscrmchartjs', plugins_url('/js/lib/chart.min.js',ZBS_ROOTFILE),array('jquery'), $zbs->version ); - + wp_register_script( 'zerobscrmchartjs', plugins_url( '/js/lib/chart.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); + // funnel js - wp_register_script('zerobscrmfunneljs', plugins_url('/js/lib/jquery.funnel.min.js',ZBS_ROOTFILE),array('jquery'), $zbs->version ); - + wp_register_script( 'zerobscrmfunneljs', plugins_url( '/js/lib/jquery.funnel.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); + // sweet alerts - v2 v7.29.0 - 16th nov 18 - wp_register_style('zerobscrmswa', plugins_url('/css/lib/sweetalert2-7.29.0.min.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_enqueue_script('zerobscrmswa', plugins_url('/js/lib/sweetalert2-7.29.0.min.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); + wp_register_style( 'zerobscrmswa', plugins_url( '/css/lib/sweetalert2-7.29.0.min.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_script( 'zerobscrmswa', plugins_url( '/js/lib/sweetalert2-7.29.0.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); #} Bloodhound (for typeahead) - use prefetch from https://twitter.github.io/typeahead.js/examples/ #} https://github.com/twitter/typeahead.js 0.11.1 - wp_enqueue_script('zerobscrmtajs-0-11-1', plugins_url('/js/lib/typeahead.bundle.min.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); - + wp_enqueue_script( 'zerobscrmtajs-0-11-1', plugins_url( '/js/lib/typeahead.bundle.min.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // ============ / Libs ======================= // =========================================== @@ -122,7 +122,9 @@ function zeroBSCRM_scriptStyles_initStyleRegister(){ // WL css overrides (3/11/18 ++) // if the file exists, this registers + enqueues css - if (file_exists( dirname( ZBS_ROOTFILE ) . '/css/wl.adm.override.css')) wp_enqueue_style('zbswladmcss', plugins_url('/css/wl.adm.override.css',ZBS_ROOTFILE), array('zerobscrmadmcss','zerobscrmlistview','zerobscrmeditview'), $zbs->version ); + if ( file_exists( dirname( ZBS_ROOTFILE ) . '/css/wl.adm.override.css' ) ) { + wp_enqueue_style( 'zbswladmcss', plugins_url( '/css/wl.adm.override.css', ZBS_ROOTFILE ), array( 'zerobscrmadmcss', 'zerobscrmlistview', 'zerobscrmeditview' ), $zbs::VERSION ); + } // ============ / Whitelabel ================= // =========================================== @@ -272,8 +274,8 @@ function jpcrm_get_jp_green() { function zeroBSCRM_scriptStyles_admin_quoteBuilder(){ global $zbs; - wp_enqueue_style('zerobscrm-quotebuilder', plugins_url('/css/ZeroBSCRM.admin.quotebuilder'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_enqueue_script('zerobscrm-quotebuilderjs', plugins_url('/js/ZeroBSCRM.admin.quotebuilder'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version ); + wp_enqueue_style( 'zerobscrm-quotebuilder', plugins_url( '/css/ZeroBSCRM.admin.quotebuilder' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_script( 'zerobscrm-quotebuilderjs', plugins_url( '/js/ZeroBSCRM.admin.quotebuilder' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); } @@ -284,11 +286,11 @@ function zeroBSCRM_scriptStyles_admin_invoiceBuilder(){ global $zbs; #} Bootstrap (for the modals) #} ONLY REQUIRED in invoice editor => AND welcome wizard tour now - //wp_enqueue_script('zerobscrmbsjs', plugins_url('/js/lib/bootstrap.min.js',ZBS_ROOTFILE), array( 'jquery' )); + // wp_enqueue_script( 'zerobscrmbsjs', plugins_url( '/js/lib/bootstrap.min.js', ZBS_ROOTFILE ), array( 'jquery' )); #} MS invoice stuff. xxx - wp_enqueue_style('zerobscrm-invoicebuilder', plugins_url('/css/ZeroBSCRM.admin.invoicebuilder'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_enqueue_script('zerobscrm-invoicebuilderjs', plugins_url('/js/ZeroBSCRM.admin.invoicebuilder'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery', 'semanticuijs' ), $zbs->version ); + wp_enqueue_style( 'zerobscrm-invoicebuilder', plugins_url( '/css/ZeroBSCRM.admin.invoicebuilder' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_script( 'zerobscrm-invoicebuilderjs', plugins_url( '/js/ZeroBSCRM.admin.invoicebuilder' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery', 'semanticuijs' ), $zbs::VERSION ); //localise the invoice builder strings... $zbs_invtranslation_array = array( @@ -299,7 +301,7 @@ function zeroBSCRM_scriptStyles_admin_invoiceBuilder(){ ); $zbs_links = array( - 'admin_url' => admin_url() + 'admin_url' => admin_url(), ); wp_localize_script( 'zerobscrm-invoicebuilderjs', 'zbs_lang', $zbs_invtranslation_array ); @@ -311,8 +313,8 @@ function zeroBSCRM_scriptStyles_admin_invoiceBuilder(){ function zeroBSCRM_scriptStyles_admin_transactionBuilder(){ global $zbs; - wp_enqueue_style('zerobscrmtranscss', plugins_url('/css/ZeroBSCRM.admin.transactionedit'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - wp_enqueue_script('zerobscrm-transedit-js', ZEROBSCRM_URL .'js/ZeroBSCRM.admin.transactioneditor'.wp_scripts_get_suffix().'.js', array('jquery'), $zbs->version ); + wp_enqueue_style( 'zerobscrmtranscss', plugins_url( '/css/ZeroBSCRM.admin.transactionedit' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); + wp_enqueue_script( 'zerobscrm-transedit-js', ZEROBSCRM_URL . 'js/ZeroBSCRM.admin.transactioneditor' . wp_scripts_get_suffix() . '.js', array( 'jquery' ), $zbs::VERSION ); } @@ -320,7 +322,7 @@ function zeroBSCRM_scriptStyles_admin_transactionBuilder(){ function zeroBSCRM_scriptStyles_admin_formBuilder(){ global $zbs; - wp_enqueue_style('zerobscrmformcss', plugins_url('/css/ZeroBSCRM.admin.frontendforms'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); + wp_enqueue_style( 'zerobscrmformcss', plugins_url( '/css/ZeroBSCRM.admin.frontendforms' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); } @@ -354,20 +356,11 @@ function zeroBSCRM_global_admin_styles(){ wp_enqueue_style( 'jpcrm-emerald' ); // moment everywhere (from 2.98) - wp_enqueue_script( 'jpcrm-moment-v2-29-4', untrailingslashit( ZEROBSCRM_URL ) . '/js/lib/moment-with-locales.min.js', array( 'jquery' ), $zbs->version, false ); + wp_enqueue_script( 'jpcrm-moment-v2-29-4', untrailingslashit( ZEROBSCRM_URL ) . '/js/lib/moment-with-locales.min.js', array( 'jquery' ), $zbs::VERSION, false ); // semantic everywhere (on our pages) - wp_enqueue_style( 'zbs-wp-semanticui' ); - wp_enqueue_script( 'semanticuijs'); - - // telemetry - // V3.0 No more telemetry zeroBSCRM_teleLog(''); - - - #}bootstrap JS (for onboarding tour...) - //wp_enqueue_script('zerobscrmbsjs', plugins_url('/js/lib/bootstrap.min.js',ZBS_ROOTFILE), array( 'jquery' )); - - #} EDIT - using STANDALONE tour now instead + wp_enqueue_style( 'zbs-wp-semanticui' ); + wp_enqueue_script( 'semanticuijs' ); do_action('zbs-global-admin-styles'); @@ -378,31 +371,28 @@ function zeroBSCRM_global_admin_styles(){ if (!defined('ZBS_GAS')) define('ZBS_GAS',true); } // / dupe check protection - - } // 2.98.2 - MS styles tidy up that were inline // for the Extension Manager page (was inline) function zeroBSCRM_extension_admin_styles() { global $zbs; - wp_register_style( 'zerobscrmexts', ZEROBSCRM_URL . 'css/ZeroBSCRM.admin.extensions-page' . wp_scripts_get_suffix() . '.css', array(), $zbs->version ); + wp_register_style( 'zerobscrmexts', ZEROBSCRM_URL . 'css/ZeroBSCRM.admin.extensions-page' . wp_scripts_get_suffix() . '.css', array(), $zbs::VERSION ); wp_enqueue_style( 'zerobscrmexts' ); } // 2.98.2 - MS tidy up of style into compressed sheet (was inline) function zeroBSCRM_intro_admin_styles() { global $zbs; - wp_register_style( 'zerobscrmintro', ZEROBSCRM_URL . 'css/ZeroBSCRM.admin.intro' . wp_scripts_get_suffix() . '.css', array(), $zbs->version ); + wp_register_style( 'zerobscrmintro', ZEROBSCRM_URL . 'css/ZeroBSCRM.admin.intro' . wp_scripts_get_suffix() . '.css', array(), $zbs::VERSION ); wp_enqueue_style( 'zerobscrmintro' ); } - function zeroBSCRM_email_styles() { global $zbs; - wp_register_style( 'zerobscrmemails', ZEROBSCRM_URL . 'css/ZeroBSCRM.admin.email' . wp_scripts_get_suffix() . '.css', array(), $zbs->version ); + wp_register_style( 'zerobscrmemails', ZEROBSCRM_URL . 'css/ZeroBSCRM.admin.email' . wp_scripts_get_suffix() . '.css', array(), $zbs::VERSION ); wp_enqueue_style( 'zerobscrmemails' ); - wp_register_script( 'zerobsjsemail' , ZEROBSCRM_URL . 'js/ZeroBSCRM.admin.email' . wp_scripts_get_suffix() . '.js', array('jquery'), $zbs->version ); + wp_register_script( 'zerobsjsemail', ZEROBSCRM_URL . 'js/ZeroBSCRM.admin.email' . wp_scripts_get_suffix() . '.js', array( 'jquery' ), $zbs::VERSION ); wp_enqueue_script( 'zerobsjsemail'); do_action( 'zbs_extra_email_script_styles' ); } @@ -410,31 +400,30 @@ function zeroBSCRM_admin_styles_ui2_listview(){ // semantic 2.2.11 (EVENTUALLY these PROBS shouldn't be global) wp_enqueue_style( 'zerobscrmlistview' ); - wp_enqueue_script( 'semanticuijs'); + wp_enqueue_script( 'semanticuijs' ); // Removed at request of plugin reviewers. (used wp core ver) wp_enqueue_script( 'zerobscrmadmjqui'); - wp_enqueue_script('jquery-ui-sortable'); + wp_enqueue_script( 'jquery-ui-sortable' ); // our list view css - wp_enqueue_script( 'zerobscrmlistviewjs'); + wp_enqueue_script( 'zerobscrmlistviewjs' ); zeroBSCRM_enqueue_libs_js_momentdatepicker(); // hook to allow modules etc. to add list view stylesheets do_action( 'jpcrm_enqueue_styles_listview' ); - } function zeroBSCRM_admin_styles_ui2_editview(){ - + //enqueue these (via the admin_print_styles-{$page}) // Removed at request of plugin reviewers. (used wp core ver) wp_enqueue_script( 'zerobscrmadmjqui'); - wp_enqueue_script('jquery-ui-sortable'); + wp_enqueue_script( 'jquery-ui-sortable' ); // semantic 2.2.11 (EVENTUALLY these PROBS shouldn't be global) wp_enqueue_style( 'zerobscrmeditview' ); - wp_enqueue_script( 'semanticuijs'); - wp_enqueue_script( 'zerobscrmeditviewjs'); - wp_enqueue_script( 'zerobscrmtagmetaboxjs'); - wp_enqueue_script( 'zerobscrmmm'); // metabox manager + wp_enqueue_script( 'semanticuijs' ); + wp_enqueue_script( 'zerobscrmeditviewjs' ); + wp_enqueue_script( 'zerobscrmtagmetaboxjs' ); + wp_enqueue_script( 'zerobscrmmm' ); // metabox manager // daterange + moment zeroBSCRM_enqueue_libs_js_momentdatepicker(); @@ -476,70 +465,59 @@ function zeroBSCRM_settingspage_admin_styles(){ global $zbs; // needs datepicker (MS needed for paypal sync, was a gross hack elsewhere so put here) - wp_enqueue_script('wh-daterangepicker-v2-1-21-js',untrailingslashit(ZEROBSCRM_URL).'/js/lib/daterangepicker.min.js', array('jquery'), $zbs->version ); + wp_enqueue_script( 'wh-daterangepicker-v2-1-21-js', untrailingslashit( ZEROBSCRM_URL ) . '/js/lib/daterangepicker.min.js', array( 'jquery' ), $zbs::VERSION ); wp_enqueue_style( 'zerobscrmsettings' ); - wp_register_script('zerobscrm-settingspage-js' , ZEROBSCRM_URL .'js/ZeroBSCRM.admin.settings'.wp_scripts_get_suffix().'.js', array('jquery'), $zbs->version ); - wp_enqueue_script( 'zerobscrm-settingspage-js'); - + wp_register_script( 'zerobscrm-settingspage-js', ZEROBSCRM_URL . 'js/ZeroBSCRM.admin.settings' . wp_scripts_get_suffix() . '.js', array( 'jquery' ), $zbs::VERSION ); + wp_enqueue_script( 'zerobscrm-settingspage-js' ); + #} Field Sorts if (isset($_GET['tab']) && $_GET['tab'] == 'fieldsorts'){ - - #} jQ UI - //wp_enqueue_script('zerobscrmadmjqui', plugins_url('/js/lib/jquery-ui.min.js',ZBS_ROOTFILE), array( 'jquery' )); - // can just call here as registered in main admin init now (2.2 29/07/2017) wp_enqueue_script( 'zerobscrmadmjqui'); #} Our custom sortables css - wp_enqueue_style('zerobscrmsortscss', plugins_url('/css/ZeroBSCRM.admin.sortables'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); - + wp_enqueue_style( 'zerobscrmsortscss', plugins_url( '/css/ZeroBSCRM.admin.sortables' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); } } -// These now get rolled into zeroBSCRM_global_admin_styles -/*function zeroBSCRM_admin_styles_ui2_semantic(){ - wp_enqueue_style( 'zbs-wp-semanticui' ); - wp_enqueue_script( 'semanticuijs'); -}*/ /* WH adding in for old ext compatibility e.g. inv pro was still producing error for lack of func */ function zeroBSCRM_admin_styles_ui2_semantic(){} function zeroBSCRM_admin_styles_ui2_semantic_settingspage(){ - // These now get rolled into zeroBSCRM_global_admin_styles wp_enqueue_style( 'zbs-wp-semanticui' ); - wp_enqueue_style( 'zerobscrmmaildeliverywizard' ); - // These now get rolled into zeroBSCRM_global_admin_styles wp_enqueue_script( 'semanticuijs'); - wp_enqueue_style('zerobscrmsettings'); + // These now get rolled into zeroBSCRM_global_admin_styles wp_enqueue_style( 'zbs-wp-semanticui' ); + wp_enqueue_style( 'zerobscrmmaildeliverywizard' ); + // These now get rolled into zeroBSCRM_global_admin_styles wp_enqueue_script( 'semanticuijs'); + wp_enqueue_style( 'zerobscrmsettings' ); } function zeroBSCRM_admin_styles_chartjs(){ - wp_enqueue_script( 'zerobscrmchartjs'); - wp_enqueue_script( 'zerobscrmfunneljs'); + wp_enqueue_script( 'zerobscrmchartjs' ); + wp_enqueue_script( 'zerobscrmfunneljs' ); } function zeroBSCRM_admin_styles_singleview(){ - + // single item view wp_enqueue_style( 'zerobscrmsingleview' ); - wp_enqueue_script( 'zerobscrmsingleview'); + wp_enqueue_script( 'zerobscrmsingleview' ); } function jpcrm_admin_scripts_systems_page(){ - wp_enqueue_script( 'jpcrmadminsystem'); + wp_enqueue_script( 'jpcrmadminsystem' ); } function zeroBSCRM_admin_styles_homedash(){ global $zbs; //home dashboard styles and script - wp_enqueue_style( 'zerobscrmhomedash' ); + wp_enqueue_style( 'zerobscrmhomedash' ); zeroBSCRM_enqueue_libs_js_momentdatepicker(); - wp_register_script('zerobscrmjs-dash' , ZEROBSCRM_URL .'js/ZeroBSCRM.admin.dash'.wp_scripts_get_suffix().'.js', array('jquery'), $zbs->version); - wp_enqueue_script( 'zerobscrmjs-dash'); + wp_register_script( 'zerobscrmjs-dash', ZEROBSCRM_URL . 'js/ZeroBSCRM.admin.dash' . wp_scripts_get_suffix() . '.js', array( 'jquery' ), $zbs::VERSION ); + wp_enqueue_script( 'zerobscrmjs-dash' ); - wp_enqueue_script( 'jpcrm-funnel-js', ZEROBSCRM_URL . 'js/jpcrm-admin-funnel' . wp_scripts_get_suffix() . '.js', array(), $zbs->version, false ); - wp_enqueue_style( 'jpcrm-funnel-css', ZEROBSCRM_URL . 'css/jpcrm-admin-funnel' . wp_scripts_get_suffix() . '.css', array(), $zbs->version ); - + wp_enqueue_script( 'jpcrm-funnel-js', ZEROBSCRM_URL . 'js/jpcrm-admin-funnel' . wp_scripts_get_suffix() . '.js', array(), $zbs::VERSION, false ); + wp_enqueue_style( 'jpcrm-funnel-css', ZEROBSCRM_URL . 'css/jpcrm-admin-funnel' . wp_scripts_get_suffix() . '.css', array(), $zbs::VERSION ); } function zeroBSCRM_admin_scripts_editcust(){ @@ -547,7 +525,7 @@ function zeroBSCRM_admin_scripts_editcust(){ zeroBSCRM_dequeueJSModal(); //scripts here for the edit customer page (for the "Quick Add Company, Tasks, etc") - wp_enqueue_script('zerobscrmcustjs'); + wp_enqueue_script( 'zerobscrmcustjs' ); } @@ -557,54 +535,37 @@ function zeroBSCRM_calendar_admin_styles(){ zeroBSCRM_enqueue_libs_js_momentdatepicker(); + wp_register_style( 'jpcrm-tasks-css', ZEROBSCRM_URL . 'css/jpcrm-admin-tasks' . wp_scripts_get_suffix() . '.css', array(), $zbs::VERSION ); - wp_register_style( 'jpcrm-tasks-css', ZEROBSCRM_URL . 'css/jpcrm-admin-tasks' . wp_scripts_get_suffix() . '.css', array(), $zbs->version ); - - wp_register_script( 'zerobscrm-calendar-js', ZEROBSCRM_URL . 'js/lib/fullcalendar.mod' . wp_scripts_get_suffix() . '.js', array( 'jquery', 'jpcrm-moment-v2-29-4' ), $zbs->version, false ); - wp_register_style('zerobscrm-calendar', ZEROBSCRM_URL .'css/lib/fullcalendar.min.css', array(), $zbs->version ); - wp_register_style('zerobscrm-calendar-print', ZEROBSCRM_URL .'css/lib/fullcalendar.print.min.css', array(), $zbs->version ); - wp_register_script( 'jpcrm-tasks-js', ZEROBSCRM_URL . 'js/jpcrm-admin-tasks' . wp_scripts_get_suffix() . '.js', array( 'jquery', 'jpcrm-moment-v2-29-4', 'zerobscrm-calendar-js' ), $zbs->version, false ); - + wp_register_script( 'zerobscrm-calendar-js', ZEROBSCRM_URL . 'js/lib/fullcalendar.mod' . wp_scripts_get_suffix() . '.js', array( 'jquery', 'jpcrm-moment-v2-29-4' ), $zbs::VERSION, false ); + wp_register_style( 'zerobscrm-calendar', ZEROBSCRM_URL . 'css/lib/fullcalendar.min.css', array(), $zbs::VERSION ); + wp_register_style( 'zerobscrm-calendar-print', ZEROBSCRM_URL . 'css/lib/fullcalendar.print.min.css', array(), $zbs::VERSION ); + wp_register_script( 'jpcrm-tasks-js', ZEROBSCRM_URL . 'js/jpcrm-admin-tasks' . wp_scripts_get_suffix() . '.js', array( 'jquery', 'jpcrm-moment-v2-29-4', 'zerobscrm-calendar-js' ), $zbs::VERSION, false ); // LOCALE Specific - $languageTag = zeroBSCRM_getLocale(); - $languageTagShort = zeroBSCRM_getLocale(false); - if (file_exists(ZEROBSCRM_PATH.'/js/lib/calendar-locale/'.$languageTag .'.js')){ - - // e.g. en-gb - wp_enqueue_script('zerobscrm-calendar-js-locale', ZEROBSCRM_URL . 'js/lib/calendar-locale/'.$languageTag .'.js', array('zerobscrm-calendar-js'), $zbs->version ); - - } else { - - if (file_exists(ZEROBSCRM_PATH.'/js/lib/calendar-locale/'.$languageTagShort .'.js')){ + $language_tag = zeroBSCRM_getLocale(); + $language_tag_short = zeroBSCRM_getLocale( false ); + if ( file_exists( ZEROBSCRM_PATH . '/js/lib/calendar-locale/' . $language_tag . '.js' ) ) { + // e.g. en-gb + wp_enqueue_script( 'zerobscrm-calendar-js-locale', ZEROBSCRM_URL . 'js/lib/calendar-locale/' . $language_tag . '.js', array( 'zerobscrm-calendar-js' ), $zbs::VERSION ); + } elseif ( file_exists( ZEROBSCRM_PATH . '/js/lib/calendar-locale/' . $language_tag_short . '.js' ) ) { // e.g. en - wp_enqueue_script('zerobscrm-calendar-js-locale', ZEROBSCRM_URL . 'js/lib/calendar-locale/'.$languageTagShort .'.js', array('zerobscrm-calendar-js'), $zbs->version ); - - } else { - - // no language tag exists, notice? - - } - - } - + wp_enqueue_script( 'zerobscrm-calendar-js-locale', ZEROBSCRM_URL . 'js/lib/calendar-locale/' . $language_tag_short . '.js', array( 'zerobscrm-calendar-js' ), $zbs::VERSION ); + } wp_enqueue_style( 'zerobscrm-calendar' ); wp_enqueue_style( 'jpcrm-tasks-css' ); // wp_enqueue_style( 'zerobscrm-calendar-print' ); zeroBSCRM_enqueue_libs_js_momentdatepicker(); - - wp_enqueue_script('zerobscrm-calendar-js'); + wp_enqueue_script( 'zerobscrm-calendar-js' ); wp_enqueue_script( 'jpcrm-tasks-js' ); - } function zeroBSCRM_dequeueJSModal(){ - - wp_dequeue_style('zerobsjsmodal'); - wp_dequeue_script('zerobsjsmodal'); + wp_dequeue_style( 'zerobsjsmodal' ); + wp_dequeue_script( 'zerobsjsmodal' ); } function zeroBSCRM_add_admin_styles( $hook ) { @@ -653,24 +614,6 @@ function zeroBSCRM_add_admin_styles( $hook ) { } add_action( 'admin_enqueue_scripts', 'zeroBSCRM_add_admin_styles', 10, 1 ); -#} Public ver :) -/*v3.0 removed this, no CPT's and don't think was using anyhow by 2.98+ -function zeroBSCRM_add_public_scripts( $hook ) { - - global $post; - - #} Conditionally, for front end: http://wordpress.stackexchange.com/questions/10287/load-scripts-based-on-post-type - #if ($post->post_type == 'zerobs_quote' && !is_admin()){ - if( is_single() && get_query_var('post_type') && 'zerobs_quote' == get_query_var('post_type') ){ - - #} Public proposals - wp_enqueue_style('zerobscrmpubquocss', ZEROBSCRM_URL .'/css/ZeroBSCRM.public.quotes.min.css' ); - - } -} -add_action( 'wp_enqueue_scripts', 'zeroBSCRM_add_public_scripts', 10, 1 ); */ - - // THIS IS LEGACY! It's used for <3.0 on CPT edit pages. Otherwise enqueue properly like in zeroBSCRM_settingspage_admin_styles via menus :) function zeroBSCRM_load_libs_js_momentdatepicker(){ add_action( 'admin_enqueue_scripts', 'zeroBSCRM_enqueue_libs_js_momentdatepicker' ); @@ -679,11 +622,9 @@ function zeroBSCRM_load_libs_js_momentdatepicker(){ function zeroBSCRM_enqueue_libs_js_momentdatepicker(){ global $zbs; - wp_enqueue_script('wh-daterangepicker-v2-1-21-js',untrailingslashit(ZEROBSCRM_URL).'/js/lib/daterangepicker.min.js', array('jquery'), $zbs->version ); + wp_enqueue_script( 'wh-daterangepicker-v2-1-21-js', untrailingslashit( ZEROBSCRM_URL ) . '/js/lib/daterangepicker.min.js', array( 'jquery' ), $zbs::VERSION ); #} CSS is wrapped into main plugin css - } - #} Customer Filters function zeroBSCRM_load_libs_js_customerfilters(){ @@ -693,7 +634,7 @@ function zeroBSCRM_enqueue_libs_js_customerfilters(){ global $zbs; #} Customer Filters - wp_enqueue_script('zbs-js-customerfilters-v1', ZEROBSCRM_URL.'/js/ZeroBSCRM.admin.customerfilters'.wp_scripts_get_suffix().'.js', array('jquery'), $zbs->version ); + wp_enqueue_script( 'zbs-js-customerfilters-v1', ZEROBSCRM_URL . '/js/ZeroBSCRM.admin.customerfilters' . wp_scripts_get_suffix() . '.js', array( 'jquery' ), $zbs::VERSION ); } #} Media Manager @@ -774,7 +715,7 @@ function zeroBSCRM_admin_styles_exportTools(){ global $zbs; - wp_register_style('zbs-adm-css-export', plugins_url('/css/ZeroBSCRM.admin.export'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE),array('zbs-wp-semanticui'), $zbs->version ); + wp_register_style( 'zbs-adm-css-export', plugins_url( '/css/ZeroBSCRM.admin.export' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array( 'zbs-wp-semanticui' ), $zbs::VERSION ); wp_enqueue_style( 'zbs-adm-css-export' ); } @@ -797,7 +738,7 @@ function jpcrm_support_page_styles_scripts() { global $zbs; - wp_enqueue_style( 'jpcrm-support-page', plugins_url( 'css/jpcrm.admin.support-page' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs->version ); + wp_enqueue_style( 'jpcrm-support-page', plugins_url( 'css/jpcrm.admin.support-page' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); } // used in form templates & shortcode outputted forms. @@ -806,11 +747,11 @@ function zeroBSCRM_forms_scriptsStylesRegister(){ global $zbs; - // js - wp_register_script('zbsfrontendformsjs', plugins_url('/js/ZeroBSCRM.public.leadform'.wp_scripts_get_suffix().'.js',ZBS_ROOTFILE), array( 'jquery' ), $zbs->version); - - // css - wp_register_style('zbsfrontendformscss', plugins_url('/css/ZeroBSCRM.public.frontendforms'.wp_scripts_get_suffix().'.css',ZBS_ROOTFILE), array(), $zbs->version ); + // js + wp_register_script( 'zbsfrontendformsjs', plugins_url( '/js/ZeroBSCRM.public.leadform' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); + + // css + wp_register_style( 'zbsfrontendformscss', plugins_url( '/css/ZeroBSCRM.public.frontendforms' . wp_scripts_get_suffix() . '.css', ZBS_ROOTFILE ), array(), $zbs::VERSION ); } add_action( 'wp_enqueue_scripts', 'zeroBSCRM_forms_scriptsStylesRegister'); diff --git a/projects/plugins/crm/includes/ZeroBSCRM.SystemChecks.php b/projects/plugins/crm/includes/ZeroBSCRM.SystemChecks.php index 1075f89796d19..46c1cf73ae1f8 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.SystemChecks.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.SystemChecks.php @@ -113,13 +113,12 @@ function zeroBSCRM_checkSystemFeat_corever($withInfo=false){ global $zbs; if (!$withInfo) - return $zbs->version; + return $zbs::VERSION; else { + $enabled = true; + $enabled_str = 'Version ' . $zbs::VERSION; - $enabled = true; - $enabledStr = 'Version ' . $zbs->version; - - return array($enabled, $enabledStr); + return array( $enabled, $enabled_str ); } } diff --git a/projects/plugins/crm/includes/jpcrm-dependency-checker.php b/projects/plugins/crm/includes/jpcrm-dependency-checker.php index f0e58dee37cc7..4744bd68e313d 100644 --- a/projects/plugins/crm/includes/jpcrm-dependency-checker.php +++ b/projects/plugins/crm/includes/jpcrm-dependency-checker.php @@ -40,7 +40,7 @@ public function __construct() { } global $zbs; $this->all_plugins = get_plugins(); - $this->core_ver = $zbs->version ?? ''; + $this->core_ver = $zbs::VERSION ?? ''; $this->dal_ver = $zbs->dal_version ?? ''; } diff --git a/projects/plugins/crm/includes/jpcrm-usage-tracking.php b/projects/plugins/crm/includes/jpcrm-usage-tracking.php index 9d947a7b263c1..0d2664e17b92d 100644 --- a/projects/plugins/crm/includes/jpcrm-usage-tracking.php +++ b/projects/plugins/crm/includes/jpcrm-usage-tracking.php @@ -104,7 +104,7 @@ public function send_snapshot(){ $extensions_count = zeroBSCRM_extensionsInstalledCount(); $modules_count = jpcrm_core_modules_installed_count(); $wp_version = $wp_version; - $crm_version = $zbs->version; + $crm_version = $zbs::VERSION; $dal_version = $zbs->dal_version; $php_version = PHP_VERSION; $mysql_version = zeroBSCRM_database_getVersion(); diff --git a/projects/plugins/crm/modules/givewp/class-jpcrm-givewp.php b/projects/plugins/crm/modules/givewp/class-jpcrm-givewp.php index eb471d9baa356..a3083f123c9ab 100644 --- a/projects/plugins/crm/modules/givewp/class-jpcrm-givewp.php +++ b/projects/plugins/crm/modules/givewp/class-jpcrm-givewp.php @@ -37,7 +37,7 @@ public function check_dependencies() { $feature_name = 'GiveWP Connector for Jetpack CRM'; $give_core_reqs = array( - 'req_core_ver' => $zbs->version, // will match current core version + 'req_core_ver' => $zbs::VERSION, // will match current core version 'req_DAL_ver' => '3.0', ); $give_plug_reqs = array( diff --git a/projects/plugins/crm/modules/mailpoet/admin/mailpoet-hub/main.page.php b/projects/plugins/crm/modules/mailpoet/admin/mailpoet-hub/main.page.php index 0ea8e89696ca5..57791797ae70b 100644 --- a/projects/plugins/crm/modules/mailpoet/admin/mailpoet-hub/main.page.php +++ b/projects/plugins/crm/modules/mailpoet/admin/mailpoet-hub/main.page.php @@ -239,8 +239,8 @@ function jpcrm_mailpoet_output_language_labels( $additional_labels = array() ){ function jpcrm_mailpoet_hub_page_styles_scripts(){ global $zbs; - wp_enqueue_script( 'jpcrm-mailpoet', plugins_url( '/js/jpcrm-mailpoet-hub-page'.wp_scripts_get_suffix().'.js', JPCRM_MAILPOET_ROOT_FILE ), array( 'jquery' ), $zbs->version ); - wp_enqueue_style( 'jpcrm-mailpoet-hub-page', plugins_url( '/css/jpcrm-mailpoet-hub-page'.wp_scripts_get_suffix().'.css', JPCRM_MAILPOET_ROOT_FILE ) ); + wp_enqueue_script( 'jpcrm-mailpoet', plugins_url( '/js/jpcrm-mailpoet-hub-page' . wp_scripts_get_suffix() . '.js', JPCRM_MAILPOET_ROOT_FILE ), array( 'jquery' ), $zbs::VERSION ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter + wp_enqueue_style( 'jpcrm-mailpoet-hub-page', plugins_url( '/css/jpcrm-mailpoet-hub-page' . wp_scripts_get_suffix() . '.css', JPCRM_MAILPOET_ROOT_FILE ), array(), $zbs::VERSION ); zeroBSCRM_global_admin_styles(); } diff --git a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-export-segment-to-mailpoet.php b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-export-segment-to-mailpoet.php index d8701465ecba7..722d719ab86ca 100644 --- a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-export-segment-to-mailpoet.php +++ b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet-export-segment-to-mailpoet.php @@ -68,7 +68,7 @@ private function init_hooks( ) { add_action( 'jpcrm_enqueue_styles_listview', function() { global $zbs; - wp_enqueue_script( 'jpcrm-mailpoet-listview', plugins_url( '/js/jpcrm-mailpoet-listview-additions' . wp_scripts_get_suffix() . '.js', JPCRM_MAILPOET_ROOT_FILE ), array( 'jquery' ), $zbs->version ); + wp_enqueue_script( 'jpcrm-mailpoet-listview', plugins_url( '/js/jpcrm-mailpoet-listview-additions' . wp_scripts_get_suffix() . '.js', JPCRM_MAILPOET_ROOT_FILE ), array( 'jquery' ), $zbs::VERSION ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter } ); diff --git a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet.php b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet.php index 05eced3426e30..88c26404a8fa9 100644 --- a/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet.php +++ b/projects/plugins/crm/modules/mailpoet/includes/class-mailpoet.php @@ -184,7 +184,7 @@ public function check_dependencies() { global $zbs; $core_reqs = array( - 'req_core_ver' => $zbs->version, // will match current core version + 'req_core_ver' => $zbs::VERSION, // will match current core version 'req_DAL_ver' => '3.0', ); $plugin_reqs = array( @@ -295,8 +295,8 @@ private function init_features( ) { // Edit / Add page if ( $this->is_add_edit_page() ) { - wp_enqueue_style( 'jpcrm-mailpoet-add-edit-page', plugins_url( '/css/jpcrm-mailpoet-add-edit-page'.wp_scripts_get_suffix().'.css', JPCRM_MAILPOET_ROOT_FILE ) ); - wp_enqueue_script('jpcrm-mailpoet-add-edit-page', plugins_url('/js/jpcrm-mailpoet-add-edit-page'.wp_scripts_get_suffix().'.js', JPCRM_MAILPOET_ROOT_FILE), array( 'jquery' ), $zbs->version); + wp_enqueue_style( 'jpcrm-mailpoet-add-edit-page', plugins_url( '/css/jpcrm-mailpoet-add-edit-page' . wp_scripts_get_suffix() . '.css', JPCRM_MAILPOET_ROOT_FILE ), array(), $zbs::VERSION ); + wp_enqueue_script( 'jpcrm-mailpoet-add-edit-page', plugins_url( '/js/jpcrm-mailpoet-add-edit-page' . wp_scripts_get_suffix() . '.js', JPCRM_MAILPOET_ROOT_FILE ), array( 'jquery' ), $zbs::VERSION ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter } diff --git a/projects/plugins/crm/modules/portal/class-client-portal.php b/projects/plugins/crm/modules/portal/class-client-portal.php index d509517a55d1d..efb6ecbbcc35b 100644 --- a/projects/plugins/crm/modules/portal/class-client-portal.php +++ b/projects/plugins/crm/modules/portal/class-client-portal.php @@ -117,8 +117,8 @@ public function init_endpoints() { function portal_enqueue_scripts_and_styles() { global $zbs; - wp_enqueue_style( 'zbs-portal', plugins_url( '/css/jpcrm-public-portal' . wp_scripts_get_suffix() . '.css', __FILE__ ), array(), $zbs->version ); - wp_enqueue_style('zbs-fa', ZEROBSCRM_URL . 'css/font-awesome.min.css', array(), $zbs->version ); + wp_enqueue_style( 'zbs-portal', plugins_url( '/css/jpcrm-public-portal' . wp_scripts_get_suffix() . '.css', __FILE__ ), array(), $zbs::VERSION ); + wp_enqueue_style( 'zbs-fa', ZEROBSCRM_URL . 'css/font-awesome.min.css', array(), $zbs::VERSION ); // This do_action call was left here for compatibility purposes (legacy). do_action('zbs_enqueue_portal', 'zeroBS_portal_enqueue_stuff'); diff --git a/projects/plugins/crm/modules/portal/endpoints/class-single-quote-endpoint.php b/projects/plugins/crm/modules/portal/endpoints/class-single-quote-endpoint.php index 47617bc8c7e6e..3055dda38142a 100644 --- a/projects/plugins/crm/modules/portal/endpoints/class-single-quote-endpoint.php +++ b/projects/plugins/crm/modules/portal/endpoints/class-single-quote-endpoint.php @@ -110,7 +110,7 @@ function single_quote_html_output( $quote_id = -1, $quote_hash='' ) { }; version); + wp_enqueue_script( 'jpcrm_public_proposal_js', plugins_url( '/js/ZeroBSCRM.public.proposals' . wp_scripts_get_suffix() . '.js', ZBS_ROOTFILE ), array( 'jquery' ), $zbs::VERSION ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter } } diff --git a/tools/phpcs-excludelist.json b/tools/phpcs-excludelist.json index a93b4b1b5cd67..e207b8a514c51 100644 --- a/tools/phpcs-excludelist.json +++ b/tools/phpcs-excludelist.json @@ -156,7 +156,6 @@ "projects/plugins/crm/includes/ZeroBSCRM.OnboardMe.php", "projects/plugins/crm/includes/ZeroBSCRM.PerformanceTesting.php", "projects/plugins/crm/includes/ZeroBSCRM.Permissions.php", - "projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.ImminentRelease.php", "projects/plugins/crm/includes/ZeroBSCRM.PluginUpdates.php", "projects/plugins/crm/includes/ZeroBSCRM.REST.php", "projects/plugins/crm/includes/ZeroBSCRM.ScreenOptions.php", From 4b2a4a98c89a40054006e7f696be1ec7f516e852 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Fri, 31 Jan 2025 11:59:48 -0700 Subject: [PATCH 312/420] Phan: Fix errant extra params in function calls (#41263) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove extra param on remove_filter/remove_action There's no arg count when removing. * Remove extra param from rest_ensure_response That function doesn't allow a status code to be passed. Presumably we could override the WP_REST_Response status and force 200, but passing it through has worked so far, so keeping it that way. * Remove other stray args In most cases, these appear to be due to refactors. * Another stray arg * Suppress things that confuse Phan * Fix get_avatar_url calls * arrayHasKey → assertArrayHasKey * Fix misplaced parentheses * Tighten types We're using `WP_Option`, which allows an extra param in its `get()`. * Add missing sprintf * Add unused param to allow dynamic method call * Add changelogs * Use same behaviour as trunk * Fix assertion * Add param to Storage::get and use that type as before * Inform Phan of type rather than suppressing error * Update errant types * Update Phan baselines * More changelogs --- .../packages/boost-core/.phan/baseline.php | 2 - .../changelog/fix-phan-PhanParamTooMany | 4 + .../boost-core/src/lib/class-boost-api.php | 2 + .../packages/connection/.phan/baseline.php | 12 ++- .../changelog/fix-phan-PhanParamTooMany | 4 + .../legacy/class-jetpack-tracks-client.php | 2 +- .../connection/src/class-rest-connector.php | 2 +- .../tests/php/test_Error_Handler.php | 80 +++++++++---------- .../tests/php/test_Manager_integration.php | 3 +- .../tests/php/test_Manager_unit.php | 2 +- projects/packages/forms/.phan/baseline.php | 5 +- .../forms/changelog/fix-phan-PhanParamTooMany | 4 + .../contact-form/class-contact-form-field.php | 2 +- .../packages/image-cdn/.phan/baseline.php | 7 +- .../changelog/fix-phan-PhanParamTooMany | 4 + .../image-cdn/src/compatibility/photon.php | 6 +- .../tests/php/test_class.image_cdn.php | 4 +- .../jetpack-mu-wpcom/.phan/baseline.php | 3 +- .../changelog/fix-phan-PhanParamTooMany | 4 + .../verbum-comments/class-verbum-comments.php | 2 +- .../packages/masterbar/.phan/baseline.php | 2 +- .../changelog/fix-phan-PhanParamTooMany | 4 + .../packages/my-jetpack/.phan/baseline.php | 6 +- .../changelog/fix-phan-PhanParamTooMany | 4 + .../my-jetpack/src/class-rest-products.php | 10 +-- .../my-jetpack/src/class-rest-purchases.php | 2 +- .../src/class-rest-zendesk-chat.php | 6 +- .../protect-status/.phan/baseline.php | 2 - .../changelog/fix-phan-PhanParamTooMany | 4 + .../src/class-rest-controller.php | 4 +- .../packages/publicize/.phan/baseline.php | 2 +- .../changelog/fix-phan-PhanParamTooMany | 4 + projects/packages/schema/.phan/baseline.php | 2 - .../changelog/fix-phan-PhanParamTooMany | 4 + projects/packages/schema/src/class-schema.php | 2 +- .../packages/stats-admin/.phan/baseline.php | 2 +- .../changelog/fix-phan-PhanParamTooMany | 4 + projects/packages/stats/.phan/baseline.php | 5 +- .../stats/changelog/fix-phan-PhanParamTooMany | 4 + .../packages/stats/tests/php/test-main.php | 12 +-- .../stats/tests/php/test-xmlrpc-provider.php | 2 +- projects/packages/status/.phan/baseline.php | 2 - .../changelog/fix-phan-PhanParamTooMany | 4 + .../packages/status/tests/php/test-host.php | 2 +- projects/packages/sync/.phan/baseline.php | 8 +- .../sync/changelog/fix-phan-PhanParamTooMany | 4 + .../sync/src/class-rest-endpoints.php | 2 +- .../sync/src/modules/class-callables.php | 2 +- .../packages/sync/src/modules/class-meta.php | 6 +- .../packages/videopress/.phan/baseline.php | 3 - .../changelog/fix-phan-PhanParamTooMany | 4 + .../src/class-uploader-rest-endpoints.php | 4 +- .../src/tus/class-transient-store.php | 2 +- projects/packages/waf/.phan/baseline.php | 2 - .../waf/changelog/fix-phan-PhanParamTooMany | 4 + .../integration/test-waf-compatibility.php | 4 +- projects/plugins/boost/.phan/baseline.php | 4 +- .../boost/app/rest-api/permissions/Nonce.php | 2 +- .../boost/changelog/fix-phan-PhanParamTooMany | 4 + .../lib/class-sync-jetpack-module-status.php | 8 +- projects/plugins/crm/.phan/baseline.php | 17 ++-- .../crm/admin/settings/companies.page.php | 2 +- .../crm/changelog/fix-phan-PhanParamTooMany | 4 + .../plugins/crm/includes/ZeroBSCRM.AJAX.php | 4 +- .../includes/ZeroBSCRM.DAL3.Obj.Contacts.php | 8 +- .../crm/includes/ZeroBSCRM.GeneralFuncs.php | 22 ++--- .../includes/ZeroBSCRM.MetaBoxes3.Tasks.php | 2 +- .../woo-sync/includes/class-woo-sync.php | 2 +- .../class-automation-workflow-test.php | 2 +- .../class-event-manager-test.php | 8 +- .../plugins/debug-helper/.phan/baseline.php | 5 +- .../changelog/fix-phan-PhanParamTooMany | 4 + .../modules/class-scan-helper.php | 2 +- projects/plugins/inspect/.phan/baseline.php | 4 - .../app/REST_API/Permissions/Nonce.php | 4 +- .../changelog/fix-phan-PhanParamTooMany | 4 + .../packages/Async_Option/Endpoint.php | 4 +- .../packages/Async_Option/Storage/Storage.php | 2 +- projects/plugins/jetpack/.phan/baseline.php | 48 +++++------ .../3rd-party/class.jetpack-amp-support.php | 2 +- .../plugins/jetpack/3rd-party/woocommerce.php | 2 +- .../class-jetpack-redux-state-helper.php | 4 +- .../changelog/fix-phan-PhanParamTooMany | 4 + .../jetpack/class.frame-nonce-preview.php | 2 +- .../plugins/jetpack/class.jetpack-cli.php | 2 +- ....wpcom-json-api-site-settings-endpoint.php | 2 + ...ss.wpcom-json-api-update-post-endpoint.php | 2 +- ...com-json-api-update-post-v1-1-endpoint.php | 2 +- ...com-json-api-update-post-v1-2-endpoint.php | 2 +- .../modules/infinite-scroll/infinity.php | 2 +- .../modules/markdown/easy-markdown.php | 8 +- .../theme-tools/compat/twentysixteen.php | 2 +- .../theme-tools/compat/twentytwenty.php | 2 +- .../jetpack/modules/widgets/gallery.php | 3 +- .../test_class.rest-api-authentication.php | 4 +- .../lib/test_class.rest-api-endpoints.php | 4 +- .../test-class.post-by-email-api.php | 2 +- .../shortcodes/test-class.gravatar.php | 6 +- .../shortcodes/test-class.mixcloud.php | 6 +- .../sitemaps/test-class.sitemap-buffer.php | 2 +- ...-wp-test-jetpack-sync-queue-base-tests.php | 2 +- ...st_class.jetpack-sync-full-immediately.php | 2 +- .../php/sync/test_class.jetpack-sync-full.php | 4 +- .../php/sync/test_class.jetpack-sync-meta.php | 6 +- .../test_class.jetpack-sync-modules-stats.php | 4 +- .../sync/test_class.jetpack-sync-queue.php | 2 +- projects/plugins/protect/.phan/baseline.php | 2 - .../changelog/fix-phan-PhanParamTooMany | 4 + .../protect/src/class-rest-controller.php | 4 +- .../plugins/vaultpress/.phan/baseline.php | 3 +- .../changelog/fix-phan-PhanParamTooMany | 4 + .../vaultpress/class.vaultpress-hotfixes.php | 2 +- 112 files changed, 306 insertions(+), 258 deletions(-) create mode 100644 projects/packages/boost-core/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/connection/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/forms/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/image-cdn/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/masterbar/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/my-jetpack/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/protect-status/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/publicize/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/schema/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/stats-admin/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/stats/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/status/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/sync/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/videopress/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/packages/waf/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/plugins/boost/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/plugins/crm/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/plugins/debug-helper/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/plugins/inspect/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/plugins/jetpack/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/plugins/protect/changelog/fix-phan-PhanParamTooMany create mode 100644 projects/plugins/vaultpress/changelog/fix-phan-PhanParamTooMany diff --git a/projects/packages/boost-core/.phan/baseline.php b/projects/packages/boost-core/.phan/baseline.php index 65423713e6dde..f0979d9893c75 100644 --- a/projects/packages/boost-core/.phan/baseline.php +++ b/projects/packages/boost-core/.phan/baseline.php @@ -10,12 +10,10 @@ return [ // # Issue statistics: // PhanAbstractStaticMethodCallInStatic : 3 occurrences - // PhanParamTooMany : 2 occurrences // PhanTypeMismatchArgumentInternal : 2 occurrences // Currently, file_suppressions and directory_suppressions are the only supported suppressions 'file_suppressions' => [ - 'src/lib/class-boost-api.php' => ['PhanParamTooMany'], 'src/lib/class-cacheable.php' => ['PhanAbstractStaticMethodCallInStatic'], 'src/lib/class-utils.php' => ['PhanTypeMismatchArgumentInternal'], ], diff --git a/projects/packages/boost-core/changelog/fix-phan-PhanParamTooMany b/projects/packages/boost-core/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/boost-core/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/boost-core/src/lib/class-boost-api.php b/projects/packages/boost-core/src/lib/class-boost-api.php index 6fbc4930c944c..8a451b7b2da23 100644 --- a/projects/packages/boost-core/src/lib/class-boost-api.php +++ b/projects/packages/boost-core/src/lib/class-boost-api.php @@ -55,6 +55,7 @@ private static function get_api_client() { * @return array|\WP_Error */ public static function get( $path, $query = array(), $args = null ) { + // @phan-suppress-next-line PhanParamTooMany -- By default this is WPCOM_Boost_API_Client, which accepts an extra param. return self::get_api_client()->get( $path, $query, self::merge_args( $args ) ); } @@ -67,6 +68,7 @@ public static function get( $path, $query = array(), $args = null ) { * @return mixed */ public static function post( $path, $payload = array(), $args = null ) { + // @phan-suppress-next-line PhanParamTooMany -- By default this is WPCOM_Boost_API_Client, which accepts an extra param. return self::get_api_client()->post( $path, $payload, self::merge_args( $args ) ); } diff --git a/projects/packages/connection/.phan/baseline.php b/projects/packages/connection/.phan/baseline.php index fd61210a7bcf7..afc07f5c28eb3 100644 --- a/projects/packages/connection/.phan/baseline.php +++ b/projects/packages/connection/.phan/baseline.php @@ -9,13 +9,12 @@ */ return [ // # Issue statistics: - // PhanParamTooMany : 40+ occurrences // PhanTypeMismatchArgument : 40+ occurrences // PhanPluginDuplicateConditionalNullCoalescing : 15+ occurrences // PhanTypeMismatchReturn : 15+ occurrences - // PhanTypeMismatchArgumentProbablyReal : 9 occurrences // PhanTypeMismatchPropertyProbablyReal : 9 occurrences // PhanNoopNew : 8 occurrences + // PhanTypeMismatchArgumentProbablyReal : 8 occurrences // PhanTypeMismatchReturnProbablyReal : 8 occurrences // PhanRedundantCondition : 6 occurrences // PhanTypeArraySuspiciousNullable : 5 occurrences @@ -42,7 +41,7 @@ 'file_suppressions' => [ 'legacy/class-jetpack-options.php' => ['PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal'], 'legacy/class-jetpack-signature.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgumentInternal'], - 'legacy/class-jetpack-tracks-client.php' => ['PhanNonClassMethodCall', 'PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgument', 'PhanTypeMismatchPropertyProbablyReal'], + 'legacy/class-jetpack-tracks-client.php' => ['PhanNonClassMethodCall', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgument', 'PhanTypeMismatchPropertyProbablyReal'], 'legacy/class-jetpack-xmlrpc-server.php' => ['PhanAccessMethodInternal', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn'], 'src/class-error-handler.php' => ['PhanTypeMismatchReturnProbablyReal'], 'src/class-heartbeat.php' => ['PhanTypeMismatchPropertyDefault'], @@ -51,7 +50,7 @@ 'src/class-partner-coupon.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'src/class-partner.php' => ['PhanTypeMismatchPropertyProbablyReal'], 'src/class-rest-authentication.php' => ['PhanTypeMismatchPropertyDefault', 'PhanTypeMismatchPropertyProbablyReal'], - 'src/class-rest-connector.php' => ['PhanParamTooMany', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturnProbablyReal'], + 'src/class-rest-connector.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchReturnProbablyReal'], 'src/class-secrets.php' => ['PhanNonClassMethodCall', 'PhanTypeMismatchArgument'], 'src/class-server-sandbox.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgument'], 'src/class-tokens.php' => ['PhanImpossibleTypeComparison', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], @@ -61,9 +60,8 @@ 'src/webhooks/class-authorize-redirect.php' => ['PhanUndeclaredClassMethod'], 'tests/php/test-class-nonce-handler.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanTypeMismatchArgument'], 'tests/php/test-rest-endpoints.php' => ['PhanNoopNew', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], - 'tests/php/test_Error_Handler.php' => ['PhanParamTooMany', 'PhanTypeMismatchArgument'], - 'tests/php/test_Manager_integration.php' => ['PhanParamTooMany'], - 'tests/php/test_Manager_unit.php' => ['PhanDeprecatedFunction', 'PhanParamTooMany', 'PhanTypeArraySuspiciousNullable', 'PhanTypeObjectUnsetDeclaredProperty'], + 'tests/php/test_Error_Handler.php' => ['PhanTypeMismatchArgument'], + 'tests/php/test_Manager_unit.php' => ['PhanDeprecatedFunction', 'PhanTypeArraySuspiciousNullable', 'PhanTypeObjectUnsetDeclaredProperty'], 'tests/php/test_Rest_Authentication.php' => ['PhanTypeMismatchArgument'], 'tests/php/test_Server_Sandbox.php' => ['PhanTypeArraySuspiciousNullable'], 'tests/php/test_Signature.php' => ['PhanTypeMismatchArgumentProbablyReal'], diff --git a/projects/packages/connection/changelog/fix-phan-PhanParamTooMany b/projects/packages/connection/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/connection/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/connection/legacy/class-jetpack-tracks-client.php b/projects/packages/connection/legacy/class-jetpack-tracks-client.php index 4161c4138f5b4..ab6a740f2f749 100644 --- a/projects/packages/connection/legacy/class-jetpack-tracks-client.php +++ b/projects/packages/connection/legacy/class-jetpack-tracks-client.php @@ -80,7 +80,7 @@ public static function record_event( $event ) { return $event; } - $pixel = $event->build_pixel_url( $event ); + $pixel = $event->build_pixel_url(); if ( ! $pixel ) { return new WP_Error( 'invalid_pixel', 'cannot generate tracks pixel for given input', 400 ); diff --git a/projects/packages/connection/src/class-rest-connector.php b/projects/packages/connection/src/class-rest-connector.php index 475e320380953..6a8134b47abb9 100644 --- a/projects/packages/connection/src/class-rest-connector.php +++ b/projects/packages/connection/src/class-rest-connector.php @@ -623,7 +623,7 @@ public static function get_user_connection_data( $rest_response = true ) { 'id' => $current_user->ID, 'blogId' => $blog_id, 'wpcomUser' => $wpcom_user_data, - 'gravatar' => get_avatar_url( $current_user->ID, 64, 'mm', '', array( 'force_display' => true ) ), + 'gravatar' => get_avatar_url( $current_user->ID ), 'permissions' => array( 'connect' => current_user_can( 'jetpack_connect' ), 'connect_user' => current_user_can( 'jetpack_connect_user' ), diff --git a/projects/packages/connection/tests/php/test_Error_Handler.php b/projects/packages/connection/tests/php/test_Error_Handler.php index 93180385dcadb..7c549a0ddae14 100644 --- a/projects/packages/connection/tests/php/test_Error_Handler.php +++ b/projects/packages/connection/tests/php/test_Error_Handler.php @@ -72,20 +72,20 @@ public function test_store_error() { $this->assertCount( 1, $stored_errors ); - $this->arrayHasKey( 'invalid_token', $stored_errors ); + $this->assertArrayHasKey( 'invalid_token', $stored_errors ); $this->assertCount( 1, $stored_errors['invalid_token'] ); - $this->arrayHasKey( '1', $stored_errors['invalid_token'] ); + $this->assertArrayHasKey( '1', $stored_errors['invalid_token'] ); - $this->arrayHasKey( 'nonce', $stored_errors['invalid_token']['1'] ); - $this->arrayHasKey( 'error_code', $stored_errors['invalid_token']['1'] ); - $this->arrayHasKey( 'user_id', $stored_errors['invalid_token']['1'] ); - $this->arrayHasKey( 'error_message', $stored_errors['invalid_token']['1'] ); - $this->arrayHasKey( 'error_data', $stored_errors['invalid_token']['1'] ); - $this->arrayHasKey( 'timestamp', $stored_errors['invalid_token']['1'] ); - $this->arrayHasKey( 'nonce', $stored_errors['invalid_token']['1'] ); - $this->arrayHasKey( 'error_type', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'nonce', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'error_code', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'user_id', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'error_message', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'error_data', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'timestamp', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'nonce', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'error_type', $stored_errors['invalid_token']['1'] ); $this->assertEquals( 'xmlrpc', $stored_errors['invalid_token']['1']['error_type'] ); } @@ -108,29 +108,29 @@ public function test_store_multiple_error_codes() { $this->assertCount( 3, $stored_errors ); - $this->arrayHasKey( 'invalid_token', $stored_errors ); + $this->assertArrayHasKey( 'invalid_token', $stored_errors ); $this->assertCount( 1, $stored_errors['invalid_token'] ); $this->assertCount( 1, $stored_errors['unknown_user'] ); $this->assertCount( 1, $stored_errors['invalid_connection_owner'] ); - $this->arrayHasKey( '1', $stored_errors['unknown_user'] ); + $this->assertArrayHasKey( '1', $stored_errors['unknown_user'] ); - $this->arrayHasKey( 'error_type', $stored_errors['invalid_token']['1'] ); + $this->assertArrayHasKey( 'error_type', $stored_errors['invalid_token']['1'] ); $this->assertEquals( 'xmlrpc', $stored_errors['invalid_token']['1']['error_type'] ); - $this->arrayHasKey( 'nonce', $stored_errors['unknown_user']['1'] ); - $this->arrayHasKey( 'error_code', $stored_errors['unknown_user']['1'] ); - $this->arrayHasKey( 'user_id', $stored_errors['unknown_user']['1'] ); - $this->arrayHasKey( 'error_message', $stored_errors['unknown_user']['1'] ); - $this->arrayHasKey( 'error_data', $stored_errors['unknown_user']['1'] ); - $this->arrayHasKey( 'timestamp', $stored_errors['unknown_user']['1'] ); - $this->arrayHasKey( 'nonce', $stored_errors['unknown_user']['1'] ); - $this->arrayHasKey( 'error_type', $stored_errors['unknown_user']['1'] ); + $this->assertArrayHasKey( 'nonce', $stored_errors['unknown_user']['1'] ); + $this->assertArrayHasKey( 'error_code', $stored_errors['unknown_user']['1'] ); + $this->assertArrayHasKey( 'user_id', $stored_errors['unknown_user']['1'] ); + $this->assertArrayHasKey( 'error_message', $stored_errors['unknown_user']['1'] ); + $this->assertArrayHasKey( 'error_data', $stored_errors['unknown_user']['1'] ); + $this->assertArrayHasKey( 'timestamp', $stored_errors['unknown_user']['1'] ); + $this->assertArrayHasKey( 'nonce', $stored_errors['unknown_user']['1'] ); + $this->assertArrayHasKey( 'error_type', $stored_errors['unknown_user']['1'] ); $this->assertEquals( 'rest', $stored_errors['unknown_user']['1']['error_type'] ); - $this->arrayHasKey( 'invalid', $stored_errors['invalid_connection_owner'] ); - $this->arrayHasKey( 'error_type', $stored_errors['invalid_connection_owner']['invalid'] ); + $this->assertArrayHasKey( 'invalid', $stored_errors['invalid_connection_owner'] ); + $this->assertArrayHasKey( 'error_type', $stored_errors['invalid_connection_owner']['invalid'] ); $this->assertEquals( 'connection', $stored_errors['invalid_connection_owner']['invalid']['error_type'] ); } @@ -153,21 +153,21 @@ public function test_store_multiple_error_codes_multiple_users() { $this->assertCount( 2, $stored_errors ); - $this->arrayHasKey( 'invalid_token', $stored_errors ); + $this->assertArrayHasKey( 'invalid_token', $stored_errors ); $this->assertCount( 1, $stored_errors['invalid_token'] ); $this->assertCount( 2, $stored_errors['unknown_user'] ); - $this->arrayHasKey( '2', $stored_errors['unknown_user'] ); + $this->assertArrayHasKey( '2', $stored_errors['unknown_user'] ); - $this->arrayHasKey( 'nonce', $stored_errors['unknown_user']['2'] ); - $this->arrayHasKey( 'error_code', $stored_errors['unknown_user']['2'] ); - $this->arrayHasKey( 'user_id', $stored_errors['unknown_user']['2'] ); - $this->arrayHasKey( 'error_message', $stored_errors['unknown_user']['2'] ); - $this->arrayHasKey( 'error_data', $stored_errors['unknown_user']['2'] ); - $this->arrayHasKey( 'timestamp', $stored_errors['unknown_user']['2'] ); - $this->arrayHasKey( 'nonce', $stored_errors['unknown_user']['2'] ); - $this->arrayHasKey( 'error_type', $stored_errors['unknown_user']['2'] ); + $this->assertArrayHasKey( 'nonce', $stored_errors['unknown_user']['2'] ); + $this->assertArrayHasKey( 'error_code', $stored_errors['unknown_user']['2'] ); + $this->assertArrayHasKey( 'user_id', $stored_errors['unknown_user']['2'] ); + $this->assertArrayHasKey( 'error_message', $stored_errors['unknown_user']['2'] ); + $this->assertArrayHasKey( 'error_data', $stored_errors['unknown_user']['2'] ); + $this->assertArrayHasKey( 'timestamp', $stored_errors['unknown_user']['2'] ); + $this->assertArrayHasKey( 'nonce', $stored_errors['unknown_user']['2'] ); + $this->assertArrayHasKey( 'error_type', $stored_errors['unknown_user']['2'] ); } /** @@ -363,18 +363,18 @@ public function test_check_api_response_for_errors() { $verified_errors = $this->error_handler->get_verified_errors(); $this->assertCount( 1, $stored_errors ); - $this->arrayHasKey( 'unknown_token', $stored_errors ); + $this->assertArrayHasKey( 'unknown_token', $stored_errors ); $this->assertCount( 1, $stored_errors['unknown_token'] ); - $this->arrayHasKey( '1', $stored_errors['unknown_token'] ); - $this->arrayHasKey( 'error_code', $stored_errors['unknown_token']['0'] ); - $this->arrayHasKey( 'error_type', $stored_errors['unknown_token']['0'] ); + $this->assertArrayHasKey( 0, $stored_errors['unknown_token'] ); + $this->assertArrayHasKey( 'error_code', $stored_errors['unknown_token']['0'] ); + $this->assertArrayHasKey( 'error_type', $stored_errors['unknown_token']['0'] ); $this->assertEquals( 'rest', $stored_errors['unknown_token']['0']['error_type'] ); $this->assertCount( 1, $verified_errors ); - $this->arrayHasKey( 'unknown_token', $verified_errors ); + $this->assertArrayHasKey( 'unknown_token', $verified_errors ); $this->assertCount( 1, $verified_errors['unknown_token'] ); - $this->arrayHasKey( '1', $verified_errors['unknown_token'] ); - $this->arrayHasKey( 'error_code', $verified_errors['unknown_token']['0'] ); + $this->assertArrayHasKey( 0, $verified_errors['unknown_token'] ); + $this->assertArrayHasKey( 'error_code', $verified_errors['unknown_token']['0'] ); $this->assertEquals( 'rest', $verified_errors['unknown_token']['0']['error_type'] ); } diff --git a/projects/packages/connection/tests/php/test_Manager_integration.php b/projects/packages/connection/tests/php/test_Manager_integration.php index dd16afad44312..a6721fab04a09 100644 --- a/projects/packages/connection/tests/php/test_Manager_integration.php +++ b/projects/packages/connection/tests/php/test_Manager_integration.php @@ -633,8 +633,7 @@ public function test_disconnect_user( $remote_response, $expected_user_token_cou $this, $callback, ), - 10, - 3 + 10 ); $this->assertCount( $expected_user_token_count, $this->manager->get_connected_users() ); diff --git a/projects/packages/connection/tests/php/test_Manager_unit.php b/projects/packages/connection/tests/php/test_Manager_unit.php index ed0e875be5a37..143937b16031e 100644 --- a/projects/packages/connection/tests/php/test_Manager_unit.php +++ b/projects/packages/connection/tests/php/test_Manager_unit.php @@ -171,7 +171,7 @@ public function test_api_url_defaults() { $this->manager->api_url( 'another_thing/' ) ); - remove_filter( 'jetpack_constant_default_value', array( $this, 'filter_api_constant' ), 10, 2 ); + remove_filter( 'jetpack_constant_default_value', array( $this, 'filter_api_constant' ), 10 ); } /** diff --git a/projects/packages/forms/.phan/baseline.php b/projects/packages/forms/.phan/baseline.php index 514b43e8b8b76..3a68f46ad7c2c 100644 --- a/projects/packages/forms/.phan/baseline.php +++ b/projects/packages/forms/.phan/baseline.php @@ -11,7 +11,7 @@ // # Issue statistics: // PhanTypeMismatchArgument : 20+ occurrences // PhanPluginDuplicateConditionalNullCoalescing : 10+ occurrences - // PhanTypeMismatchReturnProbablyReal : 9 occurrences + // PhanTypeMismatchReturnProbablyReal : 10+ occurrences // PhanTypeMismatchArgumentInternal : 6 occurrences // PhanTypeMismatchArgumentProbablyReal : 6 occurrences // PhanRedundantCondition : 4 occurrences @@ -20,7 +20,6 @@ // PhanTypeConversionFromArray : 2 occurrences // PhanTypeMismatchArgumentNullableInternal : 2 occurrences // PhanTypeMismatchReturn : 2 occurrences - // PhanParamTooMany : 1 occurrence // PhanPluginDuplicateAdjacentStatement : 1 occurrence // PhanPluginMixedKeyNoKey : 1 occurrence // PhanPossiblyNullTypeMismatchProperty : 1 occurrence @@ -33,7 +32,7 @@ 'file_suppressions' => [ 'src/class-wpcom-rest-api-v2-endpoint-forms.php' => ['PhanTypePossiblyInvalidDimOffset'], 'src/contact-form/class-admin.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturn'], - 'src/contact-form/class-contact-form-field.php' => ['PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPossiblyNullTypeMismatchProperty', 'PhanTypeConversionFromArray', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredProperty'], + 'src/contact-form/class-contact-form-field.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanPossiblyNullTypeMismatchProperty', 'PhanTypeConversionFromArray', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredProperty'], 'src/contact-form/class-contact-form-plugin.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginRedundantAssignment', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturnProbablyReal'], 'src/contact-form/class-contact-form-shortcode.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnProbablyReal'], 'src/contact-form/class-contact-form.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginRedundantAssignment', 'PhanRedundantCondition', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal'], diff --git a/projects/packages/forms/changelog/fix-phan-PhanParamTooMany b/projects/packages/forms/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/forms/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/forms/src/contact-form/class-contact-form-field.php b/projects/packages/forms/src/contact-form/class-contact-form-field.php index 7d26f68322ff4..55de33cce9092 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-field.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-field.php @@ -1069,7 +1069,7 @@ public function render_field( $type, $id, $label, $value, $class, $placeholder, $field .= $this->render_textarea_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder ); break; case 'radio': - $field .= $this->render_radio_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder ); + $field .= $this->render_radio_field( $id, $label, $value, $field_class, $required, $required_field_text ); break; case 'checkbox': $field .= $this->render_checkbox_field( $id, $label, $value, $field_class, $required, $required_field_text ); diff --git a/projects/packages/image-cdn/.phan/baseline.php b/projects/packages/image-cdn/.phan/baseline.php index 2c2feb19b8c48..bbe603a59f92b 100644 --- a/projects/packages/image-cdn/.phan/baseline.php +++ b/projects/packages/image-cdn/.phan/baseline.php @@ -11,9 +11,8 @@ // # Issue statistics: // PhanTypePossiblyInvalidDimOffset : 10+ occurrences // PhanPluginSimplifyExpressionBool : 6 occurrences - // PhanParamTooMany : 5 occurrences // PhanPluginDuplicateConditionalNullCoalescing : 4 occurrences - // PhanPossiblyUndeclaredVariable : 3 occurrences + // PhanPossiblyUndeclaredVariable : 2 occurrences // PhanTypeMismatchArgumentProbablyReal : 2 occurrences // PhanTypeMismatchPropertyProbablyReal : 2 occurrences // PhanTypeMismatchReturn : 2 occurrences @@ -32,8 +31,8 @@ 'src/class-image-cdn-core.php' => ['PhanTypeMismatchReturn'], 'src/class-image-cdn-image-sizes.php' => ['PhanPluginSimplifyExpressionBool'], 'src/class-image-cdn.php' => ['PhanNonClassMethodCall', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredVariable', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchPropertyProbablyReal', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset'], - 'src/compatibility/photon.php' => ['PhanParamTooMany', 'PhanTypeMismatchArgumentNullableInternal'], - 'tests/php/test_class.image_cdn.php' => ['PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchPropertyProbablyReal', 'PhanUndeclaredMethod', 'PhanUndeclaredStaticMethod'], + 'src/compatibility/photon.php' => ['PhanTypeMismatchArgumentNullableInternal'], + 'tests/php/test_class.image_cdn.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchPropertyProbablyReal', 'PhanUndeclaredMethod', 'PhanUndeclaredStaticMethod'], 'tests/php/test_class.image_cdn_core.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeObjectUnsetDeclaredProperty'], ], // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. diff --git a/projects/packages/image-cdn/changelog/fix-phan-PhanParamTooMany b/projects/packages/image-cdn/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/image-cdn/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/image-cdn/src/compatibility/photon.php b/projects/packages/image-cdn/src/compatibility/photon.php index 3dff7ea4a5951..79edb1f6cda68 100644 --- a/projects/packages/image-cdn/src/compatibility/photon.php +++ b/projects/packages/image-cdn/src/compatibility/photon.php @@ -24,11 +24,11 @@ function jetpack_image_cdn_photon_compat() { * Image_CDN_Core class. And the filters are now handled by the Image_CDN_Core class itself. */ // @phan-suppress-next-line PhanUndeclaredFunctionInCallable -- Just removing this deprecated filter function. No point in stubbing it. - remove_filter( 'jetpack_photon_url', 'jetpack_photon_url', 10, 3 ); + remove_filter( 'jetpack_photon_url', 'jetpack_photon_url', 10 ); // @phan-suppress-next-line PhanUndeclaredFunctionInCallable -- Just removing this deprecated filter function. No point in stubbing it. - remove_filter( 'jetpack_photon_pre_args', 'jetpack_photon_parse_wpcom_query_args', 10, 2 ); + remove_filter( 'jetpack_photon_pre_args', 'jetpack_photon_parse_wpcom_query_args', 10 ); // @phan-suppress-next-line PhanUndeclaredFunctionInCallable -- Just removing this deprecated filter function. No point in stubbing it. - remove_filter( 'jetpack_photon_skip_for_url', 'jetpack_photon_banned_domains', 9, 2 ); + remove_filter( 'jetpack_photon_skip_for_url', 'jetpack_photon_banned_domains', 9 ); // @phan-suppress-next-line PhanUndeclaredFunctionInCallable -- Just removing this deprecated filter function. No point in stubbing it. remove_filter( 'widget_text', 'jetpack_photon_support_text_widgets' ); diff --git a/projects/packages/image-cdn/tests/php/test_class.image_cdn.php b/projects/packages/image-cdn/tests/php/test_class.image_cdn.php index 21f0adc39886b..d2415c2990af8 100644 --- a/projects/packages/image-cdn/tests/php/test_class.image_cdn.php +++ b/projects/packages/image-cdn/tests/php/test_class.image_cdn.php @@ -1085,7 +1085,7 @@ public function test_image_cdn_filter_the_content_width_height_attributes_when_i add_filter( 'jetpack_photon_post_image_args', $filter_callback, 10, 2 ); $filtered_content = Image_CDN::filter_the_content( $sample_html ); - remove_filter( 'jetpack_photon_post_image_args', $filter_callback, 10, 2 ); + remove_filter( 'jetpack_photon_post_image_args', $filter_callback, 10 ); $first_line = strtok( $filtered_content, "\n" ); // Should contain an image tag on the first line. $attributes = wp_kses_hair( $first_line, wp_allowed_protocols() ); @@ -1515,7 +1515,7 @@ public function test_image_cdn_in_rest_response_external_media() { add_filter( 'pre_http_request', array( $this, 'pre_http_request_mocked_download_url' ), 10, 2 ); $response = rest_get_server()->dispatch( $request ); - remove_filter( 'pre_http_request', array( $this, 'pre_http_request_mocked_download_url' ), 10, 2 ); + remove_filter( 'pre_http_request', array( $this, 'pre_http_request_mocked_download_url' ), 10 ); $this->assertEquals( 200, $response->get_status() ); diff --git a/projects/packages/jetpack-mu-wpcom/.phan/baseline.php b/projects/packages/jetpack-mu-wpcom/.phan/baseline.php index 6865fcfd0af51..fcdd7c5cb23fe 100644 --- a/projects/packages/jetpack-mu-wpcom/.phan/baseline.php +++ b/projects/packages/jetpack-mu-wpcom/.phan/baseline.php @@ -19,7 +19,6 @@ // PhanTypeMismatchReturnProbablyReal : 4 occurrences // PhanTypePossiblyInvalidDimOffset : 3 occurrences // PhanEmptyFQSENInCallable : 2 occurrences - // PhanParamTooMany : 2 occurrences // PhanTypeArraySuspicious : 2 occurrences // PhanTypeArraySuspiciousNullable : 2 occurrences // PhanTypeMismatchDefault : 2 occurrences @@ -53,7 +52,7 @@ 'src/features/launchpad/launchpad.php' => ['PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], 'src/features/marketplace-products-updater/class-marketplace-products-updater.php' => ['PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturn'], 'src/features/media/heif-support.php' => ['PhanPluginSimplifyExpressionBool'], - 'src/features/verbum-comments/class-verbum-comments.php' => ['PhanImpossibleTypeComparison', 'PhanNoopNew', 'PhanParamTooMany', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredFunction'], + 'src/features/verbum-comments/class-verbum-comments.php' => ['PhanImpossibleTypeComparison', 'PhanNoopNew', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredFunction'], 'src/features/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-launchpad.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'src/features/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-site-migration-migrate-guru-key.php' => ['PhanUndeclaredClassMethod'], 'src/features/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-site-migration-wpcom-migration-key.php' => ['PhanUndeclaredClassMethod'], diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-phan-PhanParamTooMany b/projects/packages/jetpack-mu-wpcom/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php index 03f0bd3419522..1ed4fec4f9b5d 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php @@ -256,7 +256,7 @@ public function enqueue_assets() { 'allowedBlocks' => \Verbum_Block_Utils::get_allowed_blocks(), 'embedNonce' => wp_create_nonce( 'embed_nonce' ), 'verbumBundleUrl' => plugins_url( 'dist/index.js', __FILE__ ), - 'isRTL' => is_rtl( $locale ), + 'isRTL' => is_rtl(), 'vbeCacheBuster' => $vbe_cache_buster, 'iframeUniqueId' => $iframe_unique_id, ) diff --git a/projects/packages/masterbar/.phan/baseline.php b/projects/packages/masterbar/.phan/baseline.php index a5d99171df831..ecce106ea85db 100644 --- a/projects/packages/masterbar/.phan/baseline.php +++ b/projects/packages/masterbar/.phan/baseline.php @@ -9,7 +9,7 @@ */ return [ // # Issue statistics: - // PhanNoopNew : 5 occurrences + // PhanNoopNew : 4 occurrences // Currently, file_suppressions and directory_suppressions are the only supported suppressions 'file_suppressions' => [ diff --git a/projects/packages/masterbar/changelog/fix-phan-PhanParamTooMany b/projects/packages/masterbar/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..c1192e2ed90c3 --- /dev/null +++ b/projects/packages/masterbar/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Phan: Update baselines. diff --git a/projects/packages/my-jetpack/.phan/baseline.php b/projects/packages/my-jetpack/.phan/baseline.php index 89d682178484a..cc1f6bf874d12 100644 --- a/projects/packages/my-jetpack/.phan/baseline.php +++ b/projects/packages/my-jetpack/.phan/baseline.php @@ -11,7 +11,6 @@ // # Issue statistics: // PhanTypeMismatchArgumentNullable : 60+ occurrences // PhanTypeMismatchPropertyDefault : 15+ occurrences - // PhanParamTooMany : 9 occurrences // PhanAbstractStaticMethodCallInStatic : 8 occurrences // PhanTypeMismatchReturnProbablyReal : 8 occurrences // PhanNoopNew : 7 occurrences @@ -33,9 +32,8 @@ 'src/class-initializer.php' => ['PhanImpossibleCondition', 'PhanNoopNew', 'PhanRedundantCondition', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanUndeclaredClassMethod'], 'src/class-jetpack-manage.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'src/class-products.php' => ['PhanNonClassMethodCall'], - 'src/class-rest-products.php' => ['PhanParamTooMany', 'PhanPluginMixedKeyNoKey', 'PhanTypeMismatchReturn'], - 'src/class-rest-purchases.php' => ['PhanParamTooMany', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], - 'src/class-rest-zendesk-chat.php' => ['PhanParamTooMany'], + 'src/class-rest-products.php' => ['PhanPluginMixedKeyNoKey', 'PhanTypeMismatchReturn'], + 'src/class-rest-purchases.php' => ['PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], 'src/class-wpcom-products.php' => ['PhanTypeMismatchReturnProbablyReal'], 'src/products/class-anti-spam.php' => ['PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchPropertyDefault'], 'src/products/class-backup.php' => ['PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchPropertyDefault', 'PhanTypeSuspiciousNonTraversableForeach'], diff --git a/projects/packages/my-jetpack/changelog/fix-phan-PhanParamTooMany b/projects/packages/my-jetpack/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/my-jetpack/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/my-jetpack/src/class-rest-products.php b/projects/packages/my-jetpack/src/class-rest-products.php index 166bd21ab03e5..e6dd8f2f2e8c5 100644 --- a/projects/packages/my-jetpack/src/class-rest-products.php +++ b/projects/packages/my-jetpack/src/class-rest-products.php @@ -204,7 +204,7 @@ public static function get_products( $request ) { $product_slugs = ! empty( $slugs ) ? array_map( 'trim', explode( ',', $slugs ) ) : array(); $response = Products::get_products( $product_slugs ); - return rest_ensure_response( $response, 200 ); + return rest_ensure_response( $response ); } /** @@ -217,7 +217,7 @@ public static function get_products_by_ownership() { 'unownedProducts' => Products::get_products_by_ownership( 'unowned' ), 'ownedProducts' => Products::get_products_by_ownership( 'owned' ), ); - return rest_ensure_response( $response, 200 ); + return rest_ensure_response( $response ); } /** @@ -266,7 +266,7 @@ public static function activate_products( $request ) { } set_transient( 'my_jetpack_product_activated', implode( ',', $products_array ), 10 ); - return rest_ensure_response( Products::get_products( $products_array ), 200 ); + return rest_ensure_response( Products::get_products( $products_array ) ); } /** @@ -299,7 +299,7 @@ public static function deactivate_products( $request ) { } } - return rest_ensure_response( Products::get_products( $products_array ), 200 ); + return rest_ensure_response( Products::get_products( $products_array ) ); } /** @@ -332,6 +332,6 @@ public static function install_plugins( $request ) { } } - return rest_ensure_response( Products::get_products( $products_array ), 200 ); + return rest_ensure_response( Products::get_products( $products_array ) ); } } diff --git a/projects/packages/my-jetpack/src/class-rest-purchases.php b/projects/packages/my-jetpack/src/class-rest-purchases.php index ead4493403c4e..023824a2476f3 100644 --- a/projects/packages/my-jetpack/src/class-rest-purchases.php +++ b/projects/packages/my-jetpack/src/class-rest-purchases.php @@ -72,6 +72,6 @@ public static function get_site_current_purchases() { return new WP_Error( 'site_data_fetch_failed', 'Site data fetch failed', array( 'status' => $response_code ? $response_code : 400 ) ); } - return rest_ensure_response( $body, 200 ); + return rest_ensure_response( $body ); } } diff --git a/projects/packages/my-jetpack/src/class-rest-zendesk-chat.php b/projects/packages/my-jetpack/src/class-rest-zendesk-chat.php index f852433b44b18..91c58ecee45da 100644 --- a/projects/packages/my-jetpack/src/class-rest-zendesk-chat.php +++ b/projects/packages/my-jetpack/src/class-rest-zendesk-chat.php @@ -76,7 +76,7 @@ public static function chat_authentication_permissions_callback() { public static function get_chat_authentication() { $authentication = get_transient( self::ZENDESK_AUTH_TOKEN ); if ( $authentication ) { - return rest_ensure_response( $authentication, 200 ); + return rest_ensure_response( $authentication ); } $proxied = function_exists( 'wpcom_is_proxied_request' ) ? wpcom_is_proxied_request() : false; @@ -97,7 +97,7 @@ public static function get_chat_authentication() { } set_transient( self::ZENDESK_AUTH_TOKEN, $body, self::TRANSIENT_EXPIRY ); - return rest_ensure_response( $body, 200 ); + return rest_ensure_response( $body ); } /** @@ -117,6 +117,6 @@ public static function get_chat_availability() { return new WP_Error( 'chat_config_data_fetch_failed', 'Chat config data fetch failed', array( 'status' => $response_code ) ); } - return rest_ensure_response( $body, 200 ); + return rest_ensure_response( $body ); } } diff --git a/projects/packages/protect-status/.phan/baseline.php b/projects/packages/protect-status/.phan/baseline.php index 86d346ec79007..de8bae0b4a4dd 100644 --- a/projects/packages/protect-status/.phan/baseline.php +++ b/projects/packages/protect-status/.phan/baseline.php @@ -11,7 +11,6 @@ // # Issue statistics: // PhanPluginDuplicateConditionalNullCoalescing : 25+ occurrences // PhanTypeMismatchArgument : 3 occurrences - // PhanParamTooMany : 2 occurrences // PhanPluginSimplifyExpressionBool : 1 occurrence // PhanRedundantCondition : 1 occurrence // PhanTypeMismatchReturnProbablyReal : 1 occurrence @@ -20,7 +19,6 @@ 'file_suppressions' => [ 'src/class-plan.php' => ['PhanTypeMismatchReturnProbablyReal'], 'src/class-protect-status.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], - 'src/class-rest-controller.php' => ['PhanParamTooMany'], 'src/class-scan-status.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition'], 'src/class-status.php' => ['PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchArgument'], 'tests/php/test-scan-status.php' => ['PhanTypeMismatchArgument'], diff --git a/projects/packages/protect-status/changelog/fix-phan-PhanParamTooMany b/projects/packages/protect-status/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/protect-status/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/protect-status/src/class-rest-controller.php b/projects/packages/protect-status/src/class-rest-controller.php index 9faa154565a88..77ff6019060e9 100644 --- a/projects/packages/protect-status/src/class-rest-controller.php +++ b/projects/packages/protect-status/src/class-rest-controller.php @@ -80,7 +80,7 @@ public static function register_rest_endpoints() { public static function api_check_plan() { $has_required_plan = Plan::has_required_plan(); - return rest_ensure_response( $has_required_plan, 200 ); + return rest_ensure_response( $has_required_plan ); } /** @@ -92,7 +92,7 @@ public static function api_check_plan() { */ public static function api_get_status( $request ) { $status = Status::get_status( $request['hard_refresh'] ); - return rest_ensure_response( $status, 200 ); + return rest_ensure_response( $status ); } /** diff --git a/projects/packages/publicize/.phan/baseline.php b/projects/packages/publicize/.phan/baseline.php index b819017a9a146..6cb6dc65c76c4 100644 --- a/projects/packages/publicize/.phan/baseline.php +++ b/projects/packages/publicize/.phan/baseline.php @@ -11,6 +11,7 @@ // # Issue statistics: // PhanPluginDuplicateConditionalNullCoalescing : 6 occurrences // PhanTypeMismatchArgument : 6 occurrences + // PhanNoopNew : 3 occurrences // PhanPluginMixedKeyNoKey : 3 occurrences // PhanTypeMismatchArgumentNullable : 3 occurrences // PhanUndeclaredClassMethod : 3 occurrences @@ -19,7 +20,6 @@ // PhanTypeMismatchReturnProbablyReal : 2 occurrences // PhanTypeMissingReturn : 2 occurrences // PhanImpossibleCondition : 1 occurrence - // PhanNoopNew : 1 occurrence // PhanParamSignatureMismatch : 1 occurrence // PhanPluginDuplicateExpressionAssignmentOperation : 1 occurrence // PhanPluginSimplifyExpressionBool : 1 occurrence diff --git a/projects/packages/publicize/changelog/fix-phan-PhanParamTooMany b/projects/packages/publicize/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..c1192e2ed90c3 --- /dev/null +++ b/projects/packages/publicize/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Phan: Update baselines. diff --git a/projects/packages/schema/.phan/baseline.php b/projects/packages/schema/.phan/baseline.php index 512768d303724..29659b9080639 100644 --- a/projects/packages/schema/.phan/baseline.php +++ b/projects/packages/schema/.phan/baseline.php @@ -13,13 +13,11 @@ // PhanParamTooFew : 5 occurrences // PhanTypeMismatchArgumentProbablyReal : 2 occurrences // PhanImpossibleTypeComparison : 1 occurrence - // PhanParamTooMany : 1 occurrence // PhanTypeMismatchArgumentNullable : 1 occurrence // PhanTypeMismatchReturn : 1 occurrence // Currently, file_suppressions and directory_suppressions are the only supported suppressions 'file_suppressions' => [ - 'src/class-schema.php' => ['PhanParamTooMany'], 'src/types/class-type-assoc-array.php' => ['PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchReturn'], 'src/types/class-type-string.php' => ['PhanImpossibleTypeComparison'], 'tests/php/integration/test-integration-fallback-values.php' => ['PhanNonClassMethodCall'], diff --git a/projects/packages/schema/changelog/fix-phan-PhanParamTooMany b/projects/packages/schema/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/schema/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/schema/src/class-schema.php b/projects/packages/schema/src/class-schema.php index 69f8dd258cfcc..2f3efaaa4c543 100644 --- a/projects/packages/schema/src/class-schema.php +++ b/projects/packages/schema/src/class-schema.php @@ -98,7 +98,7 @@ public static function as_number() { } public static function as_float() { - return new Schema_Parser( new Type_Float( true ) ); + return new Schema_Parser( new Type_Float() ); } /** diff --git a/projects/packages/stats-admin/.phan/baseline.php b/projects/packages/stats-admin/.phan/baseline.php index dcd197fe3706f..631837fd24c1c 100644 --- a/projects/packages/stats-admin/.phan/baseline.php +++ b/projects/packages/stats-admin/.phan/baseline.php @@ -9,8 +9,8 @@ */ return [ // # Issue statistics: + // PhanTypeMismatchArgumentProbablyReal : 8 occurrences // PhanTypeMismatchReturn : 8 occurrences - // PhanTypeMismatchArgumentProbablyReal : 7 occurrences // PhanPluginDuplicateConditionalNullCoalescing : 4 occurrences // PhanTypeMismatchReturnProbablyReal : 2 occurrences // PhanTypeMismatchReturnNullable : 1 occurrence diff --git a/projects/packages/stats-admin/changelog/fix-phan-PhanParamTooMany b/projects/packages/stats-admin/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..c1192e2ed90c3 --- /dev/null +++ b/projects/packages/stats-admin/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Phan: Update baselines. diff --git a/projects/packages/stats/.phan/baseline.php b/projects/packages/stats/.phan/baseline.php index 20e29a09c4233..5caf37dcbc75c 100644 --- a/projects/packages/stats/.phan/baseline.php +++ b/projects/packages/stats/.phan/baseline.php @@ -9,7 +9,6 @@ */ return [ // # Issue statistics: - // PhanParamTooMany : 7 occurrences // PhanTypeVoidAssignment : 4 occurrences // PhanPluginDuplicateConditionalNullCoalescing : 2 occurrences // PhanTypeMismatchReturn : 1 occurrence @@ -18,9 +17,9 @@ 'file_suppressions' => [ 'src/class-tracking-pixel.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'src/class-wpcom-stats.php' => ['PhanTypeMismatchReturn'], - 'tests/php/test-main.php' => ['PhanParamTooMany', 'PhanTypeVoidAssignment'], + 'tests/php/test-main.php' => ['PhanTypeVoidAssignment'], 'tests/php/test-options.php' => ['PhanTypeVoidAssignment'], - 'tests/php/test-xmlrpc-provider.php' => ['PhanParamTooMany', 'PhanTypeVoidAssignment'], + 'tests/php/test-xmlrpc-provider.php' => ['PhanTypeVoidAssignment'], ], // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases) diff --git a/projects/packages/stats/changelog/fix-phan-PhanParamTooMany b/projects/packages/stats/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/stats/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/stats/tests/php/test-main.php b/projects/packages/stats/tests/php/test-main.php index b6c479043b03a..9ba04f93e6ad2 100644 --- a/projects/packages/stats/tests/php/test-main.php +++ b/projects/packages/stats/tests/php/test-main.php @@ -131,7 +131,7 @@ public function test_jetpack_is_dnt_enabled() { $_SERVER['HTTP_DNT'] = true; add_filter( 'jetpack_honor_dnt_header_for_stats', array( __CLASS__, 'filter_jetpack_honor_dnt_header_for_stats' ), 10, 2 ); $this->assertTrue( Stats::jetpack_is_dnt_enabled() ); - remove_filter( 'jetpack_honor_dnt_header_for_stats', array( __CLASS__, 'filter_jetpack_honor_dnt_header_for_stats' ), 10, 2 ); + remove_filter( 'jetpack_honor_dnt_header_for_stats', array( __CLASS__, 'filter_jetpack_honor_dnt_header_for_stats' ), 10 ); } /** @@ -149,7 +149,7 @@ public function test_jetpack_is_dnt_enabled_without_filter() { public function test_jetpack_is_dnt_enabled_with_filter_without_header() { add_filter( 'jetpack_honor_dnt_header_for_stats', array( __CLASS__, 'filter_jetpack_honor_dnt_header_for_stats' ), 10, 2 ); $this->assertFalse( Stats::jetpack_is_dnt_enabled() ); - remove_filter( 'jetpack_honor_dnt_header_for_stats', array( __CLASS__, 'filter_jetpack_honor_dnt_header_for_stats' ), 10, 2 ); + remove_filter( 'jetpack_honor_dnt_header_for_stats', array( __CLASS__, 'filter_jetpack_honor_dnt_header_for_stats' ), 10 ); } /** @@ -189,7 +189,7 @@ public function test_should_track_will_return_false_without_active_stats_module( public function test_should_track_will_return_true_with_active_stats_module() { add_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); $should_track = Stats::should_track(); - remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); + remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10 ); $this->assertTrue( $should_track ); } @@ -200,7 +200,7 @@ public function test_template_redirect_adds_wp_footer_hook() { add_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); Stats::template_redirect(); $has_action = has_action( 'wp_footer', array( Tracking_Pixel::class, 'add_amp_pixel' ) ); - remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); + remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10 ); $this->assertSame( 101, $has_action ); } @@ -211,7 +211,7 @@ public function test_template_redirect_adds_web_stories_print_analytics_hook() { add_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); Stats::template_redirect(); $has_action = has_action( 'web_stories_print_analytics', array( Tracking_Pixel::class, 'add_amp_pixel' ) ); - remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); + remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10 ); $this->assertSame( 101, $has_action ); } @@ -222,7 +222,7 @@ public function test_template_redirect_adds_wp_enqueue_scripts_hook() { add_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); Stats::template_redirect(); $has_action = has_action( 'wp_enqueue_scripts', array( Tracking_Pixel::class, 'enqueue_stats_script' ) ); - remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); + remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10 ); $this->assertSame( 101, $has_action ); } diff --git a/projects/packages/stats/tests/php/test-xmlrpc-provider.php b/projects/packages/stats/tests/php/test-xmlrpc-provider.php index 5ae575946e70d..7e4c35482f195 100644 --- a/projects/packages/stats/tests/php/test-xmlrpc-provider.php +++ b/projects/packages/stats/tests/php/test-xmlrpc-provider.php @@ -79,7 +79,7 @@ public function test_xmlrpc_methods_will_not_add_get_blog_without_active_stats_m public function test_xmlrpc_methods_with_active_stats_module() { add_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); $xmlrpc_methods = $this->xmlrpc_instance->xmlrpc_methods( array() ); - remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10, 2 ); + remove_filter( 'jetpack_active_modules', array( __CLASS__, 'filter_jetpack_active_modules_add_stats' ), 10 ); $this->assertArrayHasKey( 'jetpack.getBlog', $xmlrpc_methods ); } diff --git a/projects/packages/status/.phan/baseline.php b/projects/packages/status/.phan/baseline.php index 4d814abb8a776..66282ccc8eb97 100644 --- a/projects/packages/status/.phan/baseline.php +++ b/projects/packages/status/.phan/baseline.php @@ -14,7 +14,6 @@ // PhanPluginDuplicateConditionalNullCoalescing : 2 occurrences // PhanPluginSimplifyExpressionBool : 2 occurrences // PhanRedefineFunction : 2 occurrences - // PhanParamTooMany : 1 occurrence // PhanPluginRedundantAssignment : 1 occurrence // PhanRedundantCondition : 1 occurrence // PhanTypeArraySuspicious : 1 occurrence @@ -32,7 +31,6 @@ 'src/class-modules.php' => ['PhanPluginSimplifyExpressionBool', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], 'src/class-status.php' => ['PhanRedundantCondition', 'PhanUndeclaredFunction'], 'tests/php/bootstrap.php' => ['PhanRedefineFunction', 'PhanTypeMismatchReturnProbablyReal'], - 'tests/php/test-host.php' => ['PhanParamTooMany'], 'tests/php/test-status.php' => ['PhanTypeMismatchArgumentInternal'], ], // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. diff --git a/projects/packages/status/changelog/fix-phan-PhanParamTooMany b/projects/packages/status/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/status/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/status/tests/php/test-host.php b/projects/packages/status/tests/php/test-host.php index 3cc1ad2f07982..ef1273e01d2d5 100644 --- a/projects/packages/status/tests/php/test-host.php +++ b/projects/packages/status/tests/php/test-host.php @@ -157,7 +157,7 @@ public function get_calypso_env_data_provider() { */ public function test_get_source_query( $source, $expected ) { $_GET['source'] = $source; - $this->assertEquals( $expected, $this->host_obj->get_source_query( $source ) ); + $this->assertEquals( $expected, $this->host_obj->get_source_query() ); unset( $_GET['source'] ); } diff --git a/projects/packages/sync/.phan/baseline.php b/projects/packages/sync/.phan/baseline.php index a3955bc005b47..4074beb38c4d7 100644 --- a/projects/packages/sync/.phan/baseline.php +++ b/projects/packages/sync/.phan/baseline.php @@ -23,11 +23,10 @@ // PhanRedundantCondition : 4 occurrences // PhanTypeExpectedObjectPropAccess : 4 occurrences // PhanTypeMismatchArgumentInternal : 4 occurrences - // PhanTypeArraySuspicious : 2 occurrences // PhanTypeArraySuspiciousNullable : 3 occurrences // PhanAccessMethodInternal : 2 occurrences // PhanImpossibleCondition : 2 occurrences - // PhanParamTooMany : 2 occurrences + // PhanTypeArraySuspicious : 2 occurrences // PhanTypeMismatchArgumentNullable : 2 occurrences // PhanTypeMismatchPropertyDefault : 2 occurrences // PhanTypeMismatchReturnNullable : 2 occurrences @@ -54,19 +53,18 @@ 'src/class-lock.php' => ['PhanTypeMismatchReturn'], 'src/class-queue.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullableInternal'], 'src/class-replicastore.php' => ['PhanAccessMethodInternal', 'PhanParamSignatureMismatch', 'PhanPluginDuplicateSwitchCaseLooseEquality', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeSuspiciousStringExpression'], - 'src/class-rest-endpoints.php' => ['PhanParamTooMany', 'PhanParamTooManyCallable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset'], + 'src/class-rest-endpoints.php' => ['PhanParamTooManyCallable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset'], 'src/class-rest-sender.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgumentProbablyReal'], 'src/class-sender.php' => ['PhanNonClassMethodCall', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchProperty', 'PhanTypeMismatchReturnProbablyReal'], 'src/class-server.php' => ['PhanTypeMismatchDeclaredParam', 'PhanTypeMismatchReturnProbablyReal'], 'src/class-settings.php' => ['PhanNonClassMethodCall', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentProbablyReal'], 'src/class-utils.php' => ['PhanTypeExpectedObjectPropAccess'], - 'src/modules/class-callables.php' => ['PhanParamSignatureMismatch', 'PhanParamTooMany', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturnProbablyReal'], + 'src/modules/class-callables.php' => ['PhanParamSignatureMismatch', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturnProbablyReal'], 'src/modules/class-comments.php' => ['PhanParamSignatureMismatch', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], 'src/modules/class-constants.php' => ['PhanParamSignatureMismatch', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredProperty'], 'src/modules/class-full-sync-immediately.php' => ['PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchReturn'], 'src/modules/class-full-sync.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredVariable', 'PhanTypeComparisonFromArray'], 'src/modules/class-import.php' => ['PhanTypeMismatchArgumentInternal'], - 'src/modules/class-meta.php' => ['PhanParamSignatureMismatch'], 'src/modules/class-module.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchReturnProbablyReal'], 'src/modules/class-network-options.php' => ['PhanParamSignatureMismatch', 'PhanTypeMismatchReturnProbablyReal'], 'src/modules/class-options.php' => ['PhanParamSignatureMismatch', 'PhanTypeMismatchReturnProbablyReal'], diff --git a/projects/packages/sync/changelog/fix-phan-PhanParamTooMany b/projects/packages/sync/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/sync/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/sync/src/class-rest-endpoints.php b/projects/packages/sync/src/class-rest-endpoints.php index 3371f797193b7..71a91bf7ff481 100644 --- a/projects/packages/sync/src/class-rest-endpoints.php +++ b/projects/packages/sync/src/class-rest-endpoints.php @@ -626,7 +626,7 @@ public static function checkout( $request ) { $sender = new REST_Sender(); if ( 'immediate' === $queue_name ) { - return rest_ensure_response( $sender->immediate_full_sync_pull( $number_of_items ) ); + return rest_ensure_response( $sender->immediate_full_sync_pull() ); } $response = $sender->queue_pull( $queue_name, $number_of_items, $args ); diff --git a/projects/packages/sync/src/modules/class-callables.php b/projects/packages/sync/src/modules/class-callables.php index c3f132dca687c..a8465c35c0e35 100644 --- a/projects/packages/sync/src/modules/class-callables.php +++ b/projects/packages/sync/src/modules/class-callables.php @@ -379,7 +379,7 @@ public function set_plugin_action_links() { $plugins_action_links = array(); // Is the transient lock in place? - $plugins_lock = get_transient( 'jetpack_plugin_api_action_links_refresh', false ); + $plugins_lock = get_transient( 'jetpack_plugin_api_action_links_refresh' ); if ( ! empty( $plugins_lock ) && ( isset( $current_screeen->id ) && 'plugins' !== $current_screeen->id ) ) { return; } diff --git a/projects/packages/sync/src/modules/class-meta.php b/projects/packages/sync/src/modules/class-meta.php index d92ab518d024c..ed6674d5b3074 100644 --- a/projects/packages/sync/src/modules/class-meta.php +++ b/projects/packages/sync/src/modules/class-meta.php @@ -94,9 +94,9 @@ public function get_objects_by_id( $object_type, $config ) { /** * Get a single Meta Result. * - * @param string $object_type post, comment, term, user. - * @param null $id Object ID. - * @param null $meta_key Meta Key. + * @param string $object_type post, comment, term, user. + * @param int|null $id Object ID. + * @param string|null $meta_key Meta Key. * * @return mixed|null */ diff --git a/projects/packages/videopress/.phan/baseline.php b/projects/packages/videopress/.phan/baseline.php index b0b96b05ab734..4293758e30be3 100644 --- a/projects/packages/videopress/.phan/baseline.php +++ b/projects/packages/videopress/.phan/baseline.php @@ -21,7 +21,6 @@ // PhanTypeArraySuspiciousNullable : 4 occurrences // PhanTypeMismatchArgument : 4 occurrences // PhanNoopNew : 3 occurrences - // PhanParamTooMany : 3 occurrences // PhanPossiblyUndeclaredVariable : 2 occurrences // PhanTypeInvalidDimOffset : 2 occurrences // PhanUndeclaredExtendedClass : 2 occurrences @@ -48,14 +47,12 @@ 'src/class-jwt-token-bridge.php' => ['PhanTypeMismatchReturn'], 'src/class-plan.php' => ['PhanTypeMismatchReturnProbablyReal'], 'src/class-stats.php' => ['PhanTypeArraySuspiciousNullable'], - 'src/class-uploader-rest-endpoints.php' => ['PhanParamTooMany'], 'src/class-uploader.php' => ['PhanTypeMismatchArgument'], 'src/class-utils.php' => ['PhanTypeMismatchReturnProbablyReal'], 'src/class-videopresstoken.php' => ['PhanTypeMismatchReturn'], 'src/class-wpcom-rest-api-v2-attachment-field-videopress.php' => ['PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], 'src/class-wpcom-rest-api-v2-endpoint-videopress.php' => ['PhanAccessMethodInternal', 'PhanTypeInvalidDimOffset', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], 'src/class-xmlrpc.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], - 'src/tus/class-transient-store.php' => ['PhanParamTooMany'], 'src/tus/class-tus-abstract-cache.php' => ['PhanTypeMismatchArgumentInternal'], 'src/tus/class-tus-client.php' => ['PhanNonClassMethodCall', 'PhanTypeMismatchArgument'], 'src/tus/class-tus-file.php' => ['PhanPluginSimplifyExpressionBool', 'PhanTypeArraySuspiciousNullable', 'PhanUndeclaredClassMethod', 'PhanUndeclaredTypeThrowsType'], diff --git a/projects/packages/videopress/changelog/fix-phan-PhanParamTooMany b/projects/packages/videopress/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/videopress/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/videopress/src/class-uploader-rest-endpoints.php b/projects/packages/videopress/src/class-uploader-rest-endpoints.php index f8d62edd54361..d5a7c91f7ef53 100644 --- a/projects/packages/videopress/src/class-uploader-rest-endpoints.php +++ b/projects/packages/videopress/src/class-uploader-rest-endpoints.php @@ -91,7 +91,7 @@ public static function check_status( $request ) { try { $uploader = new Uploader( $attachment_id ); $status = $uploader->check_status(); - return rest_ensure_response( $status, 200 ); + return rest_ensure_response( $status ); } catch ( Upload_Exception $e ) { return new WP_Error( 'rest_invalid_param', @@ -112,7 +112,7 @@ public static function do_upload( $request ) { try { $uploader = new Uploader( $attachment_id ); $status = $uploader->upload(); - return rest_ensure_response( $status, 200 ); + return rest_ensure_response( $status ); } catch ( Upload_Exception $e ) { return new WP_Error( 'rest_invalid_param', diff --git a/projects/packages/videopress/src/tus/class-transient-store.php b/projects/packages/videopress/src/tus/class-transient-store.php index bd3f5ee93ef1c..d8ba7c6421265 100644 --- a/projects/packages/videopress/src/tus/class-transient-store.php +++ b/projects/packages/videopress/src/tus/class-transient-store.php @@ -25,7 +25,7 @@ class Transient_Store extends Tus_Abstract_Cache { * @return mixed|null */ public function cache_get( $key ) { - $contents = get_transient( $key, '' ); + $contents = get_transient( $key ); return empty( $contents ) ? null : $contents; } diff --git a/projects/packages/waf/.phan/baseline.php b/projects/packages/waf/.phan/baseline.php index 327b501c60128..037a4896531b9 100644 --- a/projects/packages/waf/.phan/baseline.php +++ b/projects/packages/waf/.phan/baseline.php @@ -18,7 +18,6 @@ // PhanRedefineFunction : 4 occurrences // PhanTypeMismatchArgumentInternal : 4 occurrences // PhanTypeMismatchArgumentProbablyReal : 4 occurrences - // PhanParamTooMany : 2 occurrences // PhanPluginRedundantAssignment : 2 occurrences // PhanStaticCallToNonStatic : 2 occurrences // PhanTypeArraySuspiciousNullable : 2 occurrences @@ -45,7 +44,6 @@ 'src/class-waf-rules-manager.php' => ['PhanTypeMismatchArgument'], 'src/class-waf-runtime.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeArraySuspiciousNullable'], 'src/class-waf-transforms.php' => ['PhanPluginInvalidPregRegex', 'PhanTypeInvalidDimOffset'], - 'tests/php/integration/test-waf-compatibility.php' => ['PhanParamTooMany'], 'tests/php/unit/functions-wordpress.php' => ['PhanRedefineFunction'], 'tests/php/unit/test-waf-operators.php' => ['PhanTypeMismatchArgumentInternal'], 'tests/php/unit/test-waf-runtime-targets.php' => ['PhanPluginRedundantAssignment'], diff --git a/projects/packages/waf/changelog/fix-phan-PhanParamTooMany b/projects/packages/waf/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/packages/waf/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/packages/waf/tests/php/integration/test-waf-compatibility.php b/projects/packages/waf/tests/php/integration/test-waf-compatibility.php index b4026996c21a7..a0e0ef8c825a1 100644 --- a/projects/packages/waf/tests/php/integration/test-waf-compatibility.php +++ b/projects/packages/waf/tests/php/integration/test-waf-compatibility.php @@ -168,7 +168,7 @@ public function testIpListMigration() { Waf_Compatibility::migrate_brute_force_protection_ip_allow_list(); // Clean up. - remove_filter( 'wordbless_wpdb_query_results', $filter, 10, 2 ); + remove_filter( 'wordbless_wpdb_query_results', $filter, 10 ); } } @@ -235,7 +235,7 @@ public function testIpListsDefaultOptions() { $this->assertFalse( get_option( Waf_Rules_Manager::IP_BLOCK_LIST_ENABLED_OPTION_NAME ) ); // Set the old generic option to true. - remove_filter( 'wordbless_wpdb_query_results', $filter_ip_list_option_false, 10, 2 ); + remove_filter( 'wordbless_wpdb_query_results', $filter_ip_list_option_false, 10 ); add_filter( 'wordbless_wpdb_query_results', $filter_ip_list_option_true, 10, 2 ); // Options default to true when the old generic option is set to true. diff --git a/projects/plugins/boost/.phan/baseline.php b/projects/plugins/boost/.phan/baseline.php index c009f71b48236..1f84a5f5191f2 100644 --- a/projects/plugins/boost/.phan/baseline.php +++ b/projects/plugins/boost/.phan/baseline.php @@ -13,7 +13,6 @@ // PhanPluginDuplicateConditionalNullCoalescing : 10+ occurrences // PhanTypeArraySuspicious : 9 occurrences // PhanTypeMismatchArgument : 8 occurrences - // PhanParamTooMany : 6 occurrences // PhanPossiblyUndeclaredVariable : 5 occurrences // PhanTypeMismatchReturnProbablyReal : 5 occurrences // PhanUndeclaredConstant : 5 occurrences @@ -30,6 +29,7 @@ // PhanTypeMismatchReturnNullable : 2 occurrences // PhanCoalescingNeverNull : 1 occurrence // PhanImpossibleTypeComparisonInGlobalScope : 1 occurrence + // PhanParamTooMany : 1 occurrence // PhanRedefineFunction : 1 occurrence // PhanRedundantCondition : 1 occurrence // PhanTypeInvalidUnaryOperandIncOrDec : 1 occurrence @@ -65,9 +65,7 @@ 'app/modules/optimizations/page-cache/pre-wordpress/Request.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchPropertyDefault'], 'app/modules/optimizations/page-cache/pre-wordpress/storage/File_Storage.php' => ['PhanTypeMismatchArgument'], 'app/modules/optimizations/render-blocking-js/class-render-blocking-js.php' => ['PhanTypeMismatchProperty', 'PhanTypeMismatchPropertyDefault'], - 'app/rest-api/permissions/Nonce.php' => ['PhanParamTooMany'], 'compatibility/elementor.php' => ['PhanUndeclaredClassConstant'], - 'compatibility/lib/class-sync-jetpack-module-status.php' => ['PhanParamTooMany'], 'compatibility/page-optimize.php' => ['PhanUndeclaredFunction', 'PhanUndeclaredFunctionInCallable'], 'compatibility/score-prompt.php' => ['PhanImpossibleTypeComparisonInGlobalScope', 'PhanTypeComparisonToArray'], 'compatibility/web-stories.php' => ['PhanUndeclaredClassConstant'], diff --git a/projects/plugins/boost/app/rest-api/permissions/Nonce.php b/projects/plugins/boost/app/rest-api/permissions/Nonce.php index fcc66623e241b..0e780ee0e09c9 100644 --- a/projects/plugins/boost/app/rest-api/permissions/Nonce.php +++ b/projects/plugins/boost/app/rest-api/permissions/Nonce.php @@ -47,7 +47,7 @@ class Nonce implements Permission { public function __construct( $action, $request_key = 'nonce' ) { $this->action = $action; $this->request_key = $request_key; - $this->generate_nonce( $action ); + $this->generate_nonce(); } public function verify( $request ) { diff --git a/projects/plugins/boost/changelog/fix-phan-PhanParamTooMany b/projects/plugins/boost/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/plugins/boost/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/plugins/boost/compatibility/lib/class-sync-jetpack-module-status.php b/projects/plugins/boost/compatibility/lib/class-sync-jetpack-module-status.php index 7b97fd6027f0d..98410e66e3806 100644 --- a/projects/plugins/boost/compatibility/lib/class-sync-jetpack-module-status.php +++ b/projects/plugins/boost/compatibility/lib/class-sync-jetpack-module-status.php @@ -91,8 +91,8 @@ public function add_sync_from_jetpack_action() { } public function remove_sync_from_jetpack_action() { - remove_action( "jetpack_deactivate_module_{$this->jetpack_module_slug}", array( $this, 'sync_from_jetpack' ), 10, 2 ); - remove_action( "jetpack_activate_module_{$this->jetpack_module_slug}", array( $this, 'sync_from_jetpack' ), 10, 2 ); + remove_action( "jetpack_deactivate_module_{$this->jetpack_module_slug}", array( $this, 'sync_from_jetpack' ), 10 ); + remove_action( "jetpack_activate_module_{$this->jetpack_module_slug}", array( $this, 'sync_from_jetpack' ), 10 ); } /** @@ -104,7 +104,7 @@ public function add_sync_to_jetpack_action() { } public function remove_sync_to_jetpack_action() { - remove_action( "add_option_jetpack_boost_status_{$this->boost_module_slug}", array( $this, 'sync_to_jetpack' ), 10, 2 ); - remove_action( "update_option_jetpack_boost_status_{$this->boost_module_slug}", array( $this, 'sync_to_jetpack' ), 10, 2 ); + remove_action( "add_option_jetpack_boost_status_{$this->boost_module_slug}", array( $this, 'sync_to_jetpack' ), 10 ); + remove_action( "update_option_jetpack_boost_status_{$this->boost_module_slug}", array( $this, 'sync_to_jetpack' ), 10 ); } } diff --git a/projects/plugins/crm/.phan/baseline.php b/projects/plugins/crm/.phan/baseline.php index 514e9af179200..7c8415e0e6466 100644 --- a/projects/plugins/crm/.phan/baseline.php +++ b/projects/plugins/crm/.phan/baseline.php @@ -65,7 +65,6 @@ // PhanUndeclaredGlobalVariable : 15+ occurrences // PhanUndeclaredProperty : 15+ occurrences // PhanUndeclaredTypeProperty : 15+ occurrences - // PhanParamTooMany : 10+ occurrences // PhanPluginDuplicateIfCondition : 10+ occurrences // PhanTypeMismatchDimFetchNullable : 10+ occurrences // PhanTypeMismatchPropertyDefault : 10+ occurrences @@ -103,6 +102,7 @@ // PhanUnextractableAnnotation : 2 occurrences // PhanImpossibleTypeComparisonInLoop : 1 occurrence // PhanNoopVariable : 1 occurrence + // PhanParamTooMany : 1 occurrence // PhanPluginDuplicateArrayKey : 1 occurrence // PhanPluginDuplicateCatchStatementBody : 1 occurrence // PhanPluginUseReturnValueInternalKnown : 1 occurrence @@ -139,7 +139,6 @@ 'admin/export/main.page.php' => ['PhanTypeMismatchArgument'], 'admin/settings/business-info.page.php' => ['PhanRedundantConditionInGlobalScope'], 'admin/settings/client-portal.page.php' => ['PhanRedundantConditionInGlobalScope', 'PhanUndeclaredVariableDim'], - 'admin/settings/companies.page.php' => ['PhanParamTooMany'], 'admin/settings/custom-fields.page.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanRedundantConditionInGlobalScope', 'PhanTypeMismatchDimFetch'], 'admin/settings/field-options.page.php' => ['PhanPossiblyUndeclaredGlobalVariable', 'PhanRedundantConditionInGlobalScope', 'PhanTypeInvalidDimOffset'], 'admin/settings/field-sorts.page.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantConditionInGlobalScope', 'PhanTypeArraySuspiciousNullable'], @@ -170,7 +169,7 @@ 'api/create_transaction.php' => ['PhanImpossibleTypeComparisonInGlobalScope', 'PhanPossiblyUndeclaredGlobalVariable'], 'api/customers.php' => ['PhanPluginSimplifyExpressionBool'], 'api/status.php' => ['PhanTypePossiblyInvalidDimOffset'], - 'includes/ZeroBSCRM.AJAX.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanParamTooMany', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateExpressionAssignment', 'PhanPluginNeverReturnFunction', 'PhanPluginRedundantAssignment', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNullable', 'PhanTypeInvalidDimOffset', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDimFetch', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeVoidAssignment', 'PhanUndeclaredConstant', 'PhanUndeclaredVariableDim'], + 'includes/ZeroBSCRM.AJAX.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateExpressionAssignment', 'PhanPluginNeverReturnFunction', 'PhanPluginRedundantAssignment', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNullable', 'PhanTypeInvalidDimOffset', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDimFetch', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeVoidAssignment', 'PhanUndeclaredConstant', 'PhanUndeclaredVariableDim'], 'includes/ZeroBSCRM.API.php' => ['PhanCommentParamWithoutRealParam', 'PhanRedefineFunctionInternal', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgumentInternal'], 'includes/ZeroBSCRM.AdminPages.Checks.php' => ['PhanPluginUnreachableCode'], 'includes/ZeroBSCRM.AdminPages.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginRedundantAssignment', 'PhanPossiblyUndeclaredVariable', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeSuspiciousEcho', 'PhanUndeclaredVariableDim'], @@ -189,7 +188,7 @@ 'includes/ZeroBSCRM.DAL3.Helpers.php' => ['PhanDeprecatedFunction', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspiciousNullable', 'PhanTypeConversionFromArray', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredVariable', 'PhanUnextractableAnnotationElementName'], 'includes/ZeroBSCRM.DAL3.Obj.Addresses.php' => ['PhanEmptyForeach'], 'includes/ZeroBSCRM.DAL3.Obj.Companies.php' => ['PhanCommentParamWithoutRealParam', 'PhanEmptyForeach', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanNoopBinaryOperator', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginDuplicateIfCondition', 'PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanSuspiciousWeakTypeComparison', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNull', 'PhanTypeArraySuspiciousNullable', 'PhanTypeComparisonFromArray', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchDimAssignment', 'PhanTypeMismatchDimFetchNullable', 'PhanTypeMismatchForeach', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset', 'PhanUndeclaredFunction', 'PhanUndeclaredTypeReturnType', 'PhanUndeclaredVariable', 'PhanUndeclaredVariableDim', 'PhanUnextractableAnnotationElementName'], - 'includes/ZeroBSCRM.DAL3.Obj.Contacts.php' => ['PhanCommentParamWithoutRealParam', 'PhanEmptyForeach', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanNoopBinaryOperator', 'PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginDuplicateIfCondition', 'PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanSuspiciousWeakTypeComparison', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNull', 'PhanTypeArraySuspiciousNullable', 'PhanTypeComparisonFromArray', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchArgumentReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchDimFetchNullable', 'PhanTypeMismatchForeach', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredTypeParameter', 'PhanUndeclaredTypeReturnType', 'PhanUndeclaredVariable', 'PhanUndeclaredVariableDim', 'PhanUnextractableAnnotationElementName'], + 'includes/ZeroBSCRM.DAL3.Obj.Contacts.php' => ['PhanCommentParamWithoutRealParam', 'PhanEmptyForeach', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanNoopBinaryOperator', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginDuplicateIfCondition', 'PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanSuspiciousWeakTypeComparison', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNull', 'PhanTypeArraySuspiciousNullable', 'PhanTypeComparisonFromArray', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchArgumentReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchDimFetchNullable', 'PhanTypeMismatchForeach', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredTypeParameter', 'PhanUndeclaredTypeReturnType', 'PhanUndeclaredVariable', 'PhanUndeclaredVariableDim', 'PhanUnextractableAnnotationElementName'], 'includes/ZeroBSCRM.DAL3.Obj.EventReminders.php' => ['PhanEmptyForeach', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanSuspiciousWeakTypeComparison', 'PhanTypeArraySuspiciousNullable', 'PhanTypeComparisonFromArray', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredVariable', 'PhanUnextractableAnnotationElementName'], 'includes/ZeroBSCRM.DAL3.Obj.Events.php' => ['PhanCommentParamWithoutRealParam', 'PhanEmptyForeach', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanNoopBinaryOperator', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanSuspiciousWeakTypeComparison', 'PhanTypeArraySuspiciousNull', 'PhanTypeArraySuspiciousNullable', 'PhanTypeComparisonFromArray', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchForeach', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset', 'PhanUndeclaredVariable', 'PhanUndeclaredVariableDim', 'PhanUnextractableAnnotationElementName'], 'includes/ZeroBSCRM.DAL3.Obj.Forms.php' => ['PhanCommentParamWithoutRealParam', 'PhanEmptyForeach', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanNoopBinaryOperator', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanSuspiciousWeakTypeComparison', 'PhanTypeArraySuspiciousNull', 'PhanTypeArraySuspiciousNullable', 'PhanTypeComparisonFromArray', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchDimAssignment', 'PhanTypeMismatchDimFetchNullable', 'PhanTypeMismatchForeach', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredVariable', 'PhanUndeclaredVariableDim', 'PhanUnextractableAnnotationElementName'], @@ -211,7 +210,7 @@ 'includes/ZeroBSCRM.FileUploads.php' => ['PhanTypeComparisonFromArray', 'PhanTypeMismatchDimFetch'], 'includes/ZeroBSCRM.FormatHelpers.php' => ['PhanImpossibleCondition', 'PhanNoopVariable', 'PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspiciousNullable', 'PhanTypeInvalidLeftOperandOfAdd', 'PhanTypeMismatchArgument', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredTypeParameter', 'PhanUndeclaredTypeReturnType'], 'includes/ZeroBSCRM.Forms.php' => ['PhanPluginSimplifyExpressionBool', 'PhanTypeMissingReturn', 'PhanTypeNonVarPassByRef', 'PhanTypeSuspiciousEcho', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredVariable'], - 'includes/ZeroBSCRM.GeneralFuncs.php' => ['PhanCommentParamWithoutRealParam', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanMisspelledAnnotation', 'PhanParamTooMany', 'PhanParamTooManyInternal', 'PhanPluginNeverReturnFunction', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDimFetch', 'PhanUndeclaredConstant', 'PhanUndeclaredFunction', 'PhanUndeclaredVariableDim'], + 'includes/ZeroBSCRM.GeneralFuncs.php' => ['PhanCommentParamWithoutRealParam', 'PhanImpossibleCondition', 'PhanImpossibleTypeComparison', 'PhanMisspelledAnnotation', 'PhanParamTooManyInternal', 'PhanPluginNeverReturnFunction', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDimFetch', 'PhanUndeclaredConstant', 'PhanUndeclaredFunction', 'PhanUndeclaredVariableDim'], 'includes/ZeroBSCRM.IntegrationFuncs.php' => ['PhanPluginRedundantAssignment', 'PhanPluginUnreachableCode', 'PhanRedundantCondition'], 'includes/ZeroBSCRM.InternalAutomatorRecipes.php' => ['PhanPluginRedundantAssignment', 'PhanRedundantCondition', 'PhanSuspiciousValueComparison', 'PhanTypeMismatchDefault', 'PhanTypePossiblyInvalidDimOffset', 'PhanUndeclaredTypeParameter'], 'includes/ZeroBSCRM.InvoiceBuilder.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginDuplicateExpressionBinaryOp', 'PhanPluginRedundantAssignment', 'PhanPossiblyUndeclaredVariable', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredTypeReturnType', 'PhanUndeclaredVariable'], @@ -232,7 +231,7 @@ 'includes/ZeroBSCRM.MetaBoxes3.QuoteTemplates.php' => ['PhanUndeclaredFunctionInCallable'], 'includes/ZeroBSCRM.MetaBoxes3.Quotes.php' => ['PhanImpossibleCondition', 'PhanRedundantCondition', 'PhanTypeMismatchArgument', 'PhanUndeclaredFunctionInCallable'], 'includes/ZeroBSCRM.MetaBoxes3.Tags.php' => ['PhanDeprecatedFunction', 'PhanNoopBinaryOperator', 'PhanTypeSuspiciousStringExpression'], - 'includes/ZeroBSCRM.MetaBoxes3.Tasks.php' => ['PhanParamTooMany', 'PhanRedundantCondition', 'PhanTypeMismatchArgument', 'PhanTypeMismatchDefault', 'PhanTypeVoidAssignment', 'PhanUndeclaredTypeParameter'], + 'includes/ZeroBSCRM.MetaBoxes3.Tasks.php' => ['PhanRedundantCondition', 'PhanTypeMismatchArgument', 'PhanTypeMismatchDefault', 'PhanTypeVoidAssignment', 'PhanUndeclaredTypeParameter'], 'includes/ZeroBSCRM.MetaBoxes3.Transactions.php' => ['PhanImpossibleCondition', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument'], 'includes/ZeroBSCRM.Migrations.php' => ['PhanPluginRedundantAssignment'], 'includes/ZeroBSCRM.NotifyMe.php' => ['PhanNoopBinaryOperator', 'PhanPluginDuplicateAdjacentStatement', 'PhanPluginNeverReturnFunction', 'PhanTypeMismatchArgumentInternal', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredVariableDim'], @@ -287,7 +286,7 @@ 'modules/woo-sync/includes/class-woo-sync-background-sync.php' => ['PhanUndeclaredTypeParameter', 'PhanUnextractableAnnotationElementName'], 'modules/woo-sync/includes/class-woo-sync-my-account-integration.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgument', 'PhanTypePossiblyInvalidDimOffset'], 'modules/woo-sync/includes/class-woo-sync-woo-admin-integration.php' => ['PhanUndeclaredClassMethod', 'PhanUndeclaredClassProperty', 'PhanUndeclaredTypeParameter'], - 'modules/woo-sync/includes/class-woo-sync.php' => ['PhanImpossibleTypeComparison', 'PhanParamTooFew', 'PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginNeverReturnMethod', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchPropertyDefault', 'PhanTypeMismatchReturn', 'PhanUndeclaredClassMethod', 'PhanUndeclaredFunctionInCallable', 'PhanUndeclaredTypeParameter', 'PhanUndeclaredTypeReturnType', 'PhanUndeclaredVariable', 'PhanUnextractableAnnotationElementName', 'PhanUnextractableAnnotationSuffix'], + 'modules/woo-sync/includes/class-woo-sync.php' => ['PhanImpossibleTypeComparison', 'PhanParamTooFew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginNeverReturnMethod', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspicious', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchPropertyDefault', 'PhanTypeMismatchReturn', 'PhanUndeclaredClassMethod', 'PhanUndeclaredFunctionInCallable', 'PhanUndeclaredTypeParameter', 'PhanUndeclaredTypeReturnType', 'PhanUndeclaredVariable', 'PhanUnextractableAnnotationElementName', 'PhanUnextractableAnnotationSuffix'], 'modules/woo-sync/includes/jpcrm-woo-sync-contact-tabs.php' => ['PhanUndeclaredFunction', 'PhanUndeclaredMethod'], 'modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-customer.php' => ['PhanTypeArraySuspiciousNullable'], 'modules/woo-sync/includes/segment-conditions/class-segment-condition-woo-order-count.php' => ['PhanTypeArraySuspiciousNullable'], @@ -332,7 +331,7 @@ 'tests/codeception/_support/Module/WordPress.php' => ['PhanIncompatibleRealPropertyType', 'PhanParamSignatureMismatch', 'PhanTypeMismatchDeclaredParamNullable', 'PhanUndeclaredClassInstanceof', 'PhanUndeclaredClassMethod', 'PhanUndeclaredFunction', 'PhanUndeclaredMethod', 'PhanUndeclaredTypeParameter', 'PhanUndeclaredTypeProperty', 'PhanUndeclaredTypeReturnType'], 'tests/codeception/_support/UnitTester.php' => ['PhanParamSignatureMismatch', 'PhanParamSignaturePHPDocMismatchReturnType', 'PhanParamSignaturePHPDocMismatchTooFewParameters', 'PhanUndeclaredTrait'], 'tests/php/automation/class-automation-engine-test.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanRedundantCondition'], - 'tests/php/automation/class-automation-workflow-test.php' => ['PhanParamTooMany', 'PhanUnreferencedUseNormal'], + 'tests/php/automation/class-automation-workflow-test.php' => ['PhanUnreferencedUseNormal'], 'tests/php/automation/companies/class-company-trigger-test.php' => ['PhanUnreferencedUseNormal'], 'tests/php/automation/contacts/actions/class-delete-contact-test.php' => ['PhanUnreferencedUseNormal'], 'tests/php/automation/contacts/class-contact-condition-test.php' => ['PhanUnreferencedUseNormal'], @@ -350,7 +349,7 @@ 'tests/php/automation/transactions/class-transaction-trigger-test.php' => ['PhanUnreferencedUseNormal'], 'tests/php/bootstrap.php' => ['PhanUndeclaredConstant'], 'tests/php/event-manager/class-event-manager-faker.php' => ['PhanUndeclaredTypeReturnType'], - 'tests/php/event-manager/class-event-manager-test.php' => ['PhanCommentVarInsteadOfParam', 'PhanParamTooMany'], + 'tests/php/event-manager/class-event-manager-test.php' => ['PhanCommentVarInsteadOfParam'], 'tests/php/rest-api/v4/class-rest-authentication-test.php' => ['PhanTypeMismatchReturn'], 'tests/php/rest-api/v4/class-rest-contacts-controller-test.php' => ['PhanPluginNeverReturnFunction'], ], diff --git a/projects/plugins/crm/admin/settings/companies.page.php b/projects/plugins/crm/admin/settings/companies.page.php index c343cff9dfe28..482fcb5bc05ef 100644 --- a/projects/plugins/crm/admin/settings/companies.page.php +++ b/projects/plugins/crm/admin/settings/companies.page.php @@ -75,7 +75,7 @@ diff --git a/projects/plugins/crm/changelog/fix-phan-PhanParamTooMany b/projects/plugins/crm/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/plugins/crm/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/plugins/crm/includes/ZeroBSCRM.AJAX.php b/projects/plugins/crm/includes/ZeroBSCRM.AJAX.php index 3866c3b009640..33d561e56f6b1 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.AJAX.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.AJAX.php @@ -1108,7 +1108,7 @@ function ZeroBSCRM_accept_quote() { ) { zeroBSCRM_sendJSONError( array( 'access' => 1 ), 403 ); } - } elseif ( ! zeroBSCRM_quotes_getFromHash( $quoteHash, -1 )['success'] ) { + } elseif ( ! zeroBSCRM_quotes_getFromHash( $quoteHash )['success'] ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase zeroBSCRM_sendJSONError( array( 'hash' => 1 ), 403 ); } @@ -4013,7 +4013,7 @@ function zeroBSCRM_AJAX_enactListViewBulkAction() { foreach ( $legitIDs as $id ) { // } Update quote as unaccepted (should verify this worked...) - zeroBS_markQuoteUnAccepted( $id, zeroBS_getCurrentUserUsername() ); + zeroBS_markQuoteUnAccepted( $id ); ++$unaccepted; diff --git a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Contacts.php b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Contacts.php index 61df355223d4e..77c1a61d94c4d 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Contacts.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.DAL3.Obj.Contacts.php @@ -3571,11 +3571,11 @@ public function deleteContact($args=array()){ ) ); - } unset($trans); + } unset( $trans ); - // delete events - $events = zeroBS_getEventsByCustomerID($id,false,1000000,0,false); - foreach ($events as $event){ + // delete events + $events = zeroBS_getEventsByCustomerID( $id, false, 1000000, 0 ); + foreach ( $events as $event ) { // delete post $zbs->DAL->events->deleteEvent( // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase diff --git a/projects/plugins/crm/includes/ZeroBSCRM.GeneralFuncs.php b/projects/plugins/crm/includes/ZeroBSCRM.GeneralFuncs.php index 6934b919ddd99..bf3b3ebe5b704 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.GeneralFuncs.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.GeneralFuncs.php @@ -604,19 +604,13 @@ function zeroBSCRM_expandArchive($filepath,$expandTo){ if (file_exists($filepath) && file_exists($expandTo)){ - $archive = new PclZip($filepath); - - if ($archive->extract(PCLZIP_OPT_PATH, $expandTo) == 0) { - - return false; - - } else { - - return true; - - } - - + $archive = new PclZip( $filepath ); + // @phan-suppress-next-line PhanParamTooMany -- PclZip functions use func_get_args. + if ( $archive->extract( PCLZIP_OPT_PATH, $expandTo ) === 0 ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase + return false; + } else { + return true; + } } } catch (Exception $ex){ @@ -1707,7 +1701,7 @@ function jpcrm_get_mimetype( $file_path ) { $credentials = request_filesystem_credentials( site_url() ); wp_filesystem( $credentials ); } - $lines = $wp_filesystem->get_contents_array( $file_path, 8 ); + $lines = $wp_filesystem->get_contents_array( $file_path ); if ( $lines === false ) { return 'application/octet-stream'; } diff --git a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tasks.php b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tasks.php index 1f4a5414d0132..2404d5ccf4b7a 100644 --- a/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tasks.php +++ b/projects/plugins/crm/includes/ZeroBSCRM.MetaBoxes3.Tasks.php @@ -533,7 +533,7 @@ function zeroBSCRM_task_addEdit( $taskID = -1 ) { $html .= zeroBSCRM_task_ui_clear(); - $html .= zeroBSCRM_task_ui_for( $taskObject, $taskID ); + $html .= zeroBSCRM_task_ui_for( $taskObject ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase $html .= zeroBSCRM_task_ui_clear(); diff --git a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync.php b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync.php index 62abc4c421cf2..2a8daf3f8e586 100644 --- a/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync.php +++ b/projects/plugins/crm/modules/woo-sync/includes/class-woo-sync.php @@ -2226,7 +2226,7 @@ private function migrate_52(){ $new_sync_site = $this->add_sync_site( $data ); // verify - if ( is_array( $new_sync_site ) && !empty( $new_sync_site['site_key'] ) && $this->get_active_sync_site( $new_sync_site['site_key'], true ) ){ + if ( is_array( $new_sync_site ) && !empty( $new_sync_site['site_key'] ) && $this->get_active_sync_site( $new_sync_site['site_key'] ) ){ // backup and remove old settings update_option( 'jpcrm_woosync_52_mig_backup', $settings, false ); diff --git a/projects/plugins/crm/tests/php/automation/class-automation-workflow-test.php b/projects/plugins/crm/tests/php/automation/class-automation-workflow-test.php index 6745296571a07..eb8c68abb7bb4 100644 --- a/projects/plugins/crm/tests/php/automation/class-automation-workflow-test.php +++ b/projects/plugins/crm/tests/php/automation/class-automation-workflow-test.php @@ -184,7 +184,7 @@ public function test_workflow_execution_on_contact_created() { $automation->init_workflows(); // Fake event data - $contact = $this->automation_faker->contact( false ); + $contact = $this->automation_faker->contact(); // We expect the workflow to be executed on contact_created event with the contact data $workflow->expects( $this->once() ) diff --git a/projects/plugins/crm/tests/php/event-manager/class-event-manager-test.php b/projects/plugins/crm/tests/php/event-manager/class-event-manager-test.php index ed5d1295736f1..5de4cac264148 100644 --- a/projects/plugins/crm/tests/php/event-manager/class-event-manager-test.php +++ b/projects/plugins/crm/tests/php/event-manager/class-event-manager-test.php @@ -258,11 +258,9 @@ function ( $transaction_created ) use ( $transaction ) { */ public function test_notify_on_transaction_updated() { /** @var Transaction $transaction */ - $transaction = Automation_Faker::instance()->transaction(); - $previous_transaction = clone $transaction; + $transaction = Automation_Faker::instance()->transaction(); - $transaction_data = Transaction_Factory::tidy_data( $transaction ); - $previous_transaction_data = Transaction_Factory::tidy_data( $previous_transaction ); + $transaction_data = Transaction_Factory::tidy_data( $transaction ); add_action( 'jpcrm_transaction_updated', @@ -276,7 +274,7 @@ function ( $transaction_updated ) use ( $transaction ) { ); $transaction_event = new Transaction_Event(); - $transaction_event->updated( $transaction_data, $previous_transaction_data ); + $transaction_event->updated( $transaction_data ); } /** diff --git a/projects/plugins/debug-helper/.phan/baseline.php b/projects/plugins/debug-helper/.phan/baseline.php index 0435052416793..b7c093aa21e3b 100644 --- a/projects/plugins/debug-helper/.phan/baseline.php +++ b/projects/plugins/debug-helper/.phan/baseline.php @@ -13,9 +13,9 @@ // PhanNoopNew : 15+ occurrences // PhanPluginSimplifyExpressionBool : 9 occurrences // PhanPluginDuplicateConditionalNullCoalescing : 4 occurrences - // PhanUndeclaredClassConstant : 4 occurrences // PhanUndeclaredClassStaticProperty : 4 occurrences // PhanTypeMismatchArgument : 3 occurrences + // PhanUndeclaredClassConstant : 3 occurrences // PhanUndeclaredConstantOfClass : 3 occurrences // PhanUndeclaredMethod : 3 occurrences // PhanTypeMismatchReturnProbablyReal : 2 occurrences @@ -23,7 +23,6 @@ // PhanUndeclaredProperty : 2 occurrences // PhanEmptyForeach : 1 occurrence // PhanNonClassMethodCall : 1 occurrence - // PhanParamTooMany : 1 occurrence // PhanSuspiciousValueComparison : 1 occurrence // PhanTypeConversionFromArray : 1 occurrence // PhanTypePossiblyInvalidDimOffset : 1 occurrence @@ -43,7 +42,7 @@ 'modules/class-modules-helper.php' => ['PhanNoopNew', 'PhanUndeclaredClassMethod'], 'modules/class-protect-helper.php' => ['PhanNoopNew', 'PhanPluginSimplifyExpressionBool', 'PhanUndeclaredClassMethod', 'PhanUndeclaredClassStaticProperty', 'PhanUndeclaredProperty'], 'modules/class-rest-api-tester.php' => ['PhanNoopNew'], - 'modules/class-scan-helper.php' => ['PhanNoopNew', 'PhanParamTooMany', 'PhanSuspiciousValueComparison', 'PhanTypeConversionFromArray', 'PhanTypeMismatchReturnProbablyReal'], + 'modules/class-scan-helper.php' => ['PhanNoopNew', 'PhanSuspiciousValueComparison', 'PhanTypeConversionFromArray', 'PhanTypeMismatchReturnProbablyReal'], 'modules/class-sync-data-settings-tester.php' => ['PhanNoopNew', 'PhanTypePossiblyInvalidDimOffset', 'PhanUndeclaredClass'], 'modules/class-waf-helper.php' => ['PhanNoopNew', 'PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredClassConstant', 'PhanUndeclaredClassMethod'], 'modules/class-wpcom-api-request-tracker-module.php' => ['PhanNoopNew', 'PhanTypeMismatchArgument'], diff --git a/projects/plugins/debug-helper/changelog/fix-phan-PhanParamTooMany b/projects/plugins/debug-helper/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/plugins/debug-helper/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/plugins/debug-helper/modules/class-scan-helper.php b/projects/plugins/debug-helper/modules/class-scan-helper.php index 237eb6acc0333..722390ef419bc 100644 --- a/projects/plugins/debug-helper/modules/class-scan-helper.php +++ b/projects/plugins/debug-helper/modules/class-scan-helper.php @@ -431,7 +431,7 @@ private function infected_file_threat_exists() { */ private function generate_infected_file_threat() { $content = "echo <<write_file( $this->threats['infected_file'], $content ) ) { return new WP_Error( 'could-not-write', "Unable to write threat from {$this->threats['infected_file']}" ); } diff --git a/projects/plugins/inspect/.phan/baseline.php b/projects/plugins/inspect/.phan/baseline.php index 7e751d129c29e..83e0a80e72b1f 100644 --- a/projects/plugins/inspect/.phan/baseline.php +++ b/projects/plugins/inspect/.phan/baseline.php @@ -9,7 +9,6 @@ */ return [ // # Issue statistics: - // PhanParamTooMany : 3 occurrences // PhanTypeMismatchArgumentInternal : 2 occurrences // PhanAccessMethodInternal : 1 occurrence // PhanTypeMismatchReturn : 1 occurrence @@ -21,10 +20,7 @@ 'app/Options/Monitor_Status.php' => ['PhanTypeMismatchReturn'], 'app/Options/Observer_Settings.php' => ['PhanTypeMismatchArgumentInternal'], 'app/REST_API/Endpoints/Send_Request.php' => ['PhanTypeMismatchArgumentInternal'], - 'app/REST_API/Permissions/Nonce.php' => ['PhanParamTooMany'], 'functions.php' => ['PhanAccessMethodInternal'], - 'packages/Async_Option/Async_Option.php' => ['PhanParamTooMany'], - 'packages/Async_Option/Endpoint.php' => ['PhanParamTooMany'], ], // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases) diff --git a/projects/plugins/inspect/app/REST_API/Permissions/Nonce.php b/projects/plugins/inspect/app/REST_API/Permissions/Nonce.php index e6885475adfeb..e62942675d5a2 100644 --- a/projects/plugins/inspect/app/REST_API/Permissions/Nonce.php +++ b/projects/plugins/inspect/app/REST_API/Permissions/Nonce.php @@ -7,7 +7,7 @@ /** * Nonces are tricky in REST. * - * `rest_api_init` action is only tirggered when visiting an URL that looks like a REST Endpoint. + * `rest_api_init` action is only triggered when visiting an URL that looks like a REST Endpoint. * This means that if nonces are generated there, they won't be available in regular * `init` or `admin_init` parts of the app. But that's exactly where we need them. * @@ -47,7 +47,7 @@ class Nonce implements Permission { public function __construct( $action, $request_key = 'nonce' ) { $this->action = $action; $this->request_key = $request_key; - $this->generate_nonce( $action ); + $this->generate_nonce(); } public function verify( $request ) { diff --git a/projects/plugins/inspect/changelog/fix-phan-PhanParamTooMany b/projects/plugins/inspect/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/plugins/inspect/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/plugins/inspect/packages/Async_Option/Endpoint.php b/projects/plugins/inspect/packages/Async_Option/Endpoint.php index 21947f763e7d8..07a9151274bf8 100644 --- a/projects/plugins/inspect/packages/Async_Option/Endpoint.php +++ b/projects/plugins/inspect/packages/Async_Option/Endpoint.php @@ -70,8 +70,10 @@ public function handler( $request ) { /** * Handle GET Requests + * + * @param \WP_REST_Request $request Currently unused. */ - public function handle_get() { + public function handle_get( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable return $this->option->get(); } diff --git a/projects/plugins/inspect/packages/Async_Option/Storage/Storage.php b/projects/plugins/inspect/packages/Async_Option/Storage/Storage.php index ce6a4ffb34cf9..798da9d1f38ea 100644 --- a/projects/plugins/inspect/packages/Async_Option/Storage/Storage.php +++ b/projects/plugins/inspect/packages/Async_Option/Storage/Storage.php @@ -4,7 +4,7 @@ interface Storage { - public function get( $key ); + public function get( $key, $default ); public function set( $key, $value ); diff --git a/projects/plugins/jetpack/.phan/baseline.php b/projects/plugins/jetpack/.phan/baseline.php index a079c84fdd775..728f09a4fcf41 100644 --- a/projects/plugins/jetpack/.phan/baseline.php +++ b/projects/plugins/jetpack/.phan/baseline.php @@ -19,10 +19,9 @@ // PhanRedundantCondition : 70+ occurrences // PhanDeprecatedFunction : 65+ occurrences // PhanPossiblyUndeclaredVariable : 60+ occurrences + // PhanTypeArraySuspiciousNullable : 55+ occurrences // PhanRedefineFunction : 50+ occurrences - // PhanTypeArraySuspiciousNullable : 50+ occurrences // PhanTypeMismatchArgumentNullable : 50+ occurrences - // PhanParamTooMany : 40+ occurrences // PhanPluginDuplicateAdjacentStatement : 40+ occurrences // PhanTypeMismatchArgumentInternal : 40+ occurrences // PhanTypeExpectedObjectPropAccess : 35+ occurrences @@ -74,6 +73,7 @@ // PhanTypeObjectUnsetDeclaredProperty : 3 occurrences // PhanUndeclaredMethodInCallable : 3 occurrences // PhanImpossibleConditionInLoop : 2 occurrences + // PhanParamTooMany : 2 occurrences // PhanParamTooManyCallable : 2 occurrences // PhanPluginDuplicateSwitchCaseLooseEquality : 2 occurrences // PhanStaticCallToNonStatic : 2 occurrences @@ -96,16 +96,15 @@ '3rd-party/bbpress.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredFunction'], '3rd-party/class-domain-mapping.php' => ['PhanUndeclaredClassInCallable', 'PhanUndeclaredClassMethod', 'PhanUndeclaredFunctionInCallable', 'PhanUndeclaredTypeReturnType'], '3rd-party/class-jetpack-bbpress-rest-api.php' => ['PhanUndeclaredFunction'], - '3rd-party/class.jetpack-amp-support.php' => ['PhanDeprecatedFunction', 'PhanParamTooMany'], + '3rd-party/class.jetpack-amp-support.php' => ['PhanDeprecatedFunction'], '3rd-party/debug-bar/class-jetpack-search-debug-bar.php' => ['PhanUndeclaredExtendedClass', 'PhanUndeclaredMethod'], '3rd-party/qtranslate-x.php' => ['PhanTypeMismatchReturn'], - '3rd-party/woocommerce.php' => ['PhanParamTooMany'], '3rd-party/wpml.php' => ['PhanUndeclaredFunction'], '_inc/blogging-prompts.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgumentInternal'], '_inc/class.jetpack-provision.php' => ['PhanAccessMethodInternal', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturnNullable'], '_inc/genericons.php' => ['PhanTypeMismatchArgumentProbablyReal'], '_inc/lib/admin-pages/class-jetpack-about-page.php' => ['PhanTypeMismatchArgument'], - '_inc/lib/admin-pages/class-jetpack-redux-state-helper.php' => ['PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDimAssignment'], + '_inc/lib/admin-pages/class-jetpack-redux-state-helper.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition', 'PhanTypeMismatchDimAssignment'], '_inc/lib/admin-pages/class.jetpack-admin-page.php' => ['PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredProperty'], '_inc/lib/class-jetpack-ai-helper.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchPropertyDefault'], '_inc/lib/class-jetpack-instagram-gallery-helper.php' => ['PhanTypeMismatchArgument'], @@ -157,10 +156,9 @@ 'class-jetpack-gallery-settings.php' => ['PhanNoopNew'], 'class-jetpack-pre-connection-jitms.php' => ['PhanTypeMismatchArgument'], 'class-jetpack-xmlrpc-methods.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition'], - 'class.frame-nonce-preview.php' => ['PhanParamTooMany'], 'class.jetpack-admin.php' => ['PhanPluginMixedKeyNoKey', 'PhanTypeMismatchArgumentProbablyReal'], 'class.jetpack-autoupdate.php' => ['PhanTypeMismatchArgument'], - 'class.jetpack-cli.php' => ['PhanAccessMethodInternal', 'PhanParamTooMany', 'PhanParamTooManyCallable', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn'], + 'class.jetpack-cli.php' => ['PhanAccessMethodInternal', 'PhanParamTooManyCallable', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn'], 'class.jetpack-gutenberg.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchPropertyProbablyReal', 'PhanTypeMismatchReturn', 'PhanTypeSuspiciousStringExpression'], 'class.jetpack-heartbeat.php' => ['PhanTypeMismatchPropertyDefault'], 'class.jetpack-modules-list-table.php' => ['PhanCommentAbstractOnInheritedMethod'], @@ -259,7 +257,7 @@ 'json-endpoints/class.wpcom-json-api-render-endpoint.php' => ['PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchArgument'], 'json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php' => ['PhanNoopNew', 'PhanTypeMismatchReturn'], 'json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php' => ['PhanNoopNew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturn', 'PhanTypePossiblyInvalidDimOffset'], - 'json-endpoints/class.wpcom-json-api-site-settings-endpoint.php' => ['PhanDeprecatedFunction', 'PhanNoopNew', 'PhanParamTooMany', 'PhanRedundantCondition', 'PhanRedundantConditionInLoop', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturn', 'PhanTypePossiblyInvalidDimOffset'], + 'json-endpoints/class.wpcom-json-api-site-settings-endpoint.php' => ['PhanDeprecatedFunction', 'PhanNoopNew', 'PhanRedundantCondition', 'PhanRedundantConditionInLoop', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturn', 'PhanTypePossiblyInvalidDimOffset'], 'json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php' => ['PhanNoopNew'], 'json-endpoints/class.wpcom-json-api-site-settings-v1-3-endpoint.php' => ['PhanNoopNew'], 'json-endpoints/class.wpcom-json-api-site-settings-v1-4-endpoint.php' => ['PhanNoopNew'], @@ -268,9 +266,9 @@ 'json-endpoints/class.wpcom-json-api-update-customcss.php' => ['PhanNoopNew', 'PhanTypeMismatchReturn'], 'json-endpoints/class.wpcom-json-api-update-media-endpoint.php' => ['PhanNoopNew', 'PhanTypeMismatchReturn'], 'json-endpoints/class.wpcom-json-api-update-media-v1-1-endpoint.php' => ['PhanNoopNew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturn'], - 'json-endpoints/class.wpcom-json-api-update-post-endpoint.php' => ['PhanNoopNew', 'PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchReturn', 'PhanTypePossiblyInvalidDimOffset'], - 'json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php' => ['PhanNoopNew', 'PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchReturn', 'PhanTypePossiblyInvalidDimOffset'], - 'json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php' => ['PhanNoopNew', 'PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredVariable', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypePossiblyInvalidDimOffset'], + 'json-endpoints/class.wpcom-json-api-update-post-endpoint.php' => ['PhanNoopNew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchReturn', 'PhanTypePossiblyInvalidDimOffset'], + 'json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php' => ['PhanNoopNew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchReturn', 'PhanTypePossiblyInvalidDimOffset'], + 'json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php' => ['PhanNoopNew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredVariable', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypePossiblyInvalidDimOffset'], 'json-endpoints/class.wpcom-json-api-update-site-homepage-endpoint.php' => ['PhanNoopNew', 'PhanTypeMismatchReturn'], 'json-endpoints/class.wpcom-json-api-update-site-logo-endpoint.php' => ['PhanNoopNew', 'PhanTypeMismatchReturn'], 'json-endpoints/class.wpcom-json-api-update-taxonomy-endpoint.php' => ['PhanNoopNew', 'PhanTypeMismatchArgument', 'PhanTypeMismatchReturn'], @@ -323,12 +321,12 @@ 'modules/google-fonts/current/load-google-fonts.php' => ['PhanNoopNew', 'PhanTypeArraySuspicious', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchReturnProbablyReal'], 'modules/gravatar-hovercards.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgumentProbablyReal'], 'modules/infinite-scroll.php' => ['PhanUndeclaredClassMethod'], - 'modules/infinite-scroll/infinity.php' => ['PhanNoopNew', 'PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanRedundantCondition', 'PhanTypeComparisonToArray', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypeMissingReturn'], + 'modules/infinite-scroll/infinity.php' => ['PhanNoopNew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanRedundantCondition', 'PhanTypeComparisonToArray', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypeMissingReturn'], 'modules/latex.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'modules/likes.php' => ['PhanPluginRedundantAssignment', 'PhanUndeclaredFunction'], 'modules/likes/jetpack-likes-master-iframe.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'modules/likes/jetpack-likes-settings.php' => ['PhanDeprecatedFunction', 'PhanRedundantCondition'], - 'modules/markdown/easy-markdown.php' => ['PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanUndeclaredProperty'], + 'modules/markdown/easy-markdown.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanUndeclaredProperty'], 'modules/memberships/class-jetpack-memberships.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredMethod'], 'modules/module-headings.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnProbablyReal'], 'modules/monitor.php' => ['PhanNoopNew', 'PhanTypeMismatchReturnProbablyReal'], @@ -401,8 +399,6 @@ 'modules/subscriptions/views.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMissingReturn', 'PhanTypePossiblyInvalidDimOffset'], 'modules/theme-tools/compat/twentyfourteen.php' => ['PhanRedefineFunction'], 'modules/theme-tools/compat/twentynineteen.php' => ['PhanRedefineFunction'], - 'modules/theme-tools/compat/twentysixteen.php' => ['PhanParamTooMany'], - 'modules/theme-tools/compat/twentytwenty.php' => ['PhanParamTooMany'], 'modules/theme-tools/content-options.php' => ['PhanRedefineFunction'], 'modules/theme-tools/content-options/author-bio.php' => ['PhanRedefineFunction', 'PhanTypeMismatchArgument'], 'modules/theme-tools/content-options/blog-display.php' => ['PhanPluginDuplicateExpressionAssignmentOperation', 'PhanRedefineFunction'], @@ -444,7 +440,7 @@ 'modules/widgets/flickr.php' => ['PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMissingReturn'], 'modules/widgets/flickr/form.php' => ['PhanTypeMismatchArgument'], 'modules/widgets/follow-button.php' => ['PhanPluginUseReturnValueInternalKnown', 'PhanTypeMissingReturn'], - 'modules/widgets/gallery.php' => ['PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypeMissingReturn'], + 'modules/widgets/gallery.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypeMissingReturn'], 'modules/widgets/goodreads.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMissingReturn'], 'modules/widgets/google-translate.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanRedundantCondition', 'PhanTypeMissingReturn'], 'modules/widgets/gravatar-profile.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMissingReturn'], @@ -481,8 +477,8 @@ 'src/class-jetpack-modules-overrides.php' => ['PhanRedundantCondition'], 'tests/php/3rd-party/test_class.jetpack-amp-support.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'tests/php/_inc/lib/test-class-jetpack-blogging-prompts.php' => ['PhanTypeMismatchArgumentNullable'], - 'tests/php/_inc/lib/test_class.rest-api-authentication.php' => ['PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing'], - 'tests/php/_inc/lib/test_class.rest-api-endpoints.php' => ['PhanParamTooMany', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeInvalidLeftOperandOfAdd', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], + 'tests/php/_inc/lib/test_class.rest-api-authentication.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], + 'tests/php/_inc/lib/test_class.rest-api-endpoints.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeInvalidLeftOperandOfAdd', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], 'tests/php/core-api/test_class-wpcom-rest-field-controller.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/core-api/wpcom-endpoints/test-class-wpcom-rest-api-v2-endpoint-admin-menu.php' => ['PhanPluginMixedKeyNoKey', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchReturn'], 'tests/php/core-api/wpcom-endpoints/test-class-wpcom-rest-api-v2-endpoint-external-media.php' => ['PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgument'], @@ -503,26 +499,23 @@ 'tests/php/media/test-class.jetpack-media-extractor.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/media/test-class.jetpack-post-images.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'tests/php/modules/photon/test_class.jetpack-photon-static-asset-cdn.php' => ['PhanTypeMismatchProperty'], - 'tests/php/modules/post-by-email/test-class.post-by-email-api.php' => ['PhanParamTooMany'], 'tests/php/modules/publicize/test_class.publicize.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'tests/php/modules/sharedaddy/test-class.recaptcha.php' => ['PhanDeprecatedClass'], 'tests/php/modules/shortcodes/test-class.archives.php' => ['PhanPluginDuplicateAdjacentStatement'], 'tests/php/modules/shortcodes/test-class.getty.php' => ['PhanPluginInvalidPregRegex'], - 'tests/php/modules/shortcodes/test-class.gravatar.php' => ['PhanParamTooMany'], 'tests/php/modules/shortcodes/test-class.instagram.php' => ['PhanTypeMismatchArgument'], - 'tests/php/modules/shortcodes/test-class.mixcloud.php' => ['PhanParamTooMany'], 'tests/php/modules/shortcodes/test-class.slideshow.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'tests/php/modules/shortcodes/test-class.ted.php' => ['PhanTypeMismatchArgument'], 'tests/php/modules/shortcodes/test-class.tweet.php' => ['PhanTypeMismatchArgument'], 'tests/php/modules/shortcodes/test-class.vimeo.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'tests/php/modules/shortcodes/test-oembed-pocketcasts.php' => ['PhanTypeMismatchArgument'], - 'tests/php/modules/sitemaps/test-class.sitemap-buffer.php' => ['PhanParamTooMany', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchPropertyProbablyReal'], + 'tests/php/modules/sitemaps/test-class.sitemap-buffer.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchPropertyProbablyReal'], 'tests/php/modules/sitemaps/test-class.sitemap-librarian.php' => ['PhanTypeMismatchArgument'], 'tests/php/modules/subscriptions/test_class.jetpack-subscriptions.php' => ['PhanDeprecatedProperty', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/modules/widgets/test_contact-info-widget.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'tests/php/modules/widgets/test_wordpress-post-widget.php' => ['PhanDeprecatedFunction', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/sync/class-test-jetpack-sync-search.php' => ['PhanStaticCallToNonStatic', 'PhanTypeMismatchArgumentInternal'], - 'tests/php/sync/class-wp-test-jetpack-sync-queue-base-tests.php' => ['PhanParamTooMany', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], + 'tests/php/sync/class-wp-test-jetpack-sync-queue-base-tests.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/sync/server/class.jetpack-sync-server-eventstore.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'tests/php/sync/server/class.jetpack-sync-test-object-factory.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'tests/php/sync/server/class.jetpack-sync-test-replicastore.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeInvalidLeftOperandOfAdd'], @@ -531,17 +524,16 @@ 'tests/php/sync/test_class.jetpack-sync-base.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturn'], 'tests/php/sync/test_class.jetpack-sync-callables.php' => ['PhanNoopNew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMissingReturn'], 'tests/php/sync/test_class.jetpack-sync-comments.php' => ['PhanTypeMismatchArgument'], - 'tests/php/sync/test_class.jetpack-sync-full-immediately.php' => ['PhanParamTooMany', 'PhanPluginDuplicateAdjacentStatement', 'PhanPossiblyUndeclaredVariable', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal'], - 'tests/php/sync/test_class.jetpack-sync-full.php' => ['PhanParamTooMany', 'PhanPluginDuplicateAdjacentStatement', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchArgumentReal', 'PhanUndeclaredProperty'], + 'tests/php/sync/test_class.jetpack-sync-full-immediately.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanPossiblyUndeclaredVariable', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal'], + 'tests/php/sync/test_class.jetpack-sync-full.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchArgumentReal', 'PhanUndeclaredProperty'], 'tests/php/sync/test_class.jetpack-sync-import.php' => ['PhanRedefineClass'], 'tests/php/sync/test_class.jetpack-sync-integration.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchPropertyProbablyReal'], 'tests/php/sync/test_class.jetpack-sync-menus.php' => ['PhanTypeMismatchArgumentProbablyReal'], - 'tests/php/sync/test_class.jetpack-sync-meta.php' => ['PhanParamTooMany', 'PhanTypeMismatchArgument'], - 'tests/php/sync/test_class.jetpack-sync-modules-stats.php' => ['PhanParamTooMany'], + 'tests/php/sync/test_class.jetpack-sync-meta.php' => ['PhanParamTooMany', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument'], 'tests/php/sync/test_class.jetpack-sync-posts.php' => ['PhanNoopNew', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/sync/test_class.jetpack-sync-queue-custom-table.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'tests/php/sync/test_class.jetpack-sync-queue-options-table.php' => ['PhanTypeMismatchArgumentProbablyReal'], - 'tests/php/sync/test_class.jetpack-sync-queue.php' => ['PhanParamTooMany', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], + 'tests/php/sync/test_class.jetpack-sync-queue.php' => ['PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/sync/test_class.jetpack-sync-sender.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanTypeMismatchArgumentProbablyReal'], 'tests/php/sync/test_class.jetpack-sync-term-relationships.php' => ['PhanPluginUnreachableCode'], 'tests/php/sync/test_class.jetpack-sync-themes.php' => ['PhanPluginDuplicateAdjacentStatement'], diff --git a/projects/plugins/jetpack/3rd-party/class.jetpack-amp-support.php b/projects/plugins/jetpack/3rd-party/class.jetpack-amp-support.php index 3cc6c12fa04cd..b1320ef4be8a4 100644 --- a/projects/plugins/jetpack/3rd-party/class.jetpack-amp-support.php +++ b/projects/plugins/jetpack/3rd-party/class.jetpack-amp-support.php @@ -146,7 +146,7 @@ public static function amp_disable_the_content_filters() { */ public static function disable_comment_likes_before_the_content( $content ) { if ( self::is_amp_request() ) { - remove_filter( 'comment_text', 'comment_like_button', 12, 2 ); + remove_filter( 'comment_text', 'comment_like_button', 12 ); } return $content; } diff --git a/projects/plugins/jetpack/3rd-party/woocommerce.php b/projects/plugins/jetpack/3rd-party/woocommerce.php index 98f2a7419dc6f..3311389016019 100644 --- a/projects/plugins/jetpack/3rd-party/woocommerce.php +++ b/projects/plugins/jetpack/3rd-party/woocommerce.php @@ -89,7 +89,7 @@ function jetpack_woocommerce_remove_share() { if ( is_cart() || is_checkout() || is_account_page() ) { remove_filter( 'the_content', 'sharing_display', 19 ); if ( class_exists( 'Jetpack_Likes' ) ) { - remove_filter( 'the_content', array( Jetpack_Likes::init(), 'post_likes' ), 30, 1 ); + remove_filter( 'the_content', array( Jetpack_Likes::init(), 'post_likes' ), 30 ); } } } diff --git a/projects/plugins/jetpack/_inc/lib/admin-pages/class-jetpack-redux-state-helper.php b/projects/plugins/jetpack/_inc/lib/admin-pages/class-jetpack-redux-state-helper.php index 2c6865602d2b3..5933556739519 100644 --- a/projects/plugins/jetpack/_inc/lib/admin-pages/class-jetpack-redux-state-helper.php +++ b/projects/plugins/jetpack/_inc/lib/admin-pages/class-jetpack-redux-state-helper.php @@ -314,7 +314,7 @@ public static function get_update_modal_data() { // This allows us to embed videopress videos into the release post. add_filter( 'wp_kses_allowed_html', array( __CLASS__, 'allow_post_embed_iframe' ), 10, 2 ); $content = wp_kses_post( $post['content'] ); - remove_filter( 'wp_kses_allowed_html', array( __CLASS__, 'allow_post_embed_iframe' ), 10, 2 ); + remove_filter( 'wp_kses_allowed_html', array( __CLASS__, 'allow_post_embed_iframe' ), 10 ); $post_title = isset( $post['title'] ) ? $post['title'] : null; $title = wp_kses( $post_title, array() ); @@ -491,7 +491,7 @@ function jetpack_current_user_data() { 'email' => $current_user->user_email, 'id' => $current_user->ID, 'wpcomUser' => $dotcom_data, - 'gravatar' => get_avatar_url( $current_user->ID, 64, 'mm', '', array( 'force_display' => true ) ), + 'gravatar' => get_avatar_url( $current_user->ID ), 'permissions' => array( 'admin_page' => current_user_can( 'jetpack_admin_page' ), 'connect' => current_user_can( 'jetpack_connect' ), diff --git a/projects/plugins/jetpack/changelog/fix-phan-PhanParamTooMany b/projects/plugins/jetpack/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..b7c5b86e8e3b1 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Code: Remove extra params on function calls. diff --git a/projects/plugins/jetpack/class.frame-nonce-preview.php b/projects/plugins/jetpack/class.frame-nonce-preview.php index dee3ee1a6f53d..4f2097cefe85a 100644 --- a/projects/plugins/jetpack/class.frame-nonce-preview.php +++ b/projects/plugins/jetpack/class.frame-nonce-preview.php @@ -102,7 +102,7 @@ public function maybe_display_post( $query ) { * @return array */ public function set_post_to_publish( $posts ) { - remove_filter( 'posts_results', array( $this, 'set_post_to_publish' ), 10, 2 ); + remove_filter( 'posts_results', array( $this, 'set_post_to_publish' ), 10 ); if ( empty( $posts ) || is_user_logged_in() || ! $this->is_frame_nonce_valid() ) { return $posts; diff --git a/projects/plugins/jetpack/class.jetpack-cli.php b/projects/plugins/jetpack/class.jetpack-cli.php index 664ce0003e505..00b94981be5fc 100644 --- a/projects/plugins/jetpack/class.jetpack-cli.php +++ b/projects/plugins/jetpack/class.jetpack-cli.php @@ -1874,7 +1874,7 @@ public function publicize( $args, $named_args ) { WP_CLI::success( __( 'All Jetpack Social connections were successfully disconnected.', 'jetpack' ) ); } else { /* translators: %s is a lowercase string for a social network. */ - WP_CLI::success( __( 'All Jetpack Social connections to %s were successfully disconnected.', 'jetpack' ), $service ); + WP_CLI::success( sprintf( __( 'All Jetpack Social connections to %s were successfully disconnected.', 'jetpack' ), $service ) ); } } } elseif ( false !== $publicize->disconnect( false, $identifier ) ) { diff --git a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php index 9852478a7c53d..b1737cfa10a21 100644 --- a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php +++ b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php @@ -689,6 +689,7 @@ public function update_settings() { if ( $value ) { Jetpack::activate_module( $blog_id, 'search' ); } else { + // @phan-suppress-next-line PhanParamTooMany -- Phan doesn't know about the WP.com variant of the Jetpack class. Jetpack::deactivate_module( $blog_id, 'search' ); } $updated[ $key ] = (bool) $value; @@ -705,6 +706,7 @@ public function update_settings() { if ( $value ) { Jetpack::activate_module( $blog_id, 'related-posts' ); } else { + // @phan-suppress-next-line PhanParamTooMany -- Phan doesn't know about the WP.com variant of the Jetpack class. Jetpack::deactivate_module( $blog_id, 'related-posts' ); } } diff --git a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php index a0408c350c4cb..f806c059c9a1a 100644 --- a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php +++ b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php @@ -257,7 +257,7 @@ public function write_post( $path, $blog_id, $post_id ) { // unhook publicize, it's hooked again later -- without this, skipping services is impossible. if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { - remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 ); + remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100 ); add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) ); } diff --git a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php index dc14a2ab1f3cb..0911e44cf2d4a 100644 --- a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php +++ b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php @@ -269,7 +269,7 @@ public function write_post( $path, $blog_id, $post_id ) { // unhook publicize, it's hooked again later -- without this, skipping services is impossible. if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { - remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 ); + remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100 ); add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) ); if ( $this->should_load_theme_functions( $post_id ) ) { diff --git a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php index 84f0d63024dc3..90c6199663a1c 100644 --- a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php +++ b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php @@ -196,7 +196,7 @@ public function write_post( $path, $blog_id, $post_id ) { // unhook publicize, it's hooked again later -- without this, skipping services is impossible. if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { - remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 ); + remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100 ); if ( $this->should_load_theme_functions( $post_id ) ) { $this->load_theme_functions(); diff --git a/projects/plugins/jetpack/modules/infinite-scroll/infinity.php b/projects/plugins/jetpack/modules/infinite-scroll/infinity.php index dd50fb6292128..287b4701c58b9 100644 --- a/projects/plugins/jetpack/modules/infinite-scroll/infinity.php +++ b/projects/plugins/jetpack/modules/infinite-scroll/infinity.php @@ -1409,7 +1409,7 @@ public function query() { $infinite_scroll_query->query( $query_args ); - remove_filter( 'posts_where', array( $this, 'query_time_filter' ), 10, 2 ); + remove_filter( 'posts_where', array( $this, 'query_time_filter' ), 10 ); $results = array(); diff --git a/projects/plugins/jetpack/modules/markdown/easy-markdown.php b/projects/plugins/jetpack/modules/markdown/easy-markdown.php index b39cbf0db297c..fb61aa1835917 100644 --- a/projects/plugins/jetpack/modules/markdown/easy-markdown.php +++ b/projects/plugins/jetpack/modules/markdown/easy-markdown.php @@ -171,10 +171,10 @@ public function unload_markdown_for_posts() { remove_filter( 'wp_kses_allowed_html', array( $this, 'wp_kses_allowed_html' ) ); remove_action( 'after_wp_tiny_mce', array( $this, 'after_wp_tiny_mce' ) ); remove_action( 'wp_insert_post', array( $this, 'wp_insert_post' ) ); - remove_filter( 'wp_insert_post_data', array( $this, 'wp_insert_post_data' ), 10, 2 ); - remove_filter( 'edit_post_content', array( $this, 'edit_post_content' ), 10, 2 ); - remove_filter( 'edit_post_content_filtered', array( $this, 'edit_post_content_filtered' ), 10, 2 ); - remove_action( 'wp_restore_post_revision', array( $this, 'wp_restore_post_revision' ), 10, 2 ); + remove_filter( 'wp_insert_post_data', array( $this, 'wp_insert_post_data' ), 10 ); + remove_filter( 'edit_post_content', array( $this, 'edit_post_content' ), 10 ); + remove_filter( 'edit_post_content_filtered', array( $this, 'edit_post_content_filtered' ), 10 ); + remove_action( 'wp_restore_post_revision', array( $this, 'wp_restore_post_revision' ), 10 ); remove_filter( '_wp_post_revision_fields', array( $this, 'wp_post_revision_fields' ) ); remove_action( 'xmlrpc_call', array( $this, 'xmlrpc_actions' ) ); remove_filter( 'content_save_pre', array( $this, 'preserve_code_blocks' ), 1 ); diff --git a/projects/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php b/projects/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php index d70f0519b7be8..db6ac01c9ad67 100644 --- a/projects/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php +++ b/projects/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php @@ -57,7 +57,7 @@ function twentysixteen_remove_share() { if ( is_single() || is_archive() || is_home() ) { remove_filter( 'the_excerpt', 'sharing_display', 19 ); if ( class_exists( 'Jetpack_Likes' ) ) { - remove_filter( 'the_excerpt', array( Jetpack_Likes::init(), 'post_likes' ), 30, 1 ); + remove_filter( 'the_excerpt', array( Jetpack_Likes::init(), 'post_likes' ), 30 ); } } } diff --git a/projects/plugins/jetpack/modules/theme-tools/compat/twentytwenty.php b/projects/plugins/jetpack/modules/theme-tools/compat/twentytwenty.php index e842f0fe0eb23..2fea50aaf6fac 100644 --- a/projects/plugins/jetpack/modules/theme-tools/compat/twentytwenty.php +++ b/projects/plugins/jetpack/modules/theme-tools/compat/twentytwenty.php @@ -79,7 +79,7 @@ function twentytwenty_no_sharing_on_excerpts() { // Remove Likes. if ( class_exists( 'Jetpack_Likes' ) ) { - remove_filter( 'the_excerpt', array( Jetpack_Likes::init(), 'post_likes' ), 30, 1 ); + remove_filter( 'the_excerpt', array( Jetpack_Likes::init(), 'post_likes' ), 30 ); } } } diff --git a/projects/plugins/jetpack/modules/widgets/gallery.php b/projects/plugins/jetpack/modules/widgets/gallery.php index dfa0acdb0a439..1d62bb73302f4 100644 --- a/projects/plugins/jetpack/modules/widgets/gallery.php +++ b/projects/plugins/jetpack/modules/widgets/gallery.php @@ -108,8 +108,7 @@ public function widget( $args, $instance ) { // of logic in that method that shouldn't be duplicated. $carousel = new Jetpack_Carousel(); - // First parameter is $output, which comes from filters, and causes bypass of the asset enqueuing. Passing null is correct. - $carousel->enqueue_assets( null ); + $carousel->enqueue_assets(); } } diff --git a/projects/plugins/jetpack/tests/php/_inc/lib/test_class.rest-api-authentication.php b/projects/plugins/jetpack/tests/php/_inc/lib/test_class.rest-api-authentication.php index b8ce59e373ce7..9d855989d087a 100644 --- a/projects/plugins/jetpack/tests/php/_inc/lib/test_class.rest-api-authentication.php +++ b/projects/plugins/jetpack/tests/php/_inc/lib/test_class.rest-api-authentication.php @@ -68,8 +68,8 @@ public function tear_down() { unset( $_SERVER[ $key ] ); } } - remove_filter( 'rest_pre_dispatch', array( $this, 'rest_pre_dispatch' ), 100, 2 ); - remove_filter( 'pre_option_jetpack_private_options', array( $this, 'mock_jetpack_private_options' ), 10, 2 ); + remove_filter( 'rest_pre_dispatch', array( $this, 'rest_pre_dispatch' ), 100 ); + remove_filter( 'pre_option_jetpack_private_options', array( $this, 'mock_jetpack_private_options' ), 10 ); wp_set_current_user( 0 ); $jetpack = Jetpack::init(); // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable } diff --git a/projects/plugins/jetpack/tests/php/_inc/lib/test_class.rest-api-endpoints.php b/projects/plugins/jetpack/tests/php/_inc/lib/test_class.rest-api-endpoints.php index 8e9a9459462c5..c63e999ec2139 100644 --- a/projects/plugins/jetpack/tests/php/_inc/lib/test_class.rest-api-endpoints.php +++ b/projects/plugins/jetpack/tests/php/_inc/lib/test_class.rest-api-endpoints.php @@ -657,7 +657,7 @@ public function test_unlink_user() { // Create REST request in JSON format and dispatch $response = $this->create_and_get_request( 'connection/user', array( 'linked' => false ), 'POST' ); - remove_filter( 'pre_http_request', array( $this, 'mock_xmlrpc_success' ), 10, 3 ); + remove_filter( 'pre_http_request', array( $this, 'mock_xmlrpc_success' ), 10 ); // No way. Master user can't be unlinked. This is intended $this->assertResponseStatus( 403, $response ); @@ -686,7 +686,7 @@ public function test_unlink_user_cache_data_removal() { // Create REST request in JSON format and dispatch. $this->create_and_get_request( 'connection/user', array( 'linked' => false ), 'POST' ); - remove_filter( 'pre_http_request', array( $this, 'mock_xmlrpc_success' ), 10, 3 ); + remove_filter( 'pre_http_request', array( $this, 'mock_xmlrpc_success' ), 10 ); // Transient should be deleted after unlinking user. $this->assertFalse( get_transient( $transient_key ) ); diff --git a/projects/plugins/jetpack/tests/php/modules/post-by-email/test-class.post-by-email-api.php b/projects/plugins/jetpack/tests/php/modules/post-by-email/test-class.post-by-email-api.php index d14983fed6b4e..6b122b3b15c0e 100644 --- a/projects/plugins/jetpack/tests/php/modules/post-by-email/test-class.post-by-email-api.php +++ b/projects/plugins/jetpack/tests/php/modules/post-by-email/test-class.post-by-email-api.php @@ -211,7 +211,7 @@ public function rest_pre_dispatch( $result, $server ) { if ( $user_id ) { wp_set_current_user( $user_id ); } - $auth = $server->check_authentication( null ); + $auth = $server->check_authentication(); if ( true === $auth ) { return $result; } diff --git a/projects/plugins/jetpack/tests/php/modules/shortcodes/test-class.gravatar.php b/projects/plugins/jetpack/tests/php/modules/shortcodes/test-class.gravatar.php index c8c8216ba2660..e158c2af17d0f 100644 --- a/projects/plugins/jetpack/tests/php/modules/shortcodes/test-class.gravatar.php +++ b/projects/plugins/jetpack/tests/php/modules/shortcodes/test-class.gravatar.php @@ -83,7 +83,7 @@ public function test_shortcodes_gravatar_profile() { $this->assertStringContainsString( '

      ', $shortcode_content ); $this->assertStringContainsString( " 96 ) ) ); $this->assertStringContainsString( "assertSame( '', $shortcode_content ); - remove_filter( 'pre_http_request', $http_request_filter, 10, 1 ); + remove_filter( 'pre_http_request', $http_request_filter, 10 ); } } diff --git a/projects/plugins/jetpack/tests/php/modules/shortcodes/test-class.mixcloud.php b/projects/plugins/jetpack/tests/php/modules/shortcodes/test-class.mixcloud.php index 4513bd850b40c..a3a77803bd3f2 100644 --- a/projects/plugins/jetpack/tests/php/modules/shortcodes/test-class.mixcloud.php +++ b/projects/plugins/jetpack/tests/php/modules/shortcodes/test-class.mixcloud.php @@ -86,7 +86,7 @@ public function test_shortcodes_mixcloud_remote_get_wp_error() { $this->assertEquals( $this->invalid_markup, $shortcode_content ); - remove_filter( 'pre_http_request', $http_request_filter, 10, 1 ); + remove_filter( 'pre_http_request', $http_request_filter, 10 ); } /** @@ -118,7 +118,7 @@ public function test_shortcodes_mixcloud_no_sandbox() { $this->assertEquals( '', $shortcode_content ); - remove_filter( 'pre_http_request', $http_request_filter, 10, 1 ); + remove_filter( 'pre_http_request', $http_request_filter, 10 ); } /** @@ -151,6 +151,6 @@ public function test_shortcodes_mixcloud_sandbox_have_allow_popups() { $this->assertEquals( '', $shortcode_content ); - remove_filter( 'pre_http_request', $http_request_filter, 10, 1 ); + remove_filter( 'pre_http_request', $http_request_filter, 10 ); } } diff --git a/projects/plugins/jetpack/tests/php/modules/sitemaps/test-class.sitemap-buffer.php b/projects/plugins/jetpack/tests/php/modules/sitemaps/test-class.sitemap-buffer.php index 1a46e5223ac27..27a52aacc6142 100644 --- a/projects/plugins/jetpack/tests/php/modules/sitemaps/test-class.sitemap-buffer.php +++ b/projects/plugins/jetpack/tests/php/modules/sitemaps/test-class.sitemap-buffer.php @@ -117,7 +117,7 @@ public function test_sitemap_buffer_add_item_at_byte_capacity() { * @since 4.7.0 */ public function test_sitemap_buffer_add_item_below_byte_capacity() { - $buffer = new Jetpack_Sitemap_Buffer_Dummy( 1, 48, '(', ')', '1970-01-01 00:00:00' ); + $buffer = new Jetpack_Sitemap_Buffer_Dummy( 1, 48, '1970-01-01 00:00:00' ); $buffer->append( 'foobarbazquux' ); $buffer->append( 'crunchly' ); $this->assertEquals( diff --git a/projects/plugins/jetpack/tests/php/sync/class-wp-test-jetpack-sync-queue-base-tests.php b/projects/plugins/jetpack/tests/php/sync/class-wp-test-jetpack-sync-queue-base-tests.php index dfa861b1077a7..097030115cfbb 100644 --- a/projects/plugins/jetpack/tests/php/sync/class-wp-test-jetpack-sync-queue-base-tests.php +++ b/projects/plugins/jetpack/tests/php/sync/class-wp-test-jetpack-sync-queue-base-tests.php @@ -164,7 +164,7 @@ public function test_checkout_of_item_larger_than_memory_fetches_it_solo() { } public function test_checkout_enforced_across_multiple_instances() { - $other_queue = new Queue( $this->queue->id, 2 ); + $other_queue = new Queue( $this->queue->id ); $this->queue->add_all( array( 1, 2, 3, 4, 5 ) ); diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full-immediately.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full-immediately.php index 057957286b577..4a83a9127a939 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full-immediately.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full-immediately.php @@ -690,7 +690,7 @@ public function test_full_sync_sends_all_post_terms() { // reset the storage, check value, and do full sync - storage should be set! $this->server_replica_storage->reset(); - $this->assertFalse( $this->server_replica_storage->get_the_terms( $post_id, 'post_tag', 'Not empty' ) ); + $this->assertFalse( $this->server_replica_storage->get_the_terms( $post_id, 'post_tag' ), 'Not empty' ); $this->full_sync->start(); $this->sender->do_full_sync(); diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full.php index acf1cd60c9191..89466856556cd 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full.php @@ -855,7 +855,7 @@ public function test_full_sync_sends_all_post_terms() { // reset the storage, check value, and do full sync - storage should be set! $this->server_replica_storage->reset(); - $this->assertFalse( $this->server_replica_storage->get_the_terms( $post_id, 'post_tag', 'Not empty' ) ); + $this->assertFalse( $this->server_replica_storage->get_the_terms( $post_id, 'post_tag' ), 'Not empty' ); $this->full_sync->start(); $this->sender->do_full_sync(); @@ -1603,7 +1603,7 @@ public function test_initial_sync_doesnt_sync_subscribers() { $this->sender->do_full_sync(); $this->assertEquals( 3, $this->server_replica_storage->user_count() ); // finally, let's make sure that the initial sync method actually invokes our initial sync user config - Actions::do_initial_sync( '4.2', '4.1' ); + Actions::do_initial_sync(); $current_user = wp_get_current_user(); $expected_sync_config = array( diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-meta.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-meta.php index 4fa39a0b76221..eaa68b6d052e6 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-meta.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-meta.php @@ -343,7 +343,8 @@ public function test_get_object_by_id_size_limit_exceeded() { update_post_meta( $this->post_id, $this->whitelisted_post_meta, $meta_test_value ); $module = Modules::get_module( 'meta' ); - $metas = $module->get_object_by_id( 'post', $this->post_id, $this->whitelisted_post_meta ); + '@phan-var \Automattic\Jetpack\Sync\Modules\Meta $module'; + $metas = $module->get_object_by_id( 'post', $this->post_id, $this->whitelisted_post_meta ); $this->assertSame( '', $metas[0]['meta_value'] ); } @@ -355,7 +356,8 @@ public function test_get_object_by_id_size_limit_max() { update_post_meta( $this->post_id, $this->whitelisted_post_meta, $meta_test_value ); $module = Modules::get_module( 'meta' ); - $metas = $module->get_object_by_id( 'post', $this->post_id, $this->whitelisted_post_meta ); + '@phan-var \Automattic\Jetpack\Sync\Modules\Meta $module'; + $metas = $module->get_object_by_id( 'post', $this->post_id, $this->whitelisted_post_meta ); $this->assertEquals( $meta_test_value, $metas[0]['meta_value'] ); } diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-modules-stats.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-modules-stats.php index 4a48303be6802..97d5dad753769 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-modules-stats.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-modules-stats.php @@ -98,8 +98,8 @@ public function test_sends_stats_data_on_heartbeat_on_multisite() { $action = $this->server_event_storage->get_most_recent_event( 'jetpack_sync_heartbeat_stats' ); - \Jetpack_Options::delete_option( 'blog_token', 'asdasd.123123' ); - \Jetpack_Options::delete_option( 'id', 1234 ); + \Jetpack_Options::delete_option( 'blog_token' ); + \Jetpack_Options::delete_option( 'id' ); restore_current_blog(); $this->assertEquals( self::TEST_STAT_VALUE, $action->args[0][ self::TEST_STAT_NAME ] ); diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-queue.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-queue.php index 16324adb2d613..ef86d4f753f06 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-queue.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-queue.php @@ -166,7 +166,7 @@ public function test_checkout_of_item_larger_than_memory_fetches_it_solo() { } public function test_checkout_enforced_across_multiple_instances() { - $other_queue = new Queue( $this->queue->id, 2 ); + $other_queue = new Queue( $this->queue->id ); $this->queue->add_all( array( 1, 2, 3, 4, 5 ) ); diff --git a/projects/plugins/protect/.phan/baseline.php b/projects/plugins/protect/.phan/baseline.php index fba380eb870a7..1ae49ee4826f0 100644 --- a/projects/plugins/protect/.phan/baseline.php +++ b/projects/plugins/protect/.phan/baseline.php @@ -9,7 +9,6 @@ */ return [ // # Issue statistics: - // PhanParamTooMany : 3 occurrences // PhanNoopNew : 1 occurrence // PhanPluginDuplicateConditionalNullCoalescing : 1 occurrence // PhanTypeMismatchReturnProbablyReal : 1 occurrence @@ -18,7 +17,6 @@ 'file_suppressions' => [ 'jetpack-protect.php' => ['PhanNoopNew'], 'src/class-credentials.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnProbablyReal'], - 'src/class-rest-controller.php' => ['PhanParamTooMany'], ], // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases) diff --git a/projects/plugins/protect/changelog/fix-phan-PhanParamTooMany b/projects/plugins/protect/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/plugins/protect/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/plugins/protect/src/class-rest-controller.php b/projects/plugins/protect/src/class-rest-controller.php index 0aa752ddfd6d1..4565febdf4e3b 100644 --- a/projects/plugins/protect/src/class-rest-controller.php +++ b/projects/plugins/protect/src/class-rest-controller.php @@ -438,7 +438,7 @@ public static function api_set_waf_upgrade_seen_status() { */ public static function api_get_onboarding_progress() { $progress = Onboarding::get_current_user_progress(); - return rest_ensure_response( $progress, 200 ); + return rest_ensure_response( $progress ); } /** @@ -469,6 +469,6 @@ public static function api_complete_onboarding_steps( $request ) { */ public static function api_get_scan_history() { $scan_history = Scan_History::get_scan_history( false ); - return rest_ensure_response( $scan_history, 200 ); + return rest_ensure_response( $scan_history ); } } diff --git a/projects/plugins/vaultpress/.phan/baseline.php b/projects/plugins/vaultpress/.phan/baseline.php index d3ee7abd52ef4..5a7d7308a8485 100644 --- a/projects/plugins/vaultpress/.phan/baseline.php +++ b/projects/plugins/vaultpress/.phan/baseline.php @@ -36,7 +36,6 @@ // PhanUndeclaredVariable : 2 occurrences // PhanAccessMethodProtected : 1 occurrence // PhanParamSpecial1 : 1 occurrence - // PhanParamTooMany : 1 occurrence // PhanPluginDuplicateExpressionAssignment : 1 occurrence // PhanRedundantCondition : 1 occurrence // PhanTypeInvalidDimOffset : 1 occurrence @@ -50,7 +49,7 @@ 'class.vaultpress-cli.php' => ['PhanUndeclaredFunctionInCallable'], 'class.vaultpress-database.php' => ['PhanParamSpecial1', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPossiblyUndeclaredVariable', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeNonVarPassByRef', 'PhanTypeObjectUnsetDeclaredProperty', 'PhanUndeclaredConstant', 'PhanUndeclaredProperty', 'PhanUndeclaredVariableDim'], 'class.vaultpress-filesystem.php' => ['PhanPluginNeverReturnMethod', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeNonVarPassByRef', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredVariable'], - 'class.vaultpress-hotfixes.php' => ['PhanDeprecatedFunction', 'PhanParamTooMany', 'PhanPluginSimplifyExpressionBool', 'PhanRedefineFunction', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypePossiblyInvalidDimOffset'], + 'class.vaultpress-hotfixes.php' => ['PhanDeprecatedFunction', 'PhanPluginSimplifyExpressionBool', 'PhanRedefineFunction', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypePossiblyInvalidDimOffset'], 'cron-tasks.php' => ['PhanRedefineFunction'], 'vaultpress.php' => ['PhanAccessMethodProtected', 'PhanDeprecatedFunction', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginDuplicateExpressionAssignment', 'PhanPluginNeverReturnMethod', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition', 'PhanTypeArraySuspiciousNullable', 'PhanTypeExpectedObjectPropAccessButGotNull', 'PhanTypeInvalidRightOperandOfNumericOp', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDimFetch', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredClassMethod', 'PhanUndeclaredClassReference', 'PhanUndeclaredConstant', 'PhanUndeclaredFunction', 'PhanUndeclaredMethod', 'PhanUndeclaredProperty', 'PhanUndeclaredVariable'], 'vp-scanner.php' => ['PhanCommentParamWithoutRealParam', 'PhanPossiblyUndeclaredVariable', 'PhanTypeInvalidDimOffset', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanUndeclaredFunction'], diff --git a/projects/plugins/vaultpress/changelog/fix-phan-PhanParamTooMany b/projects/plugins/vaultpress/changelog/fix-phan-PhanParamTooMany new file mode 100644 index 0000000000000..bceb16a46d5fe --- /dev/null +++ b/projects/plugins/vaultpress/changelog/fix-phan-PhanParamTooMany @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Code: Remove extra params on function calls. diff --git a/projects/plugins/vaultpress/class.vaultpress-hotfixes.php b/projects/plugins/vaultpress/class.vaultpress-hotfixes.php index 5b5e28a00f8c6..1d5c04812d8a3 100644 --- a/projects/plugins/vaultpress/class.vaultpress-hotfixes.php +++ b/projects/plugins/vaultpress/class.vaultpress-hotfixes.php @@ -30,7 +30,7 @@ function protect_youtube_embeds() { } wp_embed_unregister_handler( 'youtube_embed_url' ); - wp_embed_register_handler( 'youtube_embed_url', '#https?://(www.)?youtube\.com/(?:v|embed)/([^/]+)#i', array( $this, 'safe_embed_handler_youtube' ), 9, 4 ); + wp_embed_register_handler( 'youtube_embed_url', '#https?://(www.)?youtube\.com/(?:v|embed)/([^/]+)#i', array( $this, 'safe_embed_handler_youtube' ), 9 ); } function safe_embed_handler_youtube( $matches, $attr, $url, $rawattr ) { From 6d654b300515664c8314f70cb996ed19634752ac Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Fri, 31 Jan 2025 12:13:31 -0800 Subject: [PATCH 313/420] Social | Partially revert #41456 to use existing settings endpoints (#41461) * Revert changes to settings endpoint * Update the param name in social endpoint * Pass the API path based on active plugin * Make the front-end changes to use the dynamic endpoint for settings * Ensure to return module state from Jetpack endpoint * Add changelog * Fix unit tests --- ...te-social-to-use-unified-settings-endpoint | 4 + .../src/components/admin-page/header/index.js | 2 +- .../src/components/admin-page/index.tsx | 6 +- .../components/admin-page/test/index.test.jsx | 1 + .../toggles/social-module-toggle/index.tsx | 16 +- .../src/social-store/actions/index.ts | 4 +- .../actions/social-module-settings.ts | 20 +++ .../actions/social-plugin-settings.ts | 17 -- .../src/social-store/resolvers.ts | 14 +- .../src/social-store/selectors/index.ts | 4 +- .../selectors/social-module-settings.ts | 26 +++ .../selectors/social-plugin-settings.ts | 20 --- .../src/social-store/types.ts | 4 +- .../publicize-components/src/types.ts | 1 + ...te-social-to-use-unified-settings-endpoint | 4 + .../src/class-publicize-script-data.php | 5 +- .../publicize/src/class-publicize-setup.php | 3 - .../rest-api/class-settings-controller.php | 167 ------------------ ...lass.jetpack-core-api-module-endpoints.php | 5 + ...te-social-to-use-unified-settings-endpoint | 4 + ...te-social-to-use-unified-settings-endpoint | 4 + .../src/class-rest-settings-controller.php | 84 +++++++++ 22 files changed, 182 insertions(+), 233 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/update-social-to-use-unified-settings-endpoint create mode 100644 projects/js-packages/publicize-components/src/social-store/actions/social-module-settings.ts delete mode 100644 projects/js-packages/publicize-components/src/social-store/actions/social-plugin-settings.ts create mode 100644 projects/js-packages/publicize-components/src/social-store/selectors/social-module-settings.ts delete mode 100644 projects/js-packages/publicize-components/src/social-store/selectors/social-plugin-settings.ts create mode 100644 projects/packages/publicize/changelog/update-social-to-use-unified-settings-endpoint delete mode 100644 projects/packages/publicize/src/rest-api/class-settings-controller.php create mode 100644 projects/plugins/jetpack/changelog/update-social-to-use-unified-settings-endpoint create mode 100644 projects/plugins/social/changelog/update-social-to-use-unified-settings-endpoint diff --git a/projects/js-packages/publicize-components/changelog/update-social-to-use-unified-settings-endpoint b/projects/js-packages/publicize-components/changelog/update-social-to-use-unified-settings-endpoint new file mode 100644 index 0000000000000..af28eeceb5f49 --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/update-social-to-use-unified-settings-endpoint @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Update the settings endppoint to use existing endpoints diff --git a/projects/js-packages/publicize-components/src/components/admin-page/header/index.js b/projects/js-packages/publicize-components/src/components/admin-page/header/index.js index edbaee4243cfa..e73826fa73259 100644 --- a/projects/js-packages/publicize-components/src/components/admin-page/header/index.js +++ b/projects/js-packages/publicize-components/src/components/admin-page/header/index.js @@ -22,7 +22,7 @@ const Header = () => { const store = select( socialStore ); return { hasConnections: store.getConnections().length > 0, - isModuleEnabled: select( socialStore ).getSocialPluginSettings().publicize_active, + isModuleEnabled: select( socialStore ).getSocialModuleSettings().publicize, }; } ); diff --git a/projects/js-packages/publicize-components/src/components/admin-page/index.tsx b/projects/js-packages/publicize-components/src/components/admin-page/index.tsx index 127ac4a7b5200..ed3481a00b745 100644 --- a/projects/js-packages/publicize-components/src/components/admin-page/index.tsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/index.tsx @@ -33,12 +33,12 @@ export const SocialAdminPage = () => { const { isModuleEnabled, showPricingPage, isUpdatingJetpackSettings } = useSelect( select => { const store = select( socialStore ); - const settings = store.getSocialPluginSettings(); + const settings = store.getSocialModuleSettings(); return { - isModuleEnabled: settings.publicize_active, + isModuleEnabled: settings.publicize, showPricingPage: store.getSocialSettings().showPricingPage, - isUpdatingJetpackSettings: store.isSavingSocialPluginSettings(), + isUpdatingJetpackSettings: store.isSavingSocialModuleSettings(), }; }, [] ); diff --git a/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx b/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx index 59088c28fc2dc..0eb0df7149e20 100644 --- a/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/test/index.test.jsx @@ -13,6 +13,7 @@ describe( 'load the app', () => { beforeEach( () => { window.JetpackScriptData = { social: { + api_paths: {}, plugin_info: { social: { version, diff --git a/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-module-toggle/index.tsx b/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-module-toggle/index.tsx index 8e7c86f69565f..61f76741588aa 100644 --- a/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-module-toggle/index.tsx +++ b/projects/js-packages/publicize-components/src/components/admin-page/toggles/social-module-toggle/index.tsx @@ -21,11 +21,11 @@ const SocialModuleToggle: React.FC = () => { const { isModuleEnabled, isUpdating } = useSelect( select => { const store = select( socialStore ); - const settings = store.getSocialPluginSettings(); + const settings = store.getSocialModuleSettings(); return { - isModuleEnabled: settings.publicize_active, - isUpdating: store.isSavingSocialPluginSettings(), + isModuleEnabled: settings.publicize, + isUpdating: store.isSavingSocialModuleSettings(), }; }, [] ); @@ -36,19 +36,19 @@ const SocialModuleToggle: React.FC = () => { const useAdminUiV1 = feature_flags.useAdminUiV1; - const { updateSocialPluginSettings } = useDispatch( socialStore ); + const { updateSocialModuleSettings } = useDispatch( socialStore ); const toggleModule = useCallback( async () => { const newOption = { - publicize_active: ! isModuleEnabled, + publicize: ! isModuleEnabled, }; - await updateSocialPluginSettings( newOption ); + await updateSocialModuleSettings( newOption ); // If the module was enabled, we need to refresh the connection list - if ( newOption.publicize_active && ! getSocialScriptData().is_publicize_enabled ) { + if ( newOption.publicize && ! getSocialScriptData().is_publicize_enabled ) { window.location.reload(); } - }, [ isModuleEnabled, updateSocialPluginSettings ] ); + }, [ isModuleEnabled, updateSocialModuleSettings ] ); const [ isSmall ] = useBreakpointMatch( 'sm' ); diff --git a/projects/js-packages/publicize-components/src/social-store/actions/index.ts b/projects/js-packages/publicize-components/src/social-store/actions/index.ts index 40463ed09d6b2..204fdcb9b992d 100644 --- a/projects/js-packages/publicize-components/src/social-store/actions/index.ts +++ b/projects/js-packages/publicize-components/src/social-store/actions/index.ts @@ -2,8 +2,8 @@ import * as connectionData from './connection-data'; import * as pricingPageSettings from './pricing-page'; import * as shareStatus from './share-status'; import * as sigActions from './social-image-generator'; +import * as socialModuleSettings from './social-module-settings'; import * as socialNoteSettings from './social-notes'; -import * as socialPluginSettings from './social-plugin-settings'; import * as utmActions from './utm-settings'; const actions = { @@ -13,7 +13,7 @@ const actions = { ...utmActions, ...socialNoteSettings, ...pricingPageSettings, - ...socialPluginSettings, + ...socialModuleSettings, }; export default actions; diff --git a/projects/js-packages/publicize-components/src/social-store/actions/social-module-settings.ts b/projects/js-packages/publicize-components/src/social-store/actions/social-module-settings.ts new file mode 100644 index 0000000000000..eba5e65137f36 --- /dev/null +++ b/projects/js-packages/publicize-components/src/social-store/actions/social-module-settings.ts @@ -0,0 +1,20 @@ +import { store as coreStore } from '@wordpress/core-data'; +import { getSocialScriptData } from '../../utils'; +import { SocialModuleSettings } from '../types'; + +/** + * Saves the Social module settings. + * + * @param data - The data to save. + * + * @return A thunk. + */ +export function updateSocialModuleSettings( data: Partial< SocialModuleSettings > ) { + return async function ( { registry } ) { + const { socialToggleBase } = getSocialScriptData().api_paths; + + const { saveEntityRecord } = registry.dispatch( coreStore ); + + await saveEntityRecord( 'jetpack/v4', socialToggleBase, data ); + }; +} diff --git a/projects/js-packages/publicize-components/src/social-store/actions/social-plugin-settings.ts b/projects/js-packages/publicize-components/src/social-store/actions/social-plugin-settings.ts deleted file mode 100644 index 00954ea2d871a..0000000000000 --- a/projects/js-packages/publicize-components/src/social-store/actions/social-plugin-settings.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { store as coreStore } from '@wordpress/core-data'; -import { SocialPluginSettings } from '../types'; - -/** - * Saves the Social plugin settings. - * - * @param {Partial< SocialPluginSettings >} data - The data to save. - * - * @return {Function} A thunk. - */ -export function updateSocialPluginSettings( data: Partial< SocialPluginSettings > ) { - return async function ( { registry } ) { - const { saveEntityRecord } = registry.dispatch( coreStore ); - - await saveEntityRecord( 'jetpack/v4', 'social/settings', data ); - }; -} diff --git a/projects/js-packages/publicize-components/src/social-store/resolvers.ts b/projects/js-packages/publicize-components/src/social-store/resolvers.ts index bf3a59bb02330..3c6ed36280062 100644 --- a/projects/js-packages/publicize-components/src/social-store/resolvers.ts +++ b/projects/js-packages/publicize-components/src/social-store/resolvers.ts @@ -78,20 +78,22 @@ export function getPostShareStatus( _postId ) { } /** - * Resolves the social plugin settings to ensure the core-data entities are registered. + * Resolves the social module settings to ensure the core-data entities are registered. * * @return {Function} Resolver */ -export function getSocialPluginSettings() { +export function getSocialModuleSettings() { return async ( { registry } ) => { + const { socialToggleBase } = getSocialScriptData().api_paths; + const jetpackEntities = registry.select( coreStore ).getEntitiesConfig( 'jetpack/v4' ); - if ( ! jetpackEntities.some( ( { name } ) => name === 'social/settings' ) ) { + if ( ! jetpackEntities.some( ( { name } ) => name === socialToggleBase ) ) { await registry.dispatch( coreStore ).addEntities( [ { kind: 'jetpack/v4', - name: 'social/settings', - baseURL: '/jetpack/v4/social/settings', + name: socialToggleBase, + baseURL: `/jetpack/v4/${ socialToggleBase }`, label: __( 'Social Settings', 'jetpack-publicize-components' ), }, ] ); @@ -102,5 +104,5 @@ export function getSocialPluginSettings() { export default { getConnections, getPostShareStatus, - getSocialPluginSettings, + getSocialModuleSettings, }; diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/index.ts b/projects/js-packages/publicize-components/src/social-store/selectors/index.ts index 278112c2c925c..97f790c3b6595 100644 --- a/projects/js-packages/publicize-components/src/social-store/selectors/index.ts +++ b/projects/js-packages/publicize-components/src/social-store/selectors/index.ts @@ -1,12 +1,12 @@ import * as connectionDataSelectors from './connection-data'; import * as shareStatusSelectors from './share-status'; -import * as socialPluginSelectors from './social-plugin-settings'; +import * as socialModuleSelectors from './social-module-settings'; import * as socialSettingsSelectors from './social-settings'; const selectors = { ...connectionDataSelectors, ...shareStatusSelectors, - ...socialPluginSelectors, + ...socialModuleSelectors, ...socialSettingsSelectors, }; diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/social-module-settings.ts b/projects/js-packages/publicize-components/src/social-store/selectors/social-module-settings.ts new file mode 100644 index 0000000000000..3d11ae54b1093 --- /dev/null +++ b/projects/js-packages/publicize-components/src/social-store/selectors/social-module-settings.ts @@ -0,0 +1,26 @@ +import { store as coreStore } from '@wordpress/core-data'; +import { createRegistrySelector } from '@wordpress/data'; +import { getSocialScriptData } from '../../utils'; +import { SocialModuleSettings } from '../types'; + +/** + * Returns the Social module settings. + */ +export const getSocialModuleSettings = createRegistrySelector( select => () => { + const { socialToggleBase } = getSocialScriptData().api_paths; + + const data = select( coreStore ).getEntityRecord( 'jetpack/v4', socialToggleBase, undefined ); + + return ( data ?? { + publicize: getSocialScriptData().is_publicize_enabled, + } ) as SocialModuleSettings; +} ); + +/** + * Returns whether the Social module settings are being saved + */ +export const isSavingSocialModuleSettings = createRegistrySelector( select => () => { + const { socialToggleBase } = getSocialScriptData().api_paths; + + return select( coreStore ).isSavingEntityRecord( 'jetpack/v4', socialToggleBase, undefined ); +} ); diff --git a/projects/js-packages/publicize-components/src/social-store/selectors/social-plugin-settings.ts b/projects/js-packages/publicize-components/src/social-store/selectors/social-plugin-settings.ts deleted file mode 100644 index 9e6fa6d3f98ea..0000000000000 --- a/projects/js-packages/publicize-components/src/social-store/selectors/social-plugin-settings.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { store as coreStore } from '@wordpress/core-data'; -import { createRegistrySelector } from '@wordpress/data'; -import { getSocialScriptData } from '../../utils'; -import { SocialPluginSettings } from '../types'; - -/** - * Returns the Social plugin settings. - */ -export const getSocialPluginSettings = createRegistrySelector( select => () => { - const data = select( coreStore ).getEntityRecord( 'jetpack/v4', 'social/settings', undefined ); - - return data ?? { publicize_active: getSocialScriptData().is_publicize_enabled }; -} ) as ( state: object ) => SocialPluginSettings; - -/** - * Returns whether the Social plugin settings are being saved - */ -export const isSavingSocialPluginSettings = createRegistrySelector( select => () => { - return select( coreStore ).isSavingEntityRecord( 'jetpack/v4', 'social/settings', undefined ); -} ); diff --git a/projects/js-packages/publicize-components/src/social-store/types.ts b/projects/js-packages/publicize-components/src/social-store/types.ts index 28e394bffd1b7..585199856568e 100644 --- a/projects/js-packages/publicize-components/src/social-store/types.ts +++ b/projects/js-packages/publicize-components/src/social-store/types.ts @@ -142,8 +142,8 @@ export type SocialNotesSettings = { config: SocialNotesConfig; }; -export type SocialPluginSettings = { - publicize_active: boolean; +export type SocialModuleSettings = { + publicize: boolean; }; export type SocialSettingsFields = { diff --git a/projects/js-packages/publicize-components/src/types.ts b/projects/js-packages/publicize-components/src/types.ts index d810e2e83205f..2a55d0182295b 100644 --- a/projects/js-packages/publicize-components/src/types.ts +++ b/projects/js-packages/publicize-components/src/types.ts @@ -34,6 +34,7 @@ export type ConnectionService = { export interface ApiPaths { refreshConnections: string; resharePost: string; + socialToggleBase: 'settings' | 'social/settings'; } export type SocialSettings = { diff --git a/projects/packages/publicize/changelog/update-social-to-use-unified-settings-endpoint b/projects/packages/publicize/changelog/update-social-to-use-unified-settings-endpoint new file mode 100644 index 0000000000000..af28eeceb5f49 --- /dev/null +++ b/projects/packages/publicize/changelog/update-social-to-use-unified-settings-endpoint @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Update the settings endppoint to use existing endpoints diff --git a/projects/packages/publicize/src/class-publicize-script-data.php b/projects/packages/publicize/src/class-publicize-script-data.php index 6c5bafcec2419..abbba41c296e5 100644 --- a/projects/packages/publicize/src/class-publicize-script-data.php +++ b/projects/packages/publicize/src/class-publicize-script-data.php @@ -117,7 +117,7 @@ public static function get_admin_script_data() { } $basic_data = array( - 'api_paths' => array(), + 'api_paths' => self::get_api_paths(), 'is_publicize_enabled' => Utils::is_publicize_active(), 'feature_flags' => self::get_feature_flags(), 'supported_services' => array(), @@ -141,7 +141,6 @@ public static function get_admin_script_data() { return array_merge( $basic_data, array( - 'api_paths' => self::get_api_paths(), 'supported_services' => self::get_supported_services(), 'shares_data' => self::get_shares_data(), 'urls' => self::get_urls(), @@ -306,6 +305,8 @@ public static function get_api_paths() { $commom_paths = array( 'refreshConnections' => '/wpcom/v2/publicize/connections?test_connections=1', + // The complete path will be like `/jetpack/v4/social/settings`. + 'socialToggleBase' => class_exists( 'Jetpack' ) ? 'settings' : 'social/settings', ); $specific_paths = array(); diff --git a/projects/packages/publicize/src/class-publicize-setup.php b/projects/packages/publicize/src/class-publicize-setup.php index d5db75ad397e8..eb4a8e1331e00 100644 --- a/projects/packages/publicize/src/class-publicize-setup.php +++ b/projects/packages/publicize/src/class-publicize-setup.php @@ -51,9 +51,6 @@ public static function pre_initialization() { } } - // This doesn't need to be active on WPCOM. - new REST_API\Settings_Controller(); - Social_Admin_Page::init(); } diff --git a/projects/packages/publicize/src/rest-api/class-settings-controller.php b/projects/packages/publicize/src/rest-api/class-settings-controller.php deleted file mode 100644 index 6a2f2517e4c5c..0000000000000 --- a/projects/packages/publicize/src/rest-api/class-settings-controller.php +++ /dev/null @@ -1,167 +0,0 @@ - WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_item' ), - 'permission_callback' => array( $this, 'require_admin_privilege_callback' ), - 'args' => $this->get_endpoint_args_for_item_schema(), - ), - array( - 'methods' => WP_REST_Server::EDITABLE, - 'callback' => array( $this, 'update_item' ), - 'permission_callback' => array( $this, 'require_admin_privilege_callback' ), - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), - ), - ) - ); - } - - /** - * Only administrators can access the API. - * - * @return bool|WP_Error True if a blog token was used to sign the request, WP_Error otherwise. - */ - public function require_admin_privilege_callback() { - if ( current_user_can( 'manage_options' ) ) { - return true; - } - - return new WP_Error( - 'rest_forbidden', - esc_html__( 'You are not allowed to perform this action.', 'jetpack-publicize-pkg' ), - array( 'status' => rest_authorization_required_code() ) - ); - } - - /** - * Updates the settings. - * - * @param WP_REST_Request $request Full details about the request. - * @return array|WP_Error Array on success, or error object on failure. - */ - public function get_item( $request ) { - $fields = $this->get_fields_for_response( $request ); - $data = array(); - - if ( rest_is_field_included( 'publicize_active', $fields ) ) { - $data['publicize_active'] = Publicize_Utils::is_publicize_active(); - } - - return $this->prepare_item_for_response( $data, $request ); - } - - /** - * POST `jetpack/v4/social/settings` - * - * @param WP_REST_Request $request - REST request. - */ - public function update_item( $request ) { - $params = $request->get_params(); - $settings = $this->get_endpoint_args_for_item_schema( $request->get_method() ); - - foreach ( array_keys( $settings ) as $name ) { - if ( ! array_key_exists( $name, $params ) ) { - continue; - } - - switch ( $name ) { - case 'publicize_active': - $updated = ( new Modules() )->update_status( self::JETPACK_PUBLICIZE_MODULE_SLUG, (bool) $params[ $name ], false, false ); - if ( is_wp_error( $updated ) ) { - return $updated; - } - break; - } - } - - return $this->get_item( $request ); - } - - /** - * Prepares the settings data to return from the endpoint. - * Includes checking the values against the schema. - * - * @param array $settings The settings data to prepare. - * @param WP_REST_Request $request REST request. - * @return array|WP_Error The prepared settings or a WP_Error on failure. - */ - public function prepare_item_for_response( $settings, $request ) { - $args = $this->get_endpoint_args_for_item_schema( $request->get_method() ); - $return = array(); - foreach ( $settings as $name => $value ) { - if ( empty( $args[ $name ] ) ) { - // This setting shouldn't be returned. - continue; - } - $is_valid = rest_validate_value_from_schema( $value, $args[ $name ], $name ); - if ( is_wp_error( $is_valid ) ) { - return $is_valid; - } - $sanitized = rest_sanitize_value_from_schema( $value, $args[ $name ] ); - if ( is_wp_error( $sanitized ) ) { - return $sanitized; - } - $return[ $name ] = $sanitized; - } - return rest_ensure_response( $return ); - } - - /** - * Get the settings schema, conforming to JSON Schema. - * - * @return array - */ - public function get_item_schema() { - $schema = array( - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'system_status', - 'type' => 'object', - 'properties' => array( - 'publicize_active' => array( - 'description' => __( 'Is the publicize module enabled?', 'jetpack-publicize-pkg' ), - 'type' => 'boolean', - 'context' => array( 'view', 'edit' ), - ), - ), - ); - return $this->add_additional_fields_schema( $schema ); - } -} diff --git a/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php b/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php index 775f9c42b4126..05acfe82e78db 100644 --- a/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php @@ -635,6 +635,11 @@ public function update_data( $request ) { $not_updated[ $option ] = $error; } + if ( $updated ) { + // Return the module state. + $response[ $option ] = $value; + } + // Remove module from list so we don't go through it again. unset( $params[ $option ] ); } diff --git a/projects/plugins/jetpack/changelog/update-social-to-use-unified-settings-endpoint b/projects/plugins/jetpack/changelog/update-social-to-use-unified-settings-endpoint new file mode 100644 index 0000000000000..c4c37c22d68b0 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-social-to-use-unified-settings-endpoint @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Update the settings endpoint to return the updated toggle state in the success response diff --git a/projects/plugins/social/changelog/update-social-to-use-unified-settings-endpoint b/projects/plugins/social/changelog/update-social-to-use-unified-settings-endpoint new file mode 100644 index 0000000000000..af28eeceb5f49 --- /dev/null +++ b/projects/plugins/social/changelog/update-social-to-use-unified-settings-endpoint @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Update the settings endppoint to use existing endpoints diff --git a/projects/plugins/social/src/class-rest-settings-controller.php b/projects/plugins/social/src/class-rest-settings-controller.php index 6280e29891adb..afd4db3c2eb09 100644 --- a/projects/plugins/social/src/class-rest-settings-controller.php +++ b/projects/plugins/social/src/class-rest-settings-controller.php @@ -8,6 +8,7 @@ namespace Automattic\Jetpack\Social; +use Automattic\Jetpack\Modules; use Jetpack_Social; use WP_Error; use WP_REST_Controller; @@ -25,6 +26,24 @@ class REST_Settings_Controller extends WP_REST_Controller { * @static */ public function register_rest_routes() { + register_rest_route( + 'jetpack/v4', + '/social/settings', + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_item' ), + 'permission_callback' => array( $this, 'require_admin_privilege_callback' ), + 'args' => $this->get_endpoint_args_for_item_schema(), + ), + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'update_item' ), + 'permission_callback' => array( $this, 'require_admin_privilege_callback' ), + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), + ), + ) + ); register_rest_route( 'jetpack/v4', '/social/review-dismiss', @@ -73,6 +92,50 @@ public function require_publish_posts_permission_callback() { ); } + /** + * Updates the settings. + * + * @param WP_REST_Request $request Full details about the request. + * @return array|WP_Error Array on success, or error object on failure. + */ + public function get_item( $request ) { + $fields = $this->get_fields_for_response( $request ); + $data = array(); + + if ( rest_is_field_included( 'publicize', $fields ) ) { + $data['publicize'] = Jetpack_Social::is_publicize_active(); + } + + return $this->prepare_item_for_response( $data, $request ); + } + + /** + * POST `jetpack/v4/social/settings` + * + * @param WP_REST_Request $request - REST request. + */ + public function update_item( $request ) { + $params = $request->get_params(); + $settings = $this->get_endpoint_args_for_item_schema( $request->get_method() ); + + foreach ( array_keys( $settings ) as $name ) { + if ( ! array_key_exists( $name, $params ) ) { + continue; + } + + switch ( $name ) { + case 'publicize': + $updated = ( new Modules() )->update_status( \Jetpack_Social::JETPACK_PUBLICIZE_MODULE_SLUG, (bool) $params[ $name ], false, false ); + if ( is_wp_error( $updated ) ) { + return $updated; + } + break; + } + } + + return $this->get_item( $request ); + } + /** * Updates the boolean value that dismisses the request to review the plugin * @@ -122,4 +185,25 @@ public function prepare_item_for_response( $settings, $request ) { } return rest_ensure_response( $return ); } + + /** + * Get the settings schema, conforming to JSON Schema. + * + * @return array + */ + public function get_item_schema() { + $schema = array( + '$schema' => 'http://json-schema.org/draft-04/schema#', + 'title' => 'system_status', + 'type' => 'object', + 'properties' => array( + 'publicize' => array( + 'description' => __( 'Is the publicize module enabled?', 'jetpack-social' ), + 'type' => 'boolean', + 'context' => array( 'view', 'edit' ), + ), + ), + ); + return $this->add_additional_fields_schema( $schema ); + } } From fa8dcfbaa8caec51862f31ef6d998374cfa31fd9 Mon Sep 17 00:00:00 2001 From: Ian Ramos <5714212+IanRamosC@users.noreply.github.com> Date: Fri, 31 Jan 2025 17:57:34 -0300 Subject: [PATCH 314/420] My Jetpack: fix Protect card secondary action (#41347) * My Jetpack: fix secondary action for Protect card * changelog --- .../my-jetpack/_inc/components/product-card/index.tsx | 8 ++++++-- .../my-jetpack/changelog/fix-protect-default-secondary | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 projects/packages/my-jetpack/changelog/fix-protect-default-secondary diff --git a/projects/packages/my-jetpack/_inc/components/product-card/index.tsx b/projects/packages/my-jetpack/_inc/components/product-card/index.tsx index 06cdfa24616bc..108d08bbbd338 100644 --- a/projects/packages/my-jetpack/_inc/components/product-card/index.tsx +++ b/projects/packages/my-jetpack/_inc/components/product-card/index.tsx @@ -79,7 +79,7 @@ const ProductCard: FC< ProductCardProps > = props => { const [ isActionLoading, setIsActionLoading ] = useState( false ); const { recordEvent } = useAnalytics(); - const { siteIsRegistering } = useMyJetpackConnection(); + const { siteIsRegistering, isUserConnected } = useMyJetpackConnection(); const { connectSite } = useConnectSite( { tracksInfo: { event: `jetpack_myjetpack_product_card_fix_site_connection`, @@ -95,7 +95,11 @@ const ProductCard: FC< ProductCardProps > = props => { } ); }, [ slug, recordEvent ] ); - if ( ! secondaryAction && status === PRODUCT_STATUSES.CAN_UPGRADE ) { + if ( + ! secondaryAction && + status === PRODUCT_STATUSES.CAN_UPGRADE && + ! ( slug === 'protect' && ! isUserConnected ) + ) { secondaryAction = { href: manageUrl, label: __( 'View', 'jetpack-my-jetpack' ), diff --git a/projects/packages/my-jetpack/changelog/fix-protect-default-secondary b/projects/packages/my-jetpack/changelog/fix-protect-default-secondary new file mode 100644 index 0000000000000..eef99382308a7 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/fix-protect-default-secondary @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +My Jetpack: fix secondary action of Protect card when plugin is not installed. From f001b6744a9892e9fdbd1234241ef42ed09a41e6 Mon Sep 17 00:00:00 2001 From: Bryan Elliott Date: Fri, 31 Jan 2025 17:50:33 -0500 Subject: [PATCH 315/420] My Jetpack: Fix Current_Plan::get() not getting current/latest plan. Cache stuck. (#41421) * Fix Current_Plan::get() not getting current/latest plan. Cache stuck. --- .../changelog/fix-mj-current-plan-not-updated | 5 +++++ .../packages/my-jetpack/src/class-wpcom-products.php | 10 +++++++++- .../packages/my-jetpack/src/products/class-product.php | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 projects/packages/my-jetpack/changelog/fix-mj-current-plan-not-updated diff --git a/projects/packages/my-jetpack/changelog/fix-mj-current-plan-not-updated b/projects/packages/my-jetpack/changelog/fix-mj-current-plan-not-updated new file mode 100644 index 0000000000000..0124e66843cdf --- /dev/null +++ b/projects/packages/my-jetpack/changelog/fix-mj-current-plan-not-updated @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Change not visible or relevant to users + + diff --git a/projects/packages/my-jetpack/src/class-wpcom-products.php b/projects/packages/my-jetpack/src/class-wpcom-products.php index b1de092278286..941a36592fa44 100644 --- a/projects/packages/my-jetpack/src/class-wpcom-products.php +++ b/projects/packages/my-jetpack/src/class-wpcom-products.php @@ -353,9 +353,17 @@ public static function get_site_current_purchases() { /** * Gets the site's currently active "plan" (bundle). * + * @param bool $reload Whether to refresh data from wpcom or not. * @return array */ - public static function get_site_current_plan() { + public static function get_site_current_plan( $reload = false ) { + static $reloaded_already = false; + + if ( $reload && ! $reloaded_already ) { + Current_Plan::refresh_from_wpcom(); + $reloaded_already = true; + } + return Current_Plan::get(); } diff --git a/projects/packages/my-jetpack/src/products/class-product.php b/projects/packages/my-jetpack/src/products/class-product.php index 4455b8fccf0a4..4c6c76dc0dd93 100644 --- a/projects/packages/my-jetpack/src/products/class-product.php +++ b/projects/packages/my-jetpack/src/products/class-product.php @@ -514,7 +514,7 @@ public static function get_paid_bundles_that_include_product() { return array(); } $paid_bundles = $features['available']->$idendifying_feature ?? array(); - $current_bundle = Wpcom_Products::get_site_current_plan(); + $current_bundle = Wpcom_Products::get_site_current_plan( true ); if ( in_array( static::$feature_identifying_paid_plan, $current_bundle['features']['active'], true ) ) { $paid_bundles[] = $current_bundle['product_slug']; From c57e6e46e941dafa4c69807236d1eb5e77aec326 Mon Sep 17 00:00:00 2001 From: Manzoor Wani Date: Fri, 31 Jan 2025 19:32:57 -0800 Subject: [PATCH 316/420] Social | Fix connections cache when WPCOM API call fails (#41392) --- .../changelog/fix-social-connections-caching | 4 ++++ .../packages/publicize/src/class-connections.php | 16 +++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 projects/packages/publicize/changelog/fix-social-connections-caching diff --git a/projects/packages/publicize/changelog/fix-social-connections-caching b/projects/packages/publicize/changelog/fix-social-connections-caching new file mode 100644 index 0000000000000..dd6ebfc4551f2 --- /dev/null +++ b/projects/packages/publicize/changelog/fix-social-connections-caching @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Social | Fix connections cache when WPCOM API call fails diff --git a/projects/packages/publicize/src/class-connections.php b/projects/packages/publicize/src/class-connections.php index 6d186ed0e09c0..e3c79245655e6 100644 --- a/projects/packages/publicize/src/class-connections.php +++ b/projects/packages/publicize/src/class-connections.php @@ -152,6 +152,11 @@ function ( $connection ) { public static function fetch_and_cache_connections() { $connections = self::fetch_site_connections(); + if ( is_wp_error( $connections ) ) { + // @todo log error. + return array(); + } + if ( is_array( $connections ) ) { if ( ! set_transient( self::CONNECTIONS_TRANSIENT, $connections, HOUR_IN_SECONDS * 4 ) ) { // If the transient has beeen set in another request, the call to set_transient can fail. @@ -168,21 +173,14 @@ public static function fetch_and_cache_connections() { /** * Fetch connections for the site from WPCOM REST API. * - * @return array + * @return array|WP_Error */ public static function fetch_site_connections() { $proxy = new Proxy_Requests( 'publicize/connections' ); $request = new WP_REST_Request( 'GET', '/wpcom/v2/publicize/connections' ); - $connections = $proxy->proxy_request_to_wpcom_as_blog( $request ); - - if ( is_wp_error( $connections ) ) { - // @todo log error. - return array(); - } - - return $connections; + return $proxy->proxy_request_to_wpcom_as_blog( $request ); } /** From 86e33fa1e316eec37eb8a3fe8b3ca8548d275972 Mon Sep 17 00:00:00 2001 From: Anna McPhee <30754158+annacmc@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:24:02 +1100 Subject: [PATCH 317/420] Chart Library: add pie semi circle chart component tests + improve data validation (#41416) * add testing dependencies * add tests for pie semi circle chart * changelog * Improve tests * improve chart component to address failing tests * add data validation to semi circle chart * add tests for data validation * add stories for error states * use only width for semi circle chart * tidyup for testing * small fixes in response to feedback * remove unecessary extra className --- pnpm-lock.yaml | 10 + .../add-chart-library-test-semi-circle-chart | 4 + projects/js-packages/charts/package.json | 2 + .../pie-semi-circle-chart.tsx | 138 +++++++++---- .../stories/index.stories.tsx | 49 +++++ .../test/pie-semi-circle-chart.test.tsx | 185 ++++++++++++++++++ 6 files changed, 347 insertions(+), 41 deletions(-) create mode 100644 projects/js-packages/charts/changelog/add-chart-library-test-semi-circle-chart create mode 100644 projects/js-packages/charts/src/components/pie-semi-circle-chart/test/pie-semi-circle-chart.test.tsx diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b78e65b2a8365..4b799919492b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -392,12 +392,18 @@ importers: '@storybook/react': specifier: 8.4.7 version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.7.2) + '@testing-library/dom': + specifier: ^8.20.1 + version: 8.20.1 '@testing-library/jest-dom': specifier: ^6.0.0 version: 6.5.0 '@testing-library/react': specifier: ^14.0.0 version: 14.3.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@testing-library/user-event': + specifier: ^14.4.3 + version: 14.5.2(@testing-library/dom@8.20.1) '@types/jest': specifier: ^29.0.0 version: 29.5.12 @@ -18528,6 +18534,10 @@ snapshots: dependencies: '@testing-library/dom': 10.4.0 + '@testing-library/user-event@14.5.2(@testing-library/dom@8.20.1)': + dependencies: + '@testing-library/dom': 8.20.1 + '@tootallnate/once@2.0.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {} diff --git a/projects/js-packages/charts/changelog/add-chart-library-test-semi-circle-chart b/projects/js-packages/charts/changelog/add-chart-library-test-semi-circle-chart new file mode 100644 index 0000000000000..05c4e04369613 --- /dev/null +++ b/projects/js-packages/charts/changelog/add-chart-library-test-semi-circle-chart @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Charts: adds tests for semi circle chart diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 160531882ad38..8d8fc03c9ae02 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -80,8 +80,10 @@ "@rollup/plugin-typescript": "12.1.0", "@storybook/blocks": "8.4.7", "@storybook/react": "8.4.7", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.4.3", "@types/jest": "^29.0.0", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx index f2ab7a325fcd3..e98e82ec6da73 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/pie-semi-circle-chart.tsx @@ -24,66 +24,66 @@ interface PieSemiCircleChartProps extends BaseChartProps< DataPointPercentage[] */ thickness?: number; + /** + * Direction of chart rendering + * true for clockwise, false for counter-clockwise + */ + clockwise?: boolean; + /** * Label text to display above the chart */ label?: string; + /** * Note text to display below the label */ note?: string; - /** - * Direction of chart rendering - * true for clockwise, false for counter-clockwise - */ - clockwise?: boolean; } type ArcData = PieArcDatum< DataPointPercentage >; +/** + * Validates the semi-circle pie chart data + * @param data - The data to validate + * @return Object containing validation result and error message + */ +const validateData = ( data: DataPointPercentage[] ) => { + if ( ! data.length ) { + return { isValid: false, message: 'No data available' }; + } + + // Check for negative values + const hasNegativeValues = data.some( item => item.percentage < 0 || item.value < 0 ); + if ( hasNegativeValues ) { + return { isValid: false, message: 'Invalid data: Negative values are not allowed' }; + } + + // Validate total percentage is greater than 0 + const totalPercentage = data.reduce( ( sum, item ) => sum + item.percentage, 0 ); + if ( totalPercentage <= 0 ) { + return { isValid: false, message: 'Invalid percentage total: Must be greater than 0' }; + } + + return { isValid: true, message: '' }; +}; + const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { data, - width, + width = 400, + thickness = 0.4, + clockwise = true, + withTooltips = false, + showLegend = false, + legendOrientation = 'horizontal', label, note, className, - withTooltips = false, - clockwise = true, - thickness = 0.4, - showLegend, - legendOrientation, } ) => { const providerTheme = useChartTheme(); const { tooltipOpen, tooltipLeft, tooltipTop, tooltipData, hideTooltip, showTooltip } = useTooltip< DataPointPercentage >(); - const centerX = width / 2; - const height = width / 2; - const radius = width / 2; - const pad = 0.03; - const innerRadius = radius * ( 1 - thickness + pad ); - - // Map the data to include index for color assignment - const dataWithIndex = data.map( ( d, index ) => ( { - ...d, - index, - } ) ); - - // Set the clockwise direction based on the prop - const startAngle = clockwise ? -Math.PI / 2 : Math.PI / 2; - const endAngle = clockwise ? Math.PI / 2 : -Math.PI / 2; - - const accessors = { - value: ( d: DataPointPercentage & { index: number } ) => d.value, - sort: ( - a: DataPointPercentage & { index: number }, - b: DataPointPercentage & { index: number } - ) => b.value - a.value, - // Use the color property from the data object as a last resort. The theme provides colours by default. - fill: ( d: DataPointPercentage & { index: number } ) => - d.color || providerTheme.colors[ d.index % providerTheme.colors.length ], - }; - const handleMouseMove = useCallback( ( event: React.MouseEvent, arc: ArcData ) => { const coords = localPoint( event ); @@ -109,6 +109,52 @@ const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { [ handleMouseMove ] ); + // Add validation check + const { isValid, message } = validateData( data ); + + if ( ! isValid ) { + return ( +
      + + + { message } + + +
      + ); + } + + const height = width / 2; + const pad = 0.03; + + // Use padding for the overall chart dimensions + const chartWidth = width - pad * 2; + const chartHeight = height - pad; + const radius = Math.min( chartWidth, chartHeight * 2 ) / 2; + + const innerRadius = radius * ( 1 - thickness + pad ); + + // Map the data to include index for color assignment + const dataWithIndex = data.map( ( d, index ) => ( { + ...d, + index, + } ) ); + + // Set the clockwise direction based on the prop + const startAngle = clockwise ? -Math.PI / 2 : Math.PI / 2; + const endAngle = clockwise ? Math.PI / 2 : -Math.PI / 2; + + const accessors = { + value: ( d: DataPointPercentage & { index: number } ) => d.value, + sort: ( + a: DataPointPercentage & { index: number }, + b: DataPointPercentage & { index: number } + ) => b.value - a.value, + // Use the color property from the data object as a last resort. The theme provides colours by default. + fill: ( d: DataPointPercentage & { index: number } ) => + d.color || providerTheme.colors[ d.index % providerTheme.colors.length ], + }; + // Create legend items const legendItems = data.map( ( item, index ) => ( { label: item.label, @@ -119,10 +165,16 @@ const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { return (
      - + { /* Main chart group that contains both the pie and text elements */ } - + { /* Pie chart */ } data={ dataWithIndex } @@ -142,7 +194,11 @@ const PieSemiCircleChart: FC< PieSemiCircleChartProps > = ( { onMouseMove={ handleArcMouseMove( arc ) } onMouseLeave={ handleMouseLeave } > - + ) ); } } diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx index d818a21f1aa95..06f73531d82bf 100644 --- a/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/stories/index.stories.tsx @@ -136,3 +136,52 @@ export const Responsiveness: Story = { }, }, }; + +export const ErrorStates: Story = { + render: () => ( +
      +
      +

      Empty Data

      + +
      + +
      +

      Zero Total Percentage

      + +
      + +
      +

      Negative Values

      + +
      + +
      +

      Single Data Point

      + +
      +
      + ), + parameters: { + docs: { + description: { + story: + 'Examples of how the semi-circle pie chart handles various error states and edge cases.', + }, + }, + }, +}; diff --git a/projects/js-packages/charts/src/components/pie-semi-circle-chart/test/pie-semi-circle-chart.test.tsx b/projects/js-packages/charts/src/components/pie-semi-circle-chart/test/pie-semi-circle-chart.test.tsx new file mode 100644 index 0000000000000..d4237a97da547 --- /dev/null +++ b/projects/js-packages/charts/src/components/pie-semi-circle-chart/test/pie-semi-circle-chart.test.tsx @@ -0,0 +1,185 @@ +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { act } from 'react'; +import { ThemeProvider } from '../../../providers/theme'; +import PieSemiCircleChart from '../pie-semi-circle-chart'; + +// Mock data for testing +const mockData = [ + { + label: 'Category A', + value: 30, + valueDisplay: '30%', + percentage: 30, + }, + { + label: 'Category B', + value: 70, + valueDisplay: '70%', + percentage: 70, + }, +]; + +// Helper function to render component with providers +const renderPieChart = props => + render( + + + + ); + +describe( 'PieSemiCircleChart', () => { + it( 'renders basic chart with data', () => { + renderPieChart( { data: mockData } ); + const segments = screen.getAllByTestId( 'pie-segment' ); + expect( segments ).toHaveLength( 2 ); + } ); + + it( 'renders label and note when provided', () => { + const label = 'Chart Title'; + const note = 'Additional Info'; + renderPieChart( { data: mockData, label, note } ); + + expect( screen.getByText( label ) ).toBeInTheDocument(); + expect( screen.getByText( note ) ).toBeInTheDocument(); + } ); + + it( 'shows legend when showLegend is true', () => { + renderPieChart( { data: mockData, showLegend: true } ); + + expect( screen.getByText( 'Category A' ) ).toBeInTheDocument(); + expect( screen.getByText( 'Category B' ) ).toBeInTheDocument(); + expect( screen.getByText( '30%' ) ).toBeInTheDocument(); + expect( screen.getByText( '70%' ) ).toBeInTheDocument(); + } ); + + it( 'shows tooltip on segment hover when withTooltips is true', async () => { + const user = userEvent.setup(); + const testData = [ + { label: 'MacOS', value: 30000, valueDisplay: '30K', percentage: 5 }, + { label: 'Linux', value: 22000, valueDisplay: '22K', percentage: 1 }, + { label: 'Windows', value: 80000, valueDisplay: '80K', percentage: 2 }, + ]; + + renderPieChart( { data: testData, withTooltips: true } ); + + const segments = screen.getAllByTestId( 'pie-segment' ); + const firstSegment = segments[ 0 ]; + + // Wrap hover interaction in act() + await act( async () => { + await user.hover( firstSegment ); + } ); + + // Check for tooltip content with flexible text matching + const tooltipText = screen.getByText( content => { + return content.includes( 'MacOS' ) || content.includes( '30K' ); + } ); + expect( tooltipText ).toBeInTheDocument(); + } ); + + it( 'hides tooltip on mouse leave', async () => { + const user = userEvent.setup(); + const testData = [ + { label: 'MacOS', value: 30000, valueDisplay: '30K', percentage: 5 }, + { label: 'Linux', value: 22000, valueDisplay: '22K', percentage: 1 }, + { label: 'Windows', value: 80000, valueDisplay: '80K', percentage: 2 }, + ]; + + renderPieChart( { data: testData, withTooltips: true } ); + + const segments = screen.getAllByTestId( 'pie-segment' ); + const firstSegment = segments[ 0 ]; + + await act( async () => { + await user.hover( firstSegment ); + } ); + + // More flexible text matching + const tooltipText = screen.getByText( content => { + return content.includes( 'MacOS' ) || content.includes( '30K' ); + } ); + expect( tooltipText ).toBeInTheDocument(); + + await act( async () => { + await user.unhover( firstSegment ); + } ); + + // More flexible text matching for absence + const tooltipAfterUnhover = screen.queryByText( content => { + return content.includes( 'MacOS' ) || content.includes( '30K' ); + } ); + expect( tooltipAfterUnhover ).not.toBeInTheDocument(); + } ); + + it( 'applies custom className', () => { + const customClass = 'custom-chart'; + renderPieChart( { data: mockData, className: customClass } ); + expect( screen.getByTestId( 'pie-chart-container' ) ).toHaveClass( customClass ); + } ); + + it( 'renders with different thickness values', () => { + const { rerender } = renderPieChart( { data: mockData, thickness: 0.2 } ); + const thinSegment = screen.getAllByTestId( 'pie-segment' )[ 0 ]; + const thinPathD = thinSegment.getAttribute( 'd' ); + + rerender( + + + + ); + const thickSegment = screen.getAllByTestId( 'pie-segment' )[ 0 ]; + const thickPathD = thickSegment.getAttribute( 'd' ); + + expect( thinPathD ).not.toBe( thickPathD ); + } ); + + it( 'renders with correct dimensions', () => { + const width = 400; + render( ); + + const svg = screen.getByTestId( 'pie-chart-svg' ); + + expect( svg ).toHaveAttribute( 'width', width.toString() ); + expect( svg ).toHaveAttribute( 'height', ( width / 2 ).toString() ); + expect( svg ).toHaveAttribute( 'viewBox', `0 0 ${ width } ${ width / 2 }` ); + } ); + + describe( 'Data Validation', () => { + test( 'handles empty data array', () => { + renderPieChart( { data: [] } ); + expect( screen.getByText( 'No data available' ) ).toBeInTheDocument(); + } ); + + test( 'handles zero total percentage', () => { + renderPieChart( { + data: [ + { label: 'A', value: 0, percentage: 0 }, + { label: 'B', value: 0, percentage: 0 }, + ], + } ); + expect( + screen.getByText( 'Invalid percentage total: Must be greater than 0' ) + ).toBeInTheDocument(); + } ); + + test( 'handles single data point', () => { + renderPieChart( { + data: [ { label: 'Single', value: 100, percentage: 50 } ], + } ); + expect( screen.getByTestId( 'pie-segment' ) ).toBeInTheDocument(); + } ); + + test( 'handles negative values', () => { + renderPieChart( { + data: [ + { label: 'A', value: -30, percentage: -30 }, + { label: 'B', value: 130, percentage: 130 }, + ], + } ); + expect( + screen.getByText( 'Invalid data: Negative values are not allowed' ) + ).toBeInTheDocument(); + } ); + } ); +} ); From 60448fbc1a2b4318ce3c82fefecce8894eb07826 Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Mon, 3 Feb 2025 11:50:55 +0200 Subject: [PATCH 318/420] Post List: Add a Copy Link Quick Action (#41305) * Post List: Add a Copy Link Quick Action * some feedback * use external js file * Update projects/packages/post-list/webpack.config.js Co-authored-by: Brad Jorsch * feedback * fix php tests * fix php tests and update composer.lock files * changelog * fix package.json * add copy link in all statuses except trash * exclude files from published package * fix composer.lock files --------- Co-authored-by: Brad Jorsch --- pnpm-lock.yaml | 16 +++++++ projects/packages/post-list/.gitattributes | 25 +++++----- .../add-copy-post-link-action-in-posts-list | 4 ++ projects/packages/post-list/composer.json | 6 +++ projects/packages/post-list/package.json | 31 ++++++++++++ .../post-list/src/class-post-list.php | 48 +++++++++++++++++++ projects/packages/post-list/src/index.js | 31 ++++++++++++ .../post-list/tests/php/test-post-list.php | 12 +++-- projects/packages/post-list/webpack.config.js | 33 +++++++++++++ .../add-copy-post-link-action-in-posts-list | 4 ++ projects/plugins/jetpack/composer.lock | 8 +++- .../add-copy-post-link-action-in-posts-list | 4 ++ projects/plugins/social/composer.lock | 8 +++- .../add-copy-post-link-action-in-posts-list | 4 ++ projects/plugins/wpcomsh/composer.lock | 8 +++- 15 files changed, 224 insertions(+), 18 deletions(-) create mode 100644 projects/packages/post-list/changelog/add-copy-post-link-action-in-posts-list create mode 100644 projects/packages/post-list/package.json create mode 100644 projects/packages/post-list/src/index.js create mode 100644 projects/packages/post-list/webpack.config.js create mode 100644 projects/plugins/jetpack/changelog/add-copy-post-link-action-in-posts-list create mode 100644 projects/plugins/social/changelog/add-copy-post-link-action-in-posts-list create mode 100644 projects/plugins/wpcomsh/changelog/add-copy-post-link-action-in-posts-list diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b799919492b0..4e21fbfcdd2b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2817,6 +2817,22 @@ importers: specifier: 6.0.1 version: 6.0.1(webpack@5.94.0) + projects/packages/post-list: + dependencies: + '@wordpress/i18n': + specifier: 5.16.0 + version: 5.16.0 + devDependencies: + '@automattic/jetpack-webpack-config': + specifier: workspace:* + version: link:../../js-packages/webpack-config + webpack: + specifier: 5.94.0 + version: 5.94.0(webpack-cli@6.0.1) + webpack-cli: + specifier: 6.0.1 + version: 6.0.1(webpack@5.94.0) + projects/packages/protect-models: {} projects/packages/protect-status: {} diff --git a/projects/packages/post-list/.gitattributes b/projects/packages/post-list/.gitattributes index 84bd625e2f988..1b56f9c94d754 100644 --- a/projects/packages/post-list/.gitattributes +++ b/projects/packages/post-list/.gitattributes @@ -1,16 +1,19 @@ # Files not needed to be distributed in the package. -.gitattributes export-ignore -.github/ export-ignore -package.json export-ignore -webpack.config.js export-ignore -phpunit.xml.dist export-ignore -.babelrc export-ignore +.gitattributes export-ignore +.github/ export-ignore +package.json export-ignore +webpack.config.js export-ignore +phpunit.xml.dist export-ignore +.babelrc export-ignore # Files to include in the mirror repo -/build/** production-include +/build/** production-include # Files to exclude from the mirror repo -/changelog/** production-exclude -.gitignore production-exclude -.phpcs.dir.xml production-exclude -_inc/** production-exclude +/changelog/** production-exclude +.gitignore production-exclude +.phpcs.dir.xml production-exclude +_inc/** production-exclude +/package.json production-exclude +/src/**/*.js production-exclude +/webpack.config.js production-exclude diff --git a/projects/packages/post-list/changelog/add-copy-post-link-action-in-posts-list b/projects/packages/post-list/changelog/add-copy-post-link-action-in-posts-list new file mode 100644 index 0000000000000..0cae5823b78d3 --- /dev/null +++ b/projects/packages/post-list/changelog/add-copy-post-link-action-in-posts-list @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Post List: Add a Copy Link Quick Action diff --git a/projects/packages/post-list/composer.json b/projects/packages/post-list/composer.json index c6f01aa2609a6..d1725266a9a7b 100644 --- a/projects/packages/post-list/composer.json +++ b/projects/packages/post-list/composer.json @@ -38,6 +38,12 @@ ], "test-php": [ "@composer phpunit" + ], + "build-production": [ + "pnpm run build-production" + ], + "build-development": [ + "pnpm run build" ] }, "minimum-stability": "dev", diff --git a/projects/packages/post-list/package.json b/projects/packages/post-list/package.json new file mode 100644 index 0000000000000..594be9b6f58eb --- /dev/null +++ b/projects/packages/post-list/package.json @@ -0,0 +1,31 @@ +{ + "private": true, + "description": "Enhance the classic view of the Admin section of your WordPress site", + "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/post-list/#readme", + "bugs": { + "url": "https://github.com/Automattic/jetpack/labels/[Package] Post List" + }, + "repository": { + "type": "git", + "url": "https://github.com/Automattic/jetpack.git", + "directory": "projects/packages/post-list" + }, + "license": "GPL-2.0-or-later", + "author": "Automattic", + "scripts": { + "build": "pnpm run clean && pnpm run build-js", + "build-js": "webpack", + "build-production": "pnpm run clean && pnpm run build-production-js && pnpm run validate", + "build-production-js": "NODE_ENV=production BABEL_ENV=production pnpm run build-js", + "clean": "rm -rf build", + "validate": "pnpm exec validate-es build/" + }, + "dependencies": { + "@wordpress/i18n": "5.16.0" + }, + "devDependencies": { + "@automattic/jetpack-webpack-config": "workspace:*", + "webpack": "5.94.0", + "webpack-cli": "6.0.1" + } +} diff --git a/projects/packages/post-list/src/class-post-list.php b/projects/packages/post-list/src/class-post-list.php index 15d4193595a25..0d7547c6f9f01 100644 --- a/projects/packages/post-list/src/class-post-list.php +++ b/projects/packages/post-list/src/class-post-list.php @@ -7,6 +7,7 @@ namespace Automattic\Jetpack\Post_List; +use Automattic\Jetpack\Assets; use WP_Post; use WP_Screen; @@ -91,6 +92,16 @@ public function enqueue_scripts( $hook ) { 'rtl', plugin_dir_url( __DIR__ ) . './src/rtl.css' ); + Assets::register_script( + 'jetpack_posts_list', + '../build/index.js', + __FILE__, + array( + 'in_footer' => true, + 'enqueue' => true, + 'textdomain' => 'jetpack-post-list', + ) + ); } } @@ -153,6 +164,43 @@ public function add_filters_and_actions_for_screen( $current_screen ) { $this->maybe_customize_columns( $current_screen->post_type ); $this->maybe_add_share_action( $current_screen->post_type ); + $this->maybe_add_copy_link_action( $current_screen->post_type ); + } + + /** + * Checks the current post type and adds the Copy link post + * action if it is appropriate to do so. + * + * @param string $post_type The post type associated with the current request. + */ + public function maybe_add_copy_link_action( $post_type ) { + if ( ! is_post_type_viewable( $post_type ) ) { + return; + } + add_filter( 'post_row_actions', array( $this, 'add_copy_link_action' ), 20, 2 ); + add_filter( 'page_row_actions', array( $this, 'add_copy_link_action' ), 20, 2 ); + } + + /** + * Adds the Copy link post action which copies the post link to the clipboard. + * + * @param array $post_actions The current array of post actions. + * @param WP_Post $post The current post in the post list table. + * + * @return array The modified post actions array. + */ + public function add_copy_link_action( $post_actions, $post ) { + if ( $post->post_status === 'trash' ) { + return $post_actions; + } + + $post_actions['copy-link'] = sprintf( + '%3$s', + esc_url( get_permalink( $post ) ), + esc_html__( 'Copy link to clipboard', 'jetpack-post-list' ), + esc_html__( 'Copy link', 'jetpack-post-list' ) + ); + return $post_actions; } /** diff --git a/projects/packages/post-list/src/index.js b/projects/packages/post-list/src/index.js new file mode 100644 index 0000000000000..b3f8d3a374589 --- /dev/null +++ b/projects/packages/post-list/src/index.js @@ -0,0 +1,31 @@ +import { __ } from '@wordpress/i18n'; + +/** + * Closure function to copy the link to the clipboard. + * + * @return {Function} The click event handler. + */ +function copyLinkQuickAction() { + let timoutId; + /** + * Copy the link to the clipboard. + * @param {object} event - The event object. + */ + function onClick( event ) { + event.preventDefault(); + clearTimeout( timoutId ); + window.navigator.clipboard.writeText( event.target.getAttribute( 'href' ) ).then( () => { + event.target.textContent = __( 'Copied!', 'jetpack-post-list' ); + timoutId = setTimeout( () => { + event.target.textContent = __( 'Copy link', 'jetpack-post-list' ); + }, 2000 ); + } ); + } + return onClick; +} + +document.addEventListener( 'DOMContentLoaded', () => { + document.querySelectorAll( '.jetpack-post-list__copy-link-action' ).forEach( node => { + node.addEventListener( 'click', copyLinkQuickAction() ); + } ); +} ); diff --git a/projects/packages/post-list/tests/php/test-post-list.php b/projects/packages/post-list/tests/php/test-post-list.php index 07d31e4fb1442..33407b3b3e269 100644 --- a/projects/packages/post-list/tests/php/test-post-list.php +++ b/projects/packages/post-list/tests/php/test-post-list.php @@ -104,8 +104,10 @@ public function test_add_filters_and_actions_for_screen_thumbnail() { $this->assertTrue( has_action( 'manage_posts_custom_column' ) ); $this->assertTrue( has_filter( 'manage_pages_columns' ) ); $this->assertTrue( has_action( 'manage_pages_custom_column' ) ); - $this->assertFalse( has_action( 'post_row_actions' ) ); - $this->assertFalse( has_action( 'page_row_actions' ) ); + $this->assertFalse( has_action( 'post_row_actions', array( $post_list, 'add_share_action' ) ) ); + $this->assertFalse( has_action( 'page_row_actions', array( $post_list, 'add_share_action' ) ) ); + $this->assertNotFalse( has_action( 'post_row_actions', array( $post_list, 'add_copy_link_action' ) ) ); + $this->assertNotFalse( has_action( 'page_row_actions', array( $post_list, 'add_copy_link_action' ) ) ); } /** @@ -197,8 +199,10 @@ public function test_add_filters_and_actions_for_screen_share_flag_disabled() { $this->assertTrue( has_action( 'manage_posts_custom_column' ) ); $this->assertTrue( has_filter( 'manage_pages_columns' ) ); $this->assertTrue( has_action( 'manage_pages_custom_column' ) ); - $this->assertFalse( has_action( 'post_row_actions' ) ); - $this->assertFalse( has_action( 'page_row_actions' ) ); + $this->assertFalse( has_action( 'post_row_actions', array( $post_list, 'add_share_action' ) ) ); + $this->assertFalse( has_action( 'page_row_actions', array( $post_list, 'add_share_action' ) ) ); + $this->assertNotFalse( has_action( 'post_row_actions', array( $post_list, 'add_copy_link_action' ) ) ); + $this->assertNotFalse( has_action( 'page_row_actions', array( $post_list, 'add_copy_link_action' ) ) ); } /** diff --git a/projects/packages/post-list/webpack.config.js b/projects/packages/post-list/webpack.config.js new file mode 100644 index 0000000000000..2a6f551db7b4d --- /dev/null +++ b/projects/packages/post-list/webpack.config.js @@ -0,0 +1,33 @@ +const path = require( 'path' ); +const jetpackWebpackConfig = require( '@automattic/jetpack-webpack-config/webpack' ); + +module.exports = [ + { + entry: { + index: './src/index.js', + }, + mode: jetpackWebpackConfig.mode, + devtool: jetpackWebpackConfig.devtool, + output: { + ...jetpackWebpackConfig.output, + path: path.resolve( './build' ), + }, + optimization: { + ...jetpackWebpackConfig.optimization, + }, + resolve: { + ...jetpackWebpackConfig.resolve, + }, + node: false, + plugins: [ ...jetpackWebpackConfig.StandardPlugins() ], + module: { + strictExportPresence: true, + rules: [ + // Transpile JavaScript + jetpackWebpackConfig.TranspileRule( { + exclude: /node_modules\//, + } ), + ], + }, + }, +]; diff --git a/projects/plugins/jetpack/changelog/add-copy-post-link-action-in-posts-list b/projects/plugins/jetpack/changelog/add-copy-post-link-action-in-posts-list new file mode 100644 index 0000000000000..b9c07fbe20d5f --- /dev/null +++ b/projects/plugins/jetpack/changelog/add-copy-post-link-action-in-posts-list @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Post List: Add a Copy Link Quick Action diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index 9fa189498b6e9..ac1aa7e1244c5 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -2000,7 +2000,7 @@ "dist": { "type": "path", "url": "../../packages/post-list", - "reference": "f5f91acacd48fd2ed2d080fa7f94b1051e17376f" + "reference": "767b62df31802e14760b2ff5351dd28412e87fd4" }, "require": { "automattic/jetpack-assets": "@dev", @@ -2043,6 +2043,12 @@ ], "test-php": [ "@composer phpunit" + ], + "build-production": [ + "pnpm run build-production" + ], + "build-development": [ + "pnpm run build" ] }, "license": [ diff --git a/projects/plugins/social/changelog/add-copy-post-link-action-in-posts-list b/projects/plugins/social/changelog/add-copy-post-link-action-in-posts-list new file mode 100644 index 0000000000000..0cae5823b78d3 --- /dev/null +++ b/projects/plugins/social/changelog/add-copy-post-link-action-in-posts-list @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Post List: Add a Copy Link Quick Action diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index 83745021c30be..5bcabae34570d 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -1293,7 +1293,7 @@ "dist": { "type": "path", "url": "../../packages/post-list", - "reference": "f5f91acacd48fd2ed2d080fa7f94b1051e17376f" + "reference": "767b62df31802e14760b2ff5351dd28412e87fd4" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1336,6 +1336,12 @@ ], "test-php": [ "@composer phpunit" + ], + "build-production": [ + "pnpm run build-production" + ], + "build-development": [ + "pnpm run build" ] }, "license": [ diff --git a/projects/plugins/wpcomsh/changelog/add-copy-post-link-action-in-posts-list b/projects/plugins/wpcomsh/changelog/add-copy-post-link-action-in-posts-list new file mode 100644 index 0000000000000..0cae5823b78d3 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/add-copy-post-link-action-in-posts-list @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Post List: Add a Copy Link Quick Action diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index 4c5c9a23e2779..8219f002b46eb 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -1416,7 +1416,7 @@ "dist": { "type": "path", "url": "../../packages/post-list", - "reference": "f5f91acacd48fd2ed2d080fa7f94b1051e17376f" + "reference": "767b62df31802e14760b2ff5351dd28412e87fd4" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1459,6 +1459,12 @@ ], "test-php": [ "@composer phpunit" + ], + "build-production": [ + "pnpm run build-production" + ], + "build-development": [ + "pnpm run build" ] }, "license": [ From 161a699b92a8bfd70b6232422123a60123143b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donncha=20=C3=93=20Caoimh?= <5656673+donnchawp@users.noreply.github.com> Date: Mon, 3 Feb 2025 09:58:59 +0000 Subject: [PATCH 319/420] WP Super Cache: Minimum WP version is 6.6 again (#41465) --- .../changelog/update-super-cache-min-wp-version-6-6 | 5 +++++ projects/plugins/super-cache/readme.txt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/super-cache/changelog/update-super-cache-min-wp-version-6-6 diff --git a/projects/plugins/super-cache/changelog/update-super-cache-min-wp-version-6-6 b/projects/plugins/super-cache/changelog/update-super-cache-min-wp-version-6-6 new file mode 100644 index 0000000000000..9d7be203f7509 --- /dev/null +++ b/projects/plugins/super-cache/changelog/update-super-cache-min-wp-version-6-6 @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: WP compatibility: bump min WP version to 6.6 again because of polyfills. + + diff --git a/projects/plugins/super-cache/readme.txt b/projects/plugins/super-cache/readme.txt index 56f472419dcec..9155645093378 100644 --- a/projects/plugins/super-cache/readme.txt +++ b/projects/plugins/super-cache/readme.txt @@ -1,7 +1,7 @@ === WP Super Cache === Contributors: donncha, automattic, adnan007, dilirity, mikemayhem3030, pyronaur, thingalon Tags: performance, caching, wp-cache, wp-super-cache, cache -Requires at least: 6.2 +Requires at least: 6.6 Requires PHP: 7.2 Tested up to: 6.7.1 Stable tag: 2.0.0 From ee31f14a7bd015a86061d4d94d6fd552684d9fa3 Mon Sep 17 00:00:00 2001 From: Bryan Elliott Date: Mon, 3 Feb 2025 06:56:07 -0500 Subject: [PATCH 320/420] My Jetpack: Needs plugins notice- Installation/activation fix & translations improvements. (#41493) * Make each plugin list item display the action needed. * Move notice content & translations logic into separate custom hook file. * Fix: Move plugins needing Jetpack installed to end of list. --- .../get-paid-plan-needs-plugins-content.tsx | 148 ++++++++++++ ...needs-plugin-install-activation-notice.tsx | 228 ++++++++++-------- .../changelog/update-mj-needs-plugins-notice | 5 + 3 files changed, 285 insertions(+), 96 deletions(-) create mode 100644 projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/get-paid-plan-needs-plugins-content.tsx create mode 100644 projects/packages/my-jetpack/changelog/update-mj-needs-plugins-notice diff --git a/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/get-paid-plan-needs-plugins-content.tsx b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/get-paid-plan-needs-plugins-content.tsx new file mode 100644 index 0000000000000..490f67342386d --- /dev/null +++ b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/get-paid-plan-needs-plugins-content.tsx @@ -0,0 +1,148 @@ +import { getRedirectUrl } from '@automattic/jetpack-components'; +import { ExternalLink } from '@wordpress/components'; +import { createInterpolateElement } from '@wordpress/element'; +import { __, _n, sprintf } from '@wordpress/i18n'; +import { useMemo } from 'react'; +import { getMyJetpackWindowInitialState } from '../../data/utils/get-my-jetpack-window-state'; + +type NeedsPluginsAlert = + Window[ 'myJetpackInitialState' ][ 'redBubbleAlerts' ][ `${ string }--plugins_needing_installed_activated` ]; + +export const useGetPaidPlanNeedsPluginsContent = ( { + alert, + planName, + planPurchaseId, +}: { + alert: NeedsPluginsAlert; + planName: string; + planPurchaseId: string; +} ) => { + const { needs_installed, needs_activated_only } = alert || {}; + const numPluginsNeedingAction = + ( needs_installed?.length ?? 0 ) + ( needs_activated_only?.length ?? 0 ); + + const { siteSuffix } = getMyJetpackWindowInitialState(); + + const actionType = useMemo( () => { + if ( needs_installed && needs_activated_only ) { + return 'install_activate'; + } else if ( needs_installed ) { + return 'install'; + } + return 'activate'; + }, [ needs_activated_only, needs_installed ] ); + + const noticeTitleSingular = { + install_activate: __( 'Plugin installation and activation needed', 'jetpack-my-jetpack' ), + install: __( 'Plugin installation needed', 'jetpack-my-jetpack' ), + activate: __( 'Plugin activation needed', 'jetpack-my-jetpack' ), + }; + + const noticeTitlePlural = { + install_activate: __( + 'Some plugins need to be installed and/or activated', + 'jetpack-my-jetpack' + ), + install: __( 'Some plugins need to be installed', 'jetpack-my-jetpack' ), + activate: __( 'Some plugins need to be activated', 'jetpack-my-jetpack' ), + }; + + const noticeMessages = { + install_activate: createInterpolateElement( + sprintf( + // translators: %1$s is the name of the Jetpack paid plan, i.e.- "Jetpack Security", and %2$s word "plugin" as singular, or plural ("plugins"). + __( + 'To get the most out of your %1$s paid subscription and have access to all it’s features, we recommend you install and/or activate the following %2$s:', + 'jetpack-my-jetpack' + ), + planName, + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ), + { + link: ( + + ), + } + ), + install: createInterpolateElement( + sprintf( + // translators: %1$s is the name of the Jetpack paid plan, i.e.- "Jetpack Security", and %2$s word "plugin" as singular, or plural ("plugins"). + __( + 'To get the most out of your %1$s paid subscription and have access to all it’s features, we recommend you install and activate the following %2$s:', + 'jetpack-my-jetpack' + ), + planName, + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ), + { + link: ( + + ), + } + ), + activate: createInterpolateElement( + sprintf( + // translators: %1$s is the name of the Jetpack paid plan, i.e.- "Jetpack Security", and %2$s word "plugin" as singular, or plural ("plugins"). + __( + 'To get the most out of your %1$s paid subscription and have access to all it’s features, we recommend you activate the following %2$s:', + 'jetpack-my-jetpack' + ), + planName, + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ), + { + link: ( + + ), + } + ), + }; + + const buttonLabels = { + install_activate: sprintf( + /* translators: %1$s is "plugin" or "plugins" (singular/plural) */ + __( 'Install and/or activate %1$s in one click', 'jetpack-my-jetpack' ), + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ), + install: sprintf( + /* translators: %1$s is "plugin" or "plugins" (singular/plural) */ + __( 'Install and activate %1$s in one click', 'jetpack-my-jetpack' ), + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ), + activate: sprintf( + /* translators: %1$s is "plugin" or "plugins" (singular/plural) */ + __( 'Activate %1$s in one click', 'jetpack-my-jetpack' ), + _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) + ), + }; + + const noticeTitle = + numPluginsNeedingAction === 1 + ? noticeTitleSingular[ actionType ] + : noticeTitlePlural[ actionType ]; + + const noticeMessage = noticeMessages[ actionType ]; + + const buttonLabel = buttonLabels[ actionType as keyof typeof buttonLabels ]; + + return { + noticeTitle, + noticeMessage, + buttonLabel, + }; +}; diff --git a/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-paid-plan-needs-plugin-install-activation-notice.tsx b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-paid-plan-needs-plugin-install-activation-notice.tsx index dfc0678bd19c9..c14958a8347b1 100644 --- a/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-paid-plan-needs-plugin-install-activation-notice.tsx +++ b/projects/packages/my-jetpack/_inc/hooks/use-notification-watcher/use-paid-plan-needs-plugin-install-activation-notice.tsx @@ -1,6 +1,5 @@ -import { Col, Text, getRedirectUrl } from '@automattic/jetpack-components'; +import { Col, Text } from '@automattic/jetpack-components'; import { ExternalLink } from '@wordpress/components'; -import { createInterpolateElement } from '@wordpress/element'; import { __, _n, sprintf } from '@wordpress/i18n'; import { useContext, useEffect, useMemo, useCallback } from 'react'; import { NOTICE_PRIORITY_MEDIUM } from '../../context/constants'; @@ -12,6 +11,7 @@ import useSimpleQuery from '../../data/use-simple-query'; import { getMyJetpackWindowInitialState } from '../../data/utils/get-my-jetpack-window-state'; import useMyJetpackConnection from '../../hooks/use-my-jetpack-connection'; import useAnalytics from '../use-analytics'; +import { useGetPaidPlanNeedsPluginsContent } from './get-paid-plan-needs-plugins-content'; import type { NoticeOptions } from '../../context/notices/types'; import type { MyJetpackInitialState } from '../../data/types'; @@ -52,18 +52,27 @@ const usePaidPlanNeedsPluginInstallActivationNotice = ( redBubbleAlerts: RedBubb ( needs_installed?.length ?? 0 ) + ( needs_activated_only?.length ?? 0 ); const { - siteSuffix, products: { items: products }, } = getMyJetpackWindowInitialState(); + const actionType = useMemo( () => { + if ( needs_installed && needs_activated_only ) { + return 'install_activate'; + } else if ( needs_installed ) { + return 'install'; + } + return 'activate'; + }, [ needs_activated_only, needs_installed ] ); + const getPluginInfo = useCallback( - productSlug => ( { + ( productSlug, action ) => ( { productSlug: productSlug, pluginSlug: products[ productSlug ].plugin_slug, pluginName: products[ productSlug ].plugin_slug === 'jetpack' ? 'Jetpack' : products[ productSlug ].title, + action, pluginUri: `https://wordpress.org/plugins/${ products[ productSlug ].plugin_slug }/`, } ), [ products ] @@ -72,56 +81,113 @@ const usePaidPlanNeedsPluginInstallActivationNotice = ( redBubbleAlerts: RedBubb const pluginsList = useMemo( () => { if ( needs_installed && needs_activated_only ) { const slugs = new Set(); - return [ ...needs_installed, ...needs_activated_only ] - .map( getPluginInfo ) - .filter( ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) ); // filters out duplicates + const needsInstalled = [ ...needs_installed ].map( productSlug => + getPluginInfo( productSlug, 'install' ) + ); + const needsActivated = [ ...needs_activated_only ].map( productSlug => + getPluginInfo( productSlug, 'activate' ) + ); + return [ ...needsInstalled, ...needsActivated ].filter( + /* filters out duplicates */ + ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) + ); } else if ( needs_installed ) { const slugs = new Set(); - return needs_installed - .map( getPluginInfo ) - .filter( ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) ); + return ( + needs_installed + .map( productSlug => getPluginInfo( productSlug, 'install' ) ) + /* filters out duplicates */ + .filter( ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) ) + ); } const slugs = new Set(); - return needs_activated_only - ?.map( getPluginInfo ) - .filter( ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) ); + return ( + needs_activated_only + ?.map( productSlug => getPluginInfo( productSlug, 'activate' ) ) + /* filters out duplicates */ + .filter( ( { pluginSlug } ) => ! slugs.has( pluginSlug ) && slugs.add( pluginSlug ) ) + ); }, [ getPluginInfo, needs_activated_only, needs_installed ] ); - const actionNoun = useMemo( () => { - if ( needs_installed && needs_activated_only ) { - return 'installation and/or activation'; - } else if ( needs_installed ) { - return 'installation'; - } - return 'activation'; - }, [ needs_activated_only, needs_installed ] ); + const { noticeTitle, noticeMessage, buttonLabel } = useGetPaidPlanNeedsPluginsContent( { + alert, + planName, + planPurchaseId: planPurchase?.ID, + } ); - const actionVerb = useMemo( () => { - if ( needs_installed && needs_activated_only ) { - return 'install and/or activate'; - } else if ( needs_installed ) { - return 'install and activate'; - } - return 'activate'; - }, [ needs_activated_only, needs_installed ] ); + const prepareProductsArray = useCallback( + productsArray => { + if ( ! productsArray ) { + return []; + } + const prepared = [ ...productsArray ] + .map( productSlug => ( { productSlug, pluginSlug: products[ productSlug ].plugin_slug } ) ) + .sort( ( a, b ) => { + if ( a.pluginSlug === 'jetpack' ) { + return 1; // Move `jetpack` to the end + } else if ( b.pluginSlug === 'jetpack' ) { + return -1; // Keep others before `jetpack` + } + return a.productSlug - b.productSlug; // Otherwise sort ascending + } ) + .map( ( { productSlug } ) => productSlug ); + return prepared; + }, + [ products ] + ); + + const needsInstalled = prepareProductsArray( needs_installed ); + const needsActivated = prepareProductsArray( needs_activated_only ); + + const needsInstalledContainsJetpack = needsInstalled.find( + productSlug => products[ productSlug ].plugin_slug === 'jetpack' + ); const { install: installAndActivatePlugins, isPending: isInstalling } = - useInstallPlugins( needs_installed ); + useInstallPlugins( needsInstalled ); const { activate: activatePlugins, isPending: isActivating } = - useActivatePlugins( needs_activated_only ); + useActivatePlugins( needsActivated ); const handleInstallActivateInOneClick = useCallback( () => { recordEvent( 'jetpack_my_jetpack_plugin_needs_installed_notice_cta_click' ); - if ( needs_installed ) { + if ( needsInstalled.length && needsActivated.length ) { + if ( needsInstalledContainsJetpack ) { + activatePlugins( null, { + onSuccess: () => { + installAndActivatePlugins( null, { + onSuccess: () => { + delete redBubbleAlerts[ pluginsNeedingActionAlerts[ 0 ] ]; + resetNotice(); + }, + } ); + }, + } ); + return; + } + installAndActivatePlugins( null, { + onSuccess: () => { + activatePlugins( null, { + onSuccess: () => { + delete redBubbleAlerts[ pluginsNeedingActionAlerts[ 0 ] ]; + resetNotice(); + }, + } ); + }, + } ); + return; + } + + if ( needsInstalled.length ) { installAndActivatePlugins( null, { onSuccess: () => { delete redBubbleAlerts[ pluginsNeedingActionAlerts[ 0 ] ]; resetNotice(); }, } ); + return; } - if ( needs_activated_only ) { + if ( needsActivated.length ) { activatePlugins( null, { onSuccess: () => { delete redBubbleAlerts[ pluginsNeedingActionAlerts[ 0 ] ]; @@ -131,13 +197,14 @@ const usePaidPlanNeedsPluginInstallActivationNotice = ( redBubbleAlerts: RedBubb } }, [ recordEvent, - needs_installed, - needs_activated_only, + needsInstalled, + needsActivated, + needsInstalledContainsJetpack, installAndActivatePlugins, + activatePlugins, redBubbleAlerts, pluginsNeedingActionAlerts, resetNotice, - activatePlugins, ] ); useEffect( () => { @@ -145,70 +212,38 @@ const usePaidPlanNeedsPluginInstallActivationNotice = ( redBubbleAlerts: RedBubb return; } - const noticeTitle = sprintf( - /* translators: %s is the word(s), "installation", or "activation", or "installation and/or activation". */ - _n( - 'Plugin %s needed', - 'Some plugins need %s', - numPluginsNeedingAction, - 'jetpack-my-jetpack' - ), - actionNoun - ); + const actionNounMap = { + install: __( 'Needs installation and activation', 'jetpack-my-jetpack' ), + activate: __( 'Needs activation', 'jetpack-my-jetpack' ), + }; - const noticeMessage = ( + const noticeContent = ( <> - { createInterpolateElement( - sprintf( - // translators: %1$s is the name of the Jetpack paid plan, i.e.- "Jetpack Security", %2$s is either "the [plugin name] plugin" or "the following plugins", and %3$s is a verb being either "installed", or "activated", or "installed and/or activated". - __( - 'To get the most out of your %1$s paid subscription and have access to all it’s features, we recommend you %2$s the following %3$s:', - 'jetpack-my-jetpack' - ), - planName, - actionVerb, - _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) - ), - { - link: ( - - ), - } - ) } + { noticeMessage }
        - { pluginsList.map( ( pluginInfo, index ) => ( -
      • - { actionVerb === 'activate' ? ( - { pluginInfo.pluginName } - ) : ( - - { pluginInfo.pluginName } - - ) } - (Needs { actionNoun }) -
      • - ) ) } + { pluginsList.map( ( pluginInfo, index ) => { + return ( +
      • + { pluginInfo.action === 'activate' ? ( + { pluginInfo.pluginName } + ) : ( + + { pluginInfo.pluginName } + + ) } + ({ actionNounMap[ pluginInfo.action ] }) +
      • + ); + } ) }
      ); - const buttonLabel = sprintf( - /* translators: %1$s is either "Install and activate", or "Install and/or activate", or "Activate"; And %2$s is "plugin" or "plugins" (singular/plural). */ - __( '%1$s %2$s in one click', 'jetpack-my-jetpack' ), - actionVerb.charAt( 0 ).toUpperCase() + actionVerb.slice( 1 ), - _n( 'plugin', 'plugins', numPluginsNeedingAction, 'jetpack-my-jetpack' ) - ); - - const isinstallingOrActivating = isActivating || isInstalling; + const isInstallingOrActivating = isActivating || isInstalling; const noticeOptions: NoticeOptions = { id: 'plugin_needs_installed_activated', @@ -217,9 +252,9 @@ const usePaidPlanNeedsPluginInstallActivationNotice = ( redBubbleAlerts: RedBubb { label: buttonLabel, onClick: handleInstallActivateInOneClick, - isLoading: isinstallingOrActivating, + isLoading: isInstallingOrActivating, loadingText: - actionVerb === 'activate' + actionType === 'activate' ? sprintf( /* translators: %s is the singular or plural "plugin" or "plugins". */ __( 'Activating %s…', 'jetpack-my-jetpack' ), @@ -233,17 +268,19 @@ const usePaidPlanNeedsPluginInstallActivationNotice = ( redBubbleAlerts: RedBubb noDefaultClasses: true, }, ], - priority: NOTICE_PRIORITY_MEDIUM + ( isinstallingOrActivating ? 1 : 0 ), + priority: NOTICE_PRIORITY_MEDIUM + ( isInstallingOrActivating ? 1 : 0 ), }; setNotice( { title: noticeTitle, - message: noticeMessage, + message: noticeContent, options: noticeOptions, } ); }, [ - actionNoun, - actionVerb, + actionType, + noticeTitle, + noticeMessage, + buttonLabel, isPurchasesDataLoaded, numPluginsNeedingAction, handleInstallActivateInOneClick, @@ -252,7 +289,6 @@ const usePaidPlanNeedsPluginInstallActivationNotice = ( redBubbleAlerts: RedBubb pluginsList, pluginsNeedingActionAlerts.length, setNotice, - siteSuffix, isInstalling, isActivating, ] ); diff --git a/projects/packages/my-jetpack/changelog/update-mj-needs-plugins-notice b/projects/packages/my-jetpack/changelog/update-mj-needs-plugins-notice new file mode 100644 index 0000000000000..9175fda82ce1e --- /dev/null +++ b/projects/packages/my-jetpack/changelog/update-mj-needs-plugins-notice @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: My Jetpack: Needs plugin notice- minor bug fixes & enhancements. + + From 99459eb0e1b45f1615c361f6ab9fd7ceca9d32f7 Mon Sep 17 00:00:00 2001 From: Paul Bunkham Date: Mon, 3 Feb 2025 13:16:02 +0000 Subject: [PATCH 321/420] Social: Handle connections with the must_reauth status (#41494) LinkedIn connections need to be reauthenticated every year. Currently that is every 60 days, but as we release the change to use the refresh token, it will mean that all LinkedIn connections will be marked as needing to be reauthenticated. The connections will still be able to be used, but the UI will now say that they need reconnecting and follow a similar process to the broken connections. --- .../update-broken-connection-notifications | 4 + .../connection-status.tsx | 12 ++- .../src/components/connection/index.js | 38 --------- .../form/broken-connections-notice.tsx | 84 ++++--------------- .../src/components/notice/index.js | 2 +- .../src/components/notice/styles.module.scss | 4 - .../services/service-connection-info.tsx | 5 +- .../src/components/services/service-item.tsx | 2 + .../components/services/service-status.tsx | 50 +++++++---- .../src/components/styles.module.scss | 19 ----- 10 files changed, 74 insertions(+), 146 deletions(-) create mode 100644 projects/js-packages/publicize-components/changelog/update-broken-connection-notifications delete mode 100644 projects/js-packages/publicize-components/src/components/styles.module.scss diff --git a/projects/js-packages/publicize-components/changelog/update-broken-connection-notifications b/projects/js-packages/publicize-components/changelog/update-broken-connection-notifications new file mode 100644 index 0000000000000..ddae45488d23f --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/update-broken-connection-notifications @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Social Connections: Handle LinkedIn connections requiring reauth diff --git a/projects/js-packages/publicize-components/src/components/connection-management/connection-status.tsx b/projects/js-packages/publicize-components/src/components/connection-management/connection-status.tsx index 51d089a5f0744..90dc09ccc2813 100644 --- a/projects/js-packages/publicize-components/src/components/connection-management/connection-status.tsx +++ b/projects/js-packages/publicize-components/src/components/connection-management/connection-status.tsx @@ -20,15 +20,23 @@ export type ConnectionStatusProps = { * @return {import('react').ReactNode} - React element */ export function ConnectionStatus( { connection, service }: ConnectionStatusProps ) { - if ( connection.status !== 'broken' ) { + if ( connection.status !== 'broken' && connection.status !== 'must_reauth' ) { return null; } + const statusMessage = + connection.status === 'broken' + ? __( 'There is an issue with this connection.', 'jetpack-publicize-components' ) + : __( + 'To keep sharing with this connection, please reconnect it.', + 'jetpack-publicize-components' + ); + return (
      { service - ? __( 'There is an issue with this connection.', 'jetpack-publicize-components' ) + ? statusMessage : createInterpolateElement( sprintf( '%1$s %2$s', diff --git a/projects/js-packages/publicize-components/src/components/connection/index.js b/projects/js-packages/publicize-components/src/components/connection/index.js index 03d643a55d575..b149445e6b55f 100644 --- a/projects/js-packages/publicize-components/src/components/connection/index.js +++ b/projects/js-packages/publicize-components/src/components/connection/index.js @@ -5,49 +5,13 @@ * checkbox to enable/disable the connection for sharing. */ -import { getSiteFragment } from '@automattic/jetpack-shared-extension-utils'; -import { Notice, ExternalLink } from '@wordpress/components'; import { withSelect } from '@wordpress/data'; import { Component } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; import { SOCIAL_STORE_ID } from '../../social-store'; import ConnectionToggle from '../connection-toggle'; -import componentStyles from '../styles.module.scss'; import styles from './styles.module.scss'; class PublicizeConnection extends Component { - /** - * Displays a message when a connection requires reauthentication. We used this when migrating LinkedIn API usage from v1 to v2, - * since the prevous OAuth1 tokens were incompatible with OAuth2. - * - * @return {object|?null} Notice about reauthentication - */ - maybeDisplayLinkedInNotice = () => - this.connectionNeedsReauth() && ( - -

      - { __( - 'Your LinkedIn connection needs to be reauthenticated to continue working – head to Sharing to take care of it.', - 'jetpack-publicize-components' - ) } -

      - - { __( 'Go to Sharing settings', 'jetpack-publicize-components' ) } - -
      - ); - - /** - * Check whether the connection needs to be reauthenticated. - * - * @return {boolean} True if connection must be reauthenticated. - */ - connectionNeedsReauth = () => this.props.mustReauthConnections.includes( this.props.name ); - onConnectionChange = () => { const { id } = this.props; if ( this.isDisabled() ) { @@ -86,7 +50,6 @@ class PublicizeConnection extends Component { return (
    • - { this.maybeDisplayLinkedInNotice() }
      { toggle }
    • ); @@ -95,5 +58,4 @@ class PublicizeConnection extends Component { export default withSelect( select => ( { failedConnections: select( SOCIAL_STORE_ID ).getFailedConnections(), - mustReauthConnections: select( SOCIAL_STORE_ID ).getMustReauthConnections(), } ) )( PublicizeConnection ); diff --git a/projects/js-packages/publicize-components/src/components/form/broken-connections-notice.tsx b/projects/js-packages/publicize-components/src/components/form/broken-connections-notice.tsx index fc142cfe131c3..c312999910614 100644 --- a/projects/js-packages/publicize-components/src/components/form/broken-connections-notice.tsx +++ b/projects/js-packages/publicize-components/src/components/form/broken-connections-notice.tsx @@ -1,24 +1,28 @@ import { Button } from '@automattic/jetpack-components'; import { ExternalLink } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; -import { createInterpolateElement, Fragment } from '@wordpress/element'; -import { __, _x } from '@wordpress/i18n'; +import { createInterpolateElement } from '@wordpress/element'; +import { _n } from '@wordpress/i18n'; import usePublicizeConfig from '../../hooks/use-publicize-config'; -import { store } from '../../social-store'; -import { Connection } from '../../social-store/types'; +import { store as socialStore } from '../../social-store'; import { getSocialScriptData } from '../../utils/script-data'; import Notice from '../notice'; -import { useServiceLabel } from '../services/use-service-label'; import styles from './styles.module.scss'; export const BrokenConnectionsNotice: React.FC = () => { - const brokenConnections = useSelect( select => select( store ).getBrokenConnections(), [] ); + const { brokenConnections, reauthConnections } = useSelect( select => { + const store = select( socialStore ); + return { + brokenConnections: store.getBrokenConnections(), + reauthConnections: store.getMustReauthConnections(), + }; + }, [] ); const { connectionsPageUrl } = usePublicizeConfig(); const { useAdminUiV1 } = getSocialScriptData().feature_flags; - const { openConnectionsModal } = useDispatch( store ); + const { openConnectionsModal } = useDispatch( socialStore ); const fixLink = useAdminUiV1 ? (
      diff --git a/projects/js-packages/publicize-components/src/components/services/service-status.tsx b/projects/js-packages/publicize-components/src/components/services/service-status.tsx index f21a5f97b77e3..b68c6e7acd8bd 100644 --- a/projects/js-packages/publicize-components/src/components/services/service-status.tsx +++ b/projects/js-packages/publicize-components/src/components/services/service-status.tsx @@ -8,6 +8,7 @@ import styles from './style.module.scss'; export type ServiceStatusProps = { serviceConnections: Array< Connection >; brokenConnections: Array< Connection >; + reauthConnections: Array< Connection >; }; /** @@ -17,34 +18,53 @@ export type ServiceStatusProps = { * * @return {import('react').ReactNode} Service status component */ -export function ServiceStatus( { serviceConnections, brokenConnections }: ServiceStatusProps ) { +export function ServiceStatus( { + serviceConnections, + brokenConnections, + reauthConnections, +}: ServiceStatusProps ) { const canFix = useSelect( - select => brokenConnections.some( select( socialStore ).canUserManageConnection ), - [ brokenConnections ] + select => + brokenConnections.some( select( socialStore ).canUserManageConnection ) || + reauthConnections.some( select( socialStore ).canUserManageConnection ), + [ brokenConnections, reauthConnections ] ); if ( ! serviceConnections.length ) { return null; } - if ( brokenConnections.length > 0 ) { + if ( brokenConnections.length || reauthConnections.length ) { + let message: string; + if ( brokenConnections.length ) { + message = canFix + ? __( + 'Please fix the broken connections or disconnect them to create more connections.', + 'jetpack-publicize-components' + ) + : _n( + 'Broken connection', + 'Broken connections', + brokenConnections.length, + 'jetpack-publicize-components' + ); + } else { + message = canFix + ? __( 'Reconnect to continue sharing.', 'jetpack-publicize-components' ) + : _n( + 'Expiring connection', + 'Expiring connections', + reauthConnections.length, + 'jetpack-publicize-components' + ); + } return ( - { canFix - ? __( - 'Please fix the broken connections or disconnect them to create more connections.', - 'jetpack-publicize-components' - ) - : _n( - 'Broken connection', - 'Broken connections', - brokenConnections.length, - 'jetpack-publicize-components' - ) } + { message } ); } diff --git a/projects/js-packages/publicize-components/src/components/styles.module.scss b/projects/js-packages/publicize-components/src/components/styles.module.scss deleted file mode 100644 index aecff4d2e264c..0000000000000 --- a/projects/js-packages/publicize-components/src/components/styles.module.scss +++ /dev/null @@ -1,19 +0,0 @@ -.publicize-notice { - &.components-notice { - margin-left: 0; - margin-right: 0; - margin-bottom: 13px; - } - - .components-button { - height: auto; - line-height: initial; - padding-top: 6px; - padding-bottom: 6px; - } - - .components-button + .components-button { - margin-top: 5px; - } -} - From 32fa007dbd826d8074aa3b1d7d550116ce24dbda Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Mon, 3 Feb 2025 15:41:30 +0200 Subject: [PATCH 322/420] Forms: Prevent empty form submission client side (#41464) --- ...-prevent-emtpy-form-submission-client-side | 4 +++ .../src/contact-form/js/accessible-form.js | 31 ++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 projects/packages/forms/changelog/forms-prevent-emtpy-form-submission-client-side diff --git a/projects/packages/forms/changelog/forms-prevent-emtpy-form-submission-client-side b/projects/packages/forms/changelog/forms-prevent-emtpy-form-submission-client-side new file mode 100644 index 0000000000000..3e72ad17af02a --- /dev/null +++ b/projects/packages/forms/changelog/forms-prevent-emtpy-form-submission-client-side @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Forms: Prevent empty form submission client side diff --git a/projects/packages/forms/src/contact-form/js/accessible-form.js b/projects/packages/forms/src/contact-form/js/accessible-form.js index 229b553bd415b..b7ccf7b6a401a 100644 --- a/projects/packages/forms/src/contact-form/js/accessible-form.js +++ b/projects/packages/forms/src/contact-form/js/accessible-form.js @@ -29,6 +29,8 @@ const L10N = { submittingForm: __( 'Submitting form', 'jetpack-forms' ), /* translators: generic error message */ genericError: __( 'Please correct this field', 'jetpack-forms' ), + /* translators: error message shown when no field has been filled out */ + emptyForm: __( 'The form you are trying to submit is emtpy.', 'jetpack-forms' ), errorCount: d => /* translators: message displayed when errors need to be fixed. %d is the number of errors. */ _n( 'You need to fix %d error.', 'You need to fix %d errors.', d, 'jetpack-forms' ), @@ -47,6 +49,17 @@ const initAllForms = () => { .forEach( initForm ); }; +function isFormEmpty( form ) { + const clonedForm = form.cloneNode( true ); + Array.from( clonedForm.querySelectorAll( 'input[type="hidden"]' ) ).forEach( input => + input.remove() + ); + const formData = new FormData( clonedForm ); + return ! Array.from( formData.values() ).some( value => + value instanceof File ? !! value.size : !! value?.trim?.() + ); +} + /** * Implement a form custom validation. * @param {HTMLFormElement} form Form element @@ -75,7 +88,15 @@ const initForm = form => { clearForm( form, inputListenerMap, opts ); - if ( isFormValid( form ) ) { + const isValid = isFormValid( form ); + // If a form is invalid proceed with the usual validation process, even if it's empty. + // This indicates that some fields are required. + if ( isFormEmpty( form ) && isValid ) { + setFormError( form, [], { disableLiveRegion: true, type: 'emptyForm' } ); + return; + } + + if ( isValid ) { inputListenerMap = {}; form.removeEventListener( 'submit', onSubmit ); @@ -914,6 +935,14 @@ const setFormError = ( form, invalidFields, opts = {} ) => { } const count = invalidFields.length; + // This is essentially a way to add a single error styled message when we + // have no field validation errors. We have to pass no invalid fields and + // `opts.type` to match a translatable message. We should extract it when + // we refactor the error handling. + if ( ! count && !! L10N[ opts.type ] ) { + error.appendChild( createError( L10N[ opts.type ] ) ); + return; + } const errors = [ L10N.invalidForm ]; if ( count > 0 ) { From 21cb33b3c41d9c734f88b8ecef58605997ea7e65 Mon Sep 17 00:00:00 2001 From: Ella <4710635+ellatrix@users.noreply.github.com> Date: Mon, 3 Feb 2025 15:13:14 +0100 Subject: [PATCH 323/420] MU WPCOM: use @wordpress/i18n (not i18n-calypso) (#41467) --- pnpm-lock.yaml | 3 -- .../changelog/fix-celebrate-interpolate | 4 ++ .../packages/jetpack-mu-wpcom/package.json | 1 - .../celebrate-launch-modal.js | 53 ++++++++++++------- 4 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-celebrate-interpolate diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4e21fbfcdd2b2..d94b635895099 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2495,9 +2495,6 @@ importers: events: specifier: ^3.3.0 version: 3.3.0 - i18n-calypso: - specifier: 7.0.0 - version: 7.0.0(@types/react@18.3.18)(react@18.3.1) preact: specifier: ^10.13.1 version: 10.22.1 diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-celebrate-interpolate b/projects/packages/jetpack-mu-wpcom/changelog/fix-celebrate-interpolate new file mode 100644 index 0000000000000..485528e4debb1 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-celebrate-interpolate @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix celebrate launch modal translations diff --git a/projects/packages/jetpack-mu-wpcom/package.json b/projects/packages/jetpack-mu-wpcom/package.json index b1eb4ce00b3b4..32d2433b787f2 100644 --- a/projects/packages/jetpack-mu-wpcom/package.json +++ b/projects/packages/jetpack-mu-wpcom/package.json @@ -77,7 +77,6 @@ "clsx": "2.1.1", "debug": "4.4.0", "events": "^3.3.0", - "i18n-calypso": "7.0.0", "preact": "^10.13.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/celebrate-launch/celebrate-launch-modal.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/celebrate-launch/celebrate-launch-modal.js index 540c166d04892..b63372ad74f90 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/celebrate-launch/celebrate-launch-modal.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-dashboard-widgets/celebrate-launch/celebrate-launch-modal.js @@ -1,9 +1,9 @@ import { Gridicon, ConfettiAnimation } from '@automattic/components'; import { Button, Modal, Tooltip } from '@wordpress/components'; import { useCopyToClipboard } from '@wordpress/compose'; -import { useState, useEffect } from '@wordpress/element'; +import { useState, useEffect, createInterpolateElement } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; import { Icon, copy } from '@wordpress/icons'; -import { useTranslate } from 'i18n-calypso'; import { wpcomTrackEvent } from '../../../common/tracks'; import './celebrate-launch-modal.scss'; @@ -27,7 +27,6 @@ export default function CelebrateLaunchModal( { siteUrl, hasCustomDomain, } ) { - const translate = useTranslate(); const isPaidPlan = !! sitePlan; const isBilledMonthly = sitePlan?.product_slug?.includes( 'monthly' ); const [ clipboardCopied, setClipboardCopied ] = useState( false ); @@ -51,34 +50,45 @@ export default function CelebrateLaunchModal( { if ( ! isPaidPlan && ! hasCustomDomain ) { contentElement = (

      - { translate( - 'Supercharge your website with a {{strong}}custom address{{/strong}} that matches your blog, brand, or business.', - { components: { strong: } } + { createInterpolateElement( + __( + 'Supercharge your website with a custom address that matches your blog, brand, or business.', + 'jetpack-mu-wpcom' + ), + { + strong: , + } ) }

      ); - buttonText = translate( 'Claim your domain' ); + buttonText = __( 'Claim your domain', 'jetpack-mu-wpcom' ); buttonHref = `https://wordpress.com/domains/add/${ siteSlug }`; } else if ( isPaidPlan && isBilledMonthly && ! hasCustomDomain ) { contentElement = (

      - { translate( - 'Interested in a custom domain? It’s free for the first year when you switch to annual billing.' + { __( + 'Interested in a custom domain? It’s free for the first year when you switch to annual billing.', + 'jetpack-mu-wpcom' ) }

      ); - buttonText = translate( 'Claim your domain' ); + buttonText = __( 'Claim your domain', 'jetpack-mu-wpcom' ); buttonHref = `https://wordpress.com/domains/add/${ siteSlug }`; } else if ( isPaidPlan && ! hasCustomDomain ) { contentElement = (

      - { translate( - 'Your paid plan includes a domain name {{strong}}free for one year{{/strong}}. Choose one that’s easy to remember and even easier to share.', - { components: { strong: } } + { createInterpolateElement( + __( + 'Your paid plan includes a domain name free for one year. Choose one that’s easy to remember and even easier to share.', + 'jetpack-mu-wpcom' + ), + { + strong: , + } ) }

      ); - buttonText = translate( 'Claim your free domain' ); + buttonText = __( 'Claim your free domain', 'jetpack-mu-wpcom' ); buttonHref = `https://wordpress.com/domains/add/${ siteSlug }`; } else if ( hasCustomDomain ) { return null; @@ -110,10 +120,13 @@ export default function CelebrateLaunchModal( {

      - { translate( 'Congrats, your site is live!' ) } + { __( 'Congrats, your site is live!', 'jetpack-mu-wpcom' ) }

      - { translate( 'Now you can head over to your site and share it with the world.' ) } + { __( + 'Now you can head over to your site and share it with the world.', + 'jetpack-mu-wpcom' + ) }

      @@ -121,12 +134,12 @@ export default function CelebrateLaunchModal( {

      { siteSlug }

      From 27ae7472ff371afae3113a30557990bcf42f5776 Mon Sep 17 00:00:00 2001 From: Omar Alshaker Date: Mon, 3 Feb 2025 16:54:14 +0100 Subject: [PATCH 324/420] Implement Verbum Block Editor darkmode (#41505) * Implement Verbum Block Editor darkmode * changelog --- .../packages/jetpack-mu-wpcom/changelog/fix-verbum-dark-mode | 4 ++++ .../src/features/verbum-comments/class-verbum-comments.php | 2 ++ .../verbum-comments/src/components/comment-input-field.tsx | 3 ++- .../src/features/verbum-comments/src/components/types.d.ts | 3 ++- .../src/features/verbum-comments/src/types.tsx | 1 + 5 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/fix-verbum-dark-mode diff --git a/projects/packages/jetpack-mu-wpcom/changelog/fix-verbum-dark-mode b/projects/packages/jetpack-mu-wpcom/changelog/fix-verbum-dark-mode new file mode 100644 index 0000000000000..ea7d605e66003 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/fix-verbum-dark-mode @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Dark mode in Verbum Comments diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php index 1ed4fec4f9b5d..f96b6c4ab9978 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php @@ -187,6 +187,7 @@ public function enqueue_assets() { $css_mtime = filemtime( ABSPATH . '/widgets.wp.com/verbum-block-editor/block-editor.css' ); $js_mtime = filemtime( ABSPATH . '/widgets.wp.com/verbum-block-editor/block-editor.min.js' ); $vbe_cache_buster = max( $js_mtime, $css_mtime ); + $color_scheme = get_blog_option( $this->blog_id, 'jetpack_comment_form_color_scheme' ); wp_add_inline_script( 'verbum-settings', @@ -259,6 +260,7 @@ public function enqueue_assets() { 'isRTL' => is_rtl(), 'vbeCacheBuster' => $vbe_cache_buster, 'iframeUniqueId' => $iframe_unique_id, + 'colorScheme' => $color_scheme, ) ), 'before' diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/comment-input-field.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/comment-input-field.tsx index 0899b52ccfd15..fd19bf2c19603 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/comment-input-field.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/comment-input-field.tsx @@ -71,7 +71,8 @@ export const CommentInputField = forwardRef( handleOnKeyUp(); }, VerbumComments.isRTL, - embedContentCallback + embedContentCallback, + VerbumComments.colorScheme === 'dark' ); // Wait fro the block editor to render. setTimeout( () => setEditorState( 'LOADED' ), 100 ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/types.d.ts b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/types.d.ts index 6ab2338030982..cc9ec13920646 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/types.d.ts +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/components/types.d.ts @@ -11,7 +11,8 @@ declare global { textarea: HTMLTextAreaElement, content: ( embedUrl: string ) => void, isRtl: boolean, - onEmbedContent: ( embedUrl: string ) => void + onEmbedContent: ( embedUrl: string ) => void, + isDarkMode: boolean ) => void; }; const vbeCacheBuster: string; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/types.tsx b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/types.tsx index 228bf852dc280..39126005c2f28 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/types.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/src/types.tsx @@ -72,6 +72,7 @@ export interface VerbumComments { */ fullyLoadedTime: number; vbeCacheBuster: string; + colorScheme: string; } export type EmailSubscriptionResponse = { From 04d074320e6200fdd1958e9ff2b1268c4520b91a Mon Sep 17 00:00:00 2001 From: Kolja Zuelsdorf Date: Mon, 3 Feb 2025 17:11:50 +0100 Subject: [PATCH 325/420] Protect Status: Fixed a bug where it can happen that the core version data is not interpreted correctly from the report data response. (#41503) * Protect Status: Properly verify if the core version checks are part of the report data response. --- .../changelog/fix-protect-status-core-version-check | 4 ++++ .../packages/protect-status/src/class-protect-status.php | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 projects/packages/protect-status/changelog/fix-protect-status-core-version-check diff --git a/projects/packages/protect-status/changelog/fix-protect-status-core-version-check b/projects/packages/protect-status/changelog/fix-protect-status-core-version-check new file mode 100644 index 0000000000000..5166f35c1d24e --- /dev/null +++ b/projects/packages/protect-status/changelog/fix-protect-status-core-version-check @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Protect Status: Fixed a bug where it can happen that the core version data is not interpreted correctly from the report data response. diff --git a/projects/packages/protect-status/src/class-protect-status.php b/projects/packages/protect-status/src/class-protect-status.php index 6a2aa2e0361eb..049f226eae5e0 100644 --- a/projects/packages/protect-status/src/class-protect-status.php +++ b/projects/packages/protect-status/src/class-protect-status.php @@ -258,8 +258,10 @@ protected static function normalize_core_data( &$status, $report_data ) { global $wp_version; // Ensure the report data has the core property. - if ( ! $report_data->core || ! $report_data->core->version ) { - $report_data->core = new \stdClass(); + if ( ! isset( $report_data->core ) || ! $report_data->core + || ! isset( $report_data->core->version ) || ! $report_data->core->version ) { + $report_data->core = new \stdClass(); + $report_data->core->version = new \stdClass(); } $core = new Extension_Model( From 73eec4a61e9d7dbd36b891568d18244c91fb492f Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Mon, 3 Feb 2025 14:06:21 -0300 Subject: [PATCH 326/420] Jetpack SEO: address assistant CSS styles (#41506) * fix assistant height to 434 * set h2 size and color * set icons to 32 and button color to 1e1e1e * align chat to bottom * fix align to bottom as scrollbar is lost with flex-end * address messages gaps and paddings, max width to 255 * changelog --- .../fix-jetpack-seo-assistant-styles | 4 ++++ .../seo-assistant/assistant-wizard.tsx | 6 ++--- .../components/seo-assistant/style.scss | 22 +++++++++++-------- 3 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-styles diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-styles b/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-styles new file mode 100644 index 0000000000000..ec36034825f92 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-styles @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack SEO assistant: address design css diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx index 08a486d0bd3f2..42a78912a1806 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx @@ -121,17 +121,17 @@ export default function AssistantWizard( { close, tasks } ) {

      { currentStepData?.title }

      diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss index 89faed7c1e6d4..854d07e33a542 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -4,7 +4,7 @@ left: 50%; transform: translateX(-50%); width: 440px; - max-height: 434px; + height: 434px; background: white; border-radius: 24px; outline: 0.5px solid var( --jp-gray-5 ); @@ -28,8 +28,9 @@ h2 { margin: 0; - font-size: 16px; - font-weight: 600; + font-size: 20px; + font-weight: 500; + color: #1e1e1e; } button { @@ -37,7 +38,7 @@ border: none; cursor: pointer; padding: 8px; - color: #6b7280; + color: #1e1e1e; &:hover { color: #374151; @@ -52,13 +53,17 @@ height: 100%; overflow: auto; mask-image: linear-gradient( 180deg, transparent, white 24px ); + + & > :first-child { + margin-top: auto; + } } &__messages { flex: 1 1 auto; display: flex; flex-direction: column; - gap: 8px; + gap: 16px; padding: 8px 8px 8px 0; overflow-y: auto; scroll-behavior: smooth; @@ -72,7 +77,7 @@ line-height: 1.5; display: flex; align-items: center; - min-width: 80%; + max-width: 255px; .assistant-wizard__message-icon { flex-shrink: 0; @@ -92,11 +97,10 @@ &.is-user { background: #f3f4f6; align-self: flex-end; - max-width: 85%; min-width: 15%; .assistant-wizard__message-text { - padding: 4px 12px; + padding: 16px 20px; } .assistant-wizard__message-icon { @@ -162,7 +166,7 @@ &__option { width: 100%; - padding: 12px; + padding: 16px 20px; background: #f3f4f6; border: 2px solid transparent; border-radius: 16px; From c00cfc9f1b027042b9d394ef6d644815339e842e Mon Sep 17 00:00:00 2001 From: Nik Tsekouras Date: Mon, 3 Feb 2025 19:30:27 +0200 Subject: [PATCH 327/420] Forms: Fix submission if date field had errored (#41511) --- .../forms/changelog/form-fix-submit-if-date-had-errored | 4 ++++ .../packages/forms/src/contact-form/js/accessible-form.js | 1 + .../packages/forms/src/contact-form/js/grunion-frontend.js | 3 +++ 3 files changed, 8 insertions(+) create mode 100644 projects/packages/forms/changelog/form-fix-submit-if-date-had-errored diff --git a/projects/packages/forms/changelog/form-fix-submit-if-date-had-errored b/projects/packages/forms/changelog/form-fix-submit-if-date-had-errored new file mode 100644 index 0000000000000..568c9b0163305 --- /dev/null +++ b/projects/packages/forms/changelog/form-fix-submit-if-date-had-errored @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Fix submission if date field had errored diff --git a/projects/packages/forms/src/contact-form/js/accessible-form.js b/projects/packages/forms/src/contact-form/js/accessible-form.js index b7ccf7b6a401a..f22ae96e4de87 100644 --- a/projects/packages/forms/src/contact-form/js/accessible-form.js +++ b/projects/packages/forms/src/contact-form/js/accessible-form.js @@ -269,6 +269,7 @@ const isDateFieldValid = input => { if ( value && format && typeof $ !== 'undefined' ) { try { $.datepicker.parseDate( format, value ); + input.setCustomValidity( '' ); } catch { input.setCustomValidity( L10N.invalidDate ); diff --git a/projects/packages/forms/src/contact-form/js/grunion-frontend.js b/projects/packages/forms/src/contact-form/js/grunion-frontend.js index 0460b7ba9254d..c10e153fc19e6 100644 --- a/projects/packages/forms/src/contact-form/js/grunion-frontend.js +++ b/projects/packages/forms/src/contact-form/js/grunion-frontend.js @@ -6,5 +6,8 @@ jQuery( function ( $ ) { dateFormat, constrainInput: false, showOptions: { direction: 'down' }, + onSelect: function () { + $( this ).focus(); + }, } ); } ); From 81434d8dd7ac15a46bb74c321aaf7a38a21512c8 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Mon, 3 Feb 2025 11:08:12 -0700 Subject: [PATCH 328/420] Add hint for outdated dependencies (#41484) --- tools/cli/bin/jetpack.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/cli/bin/jetpack.js b/tools/cli/bin/jetpack.js index 2a3e58ed1a6f5..46c0f00af3421 100755 --- a/tools/cli/bin/jetpack.js +++ b/tools/cli/bin/jetpack.js @@ -29,6 +29,18 @@ async function guardedImport( path ) { '*** Something is missing from your install. Please run `pnpm install` and try again. ***' ) ); + } else if ( + error.name === 'SyntaxError' && + ( error.stack.match( + /Named export '.+?' not found. The requested module '.+?' is a CommonJS module/ + ) || + error.stack.match( /The requested module '.+?' does not provide an export named '.+?'/ ) ) + ) { + console.error( + bold( + '*** Perhaps you have outdated dependencies. Please run `pnpm install` and try again. ***' + ) + ); } else { console.error( bold( '*** Something unexpected happened. See error above. ***' ) ); } From 29f660847eda92d57e7f0d3459eeaa5971159228 Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Mon, 3 Feb 2025 19:35:55 +0100 Subject: [PATCH 329/420] Development tools: add Cursor rules (#41512) This adds a first set of rules to be used by folks using Cursor as their IDE. The different rules are mostly sourced from other Automattic repos, as well as existing documentation in the monorepo. I also referenced some of our other docs to add more context. --- .cursor/rules/adding-changelog.mdc | 20 +++++++++++ .cursor/rules/code-style-structure.mdc | 13 ++++++++ .cursor/rules/development-guidelines.mdc | 42 ++++++++++++++++++++++++ .cursor/rules/js-react-standards.mdc | 26 +++++++++++++++ .cursor/rules/js-testing.mdc | 14 ++++++++ .cursor/rules/php-standards.mdc | 20 +++++++++++ .cursor/rules/php-testing.mdc | 14 ++++++++ 7 files changed, 149 insertions(+) create mode 100644 .cursor/rules/adding-changelog.mdc create mode 100644 .cursor/rules/code-style-structure.mdc create mode 100644 .cursor/rules/development-guidelines.mdc create mode 100644 .cursor/rules/js-react-standards.mdc create mode 100644 .cursor/rules/js-testing.mdc create mode 100644 .cursor/rules/php-standards.mdc create mode 100644 .cursor/rules/php-testing.mdc diff --git a/.cursor/rules/adding-changelog.mdc b/.cursor/rules/adding-changelog.mdc new file mode 100644 index 0000000000000..a35aa4c6e0d8e --- /dev/null +++ b/.cursor/rules/adding-changelog.mdc @@ -0,0 +1,20 @@ +--- +description: How changelog entries must be structured for each change +globs: +--- +Every change in the `/projects` directory will need to add a specially-formatted file to the project's specified `changelog` directory. + +The change file is a text file with a header-and-body format, like HTTP or email. A change file might look like this: + +``` +Significance: patch +Type: compat + +Block Editor: update all blocks to be fully compatible with WordPress 5.7. +``` + +The “Significance” header specifies the significance of change in the style of semantic versioning: patch, minor, or major. + +The “Type” header categorizes the change in the changelog. In Jetpack, for example, our changelog divides changes into “Major Enhancements”, “Enhancements”, “Improved compatibility”, and “Bugfixes”. + +The body is separated from the headers by a blank line, and is the text that actually goes into the changelog. This should follow our recommendations at [writing-a-good-changelog-entry.md](mdc:jetpack/jetpack/jetpack/docs/writing-a-good-changelog-entry.md). \ No newline at end of file diff --git a/.cursor/rules/code-style-structure.mdc b/.cursor/rules/code-style-structure.mdc new file mode 100644 index 0000000000000..0d9352487ba89 --- /dev/null +++ b/.cursor/rules/code-style-structure.mdc @@ -0,0 +1,13 @@ +--- +description: General guidelines on code style and structure +globs: +--- +General guidelines are defined in [coding-guidelines.md](mdc:jetpack/jetpack/jetpack/jetpack/jetpack/jetpack/jetpack/jetpack/jetpack/jetpack/docs/coding-guidelines.md). + +### Naming Conventions + +- Use WordPress naming conventions for functions and classes +- Prefix any global php functions or hooks with `jetpack_` +- Use lowercase with underscores for PHP functions +- Follow WordPress React component naming patterns +- Use BEM-like naming for SCSS \ No newline at end of file diff --git a/.cursor/rules/development-guidelines.mdc b/.cursor/rules/development-guidelines.mdc new file mode 100644 index 0000000000000..781d514d187e5 --- /dev/null +++ b/.cursor/rules/development-guidelines.mdc @@ -0,0 +1,42 @@ +--- +description: General development guidelines +globs: +--- +You are an expert WordPress plugin developer specializing in site building tools, with deep expertise in WordPress core, React, PHP, and modern frontend development. You prioritize WordPress coding standards while delivering maintainable, accessible solutions. + +## Short codes + +Check the start of any user message for the following short codes and act appropriately: + +- ddc - short for `discuss don't code` so do not make any code changes only discuss the options until given the go ahead to make changes. +- jdi - short for `just do it` so this is giving approval to go ahead and make the changes that have been discussed. + +## Analysis Process + +Before responding to any request, follow these steps: + +1. Request Analysis + +- Determine if task involves plugin core (PHP) or frontend (JS/React) +- Identify WordPress hooks and filters needed +- Note compatibility requirements (WordPress version, PHP version), based on the different versions specified in [versions.sh](mdc:jetpack/jetpack/jetpack/jetpack/jetpack/.github/versions.sh) +- Define core functionality and user experience goals +- Consider WordPress coding standards compliance + +2. Solution Planning + +- Break down solution into WordPress-compatible components +- Consider plugin activation/deactivation hooks +- Identify necessary WordPress API integrations +- Plan for internationalization (i18n) +- Evaluate security implications + +3. Implementation Strategy + +- Choose appropriate WordPress design patterns +- Consider performance impact on WordPress site +- Plan for WordPress error handling conventions +- Ensure WordPress coding standards compliance +- Verify accessibility requirements + +Always prioritize WordPress coding standards and best practices while delivering functionality that enhances the WordPress site-building experience. diff --git a/.cursor/rules/js-react-standards.mdc b/.cursor/rules/js-react-standards.mdc new file mode 100644 index 0000000000000..75529efff6d90 --- /dev/null +++ b/.cursor/rules/js-react-standards.mdc @@ -0,0 +1,26 @@ +--- +description: JavaScript/React Standards +globs: *.js, *.jsx, *.ts, *.tsx +--- +## General guidelines + +- Write modern ES6+ code following WordPress JS standards +- Use WordPress data store for state management +- Follow WordPress component patterns +- Implement proper WordPress hooks system +- Structure components using WordPress conventions +- Where it applies, make strings available for translation. +- Use Gutenberg's `@wordpress/i18n` package to handle translations. +- Use an appropriate unique text domain in your JS code. + +## React Components + +- Use WordPress `@wordpress/element` instead of direct React import +- Implement WordPress hooks system +- Follow WordPress component lifecycle patterns +- Use the WordPress block editor data stores for state management of WordPress block editor components +- Follow WordPress accessibility guidelines + +## TypeScript + +- When using TypeScript in Webpack, use `@babel/preset-typescript` rather than `ts-loader`. \ No newline at end of file diff --git a/.cursor/rules/js-testing.mdc b/.cursor/rules/js-testing.mdc new file mode 100644 index 0000000000000..1a61266825c85 --- /dev/null +++ b/.cursor/rules/js-testing.mdc @@ -0,0 +1,14 @@ +--- +description: Guidelines to write JavaScript tests +globs: +--- +- Use Jest with WordPress test utilities +- Follow WordPress testing patterns +- Test React components with `@testing-library/react` +- Implement proper async testing +- Use WordPress mocking patterns + + +Check [component.tsx](mdc:jetpack/jetpack/jetpack/jetpack/projects/packages/my-jetpack/_inc/components/connection-status-card/test/component.tsx) for an example. + +Find out more about how to develop tests at [automated-testing.md](mdc:jetpack/jetpack/docs/automated-testing.md) \ No newline at end of file diff --git a/.cursor/rules/php-standards.mdc b/.cursor/rules/php-standards.mdc new file mode 100644 index 0000000000000..971b3faf892b9 --- /dev/null +++ b/.cursor/rules/php-standards.mdc @@ -0,0 +1,20 @@ +--- +description: PHP coding standards +globs: *.php +--- +- Follow WordPress PHP Coding Standards +- Use proper WordPress prefix for functions and classes +- Implement WordPress nonce verification +- Follow WordPress database operations best practices +- Structure plugin hooks logically + +## Package Version Annotations + +When needing to add a package version number inside a DocBlock, please use `$$next-version$$` as such: + +- `@since $$next-version$$` +- `@deprecated $$next-version$$` +- `@deprecated since $$next-version$$` +- `_deprecated_function( __METHOD__, 'package-$$next-version$$' );` (other WordPress deprecation functions also work, but note it must be all on one line). + +The `$$next-version$$` specifier will be automatically replaced with the correct package version number the next time a new version of that package is released. \ No newline at end of file diff --git a/.cursor/rules/php-testing.mdc b/.cursor/rules/php-testing.mdc new file mode 100644 index 0000000000000..dd1bcfb8da893 --- /dev/null +++ b/.cursor/rules/php-testing.mdc @@ -0,0 +1,14 @@ +--- +description: Guidelines when testing PHP +globs: +--- +When developing Unit Tests in PHP, follow these guidelines: + +- Use PHPUnit with WordPress test framework +- Follow WordPress testing conventions +- Use WordPress fixtures and mocks +- Test WordPress hooks and filters + +Check [test_Manager_integration.php](mdc:jetpack/jetpack/jetpack/jetpack/projects/packages/connection/tests/php/test_Manager_integration.php) for an example. + +Find out more rules on how to write tests at [automated-testing.md](mdc:jetpack/jetpack/docs/automated-testing.md) \ No newline at end of file From 67b710d85141b63ecbc5062bd8b137f13f5a21aa Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Mon, 3 Feb 2025 13:37:04 -0500 Subject: [PATCH 330/420] tools: Allow "releasing" dev deps with no mirror repo (#41513) The new `packages/test-environment` package is pointless to release (it won't work outside the monorepo). Relax the check for "must have a mirror repo" so it only applies to non-dev dependencies, since only non-dev dependencies are bundled anyway. --- tools/changelogger-release.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/changelogger-release.sh b/tools/changelogger-release.sh index 6172737cb9eea..9941708bd1d1e 100755 --- a/tools/changelogger-release.sh +++ b/tools/changelogger-release.sh @@ -144,10 +144,13 @@ TO_RELEASE=() TMP="$(pnpm jetpack dependencies build-order --add-dependencies --pretty "$REL_SLUG")" mapfile -t TO_RELEASE <<<"$TMP" -# If it's being released as a dependency (and is not a js-package), pre-check that it has a mirror repo set up. +# If it's being released as a non-dev dependency (and is not a js-package), pre-check that it has a mirror repo set up. # Can't do the release without one. +NEEDS_MIRROR_REPO=() +TMP="$(pnpm jetpack dependencies build-order --no-dev --add-dependencies --pretty "$REL_SLUG")" +mapfile -t NEEDS_MIRROR_REPO <<<"$TMP" ANY=false -for SLUG in "${TO_RELEASE[@]}"; do +for SLUG in "${NEEDS_MIRROR_REPO[@]}"; do if [[ "$SLUG" != "$REL_SLUG" && "$SLUG" != js-packages/* ]] && ! jq -e '.extra["mirror-repo"] // null' "$BASE/projects/$SLUG/composer.json" > /dev/null then From 992f15084fe437a2f3ca427b66a8cf4acd3b582f Mon Sep 17 00:00:00 2001 From: Erick Danzer Date: Mon, 3 Feb 2025 12:52:49 -0700 Subject: [PATCH 331/420] Forms: Hide fields without options (#41443) --- .../packages/forms/changelog/fix-hide-form-fields-no-options | 4 ++++ .../forms/src/contact-form/class-contact-form-field.php | 5 +++-- .../jetpack/changelog/fix-hide-form-fields-no-options | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-hide-form-fields-no-options create mode 100644 projects/plugins/jetpack/changelog/fix-hide-form-fields-no-options diff --git a/projects/packages/forms/changelog/fix-hide-form-fields-no-options b/projects/packages/forms/changelog/fix-hide-form-fields-no-options new file mode 100644 index 0000000000000..6a55830c98fbc --- /dev/null +++ b/projects/packages/forms/changelog/fix-hide-form-fields-no-options @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Hide fields without options. diff --git a/projects/packages/forms/src/contact-form/class-contact-form-field.php b/projects/packages/forms/src/contact-form/class-contact-form-field.php index 55de33cce9092..52e5f6385e6e6 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-field.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-field.php @@ -1157,8 +1157,9 @@ private function maybe_override_type() { * @return bool */ public function is_field_renderable( $type ) { - // Check for valid radio field. - if ( $type === 'radio' ) { + // Check that radio, select, and multiple choice + // fields have at leaast one valid option. + if ( $type === 'radio' || $type === 'checkbox-multiple' || $type === 'select' ) { $options = (array) $this->get_attribute( 'options' ); $non_empty_options = array_filter( $options, diff --git a/projects/plugins/jetpack/changelog/fix-hide-form-fields-no-options b/projects/plugins/jetpack/changelog/fix-hide-form-fields-no-options new file mode 100644 index 0000000000000..a203590913eb4 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-hide-form-fields-no-options @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Forms: Hide fields without options. From 99f565c7ffa74dcca8af2fedb349b37ac138bc07 Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:06:00 -0700 Subject: [PATCH 332/420] Backport jetpack 14.3-beta Changes (#41514) * Changelog and readme.txt edits. * Amend readme.txt --- .../js-packages/boost-score-api/CHANGELOG.md | 5 +++ .../changelog/renovate-webpack-cli-6.x | 4 --- .../js-packages/boost-score-api/package.json | 2 +- projects/js-packages/components/CHANGELOG.md | 5 +++ projects/js-packages/components/package.json | 2 +- .../publicize-components/CHANGELOG.md | 19 +++++++++- .../fix-social-use-proper-char-limits | 4 --- .../social-enable-social-post-ui-4-wpcom | 4 --- .../update-broken-connection-notifications | 4 --- ...ate-social-move-admin-page-code-to-package | 4 --- ...ove-initial-state-from-social-to-publicize | 4 --- ...social-move-settings-endpoint-to-publicize | 4 --- ...date-social-remove-your-post-from-previews | 4 --- ...-social-store-to-replace-get-site-selector | 4 --- ...te-social-to-use-unified-settings-endpoint | 4 --- .../publicize-components/package.json | 2 +- .../remove-asset-webpack-plugin/CHANGELOG.md | 5 +++ .../remove-asset-webpack-plugin/package.json | 2 +- projects/packages/admin-ui/CHANGELOG.md | 5 +++ .../add-remove_menu-to-admin_menu-class | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/admin-ui/package.json | 2 +- .../admin-ui/src/class-admin-menu.php | 2 +- projects/packages/assets/CHANGELOG.md | 5 +++ .../backup-helper-script-manager/CHANGELOG.md | 5 +++ .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/backup/CHANGELOG.md | 5 +++ .../backup/changelog/renovate-webpack-cli-6.x | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- .../backup/src/class-package-version.php | 2 +- projects/packages/blaze/CHANGELOG.md | 8 +++++ .../blaze/changelog/fix-quickedit-blaze-cpt | 4 --- .../blaze/changelog/renovate-webpack-cli-6.x | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/blaze/package.json | 2 +- .../packages/blaze/src/class-dashboard.php | 2 +- projects/packages/blocks/CHANGELOG.md | 5 +++ .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/boost-core/CHANGELOG.md | 5 +++ .../changelog/fix-phan-PhanParamTooMany | 4 --- projects/packages/boost-core/package.json | 2 +- .../classic-theme-helper/CHANGELOG.md | 8 +++++ .../changelog/renovate-webpack-cli-6.x | 4 --- ...evant-theme-compat-to-classic-theme-helper | 4 --- .../classic-theme-helper/package.json | 2 +- .../classic-theme-helper/src/class-main.php | 2 +- projects/packages/connection/CHANGELOG.md | 8 +++++ .../changelog/fix-phan-PhanParamTooMany | 4 --- .../changelog/renovate-webpack-cli-6.x | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- .../connection/src/class-package-version.php | 2 +- projects/packages/explat/CHANGELOG.md | 5 +++ .../explat/changelog/renovate-webpack-cli-6.x | 4 --- projects/packages/explat/package.json | 2 +- projects/packages/explat/src/class-explat.php | 2 +- projects/packages/forms/CHANGELOG.md | 24 +++++++++++++ .../changelog/fix-contact-form-placeholder | 4 --- .../forms/changelog/fix-editor-select-field | 4 --- .../fix-endcoding-when-marking-as-spam | 4 --- .../forms/changelog/fix-form-field-widths | 4 --- .../changelog/fix-form-radio-with-no-options | 4 --- .../fix-forms-clean-up-empty-style-attributes | 4 --- .../fix-html-block-rendering-wrap-block | 4 --- .../fix-permenatly-delete-form-responses | 4 --- .../forms/changelog/fix-phan-PhanParamTooMany | 4 --- .../fix-radio-and-checkbox-alignemnet | 5 --- .../changelog/fix-spacing-button-export-form | 4 --- .../changelog/fix-spam-percent-translation | 4 --- .../form-fix-submit-if-date-had-errored | 4 --- ...-prevent-emtpy-form-submission-client-side | 4 --- .../forms/changelog/renovate-webpack-cli-6.x | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- .../update-contact-form-block-code-quality | 4 --- .../update-rename-contact-form-module | 4 --- projects/packages/forms/composer.json | 2 +- projects/packages/forms/package.json | 2 +- .../forms/src/class-jetpack-forms.php | 2 +- projects/packages/image-cdn/CHANGELOG.md | 5 +++ .../changelog/fix-phan-PhanParamTooMany | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- .../image-cdn/src/class-image-cdn.php | 2 +- projects/packages/jitm/CHANGELOG.md | 6 ++++ .../jitm/changelog/renovate-webpack-cli-6.x | 4 --- .../jitm/changelog/update-woo-jitm-logo | 4 --- projects/packages/jitm/src/class-jitm.php | 4 +-- projects/packages/licensing/CHANGELOG.md | 5 +++ .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/masterbar/CHANGELOG.md | 6 ++++ .../changelog/fix-phan-PhanParamTooMany | 4 --- .../changelog/renovate-webpack-cli-6.x | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/masterbar/package.json | 2 +- .../packages/masterbar/src/class-main.php | 2 +- projects/packages/my-jetpack/CHANGELOG.md | 18 +++++++++- ...-bubble-notice-when-plugins-need-installed | 4 --- .../add-my-jetpack-modal-interstitial-ai | 4 --- .../changelog/fix-mj-current-plan-not-updated | 5 --- .../fix-my-jetpack-ai-interstitial-url | 4 --- .../changelog/fix-phan-PhanParamTooMany | 4 --- .../changelog/fix-protect-default-secondary | 4 --- .../changelog/renovate-webpack-cli-6.x | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- ...ate-action-button-to-be-more-easily-reused | 4 --- .../changelog/update-mj-needs-plugins-notice | 5 --- .../update-myjetpack-interstitial-modal | 4 --- projects/packages/my-jetpack/package.json | 2 +- .../my-jetpack/src/class-initializer.php | 2 +- .../packages/password-checker/CHANGELOG.md | 5 +++ .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/plans/CHANGELOG.md | 5 +++ .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/plans/package.json | 2 +- projects/packages/post-list/CHANGELOG.md | 5 +++ .../add-copy-post-link-action-in-posts-list | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/post-list/composer.json | 2 +- .../post-list/src/class-post-list.php | 2 +- projects/packages/protect-models/CHANGELOG.md | 5 +++ .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/protect-models/package.json | 2 +- .../src/class-protect-models.php | 2 +- projects/packages/protect-status/CHANGELOG.md | 6 ++++ .../changelog/fix-phan-PhanParamTooMany | 4 --- .../fix-protect-status-core-version-check | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/protect-status/package.json | 2 +- .../protect-status/src/class-status.php | 2 +- projects/packages/publicize/CHANGELOG.md | 32 +++++++++++++---- .../add-remove_menu-to-admin_menu-class | 4 --- .../changelog/fix-phan-PhanParamTooMany | 4 --- .../fix-social-api-calls-on-wpcom-for-options | 4 --- .../changelog/fix-social-connections-caching | 4 --- .../changelog/renovate-webpack-cli-6.x | 4 --- .../social-enable-social-post-ui-4-wpcom | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- ...ate-social-move-admin-page-code-to-package | 4 --- ...ove-initial-state-from-social-to-publicize | 4 --- ...social-move-settings-endpoint-to-publicize | 4 --- ...-social-store-to-replace-get-site-selector | 4 --- ...te-social-to-use-unified-settings-endpoint | 4 --- ...ial-use-feature-flag-for-social-admin-page | 4 --- projects/packages/publicize/composer.json | 2 +- projects/packages/publicize/package.json | 2 +- projects/packages/search/CHANGELOG.md | 5 +++ .../search/changelog/renovate-webpack-cli-6.x | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- .../packages/search/src/class-package.php | 2 +- projects/packages/stats-admin/CHANGELOG.md | 8 +++-- .../changelog/fix-phan-PhanParamTooMany | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/stats-admin/package.json | 2 +- .../packages/stats-admin/src/class-main.php | 2 +- projects/packages/stats/CHANGELOG.md | 5 +++ .../stats/changelog/fix-phan-PhanParamTooMany | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- .../stats/src/class-package-version.php | 2 +- projects/packages/status/CHANGELOG.md | 5 +++ .../changelog/fix-phan-PhanParamTooMany | 4 --- projects/packages/sync/CHANGELOG.md | 13 ++++++- .../sync/changelog/fix-phan-PhanParamTooMany | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- .../update-full-sync-comments-dynamically | 4 --- ...n-expected-structure-to-avoid-ending-early | 4 --- .../sync/changelog/update-sync-meta-module | 4 --- projects/packages/sync/composer.json | 2 +- .../sync/src/class-package-version.php | 2 +- .../packages/test-environment/CHANGELOG.md | 3 ++ .../try-one-wordpress-to-rule-them-all | 5 --- .../src/class-test-environment.php | 2 +- projects/packages/videopress/CHANGELOG.md | 10 +++++- .../changelog/fix-phan-PhanParamTooMany | 4 --- .../changelog/renovate-webpack-cli-6.x | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/videopress/package.json | 2 +- .../videopress/src/class-package-version.php | 2 +- projects/packages/waf/CHANGELOG.md | 5 +++ .../waf/changelog/fix-phan-PhanParamTooMany | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- projects/packages/wordads/CHANGELOG.md | 5 +++ .../changelog/renovate-webpack-cli-6.x | 4 --- projects/packages/wordads/package.json | 2 +- .../packages/wordads/src/class-package.php | 2 +- .../changelog/prerelease#3} | 2 +- .../composer.lock | 4 +-- .../backup/changelog/prerelease#3} | 3 +- projects/plugins/backup/composer.lock | 4 +-- .../boost/changelog/prerelease} | 3 +- projects/plugins/boost/composer.lock | 4 +-- projects/plugins/jetpack/CHANGELOG.md | 35 +++++++++++++++++++ .../add-copy-post-link-action-in-posts-list | 4 --- .../changelog/add-performance-improvements | 4 --- ...change-jetpack-seo-assistant-fine-tune-css | 4 --- ...e-jetpack-seo-assistant-steps-codependency | 4 --- ...nge-jetpack-seo-assistant-wizard-mechanics | 4 --- .../changelog/change-jetpack-seo-copy-edits | 4 --- projects/plugins/jetpack/changelog/fix-31063 | 4 --- .../changelog/fix-contact-form-placeholder | 4 --- .../jetpack/changelog/fix-editor-select-field | 4 --- .../fix-endcoding-when-marking-as-spam | 4 --- .../jetpack/changelog/fix-form-field-widths | 4 --- .../changelog/fix-form-radio-with-no-options | 4 --- .../fix-html-block-rendering-wrap-block | 5 --- ...mbership-products-resolvers-coverage-thing | 5 --- .../fix-jetpack-order-of-block-calls | 5 --- .../fix-jetpack-seo-assistant-styles | 4 --- ...x-newsletter-editor-copies-for-coming-soon | 4 --- .../fix-permenatly-delete-form-responses | 4 --- .../changelog/fix-phan-PhanParamTooMany | 4 --- .../jetpack/changelog/fix-quickedit-copy-cpt | 4 --- .../fix-social-use-proper-char-limits | 4 --- .../changelog/fix-spacing-button-export-form | 5 --- .../changelog/renovate-webpack-cli-6.x | 4 --- .../social-enable-social-post-ui-4-wpcom | 4 --- .../try-one-wordpress-to-rule-them-all | 5 --- .../update-full-sync-comments-dynamically | 4 --- .../changelog/update-jetpack-to-test-for-14.3 | 4 --- ...evant-theme-compat-to-classic-theme-helper | 4 --- .../update-og-tags-conflicting-plugins | 4 --- .../update-rename-contact-form-module | 4 --- ...ate-social-move-admin-page-code-to-package | 5 --- ...date-social-remove-your-post-from-previews | 4 --- ...te-social-to-use-unified-settings-endpoint | 4 --- .../jetpack/changelog/update-sync-meta-module | 5 --- .../jetpack/class.jetpack-gutenberg.php | 6 ++-- projects/plugins/jetpack/composer.json | 2 +- projects/plugins/jetpack/composer.lock | 16 ++++----- projects/plugins/jetpack/jetpack.php | 4 +-- projects/plugins/jetpack/readme.txt | 29 ++++++++++++++- .../mu-wpcom-plugin/changelog/prerelease#5} | 3 +- .../plugins/mu-wpcom-plugin/composer.lock | 4 +-- .../plugins/protect/changelog/prerelease#16 | 5 +++ projects/plugins/protect/composer.lock | 4 +-- .../plugins/search/changelog/prerelease#3 | 5 +++ projects/plugins/search/composer.lock | 4 +-- projects/plugins/social/changelog/prerelease | 5 +++ projects/plugins/social/composer.lock | 12 +++---- .../starter-plugin/changelog/prerelease#7 | 5 +++ projects/plugins/starter-plugin/composer.lock | 4 +-- .../plugins/videopress/changelog/prerelease#3 | 5 +++ projects/plugins/videopress/composer.lock | 4 +-- .../plugins/wpcomsh/changelog/prerelease#11 | 5 +++ projects/plugins/wpcomsh/composer.lock | 8 ++--- 242 files changed, 447 insertions(+), 684 deletions(-) delete mode 100644 projects/js-packages/boost-score-api/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/js-packages/publicize-components/changelog/fix-social-use-proper-char-limits delete mode 100644 projects/js-packages/publicize-components/changelog/social-enable-social-post-ui-4-wpcom delete mode 100644 projects/js-packages/publicize-components/changelog/update-broken-connection-notifications delete mode 100644 projects/js-packages/publicize-components/changelog/update-social-move-admin-page-code-to-package delete mode 100644 projects/js-packages/publicize-components/changelog/update-social-move-initial-state-from-social-to-publicize delete mode 100644 projects/js-packages/publicize-components/changelog/update-social-move-settings-endpoint-to-publicize delete mode 100644 projects/js-packages/publicize-components/changelog/update-social-remove-your-post-from-previews delete mode 100644 projects/js-packages/publicize-components/changelog/update-social-store-to-replace-get-site-selector delete mode 100644 projects/js-packages/publicize-components/changelog/update-social-to-use-unified-settings-endpoint delete mode 100644 projects/packages/admin-ui/changelog/add-remove_menu-to-admin_menu-class delete mode 100644 projects/packages/admin-ui/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/backup-helper-script-manager/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/backup/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/backup/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/blaze/changelog/fix-quickedit-blaze-cpt delete mode 100644 projects/packages/blaze/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/blaze/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/blocks/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/boost-core/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/classic-theme-helper/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/classic-theme-helper/changelog/update-move-relevant-theme-compat-to-classic-theme-helper delete mode 100644 projects/packages/connection/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/connection/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/connection/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/explat/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/forms/changelog/fix-contact-form-placeholder delete mode 100644 projects/packages/forms/changelog/fix-editor-select-field delete mode 100644 projects/packages/forms/changelog/fix-endcoding-when-marking-as-spam delete mode 100644 projects/packages/forms/changelog/fix-form-field-widths delete mode 100644 projects/packages/forms/changelog/fix-form-radio-with-no-options delete mode 100644 projects/packages/forms/changelog/fix-forms-clean-up-empty-style-attributes delete mode 100644 projects/packages/forms/changelog/fix-html-block-rendering-wrap-block delete mode 100644 projects/packages/forms/changelog/fix-permenatly-delete-form-responses delete mode 100644 projects/packages/forms/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/forms/changelog/fix-radio-and-checkbox-alignemnet delete mode 100644 projects/packages/forms/changelog/fix-spacing-button-export-form delete mode 100644 projects/packages/forms/changelog/fix-spam-percent-translation delete mode 100644 projects/packages/forms/changelog/form-fix-submit-if-date-had-errored delete mode 100644 projects/packages/forms/changelog/forms-prevent-emtpy-form-submission-client-side delete mode 100644 projects/packages/forms/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/forms/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/forms/changelog/update-contact-form-block-code-quality delete mode 100644 projects/packages/forms/changelog/update-rename-contact-form-module delete mode 100644 projects/packages/image-cdn/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/image-cdn/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/jitm/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/jitm/changelog/update-woo-jitm-logo delete mode 100644 projects/packages/licensing/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/masterbar/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/masterbar/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/masterbar/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/my-jetpack/changelog/add-mj-red-bubble-notice-when-plugins-need-installed delete mode 100644 projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial-ai delete mode 100644 projects/packages/my-jetpack/changelog/fix-mj-current-plan-not-updated delete mode 100644 projects/packages/my-jetpack/changelog/fix-my-jetpack-ai-interstitial-url delete mode 100644 projects/packages/my-jetpack/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/my-jetpack/changelog/fix-protect-default-secondary delete mode 100644 projects/packages/my-jetpack/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/my-jetpack/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/my-jetpack/changelog/update-action-button-to-be-more-easily-reused delete mode 100644 projects/packages/my-jetpack/changelog/update-mj-needs-plugins-notice delete mode 100644 projects/packages/my-jetpack/changelog/update-myjetpack-interstitial-modal delete mode 100644 projects/packages/password-checker/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/plans/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/post-list/changelog/add-copy-post-link-action-in-posts-list delete mode 100644 projects/packages/post-list/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/protect-models/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/protect-status/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/protect-status/changelog/fix-protect-status-core-version-check delete mode 100644 projects/packages/protect-status/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/publicize/changelog/add-remove_menu-to-admin_menu-class delete mode 100644 projects/packages/publicize/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/publicize/changelog/fix-social-api-calls-on-wpcom-for-options delete mode 100644 projects/packages/publicize/changelog/fix-social-connections-caching delete mode 100644 projects/packages/publicize/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/publicize/changelog/social-enable-social-post-ui-4-wpcom delete mode 100644 projects/packages/publicize/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/publicize/changelog/update-social-move-admin-page-code-to-package delete mode 100644 projects/packages/publicize/changelog/update-social-move-initial-state-from-social-to-publicize delete mode 100644 projects/packages/publicize/changelog/update-social-move-settings-endpoint-to-publicize delete mode 100644 projects/packages/publicize/changelog/update-social-store-to-replace-get-site-selector delete mode 100644 projects/packages/publicize/changelog/update-social-to-use-unified-settings-endpoint delete mode 100644 projects/packages/publicize/changelog/update-social-use-feature-flag-for-social-admin-page delete mode 100644 projects/packages/search/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/search/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/stats-admin/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/stats-admin/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/stats/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/stats/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/status/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/sync/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/sync/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/sync/changelog/update-full-sync-comments-dynamically delete mode 100644 projects/packages/sync/changelog/update-full-sync-comments-return-expected-structure-to-avoid-ending-early delete mode 100644 projects/packages/sync/changelog/update-sync-meta-module delete mode 100644 projects/packages/test-environment/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/videopress/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/videopress/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/packages/videopress/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/waf/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/packages/waf/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/packages/wordads/changelog/renovate-webpack-cli-6.x rename projects/{packages/blocks/changelog/add-performance-improvements => plugins/automattic-for-agencies-client/changelog/prerelease#3} (52%) rename projects/{js-packages/components/changelog/renovate-webpack-cli-6.x => plugins/backup/changelog/prerelease#3} (51%) rename projects/{js-packages/remove-asset-webpack-plugin/changelog/renovate-webpack-cli-6.x => plugins/boost/changelog/prerelease} (51%) delete mode 100644 projects/plugins/jetpack/changelog/add-copy-post-link-action-in-posts-list delete mode 100644 projects/plugins/jetpack/changelog/add-performance-improvements delete mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-fine-tune-css delete mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-steps-codependency delete mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-wizard-mechanics delete mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-copy-edits delete mode 100644 projects/plugins/jetpack/changelog/fix-31063 delete mode 100644 projects/plugins/jetpack/changelog/fix-contact-form-placeholder delete mode 100644 projects/plugins/jetpack/changelog/fix-editor-select-field delete mode 100644 projects/plugins/jetpack/changelog/fix-endcoding-when-marking-as-spam delete mode 100644 projects/plugins/jetpack/changelog/fix-form-field-widths delete mode 100644 projects/plugins/jetpack/changelog/fix-form-radio-with-no-options delete mode 100644 projects/plugins/jetpack/changelog/fix-html-block-rendering-wrap-block delete mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-membership-products-resolvers-coverage-thing delete mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-order-of-block-calls delete mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-styles delete mode 100644 projects/plugins/jetpack/changelog/fix-newsletter-editor-copies-for-coming-soon delete mode 100644 projects/plugins/jetpack/changelog/fix-permenatly-delete-form-responses delete mode 100644 projects/plugins/jetpack/changelog/fix-phan-PhanParamTooMany delete mode 100644 projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt delete mode 100644 projects/plugins/jetpack/changelog/fix-social-use-proper-char-limits delete mode 100644 projects/plugins/jetpack/changelog/fix-spacing-button-export-form delete mode 100644 projects/plugins/jetpack/changelog/renovate-webpack-cli-6.x delete mode 100644 projects/plugins/jetpack/changelog/social-enable-social-post-ui-4-wpcom delete mode 100644 projects/plugins/jetpack/changelog/try-one-wordpress-to-rule-them-all delete mode 100644 projects/plugins/jetpack/changelog/update-full-sync-comments-dynamically delete mode 100644 projects/plugins/jetpack/changelog/update-jetpack-to-test-for-14.3 delete mode 100644 projects/plugins/jetpack/changelog/update-move-relevant-theme-compat-to-classic-theme-helper delete mode 100644 projects/plugins/jetpack/changelog/update-og-tags-conflicting-plugins delete mode 100644 projects/plugins/jetpack/changelog/update-rename-contact-form-module delete mode 100644 projects/plugins/jetpack/changelog/update-social-move-admin-page-code-to-package delete mode 100644 projects/plugins/jetpack/changelog/update-social-remove-your-post-from-previews delete mode 100644 projects/plugins/jetpack/changelog/update-social-to-use-unified-settings-endpoint delete mode 100644 projects/plugins/jetpack/changelog/update-sync-meta-module rename projects/{packages/assets/changelog/renovate-webpack-cli-6.x => plugins/mu-wpcom-plugin/changelog/prerelease#5} (51%) create mode 100644 projects/plugins/protect/changelog/prerelease#16 create mode 100644 projects/plugins/search/changelog/prerelease#3 create mode 100644 projects/plugins/social/changelog/prerelease create mode 100644 projects/plugins/starter-plugin/changelog/prerelease#7 create mode 100644 projects/plugins/videopress/changelog/prerelease#3 create mode 100644 projects/plugins/wpcomsh/changelog/prerelease#11 diff --git a/projects/js-packages/boost-score-api/CHANGELOG.md b/projects/js-packages/boost-score-api/CHANGELOG.md index 204aeaf74ec4a..2b29a7364d295 100644 --- a/projects/js-packages/boost-score-api/CHANGELOG.md +++ b/projects/js-packages/boost-score-api/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.54] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + ## [0.1.53] - 2025-01-27 ### Changed - Internal updates. @@ -227,6 +231,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Create package for the boost score bar API [#30781] +[0.1.54]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.53...v0.1.54 [0.1.53]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.52...v0.1.53 [0.1.52]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.51...v0.1.52 [0.1.51]: https://github.com/Automattic/jetpack-boost-score-api/compare/v0.1.50...v0.1.51 diff --git a/projects/js-packages/boost-score-api/changelog/renovate-webpack-cli-6.x b/projects/js-packages/boost-score-api/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/js-packages/boost-score-api/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/js-packages/boost-score-api/package.json b/projects/js-packages/boost-score-api/package.json index fa921767b4ca0..e61d04c79badb 100644 --- a/projects/js-packages/boost-score-api/package.json +++ b/projects/js-packages/boost-score-api/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-boost-score-api", - "version": "0.1.53", + "version": "0.1.54", "description": "A package to get the Jetpack Boost score of a site", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/boost-score-api/#readme", "bugs": { diff --git a/projects/js-packages/components/CHANGELOG.md b/projects/js-packages/components/CHANGELOG.md index a8082bc235ea1..edce029fb9823 100644 --- a/projects/js-packages/components/CHANGELOG.md +++ b/projects/js-packages/components/CHANGELOG.md @@ -2,6 +2,10 @@ ### This is a list detailing changes for the Jetpack RNA Components package releases. +## [0.65.5] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + ## [0.65.4] - 2025-01-20 ### Added - Add an optional sandboxed tag to show if the current user is sandboxing their API. [#40971] @@ -1271,6 +1275,7 @@ ### Changed - Update node version requirement to 14.16.1 +[0.65.5]: https://github.com/Automattic/jetpack-components/compare/0.65.4...0.65.5 [0.65.4]: https://github.com/Automattic/jetpack-components/compare/0.65.3...0.65.4 [0.65.3]: https://github.com/Automattic/jetpack-components/compare/0.65.2...0.65.3 [0.65.2]: https://github.com/Automattic/jetpack-components/compare/0.65.1...0.65.2 diff --git a/projects/js-packages/components/package.json b/projects/js-packages/components/package.json index 866e615bd1e3c..93301c06a59a6 100644 --- a/projects/js-packages/components/package.json +++ b/projects/js-packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/jetpack-components", - "version": "0.65.4", + "version": "0.65.5", "description": "Jetpack Components Package", "author": "Automattic", "license": "GPL-2.0-or-later", diff --git a/projects/js-packages/publicize-components/CHANGELOG.md b/projects/js-packages/publicize-components/CHANGELOG.md index d25ed6865d91f..d5eda14ae68af 100644 --- a/projects/js-packages/publicize-components/CHANGELOG.md +++ b/projects/js-packages/publicize-components/CHANGELOG.md @@ -5,11 +5,27 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.77.0] - 2025-02-03 +### Added +- Social Connections: Handle LinkedIn connections requiring reauthentication. [#41494] +- Social: Enable Social Post UI for WordPress.com. [#41219] + +### Changed +- Moved Social admin page code and assets logic to publicize package [#41239] +- Move initial state from Social plugin to publicize package [#41381] +- Replace getSite selector with getEntityRecord to avoid redundant API calls [#41386] +- Social post character limits are now dynamic based on selected connections [#41429] +- Social: Move settings endpoint to publicize package [#41456] +- Update the settings endppoint to use existing endpoints [#41461] + +### Removed +- Social Previews: Remove "Your post" section in favour of Social Post UI [#41329] + ## [0.76.0] - 2025-01-27 ### Changed - Moved the Social admin page to the publicize-components package [#41181] - Refactored Social Note settings to use core [#41153] -- Social | Unify connections management API schema [#40679] +- Social: Unify connections management API schema [#40679] ## [0.75.4] - 2025-01-20 ### Changed @@ -1060,6 +1076,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated package dependencies. [#24470] +[0.77.0]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.76.0...v0.77.0 [0.76.0]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.4...v0.76.0 [0.75.4]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.3...v0.75.4 [0.75.3]: https://github.com/Automattic/jetpack-publicize-components/compare/v0.75.2...v0.75.3 diff --git a/projects/js-packages/publicize-components/changelog/fix-social-use-proper-char-limits b/projects/js-packages/publicize-components/changelog/fix-social-use-proper-char-limits deleted file mode 100644 index 9f9142a1b941b..0000000000000 --- a/projects/js-packages/publicize-components/changelog/fix-social-use-proper-char-limits +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Social post character limits are now dynamic based on selected connections diff --git a/projects/js-packages/publicize-components/changelog/social-enable-social-post-ui-4-wpcom b/projects/js-packages/publicize-components/changelog/social-enable-social-post-ui-4-wpcom deleted file mode 100644 index b7c444de6c1cb..0000000000000 --- a/projects/js-packages/publicize-components/changelog/social-enable-social-post-ui-4-wpcom +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Social | Enable Social Post UI for WPCOM diff --git a/projects/js-packages/publicize-components/changelog/update-broken-connection-notifications b/projects/js-packages/publicize-components/changelog/update-broken-connection-notifications deleted file mode 100644 index ddae45488d23f..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-broken-connection-notifications +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Social Connections: Handle LinkedIn connections requiring reauth diff --git a/projects/js-packages/publicize-components/changelog/update-social-move-admin-page-code-to-package b/projects/js-packages/publicize-components/changelog/update-social-move-admin-page-code-to-package deleted file mode 100644 index 51ecb14ab3cec..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-social-move-admin-page-code-to-package +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Moved Social admin page code and assets logic to publicize package diff --git a/projects/js-packages/publicize-components/changelog/update-social-move-initial-state-from-social-to-publicize b/projects/js-packages/publicize-components/changelog/update-social-move-initial-state-from-social-to-publicize deleted file mode 100644 index cd2e87e76c6f9..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-social-move-initial-state-from-social-to-publicize +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Move initial state from Social plugin to publicize package diff --git a/projects/js-packages/publicize-components/changelog/update-social-move-settings-endpoint-to-publicize b/projects/js-packages/publicize-components/changelog/update-social-move-settings-endpoint-to-publicize deleted file mode 100644 index 623ea4367e02d..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-social-move-settings-endpoint-to-publicize +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Social | Move settings endpoint to publicize package diff --git a/projects/js-packages/publicize-components/changelog/update-social-remove-your-post-from-previews b/projects/js-packages/publicize-components/changelog/update-social-remove-your-post-from-previews deleted file mode 100644 index fb7a78cfac975..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-social-remove-your-post-from-previews +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: removed - -Social Previews | Remove "Your post" section in favour of Social Post UI diff --git a/projects/js-packages/publicize-components/changelog/update-social-store-to-replace-get-site-selector b/projects/js-packages/publicize-components/changelog/update-social-store-to-replace-get-site-selector deleted file mode 100644 index 9b6e823363058..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-social-store-to-replace-get-site-selector +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Replace getSite selector with getEntityRecord to avoid redundant API calls diff --git a/projects/js-packages/publicize-components/changelog/update-social-to-use-unified-settings-endpoint b/projects/js-packages/publicize-components/changelog/update-social-to-use-unified-settings-endpoint deleted file mode 100644 index af28eeceb5f49..0000000000000 --- a/projects/js-packages/publicize-components/changelog/update-social-to-use-unified-settings-endpoint +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Update the settings endppoint to use existing endpoints diff --git a/projects/js-packages/publicize-components/package.json b/projects/js-packages/publicize-components/package.json index cf70df1ab879a..d1ca05530510e 100644 --- a/projects/js-packages/publicize-components/package.json +++ b/projects/js-packages/publicize-components/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-publicize-components", - "version": "0.76.0", + "version": "0.77.0", "description": "A library of JS components required by the Publicize editor plugin", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/publicize-components/#readme", "bugs": { diff --git a/projects/js-packages/remove-asset-webpack-plugin/CHANGELOG.md b/projects/js-packages/remove-asset-webpack-plugin/CHANGELOG.md index c17dd566ba95a..0177699c88f18 100644 --- a/projects/js-packages/remove-asset-webpack-plugin/CHANGELOG.md +++ b/projects/js-packages/remove-asset-webpack-plugin/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.26] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + ## [1.0.25] - 2024-12-16 ### Changed - Internal updates. @@ -115,6 +119,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Initial release. +[1.0.26]: https://github.com/Automattic/remove-asset-webpack-plugin/compare/v1.0.25...v1.0.26 [1.0.25]: https://github.com/Automattic/remove-asset-webpack-plugin/compare/v1.0.24...v1.0.25 [1.0.24]: https://github.com/Automattic/remove-asset-webpack-plugin/compare/v1.0.23...v1.0.24 [1.0.23]: https://github.com/Automattic/remove-asset-webpack-plugin/compare/v1.0.22...v1.0.23 diff --git a/projects/js-packages/remove-asset-webpack-plugin/package.json b/projects/js-packages/remove-asset-webpack-plugin/package.json index 3ebad07cd6d92..357b84b348917 100644 --- a/projects/js-packages/remove-asset-webpack-plugin/package.json +++ b/projects/js-packages/remove-asset-webpack-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/remove-asset-webpack-plugin", - "version": "1.0.25", + "version": "1.0.26", "description": "A Webpack plugin to remove assets from the build.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/remove-asset-webpack-plugin/README.md#readme", "bugs": { diff --git a/projects/packages/admin-ui/CHANGELOG.md b/projects/packages/admin-ui/CHANGELOG.md index 1b3ec9f8073e9..9cec7feb9e668 100644 --- a/projects/packages/admin-ui/CHANGELOG.md +++ b/projects/packages/admin-ui/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.5.2] - 2025-02-03 +### Added +- Add `remove_menu` method to `Admin_Menu` class. [#41422] + ## [0.5.1] - 2024-11-25 ### Changed - Updated dependencies. [#40286] @@ -172,6 +176,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixing menu visibility issues. +[0.5.2]: https://github.com/Automattic/jetpack-admin-ui/compare/0.5.1...0.5.2 [0.5.1]: https://github.com/Automattic/jetpack-admin-ui/compare/0.5.0...0.5.1 [0.5.0]: https://github.com/Automattic/jetpack-admin-ui/compare/0.4.6...0.5.0 [0.4.6]: https://github.com/Automattic/jetpack-admin-ui/compare/0.4.5...0.4.6 diff --git a/projects/packages/admin-ui/changelog/add-remove_menu-to-admin_menu-class b/projects/packages/admin-ui/changelog/add-remove_menu-to-admin_menu-class deleted file mode 100644 index ebac40afa3d90..0000000000000 --- a/projects/packages/admin-ui/changelog/add-remove_menu-to-admin_menu-class +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Added remove_menu method to Admin_Menu class diff --git a/projects/packages/admin-ui/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/admin-ui/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/admin-ui/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/admin-ui/package.json b/projects/packages/admin-ui/package.json index 92a75fb6242dc..56bc809d143b9 100644 --- a/projects/packages/admin-ui/package.json +++ b/projects/packages/admin-ui/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-admin-ui", - "version": "0.5.1", + "version": "0.5.2", "description": "Generic Jetpack wp-admin UI elements", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/admin-ui/#readme", "bugs": { diff --git a/projects/packages/admin-ui/src/class-admin-menu.php b/projects/packages/admin-ui/src/class-admin-menu.php index 288ace58f491d..d8170afaa5ad3 100644 --- a/projects/packages/admin-ui/src/class-admin-menu.php +++ b/projects/packages/admin-ui/src/class-admin-menu.php @@ -13,7 +13,7 @@ */ class Admin_Menu { - const PACKAGE_VERSION = '0.5.1'; + const PACKAGE_VERSION = '0.5.2'; /** * Whether this class has been initialized diff --git a/projects/packages/assets/CHANGELOG.md b/projects/packages/assets/CHANGELOG.md index f6e87a1d486d8..8c00643d81cdb 100644 --- a/projects/packages/assets/CHANGELOG.md +++ b/projects/packages/assets/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.0.4] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + ## [4.0.3] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -548,6 +552,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Statically access asset tools +[4.0.4]: https://github.com/Automattic/jetpack-assets/compare/v4.0.3...v4.0.4 [4.0.3]: https://github.com/Automattic/jetpack-assets/compare/v4.0.2...v4.0.3 [4.0.2]: https://github.com/Automattic/jetpack-assets/compare/v4.0.1...v4.0.2 [4.0.1]: https://github.com/Automattic/jetpack-assets/compare/v4.0.0...v4.0.1 diff --git a/projects/packages/backup-helper-script-manager/CHANGELOG.md b/projects/packages/backup-helper-script-manager/CHANGELOG.md index 66e7cff2ea581..71a85ab9a138d 100644 --- a/projects/packages/backup-helper-script-manager/CHANGELOG.md +++ b/projects/packages/backup-helper-script-manager/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.2] - 2025-02-03 +### Changed +- Internal updates. + ## [0.3.1] - 2024-11-25 ### Changed - Updated dependencies. [#40286] @@ -56,6 +60,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Initial release (improved helper script installer logging). [#34297] +[0.3.2]: https://github.com/Automattic/jetpack-backup-helper-script-manager/compare/v0.3.1...v0.3.2 [0.3.1]: https://github.com/Automattic/jetpack-backup-helper-script-manager/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/Automattic/jetpack-backup-helper-script-manager/compare/v0.2.8...v0.3.0 [0.2.8]: https://github.com/Automattic/jetpack-backup-helper-script-manager/compare/v0.2.7...v0.2.8 diff --git a/projects/packages/backup-helper-script-manager/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/backup-helper-script-manager/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/backup-helper-script-manager/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/backup/CHANGELOG.md b/projects/packages/backup/CHANGELOG.md index ac0def80ee6c6..0dd5f5525ec17 100644 --- a/projects/packages/backup/CHANGELOG.md +++ b/projects/packages/backup/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.0.8] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + ## [4.0.7] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -766,6 +770,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add API endpoints and Jetpack Backup package for managing Help… +[4.0.8]: https://github.com/Automattic/jetpack-backup/compare/v4.0.7...v4.0.8 [4.0.7]: https://github.com/Automattic/jetpack-backup/compare/v4.0.6...v4.0.7 [4.0.6]: https://github.com/Automattic/jetpack-backup/compare/v4.0.5...v4.0.6 [4.0.5]: https://github.com/Automattic/jetpack-backup/compare/v4.0.4...v4.0.5 diff --git a/projects/packages/backup/changelog/renovate-webpack-cli-6.x b/projects/packages/backup/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/backup/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/backup/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/backup/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/backup/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/backup/src/class-package-version.php b/projects/packages/backup/src/class-package-version.php index d8eb86512c6d9..15cee4a9eb1ab 100644 --- a/projects/packages/backup/src/class-package-version.php +++ b/projects/packages/backup/src/class-package-version.php @@ -16,7 +16,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '4.0.7'; + const PACKAGE_VERSION = '4.0.8'; const PACKAGE_SLUG = 'backup'; diff --git a/projects/packages/blaze/CHANGELOG.md b/projects/packages/blaze/CHANGELOG.md index 95d0c7e6f38e4..850b907f27fbf 100644 --- a/projects/packages/blaze/CHANGELOG.md +++ b/projects/packages/blaze/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.25.7] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + +### Fixed +- Blaze: Ensure Blaze still available after quick edit in post list [#41339] + ## [0.25.6] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -510,6 +517,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated package dependencies. [#27906] +[0.25.7]: https://github.com/automattic/jetpack-blaze/compare/v0.25.6...v0.25.7 [0.25.6]: https://github.com/automattic/jetpack-blaze/compare/v0.25.5...v0.25.6 [0.25.5]: https://github.com/automattic/jetpack-blaze/compare/v0.25.4...v0.25.5 [0.25.4]: https://github.com/automattic/jetpack-blaze/compare/v0.25.3...v0.25.4 diff --git a/projects/packages/blaze/changelog/fix-quickedit-blaze-cpt b/projects/packages/blaze/changelog/fix-quickedit-blaze-cpt deleted file mode 100644 index bf93098e4878c..0000000000000 --- a/projects/packages/blaze/changelog/fix-quickedit-blaze-cpt +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Blaze: Ensure Blaze still available after quick edit in post list diff --git a/projects/packages/blaze/changelog/renovate-webpack-cli-6.x b/projects/packages/blaze/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/blaze/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/blaze/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/blaze/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/blaze/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/blaze/package.json b/projects/packages/blaze/package.json index e2fc93508a921..f01f76910735a 100644 --- a/projects/packages/blaze/package.json +++ b/projects/packages/blaze/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-blaze", - "version": "0.25.6", + "version": "0.25.7", "description": "Attract high-quality traffic to your site using Blaze. Using this service, you can advertise a post or page on some of the millions of pages across WordPress.com and Tumblr from just $5 per day.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/blaze/#readme", "bugs": { diff --git a/projects/packages/blaze/src/class-dashboard.php b/projects/packages/blaze/src/class-dashboard.php index 24c093bd0fe18..c8489fc485cd7 100644 --- a/projects/packages/blaze/src/class-dashboard.php +++ b/projects/packages/blaze/src/class-dashboard.php @@ -21,7 +21,7 @@ class Dashboard { * * @var string */ - const PACKAGE_VERSION = '0.25.6'; + const PACKAGE_VERSION = '0.25.7'; /** * List of dependencies needed to render the dashboard in wp-admin. diff --git a/projects/packages/blocks/CHANGELOG.md b/projects/packages/blocks/CHANGELOG.md index 5b5a45d4cbf73..957578ca3b130 100644 --- a/projects/packages/blocks/CHANGELOG.md +++ b/projects/packages/blocks/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.0.2] - 2025-02-03 +### Changed +- Internal updates. + ## [3.0.1] - 2024-11-25 ### Changed - Updated dependencies. [#40286] @@ -207,6 +211,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Blocks: introduce new package for block management +[3.0.2]: https://github.com/Automattic/jetpack-blocks/compare/v3.0.1...v3.0.2 [3.0.1]: https://github.com/Automattic/jetpack-blocks/compare/v3.0.0...v3.0.1 [3.0.0]: https://github.com/Automattic/jetpack-blocks/compare/v2.0.7...v3.0.0 [2.0.7]: https://github.com/Automattic/jetpack-blocks/compare/v2.0.6...v2.0.7 diff --git a/projects/packages/blocks/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/blocks/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/blocks/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/boost-core/CHANGELOG.md b/projects/packages/boost-core/CHANGELOG.md index d696c967e95b7..cbfe70afce4df 100644 --- a/projects/packages/boost-core/CHANGELOG.md +++ b/projects/packages/boost-core/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.5] - 2025-02-03 +### Fixed +- Code: Remove extra params on function calls. [#41263] + ## [0.3.4] - 2025-01-23 ### Changed - Internal updates. @@ -105,6 +109,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Introduce new package. [#31163] +[0.3.5]: https://github.com/Automattic/jetpack-boost-core/compare/v0.3.4...v0.3.5 [0.3.4]: https://github.com/Automattic/jetpack-boost-core/compare/v0.3.3...v0.3.4 [0.3.3]: https://github.com/Automattic/jetpack-boost-core/compare/v0.3.2...v0.3.3 [0.3.2]: https://github.com/Automattic/jetpack-boost-core/compare/v0.3.1...v0.3.2 diff --git a/projects/packages/boost-core/changelog/fix-phan-PhanParamTooMany b/projects/packages/boost-core/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/boost-core/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/boost-core/package.json b/projects/packages/boost-core/package.json index 95ddd5e228416..aba90295f6f15 100644 --- a/projects/packages/boost-core/package.json +++ b/projects/packages/boost-core/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-boost-core", - "version": "0.3.4", + "version": "0.3.5", "description": "Core functionality for boost and relevant packages to depend on", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/boost-core/#readme", "bugs": { diff --git a/projects/packages/classic-theme-helper/CHANGELOG.md b/projects/packages/classic-theme-helper/CHANGELOG.md index d4f3a910acde0..0c42d4368ec65 100644 --- a/projects/packages/classic-theme-helper/CHANGELOG.md +++ b/projects/packages/classic-theme-helper/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.9.3] - 2025-02-03 +### Added +- Theme compat: Move relevant functionality to the package. [#41394] + +### Changed +- Updated package dependencies. [#41286] + ## [0.9.2] - 2025-01-27 ### Fixed - Classic Theme Helper: Fix Fatal in Jetpack_Portfolio. [#41304] @@ -202,6 +209,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Add wordpress folder on gitignore. [#37177] +[0.9.3]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.9.2...v0.9.3 [0.9.2]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.9.1...v0.9.2 [0.9.1]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.9.0...v0.9.1 [0.9.0]: https://github.com/Automattic/jetpack-classic-theme-helper/compare/v0.8.3...v0.9.0 diff --git a/projects/packages/classic-theme-helper/changelog/renovate-webpack-cli-6.x b/projects/packages/classic-theme-helper/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/classic-theme-helper/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/classic-theme-helper/changelog/update-move-relevant-theme-compat-to-classic-theme-helper b/projects/packages/classic-theme-helper/changelog/update-move-relevant-theme-compat-to-classic-theme-helper deleted file mode 100644 index 05902f8f75f93..0000000000000 --- a/projects/packages/classic-theme-helper/changelog/update-move-relevant-theme-compat-to-classic-theme-helper +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Theme compat: Adding any relevant functionality to the package. diff --git a/projects/packages/classic-theme-helper/package.json b/projects/packages/classic-theme-helper/package.json index 07ba3262cb77e..eebf0f0b07cd9 100644 --- a/projects/packages/classic-theme-helper/package.json +++ b/projects/packages/classic-theme-helper/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-classic-theme-helper", - "version": "0.9.2", + "version": "0.9.3", "description": "Features used with classic themes", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/classic-theme-helper/#readme", "bugs": { diff --git a/projects/packages/classic-theme-helper/src/class-main.php b/projects/packages/classic-theme-helper/src/class-main.php index 3d4d5996e2025..782a940322055 100644 --- a/projects/packages/classic-theme-helper/src/class-main.php +++ b/projects/packages/classic-theme-helper/src/class-main.php @@ -14,7 +14,7 @@ */ class Main { - const PACKAGE_VERSION = '0.9.2'; + const PACKAGE_VERSION = '0.9.3'; /** * Modules to include. diff --git a/projects/packages/connection/CHANGELOG.md b/projects/packages/connection/CHANGELOG.md index 361993603796f..d026dc8a057d9 100644 --- a/projects/packages/connection/CHANGELOG.md +++ b/projects/packages/connection/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [6.3.2] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + +### Fixed +- Code: Remove extra params on function calls. [#41263] + ## [6.3.1] - 2025-01-27 ### Changed - Internal updates. @@ -1291,6 +1298,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Separate the connection library into its own package. +[6.3.2]: https://github.com/Automattic/jetpack-connection/compare/v6.3.1...v6.3.2 [6.3.1]: https://github.com/Automattic/jetpack-connection/compare/v6.3.0...v6.3.1 [6.3.0]: https://github.com/Automattic/jetpack-connection/compare/v6.2.2...v6.3.0 [6.2.2]: https://github.com/Automattic/jetpack-connection/compare/v6.2.1...v6.2.2 diff --git a/projects/packages/connection/changelog/fix-phan-PhanParamTooMany b/projects/packages/connection/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/connection/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/connection/changelog/renovate-webpack-cli-6.x b/projects/packages/connection/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/connection/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/connection/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/connection/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/connection/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/connection/src/class-package-version.php b/projects/packages/connection/src/class-package-version.php index d2e9321086e49..558f69eaf06f2 100644 --- a/projects/packages/connection/src/class-package-version.php +++ b/projects/packages/connection/src/class-package-version.php @@ -12,7 +12,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '6.3.1'; + const PACKAGE_VERSION = '6.3.2'; const PACKAGE_SLUG = 'connection'; diff --git a/projects/packages/explat/CHANGELOG.md b/projects/packages/explat/CHANGELOG.md index ea7ca6985e9b9..1b430fc22fb17 100644 --- a/projects/packages/explat/CHANGELOG.md +++ b/projects/packages/explat/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.2.5] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + ## [0.2.4] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -95,6 +99,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ExPlat: add condition to prevent fetching the experiment assignment if there's not anon id (meaning that Tracks is likely disabled) [#38327] - Updated package dependencies. [#38132] +[0.2.5]: https://github.com/Automattic/jetpack-explat/compare/v0.2.4...v0.2.5 [0.2.4]: https://github.com/Automattic/jetpack-explat/compare/v0.2.3...v0.2.4 [0.2.3]: https://github.com/Automattic/jetpack-explat/compare/v0.2.2...v0.2.3 [0.2.2]: https://github.com/Automattic/jetpack-explat/compare/v0.2.1...v0.2.2 diff --git a/projects/packages/explat/changelog/renovate-webpack-cli-6.x b/projects/packages/explat/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/explat/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/explat/package.json b/projects/packages/explat/package.json index faf2fea52fb8b..3d4ef073fae0b 100644 --- a/projects/packages/explat/package.json +++ b/projects/packages/explat/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-explat", - "version": "0.2.4", + "version": "0.2.5", "description": "A package for running A/B tests on the Experimentation Platform (ExPlat) in the plugin.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/explat/#readme", "bugs": { diff --git a/projects/packages/explat/src/class-explat.php b/projects/packages/explat/src/class-explat.php index 56b1528f358c3..ff34a19ead700 100644 --- a/projects/packages/explat/src/class-explat.php +++ b/projects/packages/explat/src/class-explat.php @@ -20,7 +20,7 @@ class ExPlat { * * @var string */ - const PACKAGE_VERSION = '0.2.4'; + const PACKAGE_VERSION = '0.2.5'; /** * Initializer. diff --git a/projects/packages/forms/CHANGELOG.md b/projects/packages/forms/CHANGELOG.md index b2d133840d786..2921437f75398 100644 --- a/projects/packages/forms/CHANGELOG.md +++ b/projects/packages/forms/CHANGELOG.md @@ -5,6 +5,29 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.36.0] - 2025-02-03 +### Added +- Prevent empty client-side form submission. [#41464] + +### Changed +- Remove legacy code and improve code quality. [#41348] +- Rename contact form block placeholder to "Forms". [#41384] +- Updated package dependencies. [#41286] + +### Fixed +- Add wrapping div to the core HTML block when inserted inside the form block. [#41269] +- Code: Remove extra params on function calls. [#41263] +- Feedback: Fix encoding when going from spam to regular type. [#41359] +- Feedback: Fix missing spacing bug in list view. [#41367] +- Fix date picker styles in dark themes. [#41342] +- Fix field spacing and widths. [#41415] +- Fix permanent deletion of form reponses via quicklinks. [#41321] +- Fix submission when date field errored. [#41511] +- Hide empty radio fields. [#41379] +- Prevent empty style values within form field block attributes. [#41206] +- Prevent error in block placeholder when the Forms module is disabled. [#41382] +- Translations: Fix spam % character. [#41345] + ## [0.35.1] - 2025-01-27 ### Added - Add Checkbox and Consent field enter action to create a new block. [#41297] @@ -789,6 +812,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added a new jetpack/forms package [#28409] - Added a public load_contact_form method for initializing the contact form module. [#28416] +[0.36.0]: https://github.com/automattic/jetpack-forms/compare/v0.35.1...v0.36.0 [0.35.1]: https://github.com/automattic/jetpack-forms/compare/v0.35.0...v0.35.1 [0.35.0]: https://github.com/automattic/jetpack-forms/compare/v0.34.6...v0.35.0 [0.34.6]: https://github.com/automattic/jetpack-forms/compare/v0.34.5...v0.34.6 diff --git a/projects/packages/forms/changelog/fix-contact-form-placeholder b/projects/packages/forms/changelog/fix-contact-form-placeholder deleted file mode 100644 index 450028e6c5484..0000000000000 --- a/projects/packages/forms/changelog/fix-contact-form-placeholder +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Fix the block placeholder throwing an error when the Forms module is disabled. diff --git a/projects/packages/forms/changelog/fix-editor-select-field b/projects/packages/forms/changelog/fix-editor-select-field deleted file mode 100644 index 16a185045434e..0000000000000 --- a/projects/packages/forms/changelog/fix-editor-select-field +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: fix dark themes date picker styles diff --git a/projects/packages/forms/changelog/fix-endcoding-when-marking-as-spam b/projects/packages/forms/changelog/fix-endcoding-when-marking-as-spam deleted file mode 100644 index 14f355db2dd31..0000000000000 --- a/projects/packages/forms/changelog/fix-endcoding-when-marking-as-spam +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Form: Fix encoding when going from spam to regular type diff --git a/projects/packages/forms/changelog/fix-form-field-widths b/projects/packages/forms/changelog/fix-form-field-widths deleted file mode 100644 index 55beb1ec9e480..0000000000000 --- a/projects/packages/forms/changelog/fix-form-field-widths +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Fix field spacing and widths. diff --git a/projects/packages/forms/changelog/fix-form-radio-with-no-options b/projects/packages/forms/changelog/fix-form-radio-with-no-options deleted file mode 100644 index 0d4d1e655c0f6..0000000000000 --- a/projects/packages/forms/changelog/fix-form-radio-with-no-options +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Hide empty radio fields. diff --git a/projects/packages/forms/changelog/fix-forms-clean-up-empty-style-attributes b/projects/packages/forms/changelog/fix-forms-clean-up-empty-style-attributes deleted file mode 100644 index 46521002a80d4..0000000000000 --- a/projects/packages/forms/changelog/fix-forms-clean-up-empty-style-attributes +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Prevent empty style values within form field block attributes diff --git a/projects/packages/forms/changelog/fix-html-block-rendering-wrap-block b/projects/packages/forms/changelog/fix-html-block-rendering-wrap-block deleted file mode 100644 index 1dceb8d48ecf4..0000000000000 --- a/projects/packages/forms/changelog/fix-html-block-rendering-wrap-block +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Form: Add wrapping div to the core html block when inserted inside the form block diff --git a/projects/packages/forms/changelog/fix-permenatly-delete-form-responses b/projects/packages/forms/changelog/fix-permenatly-delete-form-responses deleted file mode 100644 index 73fbc4f4c5c08..0000000000000 --- a/projects/packages/forms/changelog/fix-permenatly-delete-form-responses +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Fix permently deleting form reponses via the quicklinks diff --git a/projects/packages/forms/changelog/fix-phan-PhanParamTooMany b/projects/packages/forms/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/forms/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/forms/changelog/fix-radio-and-checkbox-alignemnet b/projects/packages/forms/changelog/fix-radio-and-checkbox-alignemnet deleted file mode 100644 index 4e4d6c8cd4a9d..0000000000000 --- a/projects/packages/forms/changelog/fix-radio-and-checkbox-alignemnet +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Minor fix - - diff --git a/projects/packages/forms/changelog/fix-spacing-button-export-form b/projects/packages/forms/changelog/fix-spacing-button-export-form deleted file mode 100644 index 5d0d0c0503c72..0000000000000 --- a/projects/packages/forms/changelog/fix-spacing-button-export-form +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: fixed missing spacing bug in the feedback list view diff --git a/projects/packages/forms/changelog/fix-spam-percent-translation b/projects/packages/forms/changelog/fix-spam-percent-translation deleted file mode 100644 index 35535644f657f..0000000000000 --- a/projects/packages/forms/changelog/fix-spam-percent-translation +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Translations: Fix spam % character. diff --git a/projects/packages/forms/changelog/form-fix-submit-if-date-had-errored b/projects/packages/forms/changelog/form-fix-submit-if-date-had-errored deleted file mode 100644 index 568c9b0163305..0000000000000 --- a/projects/packages/forms/changelog/form-fix-submit-if-date-had-errored +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Forms: Fix submission if date field had errored diff --git a/projects/packages/forms/changelog/forms-prevent-emtpy-form-submission-client-side b/projects/packages/forms/changelog/forms-prevent-emtpy-form-submission-client-side deleted file mode 100644 index 3e72ad17af02a..0000000000000 --- a/projects/packages/forms/changelog/forms-prevent-emtpy-form-submission-client-side +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Forms: Prevent empty form submission client side diff --git a/projects/packages/forms/changelog/renovate-webpack-cli-6.x b/projects/packages/forms/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/forms/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/forms/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/forms/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/forms/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/forms/changelog/update-contact-form-block-code-quality b/projects/packages/forms/changelog/update-contact-form-block-code-quality deleted file mode 100644 index e55a9fa62aae0..0000000000000 --- a/projects/packages/forms/changelog/update-contact-form-block-code-quality +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Forms: Remove old back compat code and improve code quality diff --git a/projects/packages/forms/changelog/update-rename-contact-form-module b/projects/packages/forms/changelog/update-rename-contact-form-module deleted file mode 100644 index 07dc4750ea0f8..0000000000000 --- a/projects/packages/forms/changelog/update-rename-contact-form-module +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Forms: rename contact form block placeholder to just "Forms". diff --git a/projects/packages/forms/composer.json b/projects/packages/forms/composer.json index 4aecdde12b9ea..b5ba603e90074 100644 --- a/projects/packages/forms/composer.json +++ b/projects/packages/forms/composer.json @@ -66,7 +66,7 @@ "link-template": "https://github.com/automattic/jetpack-forms/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.35.x-dev" + "dev-trunk": "0.36.x-dev" }, "textdomain": "jetpack-forms", "version-constants": { diff --git a/projects/packages/forms/package.json b/projects/packages/forms/package.json index 18f42726c0937..630fd1298567c 100644 --- a/projects/packages/forms/package.json +++ b/projects/packages/forms/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-forms", - "version": "0.35.1", + "version": "0.36.0", "description": "Jetpack Forms", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/forms/#readme", "bugs": { diff --git a/projects/packages/forms/src/class-jetpack-forms.php b/projects/packages/forms/src/class-jetpack-forms.php index 418e8670fcb38..6f1b9eb5908ae 100644 --- a/projects/packages/forms/src/class-jetpack-forms.php +++ b/projects/packages/forms/src/class-jetpack-forms.php @@ -15,7 +15,7 @@ */ class Jetpack_Forms { - const PACKAGE_VERSION = '0.35.1'; + const PACKAGE_VERSION = '0.36.0'; /** * Load the contact form module. diff --git a/projects/packages/image-cdn/CHANGELOG.md b/projects/packages/image-cdn/CHANGELOG.md index 91d5ee27a0c52..2abb2d79b0aee 100644 --- a/projects/packages/image-cdn/CHANGELOG.md +++ b/projects/packages/image-cdn/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.7.4] - 2025-02-03 +### Fixed +- Code: Remove extra params on function calls. [#41263] + ## [0.7.3] - 2025-01-20 ### Fixed - General: Ensure that double encoding doesn't happen. [#40886] @@ -166,6 +170,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Add image CDN package. [#29561] +[0.7.4]: https://github.com/Automattic/jetpack-image-cdn/compare/v0.7.3...v0.7.4 [0.7.3]: https://github.com/Automattic/jetpack-image-cdn/compare/v0.7.2...v0.7.3 [0.7.2]: https://github.com/Automattic/jetpack-image-cdn/compare/v0.7.1...v0.7.2 [0.7.1]: https://github.com/Automattic/jetpack-image-cdn/compare/v0.7.0...v0.7.1 diff --git a/projects/packages/image-cdn/changelog/fix-phan-PhanParamTooMany b/projects/packages/image-cdn/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/image-cdn/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/image-cdn/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/image-cdn/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/image-cdn/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/image-cdn/src/class-image-cdn.php b/projects/packages/image-cdn/src/class-image-cdn.php index 558ed8efe55f1..f11add428d440 100644 --- a/projects/packages/image-cdn/src/class-image-cdn.php +++ b/projects/packages/image-cdn/src/class-image-cdn.php @@ -12,7 +12,7 @@ */ final class Image_CDN { - const PACKAGE_VERSION = '0.7.3'; + const PACKAGE_VERSION = '0.7.4'; /** * Singleton. diff --git a/projects/packages/jitm/CHANGELOG.md b/projects/packages/jitm/CHANGELOG.md index 52ccb2a1659ac..cf6a44d424691 100644 --- a/projects/packages/jitm/CHANGELOG.md +++ b/projects/packages/jitm/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.0.5] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] +- Update the WooCommerce logo in Woo JITMs. [#41322] + ## [4.0.4] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -815,6 +820,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update Jetpack to use new JITM package +[4.0.5]: https://github.com/Automattic/jetpack-jitm/compare/v4.0.4...v4.0.5 [4.0.4]: https://github.com/Automattic/jetpack-jitm/compare/v4.0.3...v4.0.4 [4.0.3]: https://github.com/Automattic/jetpack-jitm/compare/v4.0.2...v4.0.3 [4.0.2]: https://github.com/Automattic/jetpack-jitm/compare/v4.0.1...v4.0.2 diff --git a/projects/packages/jitm/changelog/renovate-webpack-cli-6.x b/projects/packages/jitm/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/jitm/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/jitm/changelog/update-woo-jitm-logo b/projects/packages/jitm/changelog/update-woo-jitm-logo deleted file mode 100644 index 71f6361baf008..0000000000000 --- a/projects/packages/jitm/changelog/update-woo-jitm-logo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updates the WooCommerce Logo in Woo JITM's diff --git a/projects/packages/jitm/src/class-jitm.php b/projects/packages/jitm/src/class-jitm.php index 7ed86d6c4366d..359a778b418a9 100644 --- a/projects/packages/jitm/src/class-jitm.php +++ b/projects/packages/jitm/src/class-jitm.php @@ -20,7 +20,7 @@ */ class JITM { - const PACKAGE_VERSION = '4.0.4'; + const PACKAGE_VERSION = '4.0.5'; /** * The configuration method that is called from the jetpack-config package. @@ -270,7 +270,7 @@ public function generate_icon( $content_icon, $full_jp_logo_exists ) { /** * Filter to force display the new Woo logo in Woo JITM's, or not. * - * @since $$next-version$$ + * @since 4.0.5 * * @param bool $show_woo_logo Whether to show the new Woo logo or not. */ diff --git a/projects/packages/licensing/CHANGELOG.md b/projects/packages/licensing/CHANGELOG.md index e19c981aa5633..0749d23871bf6 100644 --- a/projects/packages/licensing/CHANGELOG.md +++ b/projects/packages/licensing/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.0.4] - 2025-02-03 +### Changed +- Internal updates. + ## [3.0.3] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -316,6 +320,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Licensing: Add support for Jetpack licenses +[3.0.4]: https://github.com/Automattic/jetpack-licensing/compare/v3.0.3...v3.0.4 [3.0.3]: https://github.com/Automattic/jetpack-licensing/compare/v3.0.2...v3.0.3 [3.0.2]: https://github.com/Automattic/jetpack-licensing/compare/v3.0.1...v3.0.2 [3.0.1]: https://github.com/Automattic/jetpack-licensing/compare/v3.0.0...v3.0.1 diff --git a/projects/packages/licensing/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/licensing/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/licensing/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/masterbar/CHANGELOG.md b/projects/packages/masterbar/CHANGELOG.md index 3f44847564b10..9c52eb8b7dd75 100644 --- a/projects/packages/masterbar/CHANGELOG.md +++ b/projects/packages/masterbar/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.12.1] - 2025-02-03 +### Changed +- Phan: Update baselines. [#41263] +- Updated package dependencies. [#41286] + ## [0.12.0] - 2025-01-27 ### Added - Hide the calypso based Performance menu item on wordpress.com, show page-optimize based Performance menu item on Atomic sites. [#41145] @@ -214,6 +219,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Notifications: Change Icon [#37676] - Updated package dependencies. [#37669] [#37706] +[0.12.1]: https://github.com/Automattic/jetpack-masterbar/compare/v0.12.0...v0.12.1 [0.12.0]: https://github.com/Automattic/jetpack-masterbar/compare/v0.11.0...v0.12.0 [0.11.0]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.6...v0.11.0 [0.10.6]: https://github.com/Automattic/jetpack-masterbar/compare/v0.10.5...v0.10.6 diff --git a/projects/packages/masterbar/changelog/fix-phan-PhanParamTooMany b/projects/packages/masterbar/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index c1192e2ed90c3..0000000000000 --- a/projects/packages/masterbar/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Phan: Update baselines. diff --git a/projects/packages/masterbar/changelog/renovate-webpack-cli-6.x b/projects/packages/masterbar/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/masterbar/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/masterbar/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/masterbar/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/masterbar/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/masterbar/package.json b/projects/packages/masterbar/package.json index 16dead5779881..fffeac51d8189 100644 --- a/projects/packages/masterbar/package.json +++ b/projects/packages/masterbar/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-masterbar", - "version": "0.12.0", + "version": "0.12.1", "description": "The WordPress.com Toolbar feature replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/masterbar/#readme", "bugs": { diff --git a/projects/packages/masterbar/src/class-main.php b/projects/packages/masterbar/src/class-main.php index 72b808a99261d..8afd76a3f3ce6 100644 --- a/projects/packages/masterbar/src/class-main.php +++ b/projects/packages/masterbar/src/class-main.php @@ -14,7 +14,7 @@ */ class Main { - const PACKAGE_VERSION = '0.12.0'; + const PACKAGE_VERSION = '0.12.1'; /** * Initializer. diff --git a/projects/packages/my-jetpack/CHANGELOG.md b/projects/packages/my-jetpack/CHANGELOG.md index d6c8991ae7940..dcbc96200e543 100644 --- a/projects/packages/my-jetpack/CHANGELOG.md +++ b/projects/packages/my-jetpack/CHANGELOG.md @@ -5,12 +5,27 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [5.4.1] - 2025-02-03 +### Added +- My Jetpack: Add red bubble and notice when pain plan is missing plugin. [#41013] + +### Changed +- Make Action Button component more reusable. [#41361] +- Replace Jetpack AI upgrade page with a modal. [#41301] +- Updated package dependencies. [#41286] +- Update My Jetpack interstitial modal with new styles and layout. [#41300] + +### Fixed +- AI: Avoid using relative URLs in admin URLs to support sites where WordPress is installed in a subdirectory. [#41459] +- Code: Remove extra params on function calls. [#41263] +- My Jetpack: Fix secondary action of Protect card when plugin is not installed. [#41347] + ## [5.4.0] - 2025-01-23 ### Added - Adding new modal based interstitial component. [#40945] ### Fixed -- Fix bug where My Jetpack would throw critical error if only a standalone plugin is not installed [#41192] +- Fix bug where My Jetpack would throw critical error if only a standalone plugin is not installed. [#41192] ## [5.3.3] - 2025-01-20 ### Added @@ -1922,6 +1937,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Created package +[5.4.1]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.4.0...5.4.1 [5.4.0]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.3.3...5.4.0 [5.3.3]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.3.2...5.3.3 [5.3.2]: https://github.com/Automattic/jetpack-my-jetpack/compare/5.3.1...5.3.2 diff --git a/projects/packages/my-jetpack/changelog/add-mj-red-bubble-notice-when-plugins-need-installed b/projects/packages/my-jetpack/changelog/add-mj-red-bubble-notice-when-plugins-need-installed deleted file mode 100644 index 26e39e2dcb86a..0000000000000 --- a/projects/packages/my-jetpack/changelog/add-mj-red-bubble-notice-when-plugins-need-installed +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -My Jetpack: Add red bubble and notice when pain plan is missing plugin. diff --git a/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial-ai b/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial-ai deleted file mode 100644 index 049422aad0d18..0000000000000 --- a/projects/packages/my-jetpack/changelog/add-my-jetpack-modal-interstitial-ai +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Replacing Jetpack AI upgrade page with a modal. diff --git a/projects/packages/my-jetpack/changelog/fix-mj-current-plan-not-updated b/projects/packages/my-jetpack/changelog/fix-mj-current-plan-not-updated deleted file mode 100644 index 0124e66843cdf..0000000000000 --- a/projects/packages/my-jetpack/changelog/fix-mj-current-plan-not-updated +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fixed -Comment: Change not visible or relevant to users - - diff --git a/projects/packages/my-jetpack/changelog/fix-my-jetpack-ai-interstitial-url b/projects/packages/my-jetpack/changelog/fix-my-jetpack-ai-interstitial-url deleted file mode 100644 index 0f15ee3521c35..0000000000000 --- a/projects/packages/my-jetpack/changelog/fix-my-jetpack-ai-interstitial-url +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -AI: avoid using relative URLs in admin URLs, to support sites where WordPress is installed in a subdirectory. diff --git a/projects/packages/my-jetpack/changelog/fix-phan-PhanParamTooMany b/projects/packages/my-jetpack/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/my-jetpack/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/my-jetpack/changelog/fix-protect-default-secondary b/projects/packages/my-jetpack/changelog/fix-protect-default-secondary deleted file mode 100644 index eef99382308a7..0000000000000 --- a/projects/packages/my-jetpack/changelog/fix-protect-default-secondary +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -My Jetpack: fix secondary action of Protect card when plugin is not installed. diff --git a/projects/packages/my-jetpack/changelog/renovate-webpack-cli-6.x b/projects/packages/my-jetpack/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/my-jetpack/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/my-jetpack/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/my-jetpack/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/my-jetpack/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/my-jetpack/changelog/update-action-button-to-be-more-easily-reused b/projects/packages/my-jetpack/changelog/update-action-button-to-be-more-easily-reused deleted file mode 100644 index 848b38ddb81fd..0000000000000 --- a/projects/packages/my-jetpack/changelog/update-action-button-to-be-more-easily-reused +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Make Action Button component more reusable diff --git a/projects/packages/my-jetpack/changelog/update-mj-needs-plugins-notice b/projects/packages/my-jetpack/changelog/update-mj-needs-plugins-notice deleted file mode 100644 index 9175fda82ce1e..0000000000000 --- a/projects/packages/my-jetpack/changelog/update-mj-needs-plugins-notice +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: changed -Comment: My Jetpack: Needs plugin notice- minor bug fixes & enhancements. - - diff --git a/projects/packages/my-jetpack/changelog/update-myjetpack-interstitial-modal b/projects/packages/my-jetpack/changelog/update-myjetpack-interstitial-modal deleted file mode 100644 index 8b8670a6bde40..0000000000000 --- a/projects/packages/my-jetpack/changelog/update-myjetpack-interstitial-modal +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updating My Jetpack interstitial modal with new styles and layout. diff --git a/projects/packages/my-jetpack/package.json b/projects/packages/my-jetpack/package.json index c5fd957188a85..e1cd294e708ff 100644 --- a/projects/packages/my-jetpack/package.json +++ b/projects/packages/my-jetpack/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-my-jetpack", - "version": "5.4.0", + "version": "5.4.1", "description": "WP Admin page with information and configuration shared among all Jetpack stand-alone plugins", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/my-jetpack/#readme", "bugs": { diff --git a/projects/packages/my-jetpack/src/class-initializer.php b/projects/packages/my-jetpack/src/class-initializer.php index 6d54d3241c6d9..ec2a40c7af88b 100644 --- a/projects/packages/my-jetpack/src/class-initializer.php +++ b/projects/packages/my-jetpack/src/class-initializer.php @@ -41,7 +41,7 @@ class Initializer { * * @var string */ - const PACKAGE_VERSION = '5.4.0'; + const PACKAGE_VERSION = '5.4.1'; /** * HTML container ID for the IDC screen on My Jetpack page. diff --git a/projects/packages/password-checker/CHANGELOG.md b/projects/packages/password-checker/CHANGELOG.md index 79414e5611e99..c9eb1186640ed 100644 --- a/projects/packages/password-checker/CHANGELOG.md +++ b/projects/packages/password-checker/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.2] - 2025-02-03 +### Changed +- Internal updates. + ## [0.4.1] - 2024-11-25 ### Changed - Updated dependencies. [#40286] @@ -132,6 +136,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Use `composer update` rather than `install` in scripts, as composer.lock isn't checked in. +[0.4.2]: https://github.com/Automattic/jetpack-password-checker/compare/v0.4.1...v0.4.2 [0.4.1]: https://github.com/Automattic/jetpack-password-checker/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/Automattic/jetpack-password-checker/compare/v0.3.3...v0.4.0 [0.3.3]: https://github.com/Automattic/jetpack-password-checker/compare/v0.3.2...v0.3.3 diff --git a/projects/packages/password-checker/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/password-checker/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/password-checker/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/plans/CHANGELOG.md b/projects/packages/plans/CHANGELOG.md index e869862040912..6fd62b8dbd2af 100644 --- a/projects/packages/plans/CHANGELOG.md +++ b/projects/packages/plans/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.5.2] - 2025-02-03 +### Changed +- Internal updates. + ## [0.5.1] - 2024-11-25 ### Changed - Updated dependencies. [#40286] @@ -170,6 +174,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Deprecated - Moved the options class into Connection. [#24095] +[0.5.2]: https://github.com/Automattic/jetpack-plans/compare/v0.5.1...v0.5.2 [0.5.1]: https://github.com/Automattic/jetpack-plans/compare/v0.5.0...v0.5.1 [0.5.0]: https://github.com/Automattic/jetpack-plans/compare/v0.4.13...v0.5.0 [0.4.13]: https://github.com/Automattic/jetpack-plans/compare/v0.4.12...v0.4.13 diff --git a/projects/packages/plans/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/plans/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/plans/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/plans/package.json b/projects/packages/plans/package.json index cb0c804ebffa3..cf233348d1a85 100644 --- a/projects/packages/plans/package.json +++ b/projects/packages/plans/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-plans", - "version": "0.5.1", + "version": "0.5.2", "description": "Fetch information about Jetpack Plans from wpcom", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/plans/#readme", "bugs": { diff --git a/projects/packages/post-list/CHANGELOG.md b/projects/packages/post-list/CHANGELOG.md index f1ab1c7685919..a14626ff7bc0f 100644 --- a/projects/packages/post-list/CHANGELOG.md +++ b/projects/packages/post-list/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.8.0] - 2025-02-03 +### Added +- Post List: Add a Copy Link Quick Action. [#41305] + ## [0.7.3] - 2025-01-13 ### Fixed - Pages and Posts: Fix the layout on mobile when details are open. [#40872] @@ -134,6 +138,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated the default columns displayed on the post and page list screens - Refactored thumbnail preview to function server side. All javascript removed. +[0.8.0]: https://github.com/automattic/jetpack-post-list/compare/v0.7.3...v0.8.0 [0.7.3]: https://github.com/automattic/jetpack-post-list/compare/v0.7.2...v0.7.3 [0.7.2]: https://github.com/automattic/jetpack-post-list/compare/v0.7.1...v0.7.2 [0.7.1]: https://github.com/automattic/jetpack-post-list/compare/v0.7.0...v0.7.1 diff --git a/projects/packages/post-list/changelog/add-copy-post-link-action-in-posts-list b/projects/packages/post-list/changelog/add-copy-post-link-action-in-posts-list deleted file mode 100644 index 0cae5823b78d3..0000000000000 --- a/projects/packages/post-list/changelog/add-copy-post-link-action-in-posts-list +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Post List: Add a Copy Link Quick Action diff --git a/projects/packages/post-list/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/post-list/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/post-list/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/post-list/composer.json b/projects/packages/post-list/composer.json index d1725266a9a7b..7aa6ef9d9c60e 100644 --- a/projects/packages/post-list/composer.json +++ b/projects/packages/post-list/composer.json @@ -59,7 +59,7 @@ "link-template": "https://github.com/automattic/jetpack-post-list/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.7.x-dev" + "dev-trunk": "0.8.x-dev" } }, "config": { diff --git a/projects/packages/post-list/src/class-post-list.php b/projects/packages/post-list/src/class-post-list.php index 0d7547c6f9f01..7118a70908b39 100644 --- a/projects/packages/post-list/src/class-post-list.php +++ b/projects/packages/post-list/src/class-post-list.php @@ -16,7 +16,7 @@ */ class Post_List { - const PACKAGE_VERSION = '0.7.3'; + const PACKAGE_VERSION = '0.8.0'; const FEATURE = 'enhanced_post_list'; /** diff --git a/projects/packages/protect-models/CHANGELOG.md b/projects/packages/protect-models/CHANGELOG.md index c39cd8b917baf..e054cc01908c4 100644 --- a/projects/packages/protect-models/CHANGELOG.md +++ b/projects/packages/protect-models/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.2] - 2025-02-03 +### Changed +- Internal updates. + ## [0.4.1] - 2024-11-25 ### Changed - Updated dependencies. [#40286] @@ -36,6 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Initial version. [#37864] +[0.4.2]: https://github.com/Automattic/jetpack-protect-models/compare/v0.4.1...v0.4.2 [0.4.1]: https://github.com/Automattic/jetpack-protect-models/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/Automattic/jetpack-protect-models/compare/v0.3.1...v0.4.0 [0.3.1]: https://github.com/Automattic/jetpack-protect-models/compare/v0.3.0...v0.3.1 diff --git a/projects/packages/protect-models/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/protect-models/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/protect-models/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/protect-models/package.json b/projects/packages/protect-models/package.json index 5c82e6700ff17..131122227089a 100644 --- a/projects/packages/protect-models/package.json +++ b/projects/packages/protect-models/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-protect-models", - "version": "0.4.1", + "version": "0.4.2", "description": "This package contains the models used in Protect. ", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/protect-models/#readme", "bugs": { diff --git a/projects/packages/protect-models/src/class-protect-models.php b/projects/packages/protect-models/src/class-protect-models.php index 675499cae13e6..aa2d87e31c442 100644 --- a/projects/packages/protect-models/src/class-protect-models.php +++ b/projects/packages/protect-models/src/class-protect-models.php @@ -12,5 +12,5 @@ */ class Protect_Models { - const PACKAGE_VERSION = '0.4.1'; + const PACKAGE_VERSION = '0.4.2'; } diff --git a/projects/packages/protect-status/CHANGELOG.md b/projects/packages/protect-status/CHANGELOG.md index edc9ded7e1627..5ccdf9b32b320 100644 --- a/projects/packages/protect-status/CHANGELOG.md +++ b/projects/packages/protect-status/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.3] - 2025-02-03 +### Fixed +- Code: Remove extra params on function calls. [#41263] +- Fix a bug when core version data is not interpreted correctly from the report data response. [#41503] + ## [0.4.2] - 2025-01-20 ### Fixed - Fix Current_Plan::supports() call from breaking cache on every call. [#41010] @@ -67,6 +72,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated package dependencies. [#37894] +[0.4.3]: https://github.com/Automattic/jetpack-protect-status/compare/v0.4.2...v0.4.3 [0.4.2]: https://github.com/Automattic/jetpack-protect-status/compare/v0.4.1...v0.4.2 [0.4.1]: https://github.com/Automattic/jetpack-protect-status/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/Automattic/jetpack-protect-status/compare/v0.3.1...v0.4.0 diff --git a/projects/packages/protect-status/changelog/fix-phan-PhanParamTooMany b/projects/packages/protect-status/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/protect-status/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/protect-status/changelog/fix-protect-status-core-version-check b/projects/packages/protect-status/changelog/fix-protect-status-core-version-check deleted file mode 100644 index 5166f35c1d24e..0000000000000 --- a/projects/packages/protect-status/changelog/fix-protect-status-core-version-check +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Protect Status: Fixed a bug where it can happen that the core version data is not interpreted correctly from the report data response. diff --git a/projects/packages/protect-status/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/protect-status/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/protect-status/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/protect-status/package.json b/projects/packages/protect-status/package.json index a1f7923753068..4556a61087513 100644 --- a/projects/packages/protect-status/package.json +++ b/projects/packages/protect-status/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-protect-status", - "version": "0.4.2", + "version": "0.4.3", "description": "This package contains the Protect Status API functionality to retrieve a site's scan status (WordPress, Themes, and Plugins threats).", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/protect-status/#readme", "bugs": { diff --git a/projects/packages/protect-status/src/class-status.php b/projects/packages/protect-status/src/class-status.php index 0991ebc7a5e39..bfe7b53dd49a3 100644 --- a/projects/packages/protect-status/src/class-status.php +++ b/projects/packages/protect-status/src/class-status.php @@ -14,7 +14,7 @@ */ class Status { - const PACKAGE_VERSION = '0.4.2'; + const PACKAGE_VERSION = '0.4.3'; /** * Name of the option where status is stored * diff --git a/projects/packages/publicize/CHANGELOG.md b/projects/packages/publicize/CHANGELOG.md index 00e423dd439f7..d229541ab994e 100644 --- a/projects/packages/publicize/CHANGELOG.md +++ b/projects/packages/publicize/CHANGELOG.md @@ -5,16 +5,35 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.59.0] - 2025-02-03 +### Added +- Enable Social Post UI for WordPress.com. [#41219] + +### Changed +- Move Social admin page code and assets logic to publicize package. [#41239] +- Move initial state from Social plugin to publicize package. [#41381] +- Phan: Update baselines. [#41263] +- Move Social settings endpoint to publicize package. [#41456] +- Use feature flag for Social admin page. [#41413] +- Updated package dependencies. [#41286] +- Update the settings endpoint to use existing endpoints. [#41461] +- Use Admin_Menu::remove_menu to handle old Social menu item. [#41422] + +### Fixed +- Fix the default value for UTM settings schema. [#41386] +- Fix connections cache when WordPress.com API call fails. [#41392] +- Fix the API calls on WordPress.com for options. [#41420] + ## [0.58.0] - 2025-01-27 ### Changed -- Refactored Social Note settings to use core [#41153] -- Social | Unify connections management API schema [#40679] -- Social | Use feature flag for share status data [#41218] +- Refactored Social Note settings to use core. [#41153] +- Unify connections management API schema. [#40679] +- Use feature flag for share status data. [#41218] ### Fixed -- Social: Fix profile links for LinkedIn connections [#40873] -- Social | Fix editor invalid parameters error for old Jetpack versions. [#41199] -- Social | Fix feature check for social connections list initial state [#40679] +- Fix profile links for LinkedIn connections. [#40873] +- Fix editor invalid parameters error for old Jetpack versions. [#41199] +- Fix feature check for social connections list initial state. [#40679] ## [0.57.4] - 2025-01-20 ### Changed @@ -828,6 +847,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated package dependencies. - Update package.json metadata. +[0.59.0]: https://github.com/Automattic/jetpack-publicize/compare/v0.58.0...v0.59.0 [0.58.0]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.4...v0.58.0 [0.57.4]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.3...v0.57.4 [0.57.3]: https://github.com/Automattic/jetpack-publicize/compare/v0.57.2...v0.57.3 diff --git a/projects/packages/publicize/changelog/add-remove_menu-to-admin_menu-class b/projects/packages/publicize/changelog/add-remove_menu-to-admin_menu-class deleted file mode 100644 index e5473dc498bd4..0000000000000 --- a/projects/packages/publicize/changelog/add-remove_menu-to-admin_menu-class +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Use Admin_Menu::remove_menu to handle old Social menu item diff --git a/projects/packages/publicize/changelog/fix-phan-PhanParamTooMany b/projects/packages/publicize/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index c1192e2ed90c3..0000000000000 --- a/projects/packages/publicize/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Phan: Update baselines. diff --git a/projects/packages/publicize/changelog/fix-social-api-calls-on-wpcom-for-options b/projects/packages/publicize/changelog/fix-social-api-calls-on-wpcom-for-options deleted file mode 100644 index b5e293e00245d..0000000000000 --- a/projects/packages/publicize/changelog/fix-social-api-calls-on-wpcom-for-options +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Social | Fix the API calls on WPCOM for options diff --git a/projects/packages/publicize/changelog/fix-social-connections-caching b/projects/packages/publicize/changelog/fix-social-connections-caching deleted file mode 100644 index dd6ebfc4551f2..0000000000000 --- a/projects/packages/publicize/changelog/fix-social-connections-caching +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Social | Fix connections cache when WPCOM API call fails diff --git a/projects/packages/publicize/changelog/renovate-webpack-cli-6.x b/projects/packages/publicize/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/publicize/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/publicize/changelog/social-enable-social-post-ui-4-wpcom b/projects/packages/publicize/changelog/social-enable-social-post-ui-4-wpcom deleted file mode 100644 index b7c444de6c1cb..0000000000000 --- a/projects/packages/publicize/changelog/social-enable-social-post-ui-4-wpcom +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Social | Enable Social Post UI for WPCOM diff --git a/projects/packages/publicize/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/publicize/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/publicize/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/publicize/changelog/update-social-move-admin-page-code-to-package b/projects/packages/publicize/changelog/update-social-move-admin-page-code-to-package deleted file mode 100644 index 51ecb14ab3cec..0000000000000 --- a/projects/packages/publicize/changelog/update-social-move-admin-page-code-to-package +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Moved Social admin page code and assets logic to publicize package diff --git a/projects/packages/publicize/changelog/update-social-move-initial-state-from-social-to-publicize b/projects/packages/publicize/changelog/update-social-move-initial-state-from-social-to-publicize deleted file mode 100644 index cd2e87e76c6f9..0000000000000 --- a/projects/packages/publicize/changelog/update-social-move-initial-state-from-social-to-publicize +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Move initial state from Social plugin to publicize package diff --git a/projects/packages/publicize/changelog/update-social-move-settings-endpoint-to-publicize b/projects/packages/publicize/changelog/update-social-move-settings-endpoint-to-publicize deleted file mode 100644 index 623ea4367e02d..0000000000000 --- a/projects/packages/publicize/changelog/update-social-move-settings-endpoint-to-publicize +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Social | Move settings endpoint to publicize package diff --git a/projects/packages/publicize/changelog/update-social-store-to-replace-get-site-selector b/projects/packages/publicize/changelog/update-social-store-to-replace-get-site-selector deleted file mode 100644 index d38f06ec9d8dd..0000000000000 --- a/projects/packages/publicize/changelog/update-social-store-to-replace-get-site-selector +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix the default value for UTM settings schema diff --git a/projects/packages/publicize/changelog/update-social-to-use-unified-settings-endpoint b/projects/packages/publicize/changelog/update-social-to-use-unified-settings-endpoint deleted file mode 100644 index af28eeceb5f49..0000000000000 --- a/projects/packages/publicize/changelog/update-social-to-use-unified-settings-endpoint +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Update the settings endppoint to use existing endpoints diff --git a/projects/packages/publicize/changelog/update-social-use-feature-flag-for-social-admin-page b/projects/packages/publicize/changelog/update-social-use-feature-flag-for-social-admin-page deleted file mode 100644 index 6ca005c3c552d..0000000000000 --- a/projects/packages/publicize/changelog/update-social-use-feature-flag-for-social-admin-page +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Social | Use feature flag for social admin page diff --git a/projects/packages/publicize/composer.json b/projects/packages/publicize/composer.json index 90dd4ee32fdbb..dfdb30ca3a12e 100644 --- a/projects/packages/publicize/composer.json +++ b/projects/packages/publicize/composer.json @@ -71,7 +71,7 @@ "link-template": "https://github.com/Automattic/jetpack-publicize/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.58.x-dev" + "dev-trunk": "0.59.x-dev" } }, "config": { diff --git a/projects/packages/publicize/package.json b/projects/packages/publicize/package.json index 7eca2206215ba..5d8b8cdc35aa3 100644 --- a/projects/packages/publicize/package.json +++ b/projects/packages/publicize/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-publicize", - "version": "0.58.0", + "version": "0.59.0", "description": "Publicize makes it easy to share your site’s posts on several social media networks automatically when you publish a new post.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/publicize/#readme", "bugs": { diff --git a/projects/packages/search/CHANGELOG.md b/projects/packages/search/CHANGELOG.md index 0f19be500029d..b97cf6ef00c45 100644 --- a/projects/packages/search/CHANGELOG.md +++ b/projects/packages/search/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.47.8] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + ## [0.47.7] - 2025-01-27 ### Changed - Internal updates. @@ -1116,6 +1120,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated package dependencies. - Update PHPUnit configs to include just what needs coverage rather than include everything then try to exclude stuff that doesn't. +[0.47.8]: https://github.com/Automattic/jetpack-search/compare/v0.47.7...v0.47.8 [0.47.7]: https://github.com/Automattic/jetpack-search/compare/v0.47.6...v0.47.7 [0.47.6]: https://github.com/Automattic/jetpack-search/compare/v0.47.5...v0.47.6 [0.47.5]: https://github.com/Automattic/jetpack-search/compare/v0.47.4...v0.47.5 diff --git a/projects/packages/search/changelog/renovate-webpack-cli-6.x b/projects/packages/search/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/search/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/search/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/search/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/search/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/search/src/class-package.php b/projects/packages/search/src/class-package.php index e1e73f8497b92..e5eb9926a1f93 100644 --- a/projects/packages/search/src/class-package.php +++ b/projects/packages/search/src/class-package.php @@ -11,7 +11,7 @@ * Search package general information */ class Package { - const VERSION = '0.47.7'; + const VERSION = '0.47.8'; const SLUG = 'search'; /** diff --git a/projects/packages/stats-admin/CHANGELOG.md b/projects/packages/stats-admin/CHANGELOG.md index bc1b6fc32e942..40ae16d1c8fa8 100644 --- a/projects/packages/stats-admin/CHANGELOG.md +++ b/projects/packages/stats-admin/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.24.1 - 2025-02-03 +### Changed +- Phan: Update baselines. [#41263] + ## 0.24.0 - 2025-01-06 ### Added - Stats: Add API support for location stats. [#40852] @@ -14,8 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated dependencies. [#40286] ### Fixed -- Stast: removed cache for purchases and usage endpoints [#40266] -- Walk around an issue where custom code removes `ver` param [#40322] +- Catch an issue when custom code removes `ver` param. [#40322] +- Stats: Remove cache for purchases and usage endpoints. [#40266] ## 0.23.0 - 2024-11-18 ### Removed diff --git a/projects/packages/stats-admin/changelog/fix-phan-PhanParamTooMany b/projects/packages/stats-admin/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index c1192e2ed90c3..0000000000000 --- a/projects/packages/stats-admin/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Phan: Update baselines. diff --git a/projects/packages/stats-admin/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/stats-admin/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/stats-admin/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/stats-admin/package.json b/projects/packages/stats-admin/package.json index c18eb6dca0ffc..f70458c602206 100644 --- a/projects/packages/stats-admin/package.json +++ b/projects/packages/stats-admin/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-stats-admin", - "version": "0.24.0", + "version": "0.24.1", "description": "Stats Dashboard", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/stats-admin/#readme", "bugs": { diff --git a/projects/packages/stats-admin/src/class-main.php b/projects/packages/stats-admin/src/class-main.php index 6e9cd2aec3a17..6db18ffee67c7 100644 --- a/projects/packages/stats-admin/src/class-main.php +++ b/projects/packages/stats-admin/src/class-main.php @@ -22,7 +22,7 @@ class Main { /** * Stats version. */ - const VERSION = '0.24.0'; + const VERSION = '0.24.1'; /** * Singleton Main instance. diff --git a/projects/packages/stats/CHANGELOG.md b/projects/packages/stats/CHANGELOG.md index dbca2094b51fa..7ff6cdf90f141 100644 --- a/projects/packages/stats/CHANGELOG.md +++ b/projects/packages/stats/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.15.1] - 2025-02-03 +### Fixed +- Code: Remove extra params on function calls. [#41263] + ## [0.15.0] - 2025-01-06 ### Added - Stats: Add API support for location stats. [#40852] @@ -206,6 +210,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixing static method which was called without self reference. [#26640] +[0.15.1]: https://github.com/Automattic/jetpack-stats/compare/v0.15.0...v0.15.1 [0.15.0]: https://github.com/Automattic/jetpack-stats/compare/v0.14.1...v0.15.0 [0.14.1]: https://github.com/Automattic/jetpack-stats/compare/v0.14.0...v0.14.1 [0.14.0]: https://github.com/Automattic/jetpack-stats/compare/v0.13.5...v0.14.0 diff --git a/projects/packages/stats/changelog/fix-phan-PhanParamTooMany b/projects/packages/stats/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/stats/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/stats/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/stats/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/stats/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/stats/src/class-package-version.php b/projects/packages/stats/src/class-package-version.php index caf55ab56bc54..0354d9a2edf14 100644 --- a/projects/packages/stats/src/class-package-version.php +++ b/projects/packages/stats/src/class-package-version.php @@ -12,7 +12,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '0.15.0'; + const PACKAGE_VERSION = '0.15.1'; const PACKAGE_SLUG = 'stats'; diff --git a/projects/packages/status/CHANGELOG.md b/projects/packages/status/CHANGELOG.md index 404f125d9192e..f147e5bc3afde 100644 --- a/projects/packages/status/CHANGELOG.md +++ b/projects/packages/status/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [5.0.3] - 2025-02-03 +### Fixed +- Code: Remove extra params on function calls. [#41263] + ## [5.0.2] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -417,6 +421,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Packages: Introduce a status package +[5.0.3]: https://github.com/Automattic/jetpack-status/compare/v5.0.2...v5.0.3 [5.0.2]: https://github.com/Automattic/jetpack-status/compare/v5.0.1...v5.0.2 [5.0.1]: https://github.com/Automattic/jetpack-status/compare/v5.0.0...v5.0.1 [5.0.0]: https://github.com/Automattic/jetpack-status/compare/v4.0.3...v5.0.0 diff --git a/projects/packages/status/changelog/fix-phan-PhanParamTooMany b/projects/packages/status/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/status/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/sync/CHANGELOG.md b/projects/packages/sync/CHANGELOG.md index de09b5ef2242d..de0e23a9ed350 100644 --- a/projects/packages/sync/CHANGELOG.md +++ b/projects/packages/sync/CHANGELOG.md @@ -5,9 +5,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.6.0] - 2025-02-03 +### Added +- Sync: Full Sync comments now send dynamic chunks if chunk size default is too big. [#41350] + +### Changed +- Jetpack Sync: Checksum performance optimizations for meta sync module. [#41390] + +### Fixed +- Code: Remove extra params on function calls. [#41263] + ## [4.5.0] - 2025-01-23 ### Changed -- Sync: Full sync doesn't send actions for posts and comments with no items [#41183] +- Sync: Full sync doesn't send actions for posts and comments with no items. [#41183] ## [4.4.0] - 2025-01-20 ### Added @@ -1378,6 +1388,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Packages: Move sync to a classmapped package +[4.6.0]: https://github.com/Automattic/jetpack-sync/compare/v4.5.0...v4.6.0 [4.5.0]: https://github.com/Automattic/jetpack-sync/compare/v4.4.0...v4.5.0 [4.4.0]: https://github.com/Automattic/jetpack-sync/compare/v4.3.0...v4.4.0 [4.3.0]: https://github.com/Automattic/jetpack-sync/compare/v4.2.0...v4.3.0 diff --git a/projects/packages/sync/changelog/fix-phan-PhanParamTooMany b/projects/packages/sync/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/sync/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/sync/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/sync/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/sync/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/sync/changelog/update-full-sync-comments-dynamically b/projects/packages/sync/changelog/update-full-sync-comments-dynamically deleted file mode 100644 index fbf9ff7dd5653..0000000000000 --- a/projects/packages/sync/changelog/update-full-sync-comments-dynamically +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Sync: Full Sync comments now send dynamic chunks if chunk size default is too big diff --git a/projects/packages/sync/changelog/update-full-sync-comments-return-expected-structure-to-avoid-ending-early b/projects/packages/sync/changelog/update-full-sync-comments-return-expected-structure-to-avoid-ending-early deleted file mode 100644 index d95a7ef42d8cf..0000000000000 --- a/projects/packages/sync/changelog/update-full-sync-comments-return-expected-structure-to-avoid-ending-early +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - - diff --git a/projects/packages/sync/changelog/update-sync-meta-module b/projects/packages/sync/changelog/update-sync-meta-module deleted file mode 100644 index 4087b570d4ba1..0000000000000 --- a/projects/packages/sync/changelog/update-sync-meta-module +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Jetpack Sync: Checksum performance optimizations for Meta Sync Module diff --git a/projects/packages/sync/composer.json b/projects/packages/sync/composer.json index fde53283806ff..098fccc44b033 100644 --- a/projects/packages/sync/composer.json +++ b/projects/packages/sync/composer.json @@ -60,7 +60,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/packages/sync/src/class-package-version.php b/projects/packages/sync/src/class-package-version.php index 724e5291c27a4..4f97ac21a27f5 100644 --- a/projects/packages/sync/src/class-package-version.php +++ b/projects/packages/sync/src/class-package-version.php @@ -12,7 +12,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '4.5.0'; + const PACKAGE_VERSION = '4.6.0'; const PACKAGE_SLUG = 'sync'; diff --git a/projects/packages/test-environment/CHANGELOG.md b/projects/packages/test-environment/CHANGELOG.md index 721294abd00ad..332b807c7831d 100644 --- a/projects/packages/test-environment/CHANGELOG.md +++ b/projects/packages/test-environment/CHANGELOG.md @@ -5,3 +5,6 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.1.0 - 2025-02-03 +### Changed +- Internal updates. diff --git a/projects/packages/test-environment/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/test-environment/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/test-environment/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/test-environment/src/class-test-environment.php b/projects/packages/test-environment/src/class-test-environment.php index 1de31f4db07dd..632508eb71a9a 100644 --- a/projects/packages/test-environment/src/class-test-environment.php +++ b/projects/packages/test-environment/src/class-test-environment.php @@ -13,7 +13,7 @@ */ class Test_Environment { - const PACKAGE_VERSION = '0.1.0-alpha'; + const PACKAGE_VERSION = '0.1.0'; /** * Initialize the shared WordPress test environment. diff --git a/projects/packages/videopress/CHANGELOG.md b/projects/packages/videopress/CHANGELOG.md index edf6ca53cc250..698b1f925eec9 100644 --- a/projects/packages/videopress/CHANGELOG.md +++ b/projects/packages/videopress/CHANGELOG.md @@ -5,9 +5,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.25.9] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + +### Fixed +- Code: Remove extra params on function calls. [#41263] + ## [0.25.8] - 2025-01-27 ### Fixed -- VideoPress: Fix issue with VideoPress block with 0 height and width [#41319] +- VideoPress: Fix issue with VideoPress block with 0 height and width. [#41319] ## [0.25.7] - 2025-01-20 ### Changed @@ -1521,6 +1528,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Created empty package [#24952] +[0.25.9]: https://github.com/Automattic/jetpack-videopress/compare/v0.25.8...v0.25.9 [0.25.8]: https://github.com/Automattic/jetpack-videopress/compare/v0.25.7...v0.25.8 [0.25.7]: https://github.com/Automattic/jetpack-videopress/compare/v0.25.6...v0.25.7 [0.25.6]: https://github.com/Automattic/jetpack-videopress/compare/v0.25.5...v0.25.6 diff --git a/projects/packages/videopress/changelog/fix-phan-PhanParamTooMany b/projects/packages/videopress/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/videopress/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/videopress/changelog/renovate-webpack-cli-6.x b/projects/packages/videopress/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/videopress/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/videopress/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/videopress/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/videopress/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/videopress/package.json b/projects/packages/videopress/package.json index 66b35a3981fc4..3c40e35c05936 100644 --- a/projects/packages/videopress/package.json +++ b/projects/packages/videopress/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-videopress", - "version": "0.25.8", + "version": "0.25.9", "description": "VideoPress package", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/videopress/#readme", "bugs": { diff --git a/projects/packages/videopress/src/class-package-version.php b/projects/packages/videopress/src/class-package-version.php index 92d353f8e1802..0964cc3ec21af 100644 --- a/projects/packages/videopress/src/class-package-version.php +++ b/projects/packages/videopress/src/class-package-version.php @@ -11,7 +11,7 @@ * The Package_Version class. */ class Package_Version { - const PACKAGE_VERSION = '0.25.8'; + const PACKAGE_VERSION = '0.25.9'; const PACKAGE_SLUG = 'videopress'; diff --git a/projects/packages/waf/CHANGELOG.md b/projects/packages/waf/CHANGELOG.md index 14f44ab4477a5..f3c5dfd835059 100644 --- a/projects/packages/waf/CHANGELOG.md +++ b/projects/packages/waf/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.23.3] - 2025-02-03 +### Fixed +- Code: Remove extra params on function calls. [#41263] + ## [0.23.2] - 2025-01-20 ### Changed - Code: Use function-style exit() and die() with a default status code of 0. [#41167] @@ -414,6 +418,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Core: do not ship .phpcs.dir.xml in production builds. +[0.23.3]: https://github.com/Automattic/jetpack-waf/compare/v0.23.2...v0.23.3 [0.23.2]: https://github.com/Automattic/jetpack-waf/compare/v0.23.1...v0.23.2 [0.23.1]: https://github.com/Automattic/jetpack-waf/compare/v0.23.0...v0.23.1 [0.23.0]: https://github.com/Automattic/jetpack-waf/compare/v0.22.3...v0.23.0 diff --git a/projects/packages/waf/changelog/fix-phan-PhanParamTooMany b/projects/packages/waf/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index bceb16a46d5fe..0000000000000 --- a/projects/packages/waf/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Code: Remove extra params on function calls. diff --git a/projects/packages/waf/changelog/try-one-wordpress-to-rule-them-all b/projects/packages/waf/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index b12d1e1b8b2bb..0000000000000 --- a/projects/packages/waf/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: added -Comment: Update development platform only - - diff --git a/projects/packages/wordads/CHANGELOG.md b/projects/packages/wordads/CHANGELOG.md index 72b43cb737e5b..25b030eef443f 100644 --- a/projects/packages/wordads/CHANGELOG.md +++ b/projects/packages/wordads/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.7] - 2025-02-03 +### Changed +- Updated package dependencies. [#41286] + ## [0.4.6] - 2025-01-20 ### Changed - Updated package dependencies. [#41099] @@ -462,6 +466,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - PHPCS: Fix `WordPress.Security.ValidatedSanitizedInput` - Updated package dependencies. +[0.4.7]: https://github.com/Automattic/jetpack-wordads/compare/v0.4.6...v0.4.7 [0.4.6]: https://github.com/Automattic/jetpack-wordads/compare/v0.4.5...v0.4.6 [0.4.5]: https://github.com/Automattic/jetpack-wordads/compare/v0.4.4...v0.4.5 [0.4.4]: https://github.com/Automattic/jetpack-wordads/compare/v0.4.3...v0.4.4 diff --git a/projects/packages/wordads/changelog/renovate-webpack-cli-6.x b/projects/packages/wordads/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/packages/wordads/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/packages/wordads/package.json b/projects/packages/wordads/package.json index b4438478319b0..333c577f8e186 100644 --- a/projects/packages/wordads/package.json +++ b/projects/packages/wordads/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-wordads", - "version": "0.4.6", + "version": "0.4.7", "description": "Earn income by allowing Jetpack to display high quality ads.", "main": "main.js", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/wordads/#readme", diff --git a/projects/packages/wordads/src/class-package.php b/projects/packages/wordads/src/class-package.php index 4486c0f8a40ef..9dfa9d56a22bb 100644 --- a/projects/packages/wordads/src/class-package.php +++ b/projects/packages/wordads/src/class-package.php @@ -11,7 +11,7 @@ * WordAds package general information */ class Package { - const VERSION = '0.4.6'; + const VERSION = '0.4.7'; const SLUG = 'wordads'; /** diff --git a/projects/packages/blocks/changelog/add-performance-improvements b/projects/plugins/automattic-for-agencies-client/changelog/prerelease#3 similarity index 52% rename from projects/packages/blocks/changelog/add-performance-improvements rename to projects/plugins/automattic-for-agencies-client/changelog/prerelease#3 index ecba0160a0b15..9aa70e3ec1f75 100644 --- a/projects/packages/blocks/changelog/add-performance-improvements +++ b/projects/plugins/automattic-for-agencies-client/changelog/prerelease#3 @@ -1,5 +1,5 @@ Significance: patch Type: changed -Comment: No functional changes. +Comment: Updated composer.lock. diff --git a/projects/plugins/automattic-for-agencies-client/composer.lock b/projects/plugins/automattic-for-agencies-client/composer.lock index 2154962eedae2..2d6dd2465baec 100644 --- a/projects/plugins/automattic-for-agencies-client/composer.lock +++ b/projects/plugins/automattic-for-agencies-client/composer.lock @@ -887,7 +887,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -920,7 +920,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/js-packages/components/changelog/renovate-webpack-cli-6.x b/projects/plugins/backup/changelog/prerelease#3 similarity index 51% rename from projects/js-packages/components/changelog/renovate-webpack-cli-6.x rename to projects/plugins/backup/changelog/prerelease#3 index c47cb18e82997..9aa70e3ec1f75 100644 --- a/projects/js-packages/components/changelog/renovate-webpack-cli-6.x +++ b/projects/plugins/backup/changelog/prerelease#3 @@ -1,4 +1,5 @@ Significance: patch Type: changed +Comment: Updated composer.lock. + -Updated package dependencies. diff --git a/projects/plugins/backup/composer.lock b/projects/plugins/backup/composer.lock index 9500dd5df1743..e0ed7c284acc3 100644 --- a/projects/plugins/backup/composer.lock +++ b/projects/plugins/backup/composer.lock @@ -1737,7 +1737,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1770,7 +1770,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/js-packages/remove-asset-webpack-plugin/changelog/renovate-webpack-cli-6.x b/projects/plugins/boost/changelog/prerelease similarity index 51% rename from projects/js-packages/remove-asset-webpack-plugin/changelog/renovate-webpack-cli-6.x rename to projects/plugins/boost/changelog/prerelease index c47cb18e82997..9aa70e3ec1f75 100644 --- a/projects/js-packages/remove-asset-webpack-plugin/changelog/renovate-webpack-cli-6.x +++ b/projects/plugins/boost/changelog/prerelease @@ -1,4 +1,5 @@ Significance: patch Type: changed +Comment: Updated composer.lock. + -Updated package dependencies. diff --git a/projects/plugins/boost/composer.lock b/projects/plugins/boost/composer.lock index 974a3ca7adcac..414e7f4bf1df7 100644 --- a/projects/plugins/boost/composer.lock +++ b/projects/plugins/boost/composer.lock @@ -1791,7 +1791,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1824,7 +1824,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/jetpack/CHANGELOG.md b/projects/plugins/jetpack/CHANGELOG.md index 00c73bb3bf771..79225670449c8 100644 --- a/projects/plugins/jetpack/CHANGELOG.md +++ b/projects/plugins/jetpack/CHANGELOG.md @@ -2,6 +2,41 @@ ### This is a list detailing changes for all Jetpack releases. +## 14.3-beta - 2025-02-03 +### Enhancements +- Blocks: Improve performance. [#39734] +- Social: Post character limits are now dynamic based on selected connections. [#41429] +- Social: Enable Social post UI for WordPress.com sites. [#41219] + +### Improved compatibility +- Open Graph Meta Tags: Do not display Jetpack's tags when the SEOPress plugin is active. [#41331] +- Social: Remove "Your post" section from previews in favor of newer Social Post UI. [#41329] + +### Bug fixes +- Copy Post: Ensure Copy option is still available on all CPTs after quick edit in post list. [#41339] +- Forms: Fix datepicker appearance on dark themes. [#41342] +- Forms: Fix field spacing and widths. [#41415] +- Forms: Fix permanent deletion of form reponses via quicklinks. [#41321] +- Forms: Hide empty radio fields. [#41379] +- Forms: Keep content as-is when switching Feedback status between spam and publish. [#41359] +- Forms: Prevent error in block placeholder when the Forms module is disabled. [#41382] + +### Other changes +- Code: Remove extra params on function calls. [#41263] +- Forms: Rename contact form module to "Forms". [#41384] +- Post List: Add a Copy Link Quick Action. [#41305] +- SEO Assistant: Adjust step flow in wizard. [#41268] +- SEO Assistant: Implement completion step and review copy edits. [#41469] +- SEO Assistant: Improve assistant flow by letting steps depend on previous steps. [#41341] +- SEO Assistant: Tweak design CSS. [#41506] [#41473] +- Subscriptions block: Fix button width when not on a new line. [#41156] +- Sync: Full Sync comments now send dynamic chunks if chunk size default is too big. [#41350] +- Testing: Add manual testing instructions. [#41364] +- Theme compat: Wrap relevant functions in a `function_exists` check to prevent collisions with Classic Theme Helper package. [#41394] +- Updated package dependencies. [#41286] +- Update text copies based on whether the site is public. [#41387] +- Update settings endpoint to return the updated toggle state in the success response. [#41461] + ## 14.3-a.5 - 2025-01-27 ### Enhancements - Forms: Add Checkbox and Consent field enter action to create a new block. [#41297] diff --git a/projects/plugins/jetpack/changelog/add-copy-post-link-action-in-posts-list b/projects/plugins/jetpack/changelog/add-copy-post-link-action-in-posts-list deleted file mode 100644 index b9c07fbe20d5f..0000000000000 --- a/projects/plugins/jetpack/changelog/add-copy-post-link-action-in-posts-list +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Post List: Add a Copy Link Quick Action diff --git a/projects/plugins/jetpack/changelog/add-performance-improvements b/projects/plugins/jetpack/changelog/add-performance-improvements deleted file mode 100644 index 8b9be7db08d8d..0000000000000 --- a/projects/plugins/jetpack/changelog/add-performance-improvements +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: enhancement - -Blocks: improved performance. diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-fine-tune-css b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-fine-tune-css deleted file mode 100644 index b1998cfbd7999..0000000000000 --- a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-fine-tune-css +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Jetpack SEO assistant: fine tune css to address designs diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-steps-codependency b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-steps-codependency deleted file mode 100644 index 1bd07b085d511..0000000000000 --- a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-steps-codependency +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Jetpack SEO Assistant: improve assistant flow by letting steps depend on previous steps diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-wizard-mechanics b/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-wizard-mechanics deleted file mode 100644 index 031857263b525..0000000000000 --- a/projects/plugins/jetpack/changelog/change-jetpack-seo-assistant-wizard-mechanics +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Jetpack SEO: assistant wizard changes to achieve desired step flow diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-copy-edits b/projects/plugins/jetpack/changelog/change-jetpack-seo-copy-edits deleted file mode 100644 index 17a082b248b68..0000000000000 --- a/projects/plugins/jetpack/changelog/change-jetpack-seo-copy-edits +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Jetpack SEO Assistant: implement completion step and review copy edits diff --git a/projects/plugins/jetpack/changelog/fix-31063 b/projects/plugins/jetpack/changelog/fix-31063 deleted file mode 100644 index 2a75752d26abf..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-31063 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Bug fix for Subscriptions block button diff --git a/projects/plugins/jetpack/changelog/fix-contact-form-placeholder b/projects/plugins/jetpack/changelog/fix-contact-form-placeholder deleted file mode 100644 index dfa8d6008112a..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-contact-form-placeholder +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Forms: Fix the block placeholder throwing an error when the Forms module is disabled. diff --git a/projects/plugins/jetpack/changelog/fix-editor-select-field b/projects/plugins/jetpack/changelog/fix-editor-select-field deleted file mode 100644 index 722f203b9183d..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-editor-select-field +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Forms: Fixed datepicker appearance on dark themes diff --git a/projects/plugins/jetpack/changelog/fix-endcoding-when-marking-as-spam b/projects/plugins/jetpack/changelog/fix-endcoding-when-marking-as-spam deleted file mode 100644 index e01afdc1002e1..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-endcoding-when-marking-as-spam +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Forms: keep content as is when going from spam to publish and from publish to spam feedback. diff --git a/projects/plugins/jetpack/changelog/fix-form-field-widths b/projects/plugins/jetpack/changelog/fix-form-field-widths deleted file mode 100644 index 58a1edb2990e0..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-form-field-widths +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Forms: Fix field spacing and widths. diff --git a/projects/plugins/jetpack/changelog/fix-form-radio-with-no-options b/projects/plugins/jetpack/changelog/fix-form-radio-with-no-options deleted file mode 100644 index 8ba00112bfb97..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-form-radio-with-no-options +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Forms: Hide empty radio fields. diff --git a/projects/plugins/jetpack/changelog/fix-html-block-rendering-wrap-block b/projects/plugins/jetpack/changelog/fix-html-block-rendering-wrap-block deleted file mode 100644 index 61a6a2dba8752..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-html-block-rendering-wrap-block +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: bugfix -Comment: this is a new block - - diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-membership-products-resolvers-coverage-thing b/projects/plugins/jetpack/changelog/fix-jetpack-membership-products-resolvers-coverage-thing deleted file mode 100644 index fda3664c90a2d..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-jetpack-membership-products-resolvers-coverage-thing +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Move `executionLock.release()` into `finally`. - - diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-order-of-block-calls b/projects/plugins/jetpack/changelog/fix-jetpack-order-of-block-calls deleted file mode 100644 index 35dde6e6c4de6..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-jetpack-order-of-block-calls +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Fix order of `Jetpack_Gutenberg` function calls from #39734. - - diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-styles b/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-styles deleted file mode 100644 index ec36034825f92..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-styles +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Jetpack SEO assistant: address design css diff --git a/projects/plugins/jetpack/changelog/fix-newsletter-editor-copies-for-coming-soon b/projects/plugins/jetpack/changelog/fix-newsletter-editor-copies-for-coming-soon deleted file mode 100644 index f8babc926f74b..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-newsletter-editor-copies-for-coming-soon +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Updated text copies based on whether the site is public. diff --git a/projects/plugins/jetpack/changelog/fix-permenatly-delete-form-responses b/projects/plugins/jetpack/changelog/fix-permenatly-delete-form-responses deleted file mode 100644 index 8027a3353ed14..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-permenatly-delete-form-responses +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Forms: Fix permently deleting form reponses via the quicklinks diff --git a/projects/plugins/jetpack/changelog/fix-phan-PhanParamTooMany b/projects/plugins/jetpack/changelog/fix-phan-PhanParamTooMany deleted file mode 100644 index b7c5b86e8e3b1..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-phan-PhanParamTooMany +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Code: Remove extra params on function calls. diff --git a/projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt b/projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt deleted file mode 100644 index 25fc3474dd4c5..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-quickedit-copy-cpt +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: bugfix - -Copy Post: Ensure Copy still available after quick edit in post list on all CPTs diff --git a/projects/plugins/jetpack/changelog/fix-social-use-proper-char-limits b/projects/plugins/jetpack/changelog/fix-social-use-proper-char-limits deleted file mode 100644 index 2417294687e02..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-social-use-proper-char-limits +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: enhancement - -Social post character limits are now dynamic based on selected connections diff --git a/projects/plugins/jetpack/changelog/fix-spacing-button-export-form b/projects/plugins/jetpack/changelog/fix-spacing-button-export-form deleted file mode 100644 index aebdd75c5d1a0..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-spacing-button-export-form +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Minor bug fix - - diff --git a/projects/plugins/jetpack/changelog/renovate-webpack-cli-6.x b/projects/plugins/jetpack/changelog/renovate-webpack-cli-6.x deleted file mode 100644 index 1eaea6a769e84..0000000000000 --- a/projects/plugins/jetpack/changelog/renovate-webpack-cli-6.x +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Updated package dependencies. diff --git a/projects/plugins/jetpack/changelog/social-enable-social-post-ui-4-wpcom b/projects/plugins/jetpack/changelog/social-enable-social-post-ui-4-wpcom deleted file mode 100644 index d6d48b7648acb..0000000000000 --- a/projects/plugins/jetpack/changelog/social-enable-social-post-ui-4-wpcom +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: enhancement - -Social | Enable Social post UI for WPCOM sites diff --git a/projects/plugins/jetpack/changelog/try-one-wordpress-to-rule-them-all b/projects/plugins/jetpack/changelog/try-one-wordpress-to-rule-them-all deleted file mode 100644 index 27d28348f5734..0000000000000 --- a/projects/plugins/jetpack/changelog/try-one-wordpress-to-rule-them-all +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Updating development env only - - diff --git a/projects/plugins/jetpack/changelog/update-full-sync-comments-dynamically b/projects/plugins/jetpack/changelog/update-full-sync-comments-dynamically deleted file mode 100644 index 4dee8fc655ae4..0000000000000 --- a/projects/plugins/jetpack/changelog/update-full-sync-comments-dynamically +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Sync: Full Sync comments now send dynamic chunks if chunk size default is too big diff --git a/projects/plugins/jetpack/changelog/update-jetpack-to-test-for-14.3 b/projects/plugins/jetpack/changelog/update-jetpack-to-test-for-14.3 deleted file mode 100644 index f7388e221af2a..0000000000000 --- a/projects/plugins/jetpack/changelog/update-jetpack-to-test-for-14.3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Testing: Add manual testing instructions. diff --git a/projects/plugins/jetpack/changelog/update-move-relevant-theme-compat-to-classic-theme-helper b/projects/plugins/jetpack/changelog/update-move-relevant-theme-compat-to-classic-theme-helper deleted file mode 100644 index f513af0674c3e..0000000000000 --- a/projects/plugins/jetpack/changelog/update-move-relevant-theme-compat-to-classic-theme-helper +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Thee compat: Wrapping relevant functions in a function_exists check, as functionality is duplicated in the Classic Theme Helper package diff --git a/projects/plugins/jetpack/changelog/update-og-tags-conflicting-plugins b/projects/plugins/jetpack/changelog/update-og-tags-conflicting-plugins deleted file mode 100644 index 7a3625d46be4c..0000000000000 --- a/projects/plugins/jetpack/changelog/update-og-tags-conflicting-plugins +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: compat - -Open Graph Meta Tags: do not display Jetpack's tags when the SEOPress plugin is active. diff --git a/projects/plugins/jetpack/changelog/update-rename-contact-form-module b/projects/plugins/jetpack/changelog/update-rename-contact-form-module deleted file mode 100644 index f88a98f0c1cdb..0000000000000 --- a/projects/plugins/jetpack/changelog/update-rename-contact-form-module +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: other - -Forms: rename contact form module to just 'forms' diff --git a/projects/plugins/jetpack/changelog/update-social-move-admin-page-code-to-package b/projects/plugins/jetpack/changelog/update-social-move-admin-page-code-to-package deleted file mode 100644 index 234b1440747ed..0000000000000 --- a/projects/plugins/jetpack/changelog/update-social-move-admin-page-code-to-package +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Updated composer lock file - - diff --git a/projects/plugins/jetpack/changelog/update-social-remove-your-post-from-previews b/projects/plugins/jetpack/changelog/update-social-remove-your-post-from-previews deleted file mode 100644 index c42d41c20f60f..0000000000000 --- a/projects/plugins/jetpack/changelog/update-social-remove-your-post-from-previews +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: compat - -Social Previews | Remove "Your post" section in favour of Social Post UI diff --git a/projects/plugins/jetpack/changelog/update-social-to-use-unified-settings-endpoint b/projects/plugins/jetpack/changelog/update-social-to-use-unified-settings-endpoint deleted file mode 100644 index c4c37c22d68b0..0000000000000 --- a/projects/plugins/jetpack/changelog/update-social-to-use-unified-settings-endpoint +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Update the settings endpoint to return the updated toggle state in the success response diff --git a/projects/plugins/jetpack/changelog/update-sync-meta-module b/projects/plugins/jetpack/changelog/update-sync-meta-module deleted file mode 100644 index 916cb15ef262a..0000000000000 --- a/projects/plugins/jetpack/changelog/update-sync-meta-module +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: other -Comment: Updated Sync related unit tests - - diff --git a/projects/plugins/jetpack/class.jetpack-gutenberg.php b/projects/plugins/jetpack/class.jetpack-gutenberg.php index 966c81918afe6..8ec3249de24b6 100644 --- a/projects/plugins/jetpack/class.jetpack-gutenberg.php +++ b/projects/plugins/jetpack/class.jetpack-gutenberg.php @@ -256,21 +256,21 @@ public static function get_blocks_directory() { /** * Checks for a given .json file in the blocks folder. * - * @deprecated $$next-version$$ + * @deprecated 14.3 * * @param string $preset The name of the .json file to look for. * * @return bool True if the file is found. */ public static function preset_exists( $preset ) { - _deprecated_function( __METHOD__, '$$next-version$$' ); + _deprecated_function( __METHOD__, '14.3' ); return file_exists( JETPACK__PLUGIN_DIR . self::get_blocks_directory() . $preset . '.json' ); } /** * Decodes JSON loaded from the preset file in the blocks folder * - * @since $$next-version$$ Deprecated argument. Only one value is ever used. + * @since 14.3 Deprecated argument. Only one value is ever used. * * @param null $deprecated No longer used. * diff --git a/projects/plugins/jetpack/composer.json b/projects/plugins/jetpack/composer.json index 46a456adaf195..74abf60051d45 100644 --- a/projects/plugins/jetpack/composer.json +++ b/projects/plugins/jetpack/composer.json @@ -106,7 +106,7 @@ "platform": { "ext-intl": "0.0.0" }, - "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3_a_5", + "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3_beta", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index ac1aa7e1244c5..1868feb7a6562 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -1203,7 +1203,7 @@ "dist": { "type": "path", "url": "../../packages/forms", - "reference": "9e1f5e24e8a9d3095984b08c3114562e82580bc2" + "reference": "1c137adb16f95a67f6671afbe6a8343bd50385e3" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1231,7 +1231,7 @@ "link-template": "https://github.com/automattic/jetpack-forms/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.35.x-dev" + "dev-trunk": "0.36.x-dev" }, "textdomain": "jetpack-forms", "version-constants": { @@ -2000,7 +2000,7 @@ "dist": { "type": "path", "url": "../../packages/post-list", - "reference": "767b62df31802e14760b2ff5351dd28412e87fd4" + "reference": "1b8f3f65ef18811d07b00e4282ca1d40bfd18852" }, "require": { "automattic/jetpack-assets": "@dev", @@ -2026,7 +2026,7 @@ "link-template": "https://github.com/automattic/jetpack-post-list/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.7.x-dev" + "dev-trunk": "0.8.x-dev" } }, "autoload": { @@ -2198,7 +2198,7 @@ "dist": { "type": "path", "url": "../../packages/publicize", - "reference": "eaf51dafed2d5ddc4df91b29410a96c7b8bd12ef" + "reference": "f6e2b695508876c65d357871dcd3924f41632d71" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -2228,7 +2228,7 @@ "link-template": "https://github.com/Automattic/jetpack-publicize/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.58.x-dev" + "dev-trunk": "0.59.x-dev" } }, "autoload": { @@ -2658,7 +2658,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -2691,7 +2691,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/jetpack/jetpack.php b/projects/plugins/jetpack/jetpack.php index 8ea34457295d0..ceabc571e27eb 100644 --- a/projects/plugins/jetpack/jetpack.php +++ b/projects/plugins/jetpack/jetpack.php @@ -4,7 +4,7 @@ * Plugin URI: https://jetpack.com * Description: Security, performance, and marketing tools made by WordPress experts. Jetpack keeps your site protected so you can focus on more important things. * Author: Automattic - * Version: 14.3-a.5 + * Version: 14.3-beta * Author URI: https://jetpack.com * License: GPL2+ * Text Domain: jetpack @@ -34,7 +34,7 @@ define( 'JETPACK__MINIMUM_WP_VERSION', '6.6' ); define( 'JETPACK__MINIMUM_PHP_VERSION', '7.2' ); -define( 'JETPACK__VERSION', '14.3-a.5' ); +define( 'JETPACK__VERSION', '14.3-beta' ); /** * Constant used to fetch the connection owner token diff --git a/projects/plugins/jetpack/readme.txt b/projects/plugins/jetpack/readme.txt index 7b698af14a10a..44b31f173ff13 100644 --- a/projects/plugins/jetpack/readme.txt +++ b/projects/plugins/jetpack/readme.txt @@ -326,15 +326,42 @@ Jetpack Backup can do a full website migration to a new host, migrate theme file == Changelog == -### 14.3-a.5 - 2025-01-27 +### 14.3-beta - 2025-02-03 #### Enhancements +- Blocks: Improve performance. - Forms: Add Checkbox and Consent field enter action to create a new block. +- Forms: Allow HTML block within forms. +- Show Infinite Scroll options in Simple Classic. +- Social: Enable Social post UI for WordPress.com sites. +- Social: Post character limits are now dynamic based on selected connections. + +#### Improved compatibility +- Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. +- Open Graph Meta Tags: Do not display Jetpack's tags when the SEOPress plugin is active. +- Social: Remove "Your post" section from previews in favor of newer Social Post UI. #### Bug fixes +- Authors widget: Fix saving of unchecked "Display all authors" checkbox in the legacy widget editor. +- Copy Post: Ensure Copy option is still available on all CPTs after quick edit in post list. +- Fix: Newsletter toggle in editor sidebar has a visually broken active state. +- Forms: Fix datepicker appearance on dark themes. +- Forms: Fix dropdown icon style. +- Forms: Fix field spacing and widths. +- Forms: Fix permanent deletion of form reponses via quicklinks. +- Forms: Hide empty radio fields. +- Forms: Keep content as-is when switching Feedback status between spam and publish. - Forms: Make the icons show up as expected in the style editor. +- Forms: Prevent error in block placeholder when the Forms module is disabled. +- Pages and Posts: Fix the layout on mobile when details are open. +- Photon: Fix double encoding image urls. +- Sharing: Fix the location of the sharing dialog so it is not always the first sharing element on the page. - Sitemaps: Ensure a valid news sitemap is present even if no posts are eligible. - Social: Fix profile links for LinkedIn connections. - Social: Fix Publicize error in the editor due to malformed connections data. +- Social: Fix wordpress.com login error when connecting Social accounts. +- Stats: Fix saving of custom roles settings. +- Testimonials: Fix shortcode-related bug. +- Tiled Gallery block: Ensure icons are visible when selecting image in editor. - VideoPress: Fix issue with VideoPress block with zero height and width. -------- diff --git a/projects/packages/assets/changelog/renovate-webpack-cli-6.x b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#5 similarity index 51% rename from projects/packages/assets/changelog/renovate-webpack-cli-6.x rename to projects/plugins/mu-wpcom-plugin/changelog/prerelease#5 index c47cb18e82997..9aa70e3ec1f75 100644 --- a/projects/packages/assets/changelog/renovate-webpack-cli-6.x +++ b/projects/plugins/mu-wpcom-plugin/changelog/prerelease#5 @@ -1,4 +1,5 @@ Significance: patch Type: changed +Comment: Updated composer.lock. + -Updated package dependencies. diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index c12ff041d16be..6f908bfd13470 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -1580,7 +1580,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1613,7 +1613,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/protect/changelog/prerelease#16 b/projects/plugins/protect/changelog/prerelease#16 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/protect/changelog/prerelease#16 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/protect/composer.lock b/projects/plugins/protect/composer.lock index cd1cff1cd428f..dd25745fe33e8 100644 --- a/projects/plugins/protect/composer.lock +++ b/projects/plugins/protect/composer.lock @@ -1653,7 +1653,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1686,7 +1686,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/search/changelog/prerelease#3 b/projects/plugins/search/changelog/prerelease#3 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/search/changelog/prerelease#3 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/search/composer.lock b/projects/plugins/search/composer.lock index e48068e900a3b..7d457f2daac19 100644 --- a/projects/plugins/search/composer.lock +++ b/projects/plugins/search/composer.lock @@ -1742,7 +1742,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1775,7 +1775,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/social/changelog/prerelease b/projects/plugins/social/changelog/prerelease new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/social/changelog/prerelease @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index 5bcabae34570d..419fb6db71007 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -1293,7 +1293,7 @@ "dist": { "type": "path", "url": "../../packages/post-list", - "reference": "767b62df31802e14760b2ff5351dd28412e87fd4" + "reference": "1b8f3f65ef18811d07b00e4282ca1d40bfd18852" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1319,7 +1319,7 @@ "link-template": "https://github.com/automattic/jetpack-post-list/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.7.x-dev" + "dev-trunk": "0.8.x-dev" } }, "autoload": { @@ -1491,7 +1491,7 @@ "dist": { "type": "path", "url": "../../packages/publicize", - "reference": "eaf51dafed2d5ddc4df91b29410a96c7b8bd12ef" + "reference": "f6e2b695508876c65d357871dcd3924f41632d71" }, "require": { "automattic/jetpack-admin-ui": "@dev", @@ -1521,7 +1521,7 @@ "link-template": "https://github.com/Automattic/jetpack-publicize/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.58.x-dev" + "dev-trunk": "0.59.x-dev" } }, "autoload": { @@ -1741,7 +1741,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1774,7 +1774,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/starter-plugin/changelog/prerelease#7 b/projects/plugins/starter-plugin/changelog/prerelease#7 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/prerelease#7 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/starter-plugin/composer.lock b/projects/plugins/starter-plugin/composer.lock index 2a773f86d3ec8..cbab8d6ba0e18 100644 --- a/projects/plugins/starter-plugin/composer.lock +++ b/projects/plugins/starter-plugin/composer.lock @@ -1599,7 +1599,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1632,7 +1632,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/videopress/changelog/prerelease#3 b/projects/plugins/videopress/changelog/prerelease#3 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/videopress/changelog/prerelease#3 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/videopress/composer.lock b/projects/plugins/videopress/composer.lock index 4925b0bdb9b2f..1b0d8c7a318a7 100644 --- a/projects/plugins/videopress/composer.lock +++ b/projects/plugins/videopress/composer.lock @@ -1599,7 +1599,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1632,7 +1632,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ diff --git a/projects/plugins/wpcomsh/changelog/prerelease#11 b/projects/plugins/wpcomsh/changelog/prerelease#11 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/prerelease#11 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index 8219f002b46eb..46a60ea02c6ad 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -1416,7 +1416,7 @@ "dist": { "type": "path", "url": "../../packages/post-list", - "reference": "767b62df31802e14760b2ff5351dd28412e87fd4" + "reference": "1b8f3f65ef18811d07b00e4282ca1d40bfd18852" }, "require": { "automattic/jetpack-assets": "@dev", @@ -1442,7 +1442,7 @@ "link-template": "https://github.com/automattic/jetpack-post-list/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "0.7.x-dev" + "dev-trunk": "0.8.x-dev" } }, "autoload": { @@ -1782,7 +1782,7 @@ "dist": { "type": "path", "url": "../../packages/sync", - "reference": "a70bbb708b593062cf5e3c2f241360ffccfae42b" + "reference": "3497edb9f8e5341772150fdd9a9b698f1ec551a2" }, "require": { "automattic/jetpack-connection": "@dev", @@ -1815,7 +1815,7 @@ "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" }, "branch-alias": { - "dev-trunk": "4.5.x-dev" + "dev-trunk": "4.6.x-dev" }, "dependencies": { "test-only": [ From 55158b74e828536306a3272d513d2f92ca12b6fb Mon Sep 17 00:00:00 2001 From: Calypso Bot Date: Mon, 3 Feb 2025 21:46:01 +0100 Subject: [PATCH 333/420] Update wordpress monorepo (#41491) * Update wordpress monorepo * Ignore TypeScript error * Adjust for removed z-index --------- Co-authored-by: Renovate Bot Co-authored-by: Brad Jorsch --- pnpm-lock.yaml | 4116 ++++++++--------- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/ai-client/package.json | 20 +- .../api/changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/api/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/base-styles/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + .../js-packages/boost-score-api/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/charts/package.json | 4 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/components/package.json | 18 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/connection/package.json | 14 +- .../changelog/renovate-wordpress-monorepo#3 | 4 + .../eslint-config-target-es/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + .../i18n-loader-webpack-plugin/package.json | 4 +- .../idc/changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/idc/package.json | 14 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/licensing/package.json | 12 +- .../changelog/renovate-wordpress-monorepo | 4 + .../js-packages/partner-coupon/package.json | 6 +- .../changelog/renovate-wordpress-monorepo | 4 + .../publicize-components/package.json | 38 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/js-packages/scan/package.json | 10 +- .../changelog/renovate-wordpress-monorepo | 4 + .../shared-extension-utils/package.json | 16 +- .../changelog/renovate-wordpress-monorepo#3 | 4 + projects/js-packages/storybook/package.json | 16 +- .../changelog/renovate-wordpress-monorepo | 4 + .../js-packages/webpack-config/package.json | 4 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/assets/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/backup/package.json | 14 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/blaze/package.json | 18 +- .../changelog/renovate-wordpress-monorepo#2 | 4 + projects/packages/calypsoify/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + .../classic-theme-helper/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/connection/package.json | 6 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/explat/package.json | 4 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/forms/package.json | 28 +- .../changelog/renovate-wordpress-monorepo#2 | 4 + .../packages/jetpack-mu-wpcom/package.json | 22 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/jitm/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/masterbar/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/my-jetpack/package.json | 18 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/post-list/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/publicize/package.json | 4 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/search/package.json | 18 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/videopress/package.json | 34 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/packages/wordads/package.json | 16 +- .../changelog/renovate-wordpress-monorepo#3 | 4 + projects/packages/yoast-promo/package.json | 14 +- .../changelog/renovate-wordpress-monorepo#2 | 4 + .../package.json | 12 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/plugins/boost/package.json | 8 +- .../changelog/renovate-wordpress-monorepo#14 | 4 + .../classic-theme-helper-plugin/package.json | 10 +- .../crm/changelog/renovate-wordpress-monorepo | 4 + projects/plugins/crm/package.json | 14 +- .../changelog/renovate-wordpress-monorepo#28 | 4 + projects/plugins/inspect/package.json | 2 +- .../changelog/renovate-wordpress-monorepo | 4 + .../blocks/tiled-gallery/editor.scss | 2 +- .../extend/ai-post-excerpt/index.tsx | 1 + projects/plugins/jetpack/package.json | 60 +- .../changelog/renovate-wordpress-monorepo#6 | 4 + projects/plugins/protect/package.json | 18 +- .../changelog/renovate-wordpress-monorepo | 4 + projects/plugins/social/package.json | 16 +- .../changelog/renovate-wordpress-monorepo#3 | 4 + projects/plugins/starter-plugin/package.json | 10 +- .../changelog/renovate-wordpress-monorepo#2 | 4 + projects/plugins/videopress/package.json | 10 +- tools/e2e-commons/package.json | 2 +- tools/js-tools/package.json | 4 +- 95 files changed, 2474 insertions(+), 2383 deletions(-) create mode 100644 projects/js-packages/ai-client/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/api/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/base-styles/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/boost-score-api/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/charts/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/components/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/connection/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/eslint-config-target-es/changelog/renovate-wordpress-monorepo#3 create mode 100644 projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/idc/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/licensing/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/partner-coupon/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/publicize-components/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/scan/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/shared-extension-utils/changelog/renovate-wordpress-monorepo create mode 100644 projects/js-packages/storybook/changelog/renovate-wordpress-monorepo#3 create mode 100644 projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/assets/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/backup/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/blaze/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/calypsoify/changelog/renovate-wordpress-monorepo#2 create mode 100644 projects/packages/classic-theme-helper/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/connection/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/explat/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/forms/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo#2 create mode 100644 projects/packages/jitm/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/masterbar/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/my-jetpack/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/post-list/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/publicize/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/search/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/videopress/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/wordads/changelog/renovate-wordpress-monorepo create mode 100644 projects/packages/yoast-promo/changelog/renovate-wordpress-monorepo#3 create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#2 create mode 100644 projects/plugins/boost/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/renovate-wordpress-monorepo#14 create mode 100644 projects/plugins/crm/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/inspect/changelog/renovate-wordpress-monorepo#28 create mode 100644 projects/plugins/jetpack/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/protect/changelog/renovate-wordpress-monorepo#6 create mode 100644 projects/plugins/social/changelog/renovate-wordpress-monorepo create mode 100644 projects/plugins/starter-plugin/changelog/renovate-wordpress-monorepo#3 create mode 100644 projects/plugins/videopress/changelog/renovate-wordpress-monorepo#2 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d94b635895099..96c77d8ca3b4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -136,35 +136,35 @@ importers: specifier: 11.5.16 version: 11.5.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/blob': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.12.0 + version: 14.12.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -233,8 +233,8 @@ importers: specifier: workspace:* version: link:../config '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 devDependencies: jest: specifier: 29.7.0 @@ -262,14 +262,14 @@ importers: projects/js-packages/base-styles: devDependencies: '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 projects/js-packages/boost-score-api: dependencies: '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 zod: specifier: 3.22.3 version: 3.22.3 @@ -417,11 +417,11 @@ importers: specifier: ^5.14.9 version: 5.14.9 '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.14.0 - version: 5.14.0(@babel/core@7.26.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0) '@wordpress/element': - specifier: 6.14.0 - version: 6.14.0 + specifier: 6.17.0 + version: 6.17.0 babel-jest: specifier: ^29.7.0 version: 29.7.0(@babel/core@7.26.0) @@ -519,35 +519,35 @@ importers: specifier: ^7 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/dataviews': specifier: 4.12.0 version: 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/notices': - specifier: 5.16.0 - version: 5.16.0(react@18.3.1) + specifier: 5.17.0 + version: 5.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -670,26 +670,26 @@ importers: specifier: workspace:* version: link:../script-data '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -842,8 +842,8 @@ importers: version: 7.6.3 devDependencies: '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 eslint: specifier: 9.16.0 version: 9.16.0 @@ -886,11 +886,11 @@ importers: version: 4.4.0 devDependencies: '@wordpress/dependency-extraction-webpack-plugin': - specifier: 6.16.0 - version: 6.16.0(webpack@5.94.0) + specifier: 6.17.0 + version: 6.17.0(webpack@5.94.0) '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 jest: specifier: 29.7.0 version: 29.7.0 @@ -916,26 +916,26 @@ importers: specifier: workspace:* version: link:../components '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 prop-types: specifier: ^15.7.2 version: 15.8.1 @@ -1040,20 +1040,20 @@ importers: specifier: workspace:* version: link:../components '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -1086,8 +1086,8 @@ importers: specifier: 14.5.2 version: 14.5.2(@testing-library/dom@10.4.0) '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.16.0 - version: 5.16.0(@babel/core@7.26.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0) babel-jest: specifier: 29.7.0 version: 29.7.0(@babel/core@7.26.0) @@ -1113,8 +1113,8 @@ importers: specifier: workspace:* version: link:../connection '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -1144,11 +1144,11 @@ importers: specifier: 14.5.2 version: 14.5.2(@testing-library/dom@10.4.0) '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) jest: specifier: 29.7.0 version: 29.7.0 @@ -1189,62 +1189,62 @@ importers: specifier: 2.1.0-beta.9 version: 2.1.0-beta.9(@babel/runtime@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/annotations': - specifier: 3.16.0 - version: 3.16.0(react@18.3.1) + specifier: 3.17.0 + version: 3.17.0(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/blocks': - specifier: 14.5.0 - version: 14.5.0(react@18.3.1) + specifier: 14.6.0 + version: 14.6.0(react@18.3.1) '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/core-data': - specifier: 7.16.0 - version: 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/dataviews': specifier: 4.12.0 version: 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/edit-post': - specifier: 8.16.0 - version: 8.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 8.17.0 + version: 8.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/editor': - specifier: 14.16.0 - version: 14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.17.0 + version: 14.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/hooks': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/html-entities': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/media-utils': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/notices': - specifier: 5.16.0 - version: 5.16.0(react@18.3.1) + specifier: 5.17.0 + version: 5.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -1295,8 +1295,8 @@ importers: specifier: 18.3.18 version: 18.3.18 '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.16.0 - version: 5.16.0(@babel/core@7.26.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0) babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -1374,17 +1374,17 @@ importers: specifier: workspace:* version: link:../base-styles '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 debug: specifier: 4.4.0 version: 4.4.0 @@ -1446,26 +1446,26 @@ importers: specifier: workspace:* version: link:../connection '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/plugins': - specifier: 7.16.0 - version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 lodash: specifier: 4.17.21 version: 4.17.21 @@ -1492,8 +1492,8 @@ importers: specifier: 14.5.2 version: 14.5.2(@testing-library/dom@10.4.0) '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.16.0 - version: 5.16.0(@babel/core@7.26.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0) babel-jest: specifier: 29.3.1 version: 29.3.1(@babel/core@7.26.0) @@ -1559,8 +1559,8 @@ importers: projects/js-packages/storybook: dependencies: '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 devDependencies: '@automattic/jetpack-components': specifier: workspace:* @@ -1626,26 +1626,26 @@ importers: specifier: 18.3.18 version: 18.3.18 '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/block-library': - specifier: 9.16.0 - version: 9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 9.17.0 + version: 9.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/format-library': - specifier: 5.16.0 - version: 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/postcss-plugins-preset': - specifier: 5.16.0 - version: 5.16.0(postcss@8.4.47) + specifier: 5.17.0 + version: 5.17.0(postcss@8.4.47) allure-playwright: specifier: 2.9.2 version: 2.9.2 @@ -1809,11 +1809,11 @@ importers: specifier: 2.3.0 version: 2.3.0(webpack@5.94.0) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/dependency-extraction-webpack-plugin': - specifier: 6.16.0 - version: 6.16.0(webpack@5.94.0) + specifier: 6.17.0 + version: 6.17.0(webpack@5.94.0) babel-loader: specifier: 9.1.2 version: 9.1.2(@babel/core@7.26.0)(webpack@5.94.0) @@ -1878,8 +1878,8 @@ importers: specifier: workspace:* version: link:../../js-packages/webpack-config '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -1917,23 +1917,23 @@ importers: specifier: 5.20.5 version: 5.20.5(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 moment: specifier: 2.30.1 version: 2.30.1 @@ -1975,8 +1975,8 @@ importers: specifier: 18.3.18 version: 18.3.18 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -2014,29 +2014,29 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/plugins': - specifier: 7.16.0 - version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -2057,8 +2057,8 @@ importers: specifier: 7.26.0 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 sass: specifier: 1.64.1 version: 1.64.1 @@ -2084,8 +2084,8 @@ importers: specifier: workspace:* version: link:../../js-packages/webpack-config '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 sass: specifier: 1.64.1 version: 1.64.1 @@ -2116,8 +2116,8 @@ importers: specifier: 2.1.1 version: 2.1.1(postcss@8.4.47) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -2152,11 +2152,11 @@ importers: specifier: workspace:* version: link:../../js-packages/idc '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.2.0) + specifier: 10.17.0 + version: 10.17.0(react@18.2.0) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 devDependencies: '@automattic/jetpack-webpack-config': specifier: workspace:* @@ -2171,8 +2171,8 @@ importers: specifier: 7.26.0 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 glob: specifier: 11.0.0 version: 11.0.0 @@ -2204,11 +2204,11 @@ importers: specifier: 0.1.1 version: 0.1.1 '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 cookie: specifier: 1.0.1 version: 1.0.1 @@ -2256,32 +2256,32 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/blocks': - specifier: 14.5.0 - version: 14.5.0(react@18.3.1) + specifier: 14.6.0 + version: 14.6.0(react@18.3.1) '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/core-data': - specifier: 7.16.0 - version: 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 7.17.0 + version: 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/hooks': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -2354,20 +2354,20 @@ importers: specifier: 10.4.0 version: 10.4.0 '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.16.0 - version: 5.16.0(@babel/core@7.26.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -2413,7 +2413,7 @@ importers: version: 4.0.0 '@automattic/components': specifier: 2.2.0 - version: 2.2.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.2.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@automattic/i18n-utils': specifier: 1.2.3 version: 1.2.3 @@ -2425,10 +2425,10 @@ importers: version: link:../../js-packages/shared-extension-utils '@automattic/launchpad': specifier: 1.1.0 - version: 1.1.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(@wordpress/element@6.16.0)(@wordpress/i18n@5.16.0)(debug@4.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1) + version: 1.1.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(@wordpress/element@6.17.0)(@wordpress/i18n@5.17.0)(debug@4.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1) '@automattic/page-pattern-modal': specifier: 1.1.5 - version: 1.1.5(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)(webpack@5.94.0) + version: 1.1.5(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)(webpack@5.94.0) '@automattic/typography': specifier: 1.0.0 version: 1.0.0 @@ -2445,47 +2445,47 @@ importers: specifier: ^5.15.5 version: 5.20.5(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/blocks': - specifier: 14.5.0 - version: 14.5.0(react@18.3.1) + specifier: 14.6.0 + version: 14.6.0(react@18.3.1) '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/dom-ready': specifier: ^4.8.1 - version: 4.14.0 + version: 4.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/hooks': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/plugins': - specifier: 7.16.0 - version: 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/private-apis': specifier: ^1.8.1 - version: 1.14.0 + version: 1.17.0 '@wordpress/router': specifier: ^1.8.11 - version: 1.14.0(react@18.3.1) + version: 1.17.0(react@18.3.1) '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -2576,8 +2576,8 @@ importers: specifier: workspace:* version: link:../../js-packages/webpack-config '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 sass: specifier: 1.64.1 version: 1.64.1 @@ -2616,8 +2616,8 @@ importers: specifier: 2.1.1 version: 2.1.1(postcss@8.4.47) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -2676,32 +2676,32 @@ importers: specifier: 5.20.5 version: 5.20.5(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -2817,8 +2817,8 @@ importers: projects/packages/post-list: dependencies: '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 devDependencies: '@automattic/jetpack-webpack-config': specifier: workspace:* @@ -2843,8 +2843,8 @@ importers: specifier: workspace:* version: link:../../js-packages/publicize-components '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 devDependencies: '@automattic/calypso-color-schemes': specifier: 3.1.3 @@ -2868,8 +2868,8 @@ importers: specifier: 2.1.1 version: 2.1.1(postcss@8.4.47) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -2925,23 +2925,23 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -3025,14 +3025,14 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.16.0 - version: 5.16.0(@babel/core@7.26.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/dependency-extraction-webpack-plugin': - specifier: 6.16.0 - version: 6.16.0(webpack@5.94.0) + specifier: 6.17.0 + version: 6.17.0(webpack@5.94.0) autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -3101,53 +3101,53 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/blob': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/blocks': - specifier: 14.5.0 - version: 14.5.0(react@18.3.1) + specifier: 14.6.0 + version: 14.6.0(react@18.3.1) '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/core-data': - specifier: 7.16.0 - version: 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 7.17.0 + version: 7.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/dom-ready': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/editor': - specifier: 14.16.0 - version: 14.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.17.0 + version: 14.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/html-entities': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -3216,8 +3216,8 @@ importers: specifier: 18.3.5 version: 18.3.5(@types/react@18.3.18) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -3282,23 +3282,23 @@ importers: specifier: workspace:* version: link:../../js-packages/components '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) chart.js: specifier: 3.7.1 version: 3.7.1 @@ -3379,11 +3379,11 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.16.0 - version: 5.16.0(@babel/core@7.26.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -3423,23 +3423,23 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/edit-post': - specifier: 8.16.0 - version: 8.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 8.17.0 + version: 8.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/plugins': - specifier: 7.16.0 - version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) gridicons: specifier: 3.4.1 version: 3.4.1(react@18.3.1) @@ -3463,8 +3463,8 @@ importers: specifier: 7.26.0 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 sass: specifier: 1.64.1 version: 1.64.1 @@ -3496,17 +3496,17 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -3536,11 +3536,11 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -3605,11 +3605,11 @@ importers: specifier: 5.3.3 version: 5.3.3 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -3669,11 +3669,11 @@ importers: specifier: 3.5.32 version: 3.5.32 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -3750,17 +3750,17 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 react: specifier: 18.3.1 version: 18.3.1 @@ -3787,8 +3787,8 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -3844,26 +3844,26 @@ importers: specifier: 4.35.3 version: 4.35.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -3966,8 +3966,8 @@ importers: specifier: 12.1.0 version: 12.1.0(rollup@3.29.5)(tslib@2.5.0)(typescript@5.0.4) '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 postcss: specifier: 8.4.47 version: 8.4.47 @@ -4062,59 +4062,59 @@ importers: specifier: 2.0.1 version: 2.0.1 '@wordpress/base-styles': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/block-editor': - specifier: 14.11.0 - version: 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/blocks': - specifier: 14.5.0 - version: 14.5.0(react@18.3.1) + specifier: 14.6.0 + version: 14.6.0(react@18.3.1) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/compose': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/edit-post': - specifier: 8.16.0 - version: 8.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 8.17.0 + version: 8.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/hooks': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/primitives': - specifier: 4.16.0 - version: 4.16.0(react@18.3.1) + specifier: 4.17.0 + version: 4.17.0(react@18.3.1) '@wordpress/rich-text': - specifier: 7.16.0 - version: 7.16.0(react@18.3.1) + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/viewport': - specifier: 6.16.0 - version: 6.16.0(react@18.3.1) + specifier: 6.17.0 + version: 6.17.0(react@18.3.1) '@wordpress/widgets': - specifier: 4.16.0 - version: 4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 4.17.0 + version: 4.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/wordcount': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 bounding-client-rect: specifier: 1.0.5 version: 1.0.5 @@ -4280,41 +4280,41 @@ importers: specifier: 11.5.16 version: 11.5.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/babel-plugin-import-jsx-pragma': - specifier: 5.16.0 - version: 5.16.0(@babel/core@7.26.0) + specifier: 5.17.0 + version: 5.17.0(@babel/core@7.26.0) '@wordpress/blob': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/block-serialization-default-parser': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/core-data': - specifier: 7.16.0 - version: 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 7.17.0 + version: 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/dom-ready': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/editor': - specifier: 14.16.0 - version: 14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + specifier: 14.17.0 + version: 14.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/escape-html': - specifier: 3.16.0 - version: 3.16.0 + specifier: 3.17.0 + version: 3.17.0 '@wordpress/keycodes': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 '@wordpress/notices': - specifier: 5.16.0 - version: 5.16.0(react@18.3.1) + specifier: 5.17.0 + version: 5.17.0(react@18.3.1) '@wordpress/token-list': - specifier: 3.16.0 - version: 3.16.0 + specifier: 3.17.0 + version: 3.17.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -4399,29 +4399,29 @@ importers: specifier: 5.20.5 version: 5.20.5(@tanstack/react-query@5.20.5(react@18.3.1))(react@18.3.1) '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/url': - specifier: 4.16.0 - version: 4.16.0 + specifier: 4.17.0 + version: 4.17.0 camelize: specifier: 1.0.1 version: 1.0.1 @@ -4460,8 +4460,8 @@ importers: specifier: 18.3.18 version: 18.3.18 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -4519,26 +4519,26 @@ importers: specifier: workspace:* version: link:../../js-packages/shared-extension-utils '@wordpress/api-fetch': - specifier: 7.16.0 - version: 7.16.0 + specifier: 7.17.0 + version: 7.17.0 '@wordpress/components': - specifier: 29.2.0 - version: 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 29.3.0 + version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/icons': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) clsx: specifier: 2.1.1 version: 2.1.1 @@ -4583,8 +4583,8 @@ importers: specifier: 18.3.5 version: 18.3.5(@types/react@18.3.18) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.47) @@ -4649,17 +4649,17 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 react: specifier: 18.3.1 version: 18.3.1 @@ -4686,8 +4686,8 @@ importers: specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -4769,17 +4769,17 @@ importers: specifier: workspace:* version: link:../../js-packages/connection '@wordpress/data': - specifier: 10.16.0 - version: 10.16.0(react@18.3.1) + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) '@wordpress/date': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 '@wordpress/element': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 '@wordpress/i18n': - specifier: 5.16.0 - version: 5.16.0 + specifier: 5.17.0 + version: 5.17.0 react: specifier: 18.3.1 version: 18.3.1 @@ -4800,8 +4800,8 @@ importers: specifier: 7.26.0 version: 7.26.0 '@wordpress/browserslist-config': - specifier: 6.16.0 - version: 6.16.0 + specifier: 6.17.0 + version: 6.17.0 concurrently: specifier: 7.6.0 version: 7.6.0 @@ -4948,8 +4948,8 @@ importers: specifier: 4.17.12 version: 4.17.12 '@wordpress/e2e-test-utils-playwright': - specifier: 1.16.0 - version: 1.16.0(@playwright/test@1.48.2) + specifier: 1.17.0 + version: 1.17.0(@playwright/test@1.48.2) allure-playwright: specifier: 2.9.2 version: 2.9.2 @@ -5020,11 +5020,11 @@ importers: specifier: 6.5.0 version: 6.5.0 '@wordpress/eslint-plugin': - specifier: 22.2.0 - version: 22.2.0(@babel/core@7.26.0)(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint-plugin-import@2.31.0)(eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4))(eslint-plugin-jsdoc@50.6.0(eslint@9.16.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0))(eslint-plugin-playwright@2.1.0(eslint@9.16.0))(eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.1.0(eslint@9.16.0))(eslint-plugin-react@7.37.2(eslint@9.16.0))(eslint@9.16.0)(typescript@5.0.4)(wp-prettier@3.0.3) + specifier: 22.3.0 + version: 22.3.0(@babel/core@7.26.0)(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint-plugin-import@2.31.0)(eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4))(eslint-plugin-jsdoc@50.6.0(eslint@9.16.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0))(eslint-plugin-playwright@2.1.0(eslint@9.16.0))(eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.1.0(eslint@9.16.0))(eslint-plugin-react@7.37.2(eslint@9.16.0))(eslint@9.16.0)(typescript@5.0.4)(wp-prettier@3.0.3) '@wordpress/jest-console': - specifier: 8.16.0 - version: 8.16.0(jest@29.7.0) + specifier: 8.17.0 + version: 8.17.0(jest@29.7.0) babel-jest: specifier: 29.4.3 version: 29.4.3(@babel/core@7.26.0) @@ -8189,86 +8189,76 @@ packages: webpack-dev-server: optional: true - '@wordpress/a11y@4.13.0': - resolution: {integrity: sha512-ZCNhj8GDi6cOVm7L0vfwG5y7XPZONfRbb1KEsJjfgiLY9BnjmfpI5TAqYXcoXbm+Xkea84dQWw1J03EfkuSyIg==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/a11y@4.16.0': - resolution: {integrity: sha512-i3zrNFx+N+dNivQxUeQXWKGT1ccWePXcqPkVTqjdO+lACv+MtJoyE9PXZCmaxHWq00g1RTvIpLtrzV5L4gzZkA==} + '@wordpress/a11y@4.17.0': + resolution: {integrity: sha512-TCQ/PGC0Me3yzPUrmY2FpECl7GUcUcx6kVGUugmlMxNwxeZRYUOEMxsHGm07iKV5l7zbi3y5c/i5bbYwJfXA4g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/annotations@3.16.0': - resolution: {integrity: sha512-tjipm2A288f8uPzgH/ITwbozzGsYHj6tv8Txb12dHk04xh6F5qtRnOB/kySddgAqRmnTTT8N9WpSpBLgWb8Eyw==} + '@wordpress/annotations@3.17.0': + resolution: {integrity: sha512-KatcmRnoPWGbO8JVq75agROeJVw1YRMaHzIY9c/UZBu3jyRVCGrSFfr3Xh7C3Lg6I01bWFBwN0RQvFmNMlYEeQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/api-fetch@7.16.0': - resolution: {integrity: sha512-JMHUUWQQnuFDYQfWtOBPxbB8YEefew3fnGwwDrdOAN7drkZ7ob7fJ2H1tY6iV5i+wIEl/5em3f0jXD3zcwkBDw==} + '@wordpress/api-fetch@7.17.0': + resolution: {integrity: sha512-L3iT/K41R6KResTy/7EOsTD+KKO20U3B4lPz/jQMRNgFdq4MOxtalEMjrRoj1mG+qiYGYdvGmpSgOzSx9o3eRg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/autop@4.16.0': - resolution: {integrity: sha512-5/XBRZ7Y731moR/hzZ+/k9tavHMHvshi+IdsJAecgUcqYC45YMLmqOmA4DOzfzCjBkuVvoy+6itMHQ+Q87Gb9g==} + '@wordpress/autop@4.17.0': + resolution: {integrity: sha512-6O9Eo/S02OHIa4GflfcWHANHpuy5/SifaWiprWYTrhIt6L6DyVxr1AErSWfDXIrkNNVXuhhykYDHAtApKqpqsQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/babel-plugin-import-jsx-pragma@5.14.0': - resolution: {integrity: sha512-QqceThgNF+S1CPr6UUubaI4BRsd0HnMjeJdKESeO0SNWhVQJU0pYJR4F0qvgwVV3r5WISpktVCU6DV3qaKqPbg==} + '@wordpress/babel-plugin-import-jsx-pragma@5.17.0': + resolution: {integrity: sha512-v2grJpRzSArNqASHgwYGSHfkSQKrZvQEjGFhiNgcZ10J/7L9NrKlzsguuQD/Yq6LeWwqvrKUUjSNe5hwSU6/jA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@babel/core': ^7.25.7 - '@wordpress/babel-plugin-import-jsx-pragma@5.16.0': - resolution: {integrity: sha512-3vRdagepfoIduDX25dzUbsCyE8eZsQGkVIRTrE2Kpi7YBzAzZz8nHPX1arDhIfEZn6QYGt5tIW5yNC8bbALsWQ==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - peerDependencies: - '@babel/core': ^7.25.7 - - '@wordpress/babel-preset-default@8.16.0': - resolution: {integrity: sha512-CPAMxQ5eMmsRNJN0edUZvsJDnmALQFGbWyCxsJiJJ/0LFi1lYFC7r5YGcJXVVD+oX9L908NZpxwsQBHb6gkxig==} + '@wordpress/babel-preset-default@8.17.0': + resolution: {integrity: sha512-+ivwvBI92u6abFf0DlwHem8fH5HujKy5e8a0cwDBOJivEzIJLPKYSYLlnLZL9I0QIstB+KdcJBARuWuR0l58Sw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/base-styles@5.16.0': - resolution: {integrity: sha512-CAaRCkoJ83+XeObkY1aiswInVHCm5JBFVCCtkEVvRlbqNipHCMyhA3rg501Ww4AOYxsX9r2rvNbGaAPMGc6oug==} + '@wordpress/base-styles@5.17.0': + resolution: {integrity: sha512-9rYupV2CIS6PIlE27vxqBEn98n2hEBdI4YQI7TD7kdbGHYRDfTqocDK7stiAgqKR9ujDoVmq+Yk3T/jzRi6WoA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/base-styles@5.2.0': resolution: {integrity: sha512-yBMVbn4gvNQimVfLAZ+/F7F/Tpl+femF9ojgv90c0A0o6IDEtdC+6vUvtAxvXVoruwmxsq8ncouoorZbYDb3yg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/blob@4.16.0': - resolution: {integrity: sha512-vhaEhh0jqSZG+LPrLL6wco4kmw4lYC6OLTOspeOWuAEPMKOs4YyfF8x2iA8p6CZiWjVcahwZlcP7DnZDIwowsQ==} + '@wordpress/blob@4.17.0': + resolution: {integrity: sha512-qH0Q48clM+UTdTMWUsCyyAuy4J+koNGLz4oXyJZCrUvUQ31Hpj6VwQulM2lSXYQyzOWJEKf3deHM47Uz1JYhhg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/block-editor@14.11.0': - resolution: {integrity: sha512-Io2m3pvsU6ksZcIb/Juqr60sB6OtW6vJMVAxMedw+KlvRfVVqiLPeEwo7zt4ovD2NCU7FtrOYF15pYz6gLQqkw==} + '@wordpress/block-editor@14.12.0': + resolution: {integrity: sha512-i8tUlPiRgLqUFVnAHDjS7MNHZMFDYMkm5gR2xsNryzhsvoAndUYJiktftbXNaQVki/EMoDf1zHicHZ2g2AQy5Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/block-library@9.16.0': - resolution: {integrity: sha512-jIKqn/8/4fJdfQGNMIWfRkRzDS/Yl4SzF8NtAfCyFOCW8iHLh1FtuOK8QT2ugT5sX4ZwO8xyoZ8EyIEU3PT9Yg==} + '@wordpress/block-library@9.17.0': + resolution: {integrity: sha512-dJOWzGCNFZ1Ft8n9U0z30WceCr73At/Zqv68qUkjNI3CcwevtrUpg7uVQER3Q7Ai605CyB04MHELea3WixqX/Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/block-serialization-default-parser@5.16.0': - resolution: {integrity: sha512-F8n8GMeVAepWl9nuA9Ly/WWaqvZ9Lg0KI/OUd0Bm0Y3Ssz65UNRf6DT+ScN35OCAOklf1bQ1PGaq9JdVmC43mg==} + '@wordpress/block-serialization-default-parser@5.17.0': + resolution: {integrity: sha512-4oVgm6f/kRqersuTH1SS85x89P4foPAo2xwjoXvHdjy1Rp0UQ86uxyKn0j0A6k7uQEXc5BJeUevk/Z1AT1Z9bQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/blocks@14.5.0': - resolution: {integrity: sha512-RsX8hWsTegbkUaYcqIfYE2k1OEkF3hOV3PZFsm9Zn1ZN0/ESUQGRXxUCQvr/7yZIjMRxVNnakYlln2OMrXt1rQ==} + '@wordpress/blocks@14.6.0': + resolution: {integrity: sha512-9FkjXHRTXIaOU7BJfoeRUe1snh+5H8rypOTJoDpiMCoXMfGKyBVpacRMzbltQiK7SrzmHbzst4EuxHoK7a/TVw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/browserslist-config@6.16.0': - resolution: {integrity: sha512-ppjgUOjCFwLjH5XCDAfavRkIAj9DKEVGj12YMGL+dzSikbDU9L8VnMT1p08G1bAcBkTRLtBX8KkJJdyUI1JGsQ==} + '@wordpress/browserslist-config@6.17.0': + resolution: {integrity: sha512-cjMclWLwfam5O03gOHWjD8veeLVnfmC93V9LX1aPt/ZT9aE0cmEZUxBa3VzkDM7NvuZFj7SjSvJr+vuar9Np1A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/commands@1.16.0': - resolution: {integrity: sha512-LxDPzF32QVcZJ42VrI07tSxvTvxKmzI9YZ5JAam/pR0UsjHAFxsnBT3t45oVItRlco/AVL+eLxwuCC/OuSfgLQ==} + '@wordpress/commands@1.17.0': + resolution: {integrity: sha512-oZLv9pi0iiIO7DXRijK9gze5+iktoUyfDVipAmbmxAVEqptfWuPP3BRSkZxf+ccoIWpz0EhNKShsbQM86FwVbg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8281,8 +8271,8 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/components@29.2.0': - resolution: {integrity: sha512-a7vUL4oUGu4Jicqf0cFSdQvGtZVw9h4Gvxr53o8yJYmXY8YRVrbeEsZjA/twaqRa8WxGzzWnWNQ/XwtMEXNG0w==} + '@wordpress/components@29.3.0': + resolution: {integrity: sha512-9lQIXsbgFeGY1QXEhNHQ6mq+6sS1TGGdZdaGSoQoP682WWgdjshnyq/0yhGULY9ReDKnZF2mHJ/J3FvleyYMcg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8294,21 +8284,21 @@ packages: peerDependencies: react: ^18.0.0 - '@wordpress/compose@7.16.0': - resolution: {integrity: sha512-FTpfEUeEyH3LnVRlNZxRwce3sEUPDAVI1P+AaF7ZrbzcV2ita4WamCoEHFDS4OMOnvISnSbVh2Rz3gF9oLvomQ==} + '@wordpress/compose@7.17.0': + resolution: {integrity: sha512-jn5uCw08HHLfOpIDp0pKBDZh1oZiMwjiK3c3IZdZo6eoWZjpOr3ecsMa4RBl/4HbqnUoeFDD6Lj83IEKPuzHQg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/core-commands@1.16.0': - resolution: {integrity: sha512-BrtyZe6axE62NT8VOJEY38UE5CkIyA7etIkjooA52l3xMKS7uebP/5QxinDcwE6c/FQ3tqAwSZ2MIgAWbsADqA==} + '@wordpress/core-commands@1.17.0': + resolution: {integrity: sha512-VcM2/d0HdxkrUazOHnrYNEnStADs8r6b4nILGSkdGl55zi1NYFRYo4RpVOn7FvLGQIBSnNle8w+7ifKtHzfK5g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/core-data@7.16.0': - resolution: {integrity: sha512-IDs+JxBiAil3AgmqYS8+eb8J6Kg9nlkao6dXlWkcJAOwrpFw53rC1o31dIRqIm8hzb43F88Bpbfe85Bm98Bhyw==} + '@wordpress/core-data@7.17.0': + resolution: {integrity: sha512-khNm8SDsIwXr1297e3j3Y/KHZmtRmouRgn+AWzlmlgdArsk8IlIwe9W+KE1tg+VoZJ5f3p0B7rqBUQfD7qbXQg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8320,8 +8310,8 @@ packages: peerDependencies: react: ^18.0.0 - '@wordpress/data@10.16.0': - resolution: {integrity: sha512-5Gx0Hb1VsnvACQJBJhgaFf0xn6cf1s0Wqv3q2DRnRShuSQTNxkUxA41+eZsPxC1JrnVXg0vPRCu5GpqwPO4O9g==} + '@wordpress/data@10.17.0': + resolution: {integrity: sha512-NezfpsRH3BIV2i10wFohsGfOQ+pp9TvSHFuVK/AlQmnAogoMpFOxAumXCI7rvDoH1X4rEPiX2ggRnxP2+Z6jwQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8332,12 +8322,18 @@ packages: peerDependencies: react: ^18.0.0 - '@wordpress/date@5.16.0': - resolution: {integrity: sha512-Sb2eJ7S7bn7ODfe0WVgNEqLpilgwpKIoJjVxMxT8wtJpx4rEs25+BAyQ6Bpj6lxX9P99ZmPsdrq5YavxP9NKHg==} + '@wordpress/dataviews@4.13.0': + resolution: {integrity: sha512-fJyHzNBvI/mivZh5z5+XC3tOSHojNOYVbSA9ifPB6hNcZjFJ+fsNt/I8tmOQdmOOb4dUESkOOKmk6RlPKCjErg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 - '@wordpress/dependency-extraction-webpack-plugin@6.16.0': - resolution: {integrity: sha512-AU6SFATdbUJsd/hqD6wUaZxbikibJ4L7RGpQ2MPUsXxXZCJU8pfPE3WWIOM1VemG4dJRJO+jk0lG8uH9pwdsfA==} + '@wordpress/date@5.17.0': + resolution: {integrity: sha512-vFi+h+YpiicfDHtp1SKkFmgQR0PI9I76Dqoi7lBP95BPTGC/adQ3u2ee5wGd5uVUlR+ca+TfR6siC4Igau73oA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + + '@wordpress/dependency-extraction-webpack-plugin@6.17.0': + resolution: {integrity: sha512-aRiYH1lcgxnvo0dvhEd5dxjBiWQokRdzSHFSF5flZ4vmHVvDRSgj5V0CQTuCG4fr77PwEJNjPHOm+s1JbmmQJw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: webpack: ^5.0.0 @@ -8346,49 +8342,37 @@ packages: resolution: {integrity: sha512-knweE2lLEUxWRr6A48sHiO0ww5pPybGe2NVIZVq/y7EaYCMdpy6gYA0ZdVqMKZvtxKKqicJfwigcn+hinsTvUQ==} engines: {node: '>=12'} - '@wordpress/deprecated@4.13.0': - resolution: {integrity: sha512-wSDfGwRHzxcfpcUUlIHGQOIKYdGvTHbmVWIRf7dlPCRr5anpZTXsC/4ElDJFoi+w/gQklm//LrxjWP1Gqj8hmA==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/deprecated@4.16.0': - resolution: {integrity: sha512-apv94cskjvWqkanqNn3vP7lugJODkSkPlLqjKPY5iBXI0RATaKuxcTNxuO9/Gn5QcuM89fjhsGTcZ4X/SZTGNQ==} + '@wordpress/deprecated@4.17.0': + resolution: {integrity: sha512-7IlFpQ6tNkUbOuuxm6kBCR2R6C9Etlzojgh0ykJ/OmwgRMrosH/m6/zAmaA15oRYpd6dvO7ozJN+ArPz7LSOiQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/dom-ready@4.14.0': - resolution: {integrity: sha512-VeLZZJwKM+Y1d9KPXJ7IQFWwxrND8Xlu+XHpEesudn2kxYE/F5E1uGwS+8LjuprKW+ZEBzgmzZRraKG+KbGFWg==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/dom-ready@4.16.0': - resolution: {integrity: sha512-rlp7gZRRPsob8z+//tS8bHHRTlkRiOfbKA1SJmyfakU/p4fcEXskLfdq/0wGPZtoHnia6kLKUyFMWhIBe8SuYQ==} + '@wordpress/dom-ready@4.17.0': + resolution: {integrity: sha512-u/ocyrPV4MJIKxM1OJg+Q6yOBD0pIYi1jcXE1HVYnc/9Mte0IFlfovYRJj6oGUc7u4dM6AVE2BUCQMJgmG406Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/dom@3.58.0': resolution: {integrity: sha512-t3xSr/nqekj2qwUGRAqSeGx6116JOBxzI+VBiUfZrjGEnuyKdLelXDEeYtcwbb7etMkj/6F60/NB7GTl5IwizQ==} engines: {node: '>=12'} - '@wordpress/dom@4.13.0': - resolution: {integrity: sha512-ucaz3Kh9L3EGpLiXXWqflC0T/1zMOe4DR31ynl+B68YSEWpM0VqTnRUFJRUFEc5wiOa70T8yFa3RLSwWpqJTIw==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/dom@4.16.0': - resolution: {integrity: sha512-iT9D8BnoSgD9w+viDCKtO7lfMmzku3tC7oLEakH6LNZRas0jQuTC46cfokMAz6HTchxiAnuXoPYHsCPhGzWy8Q==} + '@wordpress/dom@4.17.0': + resolution: {integrity: sha512-raAeub1L/a2yHd9rwCGs67yDSUsafcpERi9rJCeHiaBE/+h7gZn7Li+Pya+DMk7tGxoIHNpPuGVTAyVhQbjWdQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/e2e-test-utils-playwright@1.16.0': - resolution: {integrity: sha512-xA1sbiQoqfk530JMAFGpThGbCjGeVaVitEdB3WYWnHY8JGmI6l5SeWaen2GlD4zbbCS+HE0Kn0sof1h5B9R26A==} + '@wordpress/e2e-test-utils-playwright@1.17.0': + resolution: {integrity: sha512-KhS+HyduYVHWbB/uHxQUC1wHMACx2BpP+4euMN8Kimy/rIsyOFrav9ueVGn7fHu9wu++swk8nUWFBip3GdsliA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@playwright/test': '>=1' - '@wordpress/edit-post@8.16.0': - resolution: {integrity: sha512-4MSmLpTyr5Kgy4oZF4tcpAu5zeF7HCUmg8OM6KUa6hWMaQew4uHMoI9EL/PZq/+u4ZAbeWCgedSNX6IOub0/mQ==} + '@wordpress/edit-post@8.17.0': + resolution: {integrity: sha512-NpLHQHAiEbSEjYnKz0rUhmrenG410+YIUXl4KldvWjQnpVuxil2o12uKIrXoUKMRHydhp3M6bRxhHleN3zOCdw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/editor@14.16.0': - resolution: {integrity: sha512-7uoVHZpU43TZhn+j9X4uR7UeC1u0jDJZF0tOkdhAo+MaPTOOgxsHwuJzG7wDiRpUS3xJ7cyt221kqcpga07neA==} + '@wordpress/editor@14.17.0': + resolution: {integrity: sha512-sAeXBvg22o74v7acuYOyHcoALwOs/yzLdXZ8mqT/oi9kBiXSW7kWaPg/q10Mqst0Y6F+prVjNVxcUqHx+tcT5g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8398,24 +8382,20 @@ packages: resolution: {integrity: sha512-puswpGcIdS+0A2g28uHriMkZqqRCmzFczue5Tk99VNtzBdehyk7Ae+DZ4xw5yT6GqYai8NTqv6MRwCB78uh5Mw==} engines: {node: '>=12'} - '@wordpress/element@6.14.0': - resolution: {integrity: sha512-vZPm2ekv9B7fMcv/slyu/p8lV44EPa6RRHOk04ldNUpsrjC6ph6Q4wpuI5WzLEX7p1u71c8ZOuroEuRvdFxMcA==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/element@6.16.0': - resolution: {integrity: sha512-1Db9jeu7dxil/fJqAiLN5dA6gwoHWcgMSqZJ4dmZ0kMDMs40rtm6o60GFmAQGlrj+mmUvhOHTTwrBdpyfuv4bA==} + '@wordpress/element@6.17.0': + resolution: {integrity: sha512-mRLFDPmZiI3+POi/iUGoof/9fQi4YTJ/RAuIUipr7yG7l4SwOoQy4eSJy6QTyqtJxZ+/7qA+b/+Ek15UzFst5Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/escape-html@2.58.0': resolution: {integrity: sha512-9YJXMNfzkrhHEVP1jFEhgijbZqW8Mt3NHIMZjIQoWtBf7QE86umpYpGGBXzYC0YlpGTRGzZTBwYaqFKxjeaSgA==} engines: {node: '>=12'} - '@wordpress/escape-html@3.16.0': - resolution: {integrity: sha512-Rb3nUsqK2tzLpKhSRO5IID5O+gvNlyHRkKVmTszTB+0vjK+yh0Mc4UPzdHksPo8K7KnlAFt3SgjcfWYo3LYyUA==} + '@wordpress/escape-html@3.17.0': + resolution: {integrity: sha512-yOfJwgmrtIXQDwX6zTC0L7ymYBXz3K3hlW0nDdtYy+bCw5z0gbrEOnBotOD6YdXlejAgnaAH+K1VSf0xxG5uGA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/eslint-plugin@22.2.0': - resolution: {integrity: sha512-JKs2tEpkg6txe1emR+P7gw9OrSXvu89TMHuN1uk0wxdJeEqoF7HcxTdJBEaMHCz5HFhBHeuI5vShtX/WN6jf3g==} + '@wordpress/eslint-plugin@22.3.0': + resolution: {integrity: sha512-EG8PvRceycpn9B5UniHRJSwitTwWwqtsF+gcg+BOT/tU/dmMaDTRqQdXnPOhw10Qg+QKqvBEl6IT+yRwTP5rsA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: '@babel/core': '>=7' @@ -8443,14 +8423,14 @@ packages: typescript: optional: true - '@wordpress/fields@0.8.0': - resolution: {integrity: sha512-8aX5jHVzTPyPORKB5TjUznmBvJZN32R2jwblaG+QJGtKZZPqAnwfTNtnq4SalTD0T2B2lWuk/1RZd5LUsW3dqQ==} + '@wordpress/fields@0.9.0': + resolution: {integrity: sha512-PgfXdLu22ZKSz4Ro9sDrKjINS0nCLb4EOLGhyN7RxuXXVW9v+UAhnIX/WCpzoixRX5s7uycDbntt5fklfCTiVg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/format-library@5.16.0': - resolution: {integrity: sha512-bqUwJjwGXHY0PRNnWN5xfO5QvyTIwK9e5hCxWVlr0pdlsH4NzDNdQ9C7Op2zkfDElQMl9L1LHnnz7tLwQHNcpg==} + '@wordpress/format-library@5.17.0': + resolution: {integrity: sha512-+VQO5MtidlGwkR29KIssditpG5E25u4K9L4+STo+NKR5l0ldqa6PgIcu1LJlVzzqAOvbgmGwPLh7O5Oa+XqAww==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8460,12 +8440,12 @@ packages: resolution: {integrity: sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==} engines: {node: '>=12'} - '@wordpress/hooks@4.16.0': - resolution: {integrity: sha512-W82L1PdIhJPNpEb2F+0NWzrDoUqZo6NnYID7qHCexBiagq4+QS4uydM6anyFvUNrpL51CmkCNu31Xi8HjpSTGg==} + '@wordpress/hooks@4.17.0': + resolution: {integrity: sha512-LGOHGuwCXCevuzaFpM2sgyPZxf3H7tWaSKzlvDzx2kmwiWIrFug/yebywv4Cxsl82I5DfZkDpxXRpqTxXrC0Nw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/html-entities@4.16.0': - resolution: {integrity: sha512-wnCtif4GsQ3gZgINN2GK6+yLH+vIsW3ASvUfdUlxYMcvMagNhJsqaE6dqsnKkezD8q/WNL7zv82BDyGSLKeHNQ==} + '@wordpress/html-entities@4.17.0': + resolution: {integrity: sha512-8cVD8KTxsKLHA9r6Lt3fkQoNBUQ6zMWdgaK1VNRYRJgTfx8C6FlNBjvHrIIgS0nJ43k9iAmAObGQiL3GkGVI1g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/i18n@4.58.0': @@ -8473,27 +8453,27 @@ packages: engines: {node: '>=12'} hasBin: true - '@wordpress/i18n@5.16.0': - resolution: {integrity: sha512-O4ZUvjS8AlYzTxvw7fmp3xk51rpKv1h2/dGFc/L+IB97UrCBAiC9HBv6FIHRF1gci4Vdu/QnCDw3qpC+N/2gCw==} + '@wordpress/i18n@5.17.0': + resolution: {integrity: sha512-aAsYls8sTTSEimsvjxBl9mCYbZYD3BddHVpuHgbBxzC+2SZE+JYJ+IpcwEghC712qo0jEkG8Vdzhqae1PL6vCQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} hasBin: true - '@wordpress/icons@10.16.0': - resolution: {integrity: sha512-fHZujKpOkYD3JnPGCYqB1VafUiqsUOnpdVGdBd7En5ELwRg189a0NcI4EmM8OkeItNDml4LU/4nCCkypSy29eA==} + '@wordpress/icons@10.17.0': + resolution: {integrity: sha512-qzWFrMfa5HZdGxGq7I+s9bmUJqZrFfx6ow/slY1USKJqp1uRHRekAbq6UrOrJscs8rSUQiV/aNNPDgSfqBEM6A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18 - '@wordpress/interactivity-router@2.16.0': - resolution: {integrity: sha512-SILCPLTRCbV9JUX7Y+o+1Wv8CEFUq1i3mKuE1BFpIKmFS00RYc/LdJ958AI2LMV5MXCR9ybFAUtLvRk0H3NBMQ==} + '@wordpress/interactivity-router@2.17.0': + resolution: {integrity: sha512-yKx6/pnSJl/CTBX1mEutDc3N96GZhV7ULLGv+XJAPo43b4e4leYBA0o4ua4jKLVILueygJl76Ziwtzj0mD0ZtQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/interactivity@6.16.0': - resolution: {integrity: sha512-dPzunALqKq3LtCKaJXbVx0/ox239kFA9S0WeXzrtJj/513mSS/U43Y+kC449PYdIf++dGIJbMz7YxIAL30Fc8w==} + '@wordpress/interactivity@6.17.0': + resolution: {integrity: sha512-lhDqh0iyfG6DXwYXfg4u0EP9EofRBiVt7Lszn1LIgFFuThHBDyNgePKW6WxZhW9Nrwq9pan7gvCWIx6IKZkg8Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/interface@9.1.0': - resolution: {integrity: sha512-LWNDqUad+RpkdX/+gQeZmhQM3bx3vyZTZUPJ2+JyainYZhLfxGWfnEK1K0f68YaUdHKgSfixdv9cP413yw4fAw==} + '@wordpress/interface@9.2.0': + resolution: {integrity: sha512-WO4aWZYFlrqchKpgWttK9PB4xIicdatp4cUX7Diw3b/Zltq4+aE+DddTDeRvqLoi+NdgPlJK/tNxBaU4UoiBlQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8503,22 +8483,18 @@ packages: resolution: {integrity: sha512-NH2lbXo/6ix1t4Zu9UBXpXNtoLwSaYmIRSyDH34XNb0ic8a7yjEOhYWVW3LTfSCv9dJVyxlM5TJPtL85q7LdeQ==} engines: {node: '>=12'} - '@wordpress/is-shallow-equal@5.13.0': - resolution: {integrity: sha512-Z32eGYExzGq/dN4iSNCddCMQU8p1u6mYzyNXDCovw4JSEN3Fr3HvmGYQGRIlkuTrlE6okSqArAvXVKR+I8S5Qg==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/is-shallow-equal@5.16.0': - resolution: {integrity: sha512-9JI0bz7bQ9PdXPtXSnZXtbkyh0h7ZtojeG0lFtf9xtFkA56JUuMALa623v1YeuHKYbYmCc03/pqtpDKc/8QfVQ==} + '@wordpress/is-shallow-equal@5.17.0': + resolution: {integrity: sha512-PRykD6MgDkptKsKwETjNHiQUVtaegXkREX6UetN1iL6u+2la4XC/naDHByq7TL+Cg4snyR+PlNdw45Y4dgMf5w==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/jest-console@8.16.0': - resolution: {integrity: sha512-GFwoPBeOir9lV0ZCrkOapl7us+NqYphjeTRhZajNYr+grUCtvJYY0XzGZd8QuXKD9R5yBK42jgb4/9vc5tL2TA==} + '@wordpress/jest-console@8.17.0': + resolution: {integrity: sha512-PksPaHIQN+gHycF+S4b4PcZ35xRef2nRo+sBJXolnAWhKi93IrBENFDHwdyaD7gVe7t8qJlXYd7vaF8A6Tqn2g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: jest: '>=29' - '@wordpress/keyboard-shortcuts@5.16.0': - resolution: {integrity: sha512-JI/e7NGWjgbWY7Q546NExuwfwdx7OokHrwKzj2yTd3DluM3zhQax0d4ZZvJiqyHMaMQvKcT0ILJ4KYMgB9EkGg==} + '@wordpress/keyboard-shortcuts@5.17.0': + resolution: {integrity: sha512-XQbtiTSq6rsP/5KYMMDCmZegABlqcq7IpLtymrbeQNSPjyAP4aflU0rCcNWaXhBbdWWDRmaU9u/X1/fI5wGxUQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8527,59 +8503,55 @@ packages: resolution: {integrity: sha512-Q/LRKpx8ndzuHlkxSQ2BD+NTYYKQPIneNNMng8hTAfyU7RFwXpqj06HpeOFGh4XIdPKCs/8hmucoLJRmmLmZJA==} engines: {node: '>=12'} - '@wordpress/keycodes@4.14.0': - resolution: {integrity: sha512-vZpK+NbhC+3/JK8S5I/PuJMNYhfn7X8pupTPuEiKIXZgcnXAy3mORgirBeZJNkNUXRl3vfcsq0qFnIovI96fHA==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/keycodes@4.16.0': - resolution: {integrity: sha512-T4kaFkw6R1VkcBk+F7B4gmzEhSPRJwpMdkP7roNvENzKGtXs49K4xO0koOZhWUlGpZvhPJ1WWERyoub8S7rX2A==} + '@wordpress/keycodes@4.17.0': + resolution: {integrity: sha512-6aZ28uoCmzjXONpRVtDPjevkw834fhIRBnn2KQdzENMnPiQCNbiG71mPNxkTw1yRHRRT5ptHvOe49ztWm9KMcA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/media-utils@5.16.0': - resolution: {integrity: sha512-CrpGApMT2h14xJ4uMYRmx6jPsUHP0be7ru1ndbXw7FrE/r4he/nKsM2e+n1ApeYMJcw3b3VimbhLZTxdWPtMjg==} + '@wordpress/media-utils@5.17.0': + resolution: {integrity: sha512-AyTz5C0NxZ69v+rQ3I/g7cPBa9DL8+pBufHZ5Ewz47q6hwSSb3j8+xTgfl/ndKCc/Taqvr4Sgd4QijOUR+iQ3A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/notices@5.16.0': - resolution: {integrity: sha512-RoXfFLuvgmANRmuHLmbfPyi2PEw3dYMw4GwS8t6DVvC16i6zd75S8JFCoxjA1tRJNeLw8R/NQ57Pm35w5zCzMg==} + '@wordpress/notices@5.17.0': + resolution: {integrity: sha512-1qsRcxE2dnvIJO9IQHnK9D/U/RgRmccDhbNrBxcgOqEVHTFwDambuxte4JXOmJZVr+uqh8Z3ggr+4H6zCjs/9Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/patterns@2.16.0': - resolution: {integrity: sha512-1OK3qJUUYR5HCgGWwSBzROEyUsgOnwq2ojKwPhVWCgsObrsuQLj8dedksuKDBjunW/9nUodWiKN6uR+acJBuUw==} + '@wordpress/patterns@2.17.0': + resolution: {integrity: sha512-NPTYVeBVl7+wcXDP1YJbubVYo3xroExrgbWsH6kpl4sK6f7ZvCa7Ka/Na8WL0MXJbhhpw3S+zeUL8QOxKKeWGg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/plugins@7.16.0': - resolution: {integrity: sha512-uyqJcuB2up8/tJ4qabjYO1ZHD5hEuhNRp2z6nDROnKWKpegFnO2lXbxzhEZkBLDRox2ds+3sOBkEHquwxVFsBA==} + '@wordpress/plugins@7.17.0': + resolution: {integrity: sha512-CoVDWqUq3gXiv8TFJz+vFvTuAvbq2h0Ct8ciH+tGi7SykhA35GqnCcfR/aKDOlAXHGpD0vwxV0iv08kmhIVQ/A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/postcss-plugins-preset@5.16.0': - resolution: {integrity: sha512-+rVpUQo+HXGFBvCLox45OxwT/U4hsDD8UpcDh8MAwFwrYf33GUGgdAhO5i4V3RyJiMmiZpsemkHFjlOg10kUjQ==} + '@wordpress/postcss-plugins-preset@5.17.0': + resolution: {integrity: sha512-mpEPYNOC1PgQMFalIcp4rdlvMf3/Gppvn2NWzxPIoIxA/AYJEbwZ4ctPIbioXIWaubM1UizC6Z8+7S2huLsfUw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: postcss: ^8.0.0 - '@wordpress/preferences@4.16.0': - resolution: {integrity: sha512-FLHwwC1z+1jef8oN8QykMqK/D6beEkBwI3EZSMj3gPKxlA5Q5CqUF32blUBMDRVE4h1xx6jQaM/B2DBroMoJew==} + '@wordpress/preferences@4.17.0': + resolution: {integrity: sha512-jNyHhuar2RflBJ9JqGs0ZQXnU86URCQXlR4syXzZdVU75Sm1fPByqKDtR9/F/bWnPxLlU1uP89SKv54kGpSM4Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/prettier-config@4.16.0': - resolution: {integrity: sha512-raaEW2x+pPfIYXF7RUJGEH8zeYWd4esIE0bJbKTAJV0yM+RE/DOWsGLGPiVvLEAAPg2AkIZ7oX0UPOYsBrsBqw==} + '@wordpress/prettier-config@4.17.0': + resolution: {integrity: sha512-yoNJRCRMX27bvGyLzF2GunbPqksn6NJD1DDbV7a5j8gUvOZezN+5duAFApIDwaa4n3fxfIzf0wdoBxrMdnuBFg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: prettier: '>=3' - '@wordpress/primitives@4.16.0': - resolution: {integrity: sha512-mf5LPcA500KOo/UPiwNanNlH6Satwf4xBB1DPzw4InE67eACvAlde3oSYsoE6Uce6+7URRIefg9j47yXP2jkxw==} + '@wordpress/primitives@4.17.0': + resolution: {integrity: sha512-O1dysI/Y9xv5uUMllH2VIxuBDCOVUX8WmouE9KKr11Yv4gkHzxzaU2M5rFtu7RbUCv6jtkvjidy2cuZuNpEIHQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -8588,122 +8560,104 @@ packages: resolution: {integrity: sha512-W+qCS8HJWsXG8gE6yK/H/IObowcghPrQMM3cQHtfd/U05yFNU1Bd/fbj3AO1fVRztktS47lIpi9m3ll1evPEHA==} engines: {node: '>=12'} - '@wordpress/priority-queue@3.16.0': - resolution: {integrity: sha512-YmVPE/kHmAIEYiSnnfxQI7JBAvXxlCyVoGlfWxCJ/IH8W7gbZtl1R+iuRvT8L4Cdr+sUybT68Ry+o4o39OqURg==} + '@wordpress/priority-queue@3.17.0': + resolution: {integrity: sha512-WzQHNx6wjgbxhuaKErjIRLSL9E9La8slsAXRTQPmkgvKqa11Rh4RYl2FLUh8tABK3xo5HzaHCplkZSm2q5wlbg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/private-apis@1.14.0': - resolution: {integrity: sha512-ul932/nV1+DV+bg35zKIcWz31tKUufiTl0Ysxcd81uFK+rG1Pf2420eM7V7wlOvJGpwrwbURpK4r4F5WQ0NpKQ==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/private-apis@1.16.0': - resolution: {integrity: sha512-k/AQ11+vlbpSWhyOU5t8huoGdN+PursA8bUxVfhEnqcKRWTK+LKSmSEpdyL1sv6XJqznWYjgaNSdIxTkadsPpg==} + '@wordpress/private-apis@1.17.0': + resolution: {integrity: sha512-9NGPyuUvtJD0OjWJ/Cn+6Qhjb8hXhiJH4i80W7MFVHRgUZLc/Tu5BOg2+OnXMRSePbgYivo1NLEukqdXqse5IA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/react-i18n@4.16.0': resolution: {integrity: sha512-GywcNpdyd2/Px6jsdAORoeC2jZdmDJA7rL0GZjxkerSuOreWMNaUYhYhcLW3biIexYxz0e0foNoZe570WdNnNg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/redux-routine@5.16.0': - resolution: {integrity: sha512-piLnJnV+tzWOEPJPdp431TcaKRoCpgGJ309W+UxM7fRHrYH/XZcXD8a+0pq56Dh/1QFO1elXXhPzhZQknwtyYw==} + '@wordpress/redux-routine@5.17.0': + resolution: {integrity: sha512-RBUNOp+wSweymRB0+fThv1HKUf1c8GVMUT/Xv0kqtrRsGFD70ciwnnfVXnPY0V6po9Uzj5Bb4+2qO/l/e2IwXw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: redux: '>=4' - '@wordpress/reusable-blocks@5.16.0': - resolution: {integrity: sha512-bWMeUP2+84mJrIEwzdw6KQ0zZGa/i/rCGNkiTl6IRL2ysxKjKTfOOCGGTzHcD8eYni2AXFpfLA6UBy9glv6eqg==} + '@wordpress/reusable-blocks@5.17.0': + resolution: {integrity: sha512-VxKBz1KZCTSnhdiaoNbcQrFW9dqRNEkGP60guWqqFlSYl5SpPqulwhtNCpfIw2Z9z8oYMGa7/2JO64WiVeYwGA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/rich-text@7.16.0': - resolution: {integrity: sha512-p+9WPzVo5pXLr1Xt04gQ1kdYQYmw05r2Kp42tgIfFNjgCBH1plpSrzjCyV/dyHrZ7APpJFg8sNjlOJmyLQiCFg==} + '@wordpress/rich-text@7.17.0': + resolution: {integrity: sha512-HEmApVDjConxYe3cP8P+Zs0xLJZPMhfWal38MQmFelQtCNk+kT0IBg5SkFAcWYY+c4gzhK+dMKawc72uWDfm8w==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/router@1.14.0': - resolution: {integrity: sha512-cloEfwH2dHnR4MYXBMs5hrwFptSvoJToGZoOxKd89qtgwjvEkFc8sr1XsosekSqP8XxrXNZm3xanSyOyKWwJsw==} + '@wordpress/router@1.17.0': + resolution: {integrity: sha512-hzc3Hdbnje7Bl/MHCfDnTbjVwyoVR6Cp05H1N1f6pAbqSTgHTyefMkkK4CPtwplpYcsY+yvEfPij1GejcFaAgg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/router@1.16.0': - resolution: {integrity: sha512-P4txQueN9aaRcPFTIyVePkGRl5h38cA66X/Q67kqL4OntphTgg4T8lpKlVu6QOD/Q52ARtjiHaIFq9ezRIfTvA==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - peerDependencies: - react: ^18.0.0 - - '@wordpress/server-side-render@5.16.0': - resolution: {integrity: sha512-OB6Omav6X4yciYGNQHHJpw/psKyAO2Z7ab9UGvlaST/YnmBD+9IZYtp9boo3D3zfOjB5aeD+2shRpt9zOBYEbw==} + '@wordpress/server-side-render@5.17.0': + resolution: {integrity: sha512-xJWABbtCZmkO6+Xa1DS3Mq+f2ZKH540aj5xeN7M1W1meAFdcZlEAbQI+Kn1PuXI9VpHIh5K+JOybHD06TI4hZQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/shortcode@4.13.0': - resolution: {integrity: sha512-CDPrKtawaVM9Q9UdE+tzh6PbajS8g6Ft1yvW46ATQEAzYdGNW/Radejx6OYz748SSaRuj3OFrOKziFWGjNoPCg==} + '@wordpress/shortcode@4.17.0': + resolution: {integrity: sha512-sNPUmeeK/dxK5z8BWSsk5OqRSf2UzfczpKu3upRn9eIdgG31SCXPgzvps73upIrxZNDCTQVVFhq47KADX8TiUA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/shortcode@4.16.0': - resolution: {integrity: sha512-T3KLZq5SYGigltEQumCKExKBJqnI2IF2elnJpd5+CFxQQAb9/gsrZ4TBG7ommOlXHZKn5hwD2YIEEM/ZAkGQ4A==} + '@wordpress/style-engine@2.17.0': + resolution: {integrity: sha512-6eIdeQH0t7va1AjZIGo8sEW8NE+dcz//KXp+HsW/2XhATAIPjUjFJ2/SVRNCj3JHFKSjKpxnZi26xalfET0PqA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/style-engine@2.16.0': - resolution: {integrity: sha512-eOaa14iAqXDS8y9ndQxM1f+Ibc9suuA6naEZ+8d74eEvBIZclQgi0GZpA1n8HEuDsRi9o2VhnXzJe6X6lsQduA==} + '@wordpress/sync@1.17.0': + resolution: {integrity: sha512-otylLNYzW0Tu5NIgLwGwE2rvjikyB3KCFlpqIl4otR1XxqFM7obHG7VU+e0LKQdlg6NIdCZdWyv2nNGnz5cjFg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/sync@1.16.0': - resolution: {integrity: sha512-VSKow7DEWa0ANjbKGlP8b4zjMNABGArEklsE3F4f5zy39sBcfm0Ox+jnLjGjXe0pLHSB/ANuPYfgt/R5nyyttQ==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/token-list@3.16.0': - resolution: {integrity: sha512-bhBZTKcR8NZXgW9tsHDJm3YTIsCnWb/i50cN59w9FqYICOUFGC4RKyEDzJN6rpgW9dRu6J7xfsC8PjlMukNc6Q==} + '@wordpress/token-list@3.17.0': + resolution: {integrity: sha512-TO224Seolfy/eapbOg15poz1Ws44xW3KHrqeo7Jp+6hmqQh/5OJE5wDFTzgsbdnAXFzy3DAGJxxxrCv0qpf+YA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/undo-manager@0.18.0': resolution: {integrity: sha512-upbzPEToa095XG+2JXLHaolF1LfXEMFS0lNMYV37myoUS+eZ7/tl9Gx+yU2+OqWy57TMwx33NlWUX/n+ynzPRw==} engines: {node: '>=12'} - '@wordpress/undo-manager@1.16.0': - resolution: {integrity: sha512-IE3u5Yk8QzUhiLAiGmYostsygxQExs9mVWlZ1BAXniEGCAcVdvDv7IB16dIgQxCYG3/idvmFdNbN8aQGX+nEIg==} + '@wordpress/undo-manager@1.17.0': + resolution: {integrity: sha512-inSOCUneGMmFq3jRTB9uIws/+6VWpz0zvY2IPW/vjWbz7Gg1YbJ+lmbbgtJCoiJ7Ei00b4sagvzI00TNUXe9mg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/upload-media@0.1.0': - resolution: {integrity: sha512-K0B9XlHrqOJ6YwwVchP6v6ohduD/mfJKNQxDauZiCqcWim8r8rcTrFp+nBUw3TujDCKas23aVMl09aQpA8zcMw==} + '@wordpress/upload-media@0.2.0': + resolution: {integrity: sha512-xPPru9rSDTKWpFMMM5dOaPQIkf38L3gNinjSHkU7arFyK14G60HklvZJ/MTk7RjjgQ7h1sYe8tvdiTvI8CQZyQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: - '@babel/runtime': ^7 - react: ^18 + react: ^18.0.0 + react-dom: ^18.0.0 - '@wordpress/url@4.16.0': - resolution: {integrity: sha512-A9kkw/ye2qL9ZHvm1Eew8bvGVnNMq4fW0t5dakdDuVXyXtSOvZVT268JhP9QaD0FYzOFrmxL5Ks8Z6ufP1yLwg==} + '@wordpress/url@4.17.0': + resolution: {integrity: sha512-aFU1w2Wcz2/YdapPYozeXbb7C7LzfYZmAg4Bu28zTSxxrpKYocr/oYH7D8V13uHzfBoqTzL8XYM7wj17Dlcdag==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/viewport@6.16.0': - resolution: {integrity: sha512-OAvg2K0WXqAvfSAxcfewHFpKeN+oymR7f/q/PisAeBtktgFANnFcgNRWsHVrmLeiO5IFFKpc+YbHNT69GF1gfA==} + '@wordpress/viewport@6.17.0': + resolution: {integrity: sha512-xhTOdRjA2bjmuWOYoJtq9Tdnjle7u0bCkJyyuCVrMWxqAunxcI8QxSTXm9OqvuAVbvGfhH9i/BIeeTQjFYPxPA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 - '@wordpress/warning@3.13.0': - resolution: {integrity: sha512-e35ab+D1aE2zFOLd/f1zmjlHtVjVL31ayOszwRgK+XXv7jnhjW5KUjquAykKQbYnFlVLHC20h6p8IiNuSyzfUQ==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - - '@wordpress/warning@3.16.0': - resolution: {integrity: sha512-XsgqRPvB+VSecXnD3VfvJJxhcdTTX4EkgdzvWspmQnw0rNCV636KByZVgolzYhvr3La9EgqO+MqXzwvPHg/xfQ==} + '@wordpress/warning@3.17.0': + resolution: {integrity: sha512-dmEjDbYtfPD8rMRtSrLxoW3g8CLKl+vK5pdXvDvG0lBoRjqwtRPP4cgNBOC8cq8gXRCwh5NDDtM2C8MTjGjVsQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} - '@wordpress/widgets@4.16.0': - resolution: {integrity: sha512-QwGDIj4fmHb6w9lL0VvVkFIUGpEwrg/MQQ7xbwzjTsn9PddqsejuB2CyJSdx80DwOOUN6r/UW7+UYYaW1nOv9A==} + '@wordpress/widgets@4.17.0': + resolution: {integrity: sha512-tQsaAGKVzmmGUpxysrfDdu6ujZ/w5y+ykkPtyKMjxyW9o+Ai6MztzjgBvkg14cSDUEvCdHku6396uKCqFIhiiQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@wordpress/wordcount@4.16.0': - resolution: {integrity: sha512-6SDQRa1rKSZlTlpWh0wfxOUGFfeM2fgLRm7MPFK4/ORX1oOOYAWCN3nMd4zLXzoq2fSqcVem7rcLBm9kHqLhQg==} + '@wordpress/wordcount@4.17.0': + resolution: {integrity: sha512-lT4NmbK0fMX+mqm/1XSoTsW7VqmxApZcZFPtWvT5UH6js1XcDrQa9liIUv6RyMlrrLHTTDrq+e4mNVeND68o5A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@xmldom/xmldom@0.7.13': @@ -15342,14 +15296,14 @@ snapshots: '@automattic/calypso-config@1.2.0': {} - '@automattic/calypso-products@1.2.1(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@automattic/calypso-products@1.2.1(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@automattic/calypso-config': 1.2.0 - '@automattic/components': 2.2.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@automattic/components': 2.2.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@automattic/i18n-utils': 1.2.3 '@automattic/shopping-cart': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@automattic/urls': 1.0.0 - '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) i18n-calypso: 7.0.0(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 transitivePeerDependencies: @@ -15371,7 +15325,7 @@ snapshots: '@automattic/color-studio@4.0.0': {} - '@automattic/components@2.2.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@automattic/components@2.2.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@automattic/calypso-analytics': 1.1.3 '@automattic/calypso-color-schemes': 3.1.3 @@ -15386,10 +15340,10 @@ snapshots: '@emotion/css': 11.13.5 '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) - '@wordpress/base-styles': 5.16.0 + '@wordpress/base-styles': 5.17.0 '@wordpress/components': 28.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/icons': 10.16.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/icons': 10.17.0(react@18.3.1) '@wordpress/react-i18n': 4.16.0 canvas-confetti: 1.9.3 clsx: 2.1.1 @@ -15413,11 +15367,11 @@ snapshots: - '@types/react' - supports-color - '@automattic/data-stores@3.1.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@automattic/data-stores@3.1.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@automattic/calypso-analytics': 1.1.3 '@automattic/calypso-config': 1.2.0 - '@automattic/calypso-products': 1.2.1(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@automattic/calypso-products': 1.2.1(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@automattic/format-currency': 2.0.0 '@automattic/i18n-utils': 1.2.3 '@automattic/js-utils': 0.1.0 @@ -15425,14 +15379,14 @@ snapshots: '@automattic/oauth-token': 1.0.0 '@automattic/shopping-cart': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': 5.20.5(react@18.3.1) - '@wordpress/api-fetch': 7.16.0 - '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/api-fetch': 7.17.0 + '@wordpress/data': 10.17.0(react@18.3.1) '@wordpress/data-controls': 4.16.0(react@18.3.1) - '@wordpress/deprecated': 4.13.0 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 debug: 4.4.0 fast-json-stable-stringify: 2.1.0 i18n-calypso: 7.0.0(@types/react@18.3.18)(react@18.3.1) @@ -15474,8 +15428,8 @@ snapshots: '@automattic/calypso-config': 1.2.0 '@automattic/calypso-url': 1.1.0 '@automattic/languages': 1.0.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/i18n': 5.16.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/i18n': 5.17.0 react: 18.3.1 tslib: 2.5.0 transitivePeerDependencies: @@ -15493,23 +15447,23 @@ snapshots: dependencies: tslib: 2.5.0 - '@automattic/launchpad@1.1.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(@wordpress/element@6.16.0)(@wordpress/i18n@5.16.0)(debug@4.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)': + '@automattic/launchpad@1.1.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(@wordpress/element@6.17.0)(@wordpress/i18n@5.17.0)(debug@4.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)': dependencies: '@automattic/calypso-analytics': 1.1.3 '@automattic/calypso-config': 1.2.0 - '@automattic/components': 2.2.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@automattic/data-stores': 3.1.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@automattic/components': 2.2.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@automattic/data-stores': 3.1.0(@babel/runtime@7.24.7)(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@automattic/i18n-utils': 1.2.3 '@automattic/typography': 1.0.0 '@automattic/viewport': 1.1.0 '@tanstack/react-query': 5.20.5(react@18.3.1) - '@wordpress/base-styles': 5.16.0 + '@wordpress/base-styles': 5.17.0 '@wordpress/components': 28.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 clsx: 2.1.1 debug: 4.4.0 react: 18.3.1 @@ -15538,18 +15492,18 @@ snapshots: cookie: 0.4.2 store: 2.0.12 - '@automattic/page-pattern-modal@1.1.5(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@wordpress/data@10.16.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)(webpack@5.94.0)': + '@automattic/page-pattern-modal@1.1.5(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@wordpress/data@10.17.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)(webpack@5.94.0)': dependencies: '@automattic/color-studio': 2.6.0 '@automattic/typography': 1.0.0 '@wordpress/base-styles': 5.2.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 clsx: 2.1.1 debug: 4.4.0 lodash: 4.17.21 @@ -15585,9 +15539,9 @@ snapshots: '@automattic/social-previews@2.1.0-beta.9(@babel/runtime@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 @@ -15607,7 +15561,7 @@ snapshots: '@automattic/viewport-react@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@automattic/viewport': 1.1.0 - '@wordpress/compose': 7.16.0(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18805,10 +18759,10 @@ snapshots: dependencies: '@types/react': 18.3.18 '@types/wordpress__blocks': 12.5.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/keycodes': 4.14.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/keycodes': 4.17.0 react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@emotion/is-prop-valid' @@ -18819,10 +18773,10 @@ snapshots: '@types/wordpress__blocks@12.5.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@types/react': 18.3.18 - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/shortcode': 4.13.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/shortcode': 4.17.0 transitivePeerDependencies: - '@emotion/is-prop-valid' - react @@ -19275,47 +19229,37 @@ snapshots: webpack: 5.94.0(webpack-cli@6.0.1) webpack-cli: 6.0.1(webpack@5.94.0) - '@wordpress/a11y@4.13.0': - dependencies: - '@babel/runtime': 7.25.7 - '@wordpress/dom-ready': 4.16.0 - '@wordpress/i18n': 5.16.0 - - '@wordpress/a11y@4.16.0': + '@wordpress/a11y@4.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/dom-ready': 4.16.0 - '@wordpress/i18n': 5.16.0 + '@wordpress/dom-ready': 4.17.0 + '@wordpress/i18n': 5.17.0 - '@wordpress/annotations@3.16.0(react@18.3.1)': + '@wordpress/annotations@3.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/hooks': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/hooks': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) react: 18.3.1 uuid: 9.0.1 - '@wordpress/api-fetch@7.16.0': + '@wordpress/api-fetch@7.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n': 5.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/url': 4.17.0 - '@wordpress/autop@4.16.0': + '@wordpress/autop@4.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/babel-plugin-import-jsx-pragma@5.14.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - - '@wordpress/babel-plugin-import-jsx-pragma@5.16.0(@babel/core@7.26.0)': + '@wordpress/babel-plugin-import-jsx-pragma@5.17.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@wordpress/babel-preset-default@8.16.0': + '@wordpress/babel-preset-default@8.17.0': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) @@ -19323,60 +19267,60 @@ snapshots: '@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 - '@wordpress/browserslist-config': 6.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/browserslist-config': 6.17.0 + '@wordpress/warning': 3.17.0 browserslist: 4.24.3 core-js: 3.38.1 react: 18.3.1 transitivePeerDependencies: - supports-color - '@wordpress/base-styles@5.16.0': {} + '@wordpress/base-styles@5.17.0': {} '@wordpress/base-styles@5.2.0': {} - '@wordpress/blob@4.16.0': + '@wordpress/blob@4.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor@14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/block-editor@14.12.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-serialization-default-parser': 5.16.0 - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/priority-queue': 3.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/style-engine': 2.16.0 - '@wordpress/token-list': 3.16.0 - '@wordpress/upload-media': 0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-serialization-default-parser': 5.17.0 + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/style-engine': 2.17.0 + '@wordpress/token-list': 3.17.0 + '@wordpress/upload-media': 0.2.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19402,44 +19346,44 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/block-editor@14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/block-editor@14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-serialization-default-parser': 5.16.0 - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/priority-queue': 3.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/style-engine': 2.16.0 - '@wordpress/token-list': 3.16.0 - '@wordpress/upload-media': 0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-serialization-default-parser': 5.17.0 + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/style-engine': 2.17.0 + '@wordpress/token-list': 3.17.0 + '@wordpress/upload-media': 0.2.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19465,44 +19409,44 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/block-editor@14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/block-editor@14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-serialization-default-parser': 5.16.0 - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/priority-queue': 3.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/style-engine': 2.16.0 - '@wordpress/token-list': 3.16.0 - '@wordpress/upload-media': 0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-serialization-default-parser': 5.17.0 + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/style-engine': 2.17.0 + '@wordpress/token-list': 3.17.0 + '@wordpress/upload-media': 0.2.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19528,44 +19472,44 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/block-editor@14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/block-editor@14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.14.0(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-serialization-default-parser': 5.16.0 - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/priority-queue': 3.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/style-engine': 2.16.0 - '@wordpress/token-list': 3.16.0 - '@wordpress/upload-media': 0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-serialization-default-parser': 5.17.0 + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/preferences': 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/style-engine': 2.17.0 + '@wordpress/token-list': 3.17.0 + '@wordpress/upload-media': 0.2.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19591,44 +19535,44 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/block-editor@14.11.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/block-editor@14.12.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-serialization-default-parser': 5.16.0 - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/priority-queue': 3.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/style-engine': 2.16.0 - '@wordpress/token-list': 3.16.0 - '@wordpress/upload-media': 0.1.0(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-serialization-default-parser': 5.17.0 + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/style-engine': 2.17.0 + '@wordpress/token-list': 3.17.0 + '@wordpress/upload-media': 0.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19654,42 +19598,42 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/block-library@9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/block-library@9.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/autop': 4.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/interactivity': 6.16.0 - '@wordpress/interactivity-router': 2.16.0 - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/viewport': 6.16.0(react@18.3.1) - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/autop': 4.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/interactivity': 6.17.0 + '@wordpress/interactivity-router': 2.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/reusable-blocks': 5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/server-side-render': 5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/viewport': 6.17.0(react@18.3.1) + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19712,42 +19656,42 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/block-library@9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/block-library@9.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/autop': 4.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/interactivity': 6.16.0 - '@wordpress/interactivity-router': 2.16.0 - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/viewport': 6.16.0(react@18.3.1) - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/autop': 4.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/interactivity': 6.17.0 + '@wordpress/interactivity-router': 2.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/reusable-blocks': 5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/server-side-render': 5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/viewport': 6.17.0(react@18.3.1) + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19770,42 +19714,42 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/block-library@9.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/block-library@9.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/autop': 4.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/interactivity': 6.16.0 - '@wordpress/interactivity-router': 2.16.0 - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/server-side-render': 5.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/viewport': 6.16.0(react@18.3.1) - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/autop': 4.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/interactivity': 6.17.0 + '@wordpress/interactivity-router': 2.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/reusable-blocks': 5.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/server-side-render': 5.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/viewport': 6.17.0(react@18.3.1) + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19828,28 +19772,28 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/block-serialization-default-parser@5.16.0': + '@wordpress/block-serialization-default-parser@5.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/blocks@14.5.0(react@18.3.1)': + '@wordpress/blocks@14.6.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/autop': 4.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-serialization-default-parser': 5.16.0 - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/shortcode': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/autop': 4.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-serialization-default-parser': 5.17.0 + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/shortcode': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 colord: 2.9.3 fast-deep-equal: 3.1.3 @@ -19863,18 +19807,18 @@ snapshots: simple-html-tokenizer: 0.5.11 uuid: 9.0.1 - '@wordpress/browserslist-config@6.16.0': {} + '@wordpress/browserslist-config@6.17.0': {} - '@wordpress/commands@1.16.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/commands@1.17.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 clsx: 2.1.1 cmdk: 1.0.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -19885,16 +19829,16 @@ snapshots: - '@types/react-dom' - supports-color - '@wordpress/commands@1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/commands@1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 clsx: 2.1.1 cmdk: 1.0.4(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -19905,16 +19849,16 @@ snapshots: - '@types/react-dom' - supports-color - '@wordpress/commands@1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/commands@1.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 clsx: 2.1.1 cmdk: 1.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -19939,23 +19883,23 @@ snapshots: '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 '@use-gesture/react': 10.3.1(react@18.3.1) - '@wordpress/a11y': 4.13.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.13.0 - '@wordpress/dom': 4.13.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.13.0 - '@wordpress/keycodes': 4.16.0 - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.14.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/warning': 3.13.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keycodes': 4.17.0 + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/warning': 3.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -19979,7 +19923,7 @@ snapshots: - '@types/react' - supports-color - '@wordpress/components@29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/components@29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 @@ -19993,23 +19937,23 @@ snapshots: '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 '@use-gesture/react': 10.3.1(react@18.3.1) - '@wordpress/a11y': 4.16.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keycodes': 4.16.0 - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/warning': 3.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keycodes': 4.17.0 + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/warning': 3.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -20033,7 +19977,7 @@ snapshots: - '@types/react' - supports-color - '@wordpress/components@29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/components@29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 @@ -20047,23 +19991,23 @@ snapshots: '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 '@use-gesture/react': 10.3.1(react@18.3.1) - '@wordpress/a11y': 4.16.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keycodes': 4.16.0 - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/warning': 3.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keycodes': 4.17.0 + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/warning': 3.17.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -20104,56 +20048,56 @@ snapshots: react: 18.3.1 use-memo-one: 1.1.3(react@18.3.1) - '@wordpress/compose@7.16.0(react@18.2.0)': + '@wordpress/compose@7.17.0(react@18.2.0)': dependencies: '@babel/runtime': 7.25.7 '@types/mousetrap': 1.6.15 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keycodes': 4.16.0 - '@wordpress/priority-queue': 3.16.0 - '@wordpress/undo-manager': 1.16.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keycodes': 4.17.0 + '@wordpress/priority-queue': 3.17.0 + '@wordpress/undo-manager': 1.17.0 change-case: 4.1.2 clipboard: 2.0.11 mousetrap: 1.6.5 react: 18.2.0 use-memo-one: 1.1.3(react@18.2.0) - '@wordpress/compose@7.16.0(react@18.3.1)': + '@wordpress/compose@7.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@types/mousetrap': 1.6.15 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/keycodes': 4.16.0 - '@wordpress/priority-queue': 3.16.0 - '@wordpress/undo-manager': 1.16.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keycodes': 4.17.0 + '@wordpress/priority-queue': 3.17.0 + '@wordpress/undo-manager': 1.17.0 change-case: 4.1.2 clipboard: 2.0.11 mousetrap: 1.6.5 react: 18.3.1 use-memo-one: 1.1.3(react@18.3.1) - '@wordpress/core-commands@1.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/core-commands@1.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/router': 1.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/router': 1.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -20167,22 +20111,22 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/core-commands@1.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/core-commands@1.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/router': 1.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/router': 1.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -20196,22 +20140,22 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/core-commands@1.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/core-commands@1.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/commands': 1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/router': 1.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/commands': 1.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/router': 1.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -20225,25 +20169,25 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/core-data@7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/core-data@7.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/sync': 1.16.0 - '@wordpress/undo-manager': 1.16.0 - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/sync': 1.17.0 + '@wordpress/undo-manager': 1.17.0 + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 equivalent-key-map: 0.2.2 fast-deep-equal: 3.1.3 @@ -20262,25 +20206,25 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/core-data@7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/core-data@7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/sync': 1.16.0 - '@wordpress/undo-manager': 1.16.0 - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/sync': 1.17.0 + '@wordpress/undo-manager': 1.17.0 + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 equivalent-key-map: 0.2.2 fast-deep-equal: 3.1.3 @@ -20299,25 +20243,25 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/core-data@7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/core-data@7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/sync': 1.16.0 - '@wordpress/undo-manager': 1.16.0 - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/sync': 1.17.0 + '@wordpress/undo-manager': 1.17.0 + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 equivalent-key-map: 0.2.2 fast-deep-equal: 3.1.3 @@ -20336,25 +20280,25 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/core-data@7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/core-data@7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/sync': 1.16.0 - '@wordpress/undo-manager': 1.16.0 - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/sync': 1.17.0 + '@wordpress/undo-manager': 1.17.0 + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 equivalent-key-map: 0.2.2 fast-deep-equal: 3.1.3 @@ -20376,21 +20320,21 @@ snapshots: '@wordpress/data-controls@4.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 react: 18.3.1 - '@wordpress/data@10.16.0(react@18.2.0)': + '@wordpress/data@10.17.0(react@18.2.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.16.0(react@18.2.0) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/priority-queue': 3.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/redux-routine': 5.16.0(redux@5.0.1) + '@wordpress/compose': 7.17.0(react@18.2.0) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/priority-queue': 3.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/redux-routine': 5.17.0(redux@5.0.1) deepmerge: 4.3.1 equivalent-key-map: 0.2.2 is-plain-object: 5.0.0 @@ -20400,16 +20344,16 @@ snapshots: rememo: 4.0.2 use-memo-one: 1.1.3(react@18.2.0) - '@wordpress/data@10.16.0(react@18.3.1)': + '@wordpress/data@10.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/is-shallow-equal': 5.16.0 - '@wordpress/priority-queue': 3.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/redux-routine': 5.16.0(redux@5.0.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/priority-queue': 3.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/redux-routine': 5.17.0(redux@5.0.1) deepmerge: 4.3.1 equivalent-key-map: 0.2.2 is-plain-object: 5.0.0 @@ -20423,15 +20367,15 @@ snapshots: dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/warning': 3.17.0 clsx: 2.1.1 react: 18.3.1 remove-accents: 0.5.0 @@ -20441,19 +20385,19 @@ snapshots: - react-dom - supports-color - '@wordpress/dataviews@4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/dataviews@4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/warning': 3.17.0 clsx: 2.1.1 react: 18.3.1 remove-accents: 0.5.0 @@ -20463,14 +20407,36 @@ snapshots: - react-dom - supports-color - '@wordpress/date@5.16.0': + '@wordpress/dataviews@4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: + '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 - '@wordpress/deprecated': 4.16.0 + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/warning': 3.17.0 + clsx: 2.1.1 + react: 18.3.1 + remove-accents: 0.5.0 + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/react' + - react-dom + - supports-color + + '@wordpress/date@5.17.0': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/deprecated': 4.17.0 moment: 2.30.1 moment-timezone: 0.5.46 - '@wordpress/dependency-extraction-webpack-plugin@6.16.0(webpack@5.94.0)': + '@wordpress/dependency-extraction-webpack-plugin@6.17.0(webpack@5.94.0)': dependencies: json2php: 0.0.7 webpack: 5.94.0(webpack-cli@6.0.1) @@ -20480,21 +20446,12 @@ snapshots: '@babel/runtime': 7.26.0 '@wordpress/hooks': 3.58.0 - '@wordpress/deprecated@4.13.0': + '@wordpress/deprecated@4.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/hooks': 4.16.0 + '@wordpress/hooks': 4.17.0 - '@wordpress/deprecated@4.16.0': - dependencies: - '@babel/runtime': 7.25.7 - '@wordpress/hooks': 4.16.0 - - '@wordpress/dom-ready@4.14.0': - dependencies: - '@babel/runtime': 7.25.7 - - '@wordpress/dom-ready@4.16.0': + '@wordpress/dom-ready@4.17.0': dependencies: '@babel/runtime': 7.25.7 @@ -20503,17 +20460,12 @@ snapshots: '@babel/runtime': 7.26.0 '@wordpress/deprecated': 3.58.0 - '@wordpress/dom@4.13.0': - dependencies: - '@babel/runtime': 7.25.7 - '@wordpress/deprecated': 4.13.0 - - '@wordpress/dom@4.16.0': + '@wordpress/dom@4.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/deprecated': 4.16.0 + '@wordpress/deprecated': 4.17.0 - '@wordpress/e2e-test-utils-playwright@1.16.0(@playwright/test@1.48.2)': + '@wordpress/e2e-test-utils-playwright@1.17.0(@playwright/test@1.48.2)': dependencies: '@playwright/test': 1.48.2 change-case: 4.1.2 @@ -20527,38 +20479,38 @@ snapshots: - supports-color - utf-8-validate - '@wordpress/edit-post@8.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/edit-post@8.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/block-library': 9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-commands': 1.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/editor': 14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 - '@wordpress/viewport': 6.16.0(react@18.3.1) - '@wordpress/warning': 3.16.0 - '@wordpress/widgets': 4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/block-library': 9.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-commands': 1.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/editor': 14.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/plugins': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 + '@wordpress/viewport': 6.17.0(react@18.3.1) + '@wordpress/warning': 3.17.0 + '@wordpress/widgets': 4.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) clsx: 2.1.1 memize: 2.1.0 react: 18.3.1 @@ -20574,38 +20526,38 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/edit-post@8.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/edit-post@8.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/block-library': 9.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-commands': 1.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/editor': 14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 - '@wordpress/viewport': 6.16.0(react@18.3.1) - '@wordpress/warning': 3.16.0 - '@wordpress/widgets': 4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/block-library': 9.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-commands': 1.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/editor': 14.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/plugins': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 + '@wordpress/viewport': 6.17.0(react@18.3.1) + '@wordpress/warning': 3.17.0 + '@wordpress/widgets': 4.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) clsx: 2.1.1 memize: 2.1.0 react: 18.3.1 @@ -20621,38 +20573,38 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/edit-post@8.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/edit-post@8.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/block-library': 9.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-commands': 1.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/editor': 14.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/plugins': 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 - '@wordpress/viewport': 6.16.0(react@18.3.1) - '@wordpress/warning': 3.16.0 - '@wordpress/widgets': 4.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/block-library': 9.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-commands': 1.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/editor': 14.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/plugins': 7.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 + '@wordpress/viewport': 6.17.0(react@18.3.1) + '@wordpress/warning': 3.17.0 + '@wordpress/widgets': 4.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) clsx: 2.1.1 memize: 2.1.0 react: 18.3.1 @@ -20668,44 +20620,44 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/editor@14.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/editor@14.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/fields': 0.8.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/interface': 9.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/media-utils': 5.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/fields': 0.9.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/interface': 9.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/plugins': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/reusable-blocks': 5.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/server-side-render': 5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -20730,44 +20682,44 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/editor@14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/editor@14.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/fields': 0.8.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/interface': 9.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/media-utils': 5.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/fields': 0.9.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/interface': 9.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/plugins': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/reusable-blocks': 5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/server-side-render': 5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -20792,44 +20744,44 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/editor@14.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/editor@14.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/fields': 0.8.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/interface': 9.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/media-utils': 5.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/server-side-render': 5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/fields': 0.9.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/interface': 9.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/plugins': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/reusable-blocks': 5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/server-side-render': 5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -20854,44 +20806,44 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/editor@14.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/editor@14.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/commands': 1.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/deprecated': 4.16.0 - '@wordpress/dom': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/fields': 0.8.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/interface': 9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/keyboard-shortcuts': 5.16.0(react@18.3.1) - '@wordpress/keycodes': 4.16.0 - '@wordpress/media-utils': 5.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/plugins': 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/reusable-blocks': 5.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/server-side-render': 5.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 - '@wordpress/wordcount': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/fields': 0.9.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/interface': 9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/plugins': 7.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/reusable-blocks': 5.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/server-side-render': 5.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -20927,23 +20879,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@wordpress/element@6.14.0': + '@wordpress/element@6.17.0': dependencies: '@babel/runtime': 7.25.7 '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@wordpress/escape-html': 3.16.0 - change-case: 4.1.2 - is-plain-object: 5.0.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@wordpress/element@6.16.0': - dependencies: - '@babel/runtime': 7.25.7 - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@wordpress/escape-html': 3.16.0 + '@wordpress/escape-html': 3.17.0 change-case: 4.1.2 is-plain-object: 5.0.0 react: 18.3.1 @@ -20953,16 +20894,16 @@ snapshots: dependencies: '@babel/runtime': 7.26.0 - '@wordpress/escape-html@3.16.0': + '@wordpress/escape-html@3.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/eslint-plugin@22.2.0(@babel/core@7.26.0)(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint-plugin-import@2.31.0)(eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4))(eslint-plugin-jsdoc@50.6.0(eslint@9.16.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0))(eslint-plugin-playwright@2.1.0(eslint@9.16.0))(eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.1.0(eslint@9.16.0))(eslint-plugin-react@7.37.2(eslint@9.16.0))(eslint@9.16.0)(typescript@5.0.4)(wp-prettier@3.0.3)': + '@wordpress/eslint-plugin@22.3.0(@babel/core@7.26.0)(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint-plugin-import@2.31.0)(eslint-plugin-jest@28.9.0(eslint@9.16.0)(jest@29.7.0)(typescript@5.0.4))(eslint-plugin-jsdoc@50.6.0(eslint@9.16.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0))(eslint-plugin-playwright@2.1.0(eslint@9.16.0))(eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.1.0(eslint@9.16.0))(eslint-plugin-react@7.37.2(eslint@9.16.0))(eslint@9.16.0)(typescript@5.0.4)(wp-prettier@3.0.3)': dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@9.16.0) - '@wordpress/babel-preset-default': 8.16.0 - '@wordpress/prettier-config': 4.16.0(wp-prettier@3.0.3) + '@wordpress/babel-preset-default': 8.17.0 + '@wordpress/prettier-config': 4.17.0(wp-prettier@3.0.3) cosmiconfig: 7.1.0 eslint: 9.16.0 eslint-config-prettier: 9.1.0(eslint@9.16.0) @@ -20982,32 +20923,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@wordpress/fields@0.8.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/fields@0.9.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/media-utils': 5.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/router': 1.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/router': 1.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -21025,32 +20966,32 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/fields@0.8.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/fields@0.9.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/media-utils': 5.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/router': 1.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/router': 1.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -21068,32 +21009,32 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/fields@0.8.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/fields@0.9.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/media-utils': 5.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/router': 1.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/router': 1.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -21111,32 +21052,32 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/fields@0.8.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/fields@0.9.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/dataviews': 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/date': 5.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/media-utils': 5.16.0 - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/patterns': 2.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/primitives': 4.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/router': 1.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 - '@wordpress/warning': 3.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/router': 1.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 change-case: 4.1.2 client-zip: 2.4.6 clsx: 2.1.1 @@ -21154,21 +21095,21 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/format-library@5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/format-library@5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/rich-text': 7.16.0(react@18.3.1) - '@wordpress/url': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21184,11 +21125,11 @@ snapshots: dependencies: '@babel/runtime': 7.26.0 - '@wordpress/hooks@4.16.0': + '@wordpress/hooks@4.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/html-entities@4.16.0': + '@wordpress/html-entities@4.17.0': dependencies: '@babel/runtime': 7.25.7 @@ -21201,46 +21142,46 @@ snapshots: sprintf-js: 1.1.2 tannin: 1.2.0 - '@wordpress/i18n@5.16.0': + '@wordpress/i18n@5.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/hooks': 4.16.0 + '@wordpress/hooks': 4.17.0 gettext-parser: 1.4.0 memize: 2.1.0 sprintf-js: 1.1.2 tannin: 1.2.0 - '@wordpress/icons@10.16.0(react@18.3.1)': + '@wordpress/icons@10.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/element': 6.16.0 - '@wordpress/primitives': 4.16.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/primitives': 4.17.0(react@18.3.1) react: 18.3.1 - '@wordpress/interactivity-router@2.16.0': + '@wordpress/interactivity-router@2.17.0': dependencies: - '@wordpress/a11y': 4.16.0 - '@wordpress/interactivity': 6.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/interactivity': 6.17.0 - '@wordpress/interactivity@6.16.0': + '@wordpress/interactivity@6.17.0': dependencies: '@preact/signals': 1.3.1(preact@10.25.4) preact: 10.25.4 - '@wordpress/interface@9.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/interface@9.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/plugins': 7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/viewport': 6.16.0(react@18.3.1) + '@wordpress/a11y': 4.17.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/plugins': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/viewport': 6.17.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21249,20 +21190,20 @@ snapshots: - '@types/react' - supports-color - '@wordpress/interface@9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/interface@9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/plugins': 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/viewport': 6.16.0(react@18.3.1) + '@wordpress/a11y': 4.17.0 + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/plugins': 7.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/viewport': 6.17.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21275,26 +21216,22 @@ snapshots: dependencies: '@babel/runtime': 7.26.0 - '@wordpress/is-shallow-equal@5.13.0': - dependencies: - '@babel/runtime': 7.25.7 - - '@wordpress/is-shallow-equal@5.16.0': + '@wordpress/is-shallow-equal@5.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/jest-console@8.16.0(jest@29.7.0)': + '@wordpress/jest-console@8.17.0(jest@29.7.0)': dependencies: '@babel/runtime': 7.25.7 jest: 29.7.0 jest-matcher-utils: 29.7.0 - '@wordpress/keyboard-shortcuts@5.16.0(react@18.3.1)': + '@wordpress/keyboard-shortcuts@5.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/keycodes': 4.16.0 + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/keycodes': 4.17.0 react: 18.3.1 '@wordpress/keycodes@3.58.0': @@ -21302,49 +21239,44 @@ snapshots: '@babel/runtime': 7.26.0 '@wordpress/i18n': 4.58.0 - '@wordpress/keycodes@4.14.0': - dependencies: - '@babel/runtime': 7.25.7 - '@wordpress/i18n': 5.16.0 - - '@wordpress/keycodes@4.16.0': + '@wordpress/keycodes@4.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/i18n': 5.16.0 + '@wordpress/i18n': 5.17.0 - '@wordpress/media-utils@5.16.0': + '@wordpress/media-utils@5.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/private-apis': 1.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/private-apis': 1.17.0 - '@wordpress/notices@5.16.0(react@18.3.1)': + '@wordpress/notices@5.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/data': 10.16.0(react@18.3.1) + '@wordpress/a11y': 4.17.0 + '@wordpress/data': 10.17.0(react@18.3.1) react: 18.3.1 - '@wordpress/patterns@2.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/patterns@2.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21358,23 +21290,23 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/patterns@2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/patterns@2.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21388,23 +21320,23 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/patterns@2.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/patterns@2.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21418,23 +21350,23 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/patterns@2.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/patterns@2.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/html-entities': 4.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21448,16 +21380,16 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/plugins@7.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/plugins@7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 memize: 2.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21466,16 +21398,16 @@ snapshots: - '@types/react' - supports-color - '@wordpress/plugins@7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/plugins@7.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/hooks': 4.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 memize: 2.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21484,24 +21416,24 @@ snapshots: - '@types/react' - supports-color - '@wordpress/postcss-plugins-preset@5.16.0(postcss@8.4.47)': + '@wordpress/postcss-plugins-preset@5.17.0(postcss@8.4.47)': dependencies: - '@wordpress/base-styles': 5.16.0 + '@wordpress/base-styles': 5.17.0 autoprefixer: 10.4.20(postcss@8.4.47) postcss: 8.4.47 - '@wordpress/preferences@4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/preferences@4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21510,18 +21442,18 @@ snapshots: - '@types/react' - supports-color - '@wordpress/preferences@4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/preferences@4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21530,14 +21462,14 @@ snapshots: - '@types/react' - supports-color - '@wordpress/prettier-config@4.16.0(wp-prettier@3.0.3)': + '@wordpress/prettier-config@4.17.0(wp-prettier@3.0.3)': dependencies: prettier: wp-prettier@3.0.3 - '@wordpress/primitives@4.16.0(react@18.3.1)': + '@wordpress/primitives@4.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/element': 6.16.0 + '@wordpress/element': 6.17.0 clsx: 2.1.1 react: 18.3.1 @@ -21546,27 +21478,23 @@ snapshots: '@babel/runtime': 7.26.0 requestidlecallback: 0.3.0 - '@wordpress/priority-queue@3.16.0': + '@wordpress/priority-queue@3.17.0': dependencies: '@babel/runtime': 7.25.7 requestidlecallback: 0.3.0 - '@wordpress/private-apis@1.14.0': - dependencies: - '@babel/runtime': 7.25.7 - - '@wordpress/private-apis@1.16.0': + '@wordpress/private-apis@1.17.0': dependencies: '@babel/runtime': 7.25.7 '@wordpress/react-i18n@4.16.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 utility-types: 3.11.0 - '@wordpress/redux-routine@5.16.0(redux@5.0.1)': + '@wordpress/redux-routine@5.17.0(redux@5.0.1)': dependencies: '@babel/runtime': 7.25.7 is-plain-object: 5.0.0 @@ -21574,20 +21502,20 @@ snapshots: redux: 5.0.1 rungen: 0.3.2 - '@wordpress/reusable-blocks@5.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/reusable-blocks@5.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21601,20 +21529,20 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/reusable-blocks@5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/reusable-blocks@5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21628,20 +21556,20 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/reusable-blocks@5.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/reusable-blocks@5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21655,20 +21583,20 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/reusable-blocks@5.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/reusable-blocks@5.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -21682,54 +21610,43 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/rich-text@7.16.0(react@18.3.1)': + '@wordpress/rich-text@7.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/a11y': 4.16.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/escape-html': 3.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/keycodes': 4.16.0 + '@wordpress/a11y': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/keycodes': 4.17.0 memize: 2.1.0 react: 18.3.1 - '@wordpress/router@1.14.0(react@18.3.1)': - dependencies: - '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/private-apis': 1.14.0 - '@wordpress/url': 4.16.0 - history: 5.3.0 - react: 18.3.1 - route-recognizer: 0.3.4 - - '@wordpress/router@1.16.0(react@18.3.1)': + '@wordpress/router@1.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 history: 5.3.0 react: 18.3.1 route-recognizer: 0.3.4 - '@wordpress/server-side-render@5.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/server-side-render@5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/url': 4.17.0 fast-deep-equal: 3.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21738,18 +21655,18 @@ snapshots: - '@types/react' - supports-color - '@wordpress/server-side-render@5.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/server-side-render@5.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/deprecated': 4.16.0 - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/url': 4.17.0 fast-deep-equal: 3.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21758,26 +21675,21 @@ snapshots: - '@types/react' - supports-color - '@wordpress/shortcode@4.13.0': + '@wordpress/shortcode@4.17.0': dependencies: '@babel/runtime': 7.25.7 memize: 2.1.0 - '@wordpress/shortcode@4.16.0': - dependencies: - '@babel/runtime': 7.25.7 - memize: 2.1.0 - - '@wordpress/style-engine@2.16.0': + '@wordpress/style-engine@2.17.0': dependencies: '@babel/runtime': 7.25.7 change-case: 4.1.2 - '@wordpress/sync@1.16.0': + '@wordpress/sync@1.17.0': dependencies: '@babel/runtime': 7.25.7 '@types/simple-peer': 9.11.8 - '@wordpress/url': 4.16.0 + '@wordpress/url': 4.17.0 import-locals: 2.0.0 lib0: 0.2.99 simple-peer: 9.11.1 @@ -21790,7 +21702,7 @@ snapshots: - supports-color - utf-8-validate - '@wordpress/token-list@3.16.0': + '@wordpress/token-list@3.17.0': dependencies: '@babel/runtime': 7.25.7 @@ -21799,138 +21711,136 @@ snapshots: '@babel/runtime': 7.26.0 '@wordpress/is-shallow-equal': 4.58.0 - '@wordpress/undo-manager@1.16.0': + '@wordpress/undo-manager@1.17.0': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/is-shallow-equal': 5.16.0 + '@wordpress/is-shallow-equal': 5.17.0 - '@wordpress/upload-media@0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/upload-media@0.2.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@shopify/web-worker': 6.4.0(@babel/core@7.26.0) - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) uuid: 9.0.1 transitivePeerDependencies: - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - - react-dom - supports-color - webpack - webpack-virtual-modules - '@wordpress/upload-media@0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/upload-media@0.2.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 '@shopify/web-worker': 6.4.0(@babel/core@7.26.0)(webpack@5.94.0) - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) uuid: 9.0.1 transitivePeerDependencies: - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - - react-dom - supports-color - webpack - webpack-virtual-modules - '@wordpress/upload-media@0.1.0(@babel/core@7.26.0)(@babel/runtime@7.25.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/upload-media@0.2.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 '@shopify/web-worker': 6.4.0(@babel/core@7.26.0)(webpack@5.94.0) - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/preferences': 4.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/preferences': 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) uuid: 9.0.1 transitivePeerDependencies: - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - - react-dom - supports-color - webpack - webpack-virtual-modules - '@wordpress/upload-media@0.1.0(@babel/runtime@7.25.7)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/upload-media@0.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@shopify/web-worker': 6.4.0 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/blob': 4.16.0 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/preferences': 4.16.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/private-apis': 1.16.0 - '@wordpress/url': 4.16.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) uuid: 9.0.1 transitivePeerDependencies: - '@babel/core' - '@emotion/is-prop-valid' - '@types/react' - - react-dom - supports-color - webpack - webpack-virtual-modules - '@wordpress/url@4.16.0': + '@wordpress/url@4.17.0': dependencies: '@babel/runtime': 7.25.7 remove-accents: 0.5.0 - '@wordpress/viewport@6.16.0(react@18.3.1)': + '@wordpress/viewport@6.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 react: 18.3.1 - '@wordpress/warning@3.13.0': {} - - '@wordpress/warning@3.16.0': {} + '@wordpress/warning@3.17.0': {} - '@wordpress/widgets@4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/widgets@4.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21945,20 +21855,20 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/widgets@4.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/widgets@4.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21973,20 +21883,20 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/widgets@4.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': + '@wordpress/widgets@4.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 - '@wordpress/api-fetch': 7.16.0 - '@wordpress/block-editor': 14.11.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/blocks': 14.5.0(react@18.3.1) - '@wordpress/components': 29.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.16.0(react@18.3.1) - '@wordpress/core-data': 7.16.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) - '@wordpress/data': 10.16.0(react@18.3.1) - '@wordpress/element': 6.16.0 - '@wordpress/i18n': 5.16.0 - '@wordpress/icons': 10.16.0(react@18.3.1) - '@wordpress/notices': 5.16.0(react@18.3.1) + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -22001,7 +21911,7 @@ snapshots: - webpack - webpack-virtual-modules - '@wordpress/wordcount@4.16.0': + '@wordpress/wordcount@4.17.0': dependencies: '@babel/runtime': 7.25.7 diff --git a/projects/js-packages/ai-client/changelog/renovate-wordpress-monorepo b/projects/js-packages/ai-client/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/ai-client/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/ai-client/package.json b/projects/js-packages/ai-client/package.json index 1769207997acb..5255c2e65744e 100644 --- a/projects/js-packages/ai-client/package.json +++ b/projects/js-packages/ai-client/package.json @@ -51,16 +51,16 @@ "@microsoft/fetch-event-source": "2.0.1", "@types/react": "18.3.18", "@types/wordpress__block-editor": "11.5.16", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/base-styles": "5.16.0", - "@wordpress/blob": "4.16.0", - "@wordpress/block-editor": "14.11.0", - "@wordpress/components": "29.2.0", - "@wordpress/compose": "7.16.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/blob": "4.17.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/components": "29.3.0", + "@wordpress/compose": "7.17.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", "clsx": "2.1.1", "debug": "4.4.0", "markdown-it": "14.1.0", diff --git a/projects/js-packages/api/changelog/renovate-wordpress-monorepo b/projects/js-packages/api/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/api/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/api/package.json b/projects/js-packages/api/package.json index 9f30efb2ddb9a..aafc8b9fff1dd 100644 --- a/projects/js-packages/api/package.json +++ b/projects/js-packages/api/package.json @@ -15,7 +15,7 @@ "license": "GPL-2.0-or-later", "dependencies": { "@automattic/jetpack-config": "workspace:*", - "@wordpress/url": "4.16.0" + "@wordpress/url": "4.17.0" }, "devDependencies": { "jest": "29.7.0", diff --git a/projects/js-packages/base-styles/changelog/renovate-wordpress-monorepo b/projects/js-packages/base-styles/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/base-styles/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/base-styles/package.json b/projects/js-packages/base-styles/package.json index 0537b8bffeb6c..8f5a89230c777 100644 --- a/projects/js-packages/base-styles/package.json +++ b/projects/js-packages/base-styles/package.json @@ -20,6 +20,6 @@ "build-production-js": "echo 'Not implemented.'" }, "devDependencies": { - "@wordpress/base-styles": "5.16.0" + "@wordpress/base-styles": "5.17.0" } } diff --git a/projects/js-packages/boost-score-api/changelog/renovate-wordpress-monorepo b/projects/js-packages/boost-score-api/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/boost-score-api/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/boost-score-api/package.json b/projects/js-packages/boost-score-api/package.json index e61d04c79badb..2afd3bfea98ef 100644 --- a/projects/js-packages/boost-score-api/package.json +++ b/projects/js-packages/boost-score-api/package.json @@ -21,7 +21,7 @@ "test-coverage": "pnpm run test --coverage" }, "dependencies": { - "@wordpress/i18n": "5.16.0", + "@wordpress/i18n": "5.17.0", "zod": "3.22.3" }, "devDependencies": { diff --git a/projects/js-packages/charts/changelog/renovate-wordpress-monorepo b/projects/js-packages/charts/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/charts/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 8d8fc03c9ae02..b248db7293b38 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -88,8 +88,8 @@ "@types/react": "18.3.18", "@types/react-dom": "18.3.5", "@types/testing-library__jest-dom": "^5.14.9", - "@wordpress/babel-plugin-import-jsx-pragma": "5.14.0", - "@wordpress/element": "6.14.0", + "@wordpress/babel-plugin-import-jsx-pragma": "5.17.0", + "@wordpress/element": "6.17.0", "babel-jest": "^29.7.0", "babel-loader": "9.1.2", "clean-webpack-plugin": "^4.0.0", diff --git a/projects/js-packages/components/changelog/renovate-wordpress-monorepo b/projects/js-packages/components/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/components/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/components/package.json b/projects/js-packages/components/package.json index 93301c06a59a6..bb8eb9fe61e40 100644 --- a/projects/js-packages/components/package.json +++ b/projects/js-packages/components/package.json @@ -19,16 +19,16 @@ "@automattic/jetpack-api": "workspace:*", "@automattic/jetpack-scan": "workspace:*", "@babel/runtime": "^7", - "@wordpress/browserslist-config": "6.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/compose": "7.16.0", - "@wordpress/data": "10.16.0", + "@wordpress/browserslist-config": "6.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/compose": "7.17.0", + "@wordpress/data": "10.17.0", "@wordpress/dataviews": "4.12.0", - "@wordpress/date": "5.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", - "@wordpress/notices": "5.16.0", + "@wordpress/date": "5.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", + "@wordpress/notices": "5.17.0", "clsx": "2.1.1", "prop-types": "^15.7.2", "qrcode.react": "4.2.0", diff --git a/projects/js-packages/connection/changelog/renovate-wordpress-monorepo b/projects/js-packages/connection/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/connection/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/connection/package.json b/projects/js-packages/connection/package.json index 333e7be4f263d..792db2e139328 100644 --- a/projects/js-packages/connection/package.json +++ b/projects/js-packages/connection/package.json @@ -19,13 +19,13 @@ "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-config": "workspace:*", "@automattic/jetpack-script-data": "workspace:*", - "@wordpress/base-styles": "5.16.0", - "@wordpress/browserslist-config": "6.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/browserslist-config": "6.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", "clsx": "2.1.1", "debug": "4.4.0", "prop-types": "^15.7.2" diff --git a/projects/js-packages/eslint-config-target-es/changelog/renovate-wordpress-monorepo#3 b/projects/js-packages/eslint-config-target-es/changelog/renovate-wordpress-monorepo#3 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/eslint-config-target-es/changelog/renovate-wordpress-monorepo#3 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/eslint-config-target-es/package.json b/projects/js-packages/eslint-config-target-es/package.json index 05ef7687e7fac..cdffe06a5937f 100644 --- a/projects/js-packages/eslint-config-target-es/package.json +++ b/projects/js-packages/eslint-config-target-es/package.json @@ -24,7 +24,7 @@ "semver": "^7.3.5" }, "devDependencies": { - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "eslint": "9.16.0", "eslint-plugin-es-x": "7.8.0", "globals": "15.4.0", diff --git a/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo b/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/i18n-loader-webpack-plugin/package.json b/projects/js-packages/i18n-loader-webpack-plugin/package.json index 5d76a7abe77ac..fdb0569e1d49a 100644 --- a/projects/js-packages/i18n-loader-webpack-plugin/package.json +++ b/projects/js-packages/i18n-loader-webpack-plugin/package.json @@ -21,8 +21,8 @@ "debug": "^4.3.2" }, "devDependencies": { - "@wordpress/dependency-extraction-webpack-plugin": "6.16.0", - "@wordpress/i18n": "5.16.0", + "@wordpress/dependency-extraction-webpack-plugin": "6.17.0", + "@wordpress/i18n": "5.17.0", "jest": "29.7.0", "webpack": "5.94.0", "webpack-cli": "6.0.1" diff --git a/projects/js-packages/idc/changelog/renovate-wordpress-monorepo b/projects/js-packages/idc/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/idc/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/idc/package.json b/projects/js-packages/idc/package.json index 7028f01bbe39e..9dd110f22e7f1 100644 --- a/projects/js-packages/idc/package.json +++ b/projects/js-packages/idc/package.json @@ -9,13 +9,13 @@ "@automattic/jetpack-api": "workspace:*", "@automattic/jetpack-base-styles": "workspace:*", "@automattic/jetpack-components": "workspace:*", - "@wordpress/base-styles": "5.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/compose": "7.16.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/url": "4.16.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/compose": "7.17.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/url": "4.17.0", "prop-types": "^15.7.2" }, "devDependencies": { diff --git a/projects/js-packages/licensing/changelog/renovate-wordpress-monorepo b/projects/js-packages/licensing/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/licensing/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/licensing/package.json b/projects/js-packages/licensing/package.json index 972a8d5dd50d6..b3a3002d10ea0 100644 --- a/projects/js-packages/licensing/package.json +++ b/projects/js-packages/licensing/package.json @@ -23,11 +23,11 @@ "@automattic/jetpack-analytics": "workspace:*", "@automattic/jetpack-api": "workspace:*", "@automattic/jetpack-components": "workspace:*", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", "clsx": "2.1.1", "prop-types": "15.8.1" }, @@ -40,7 +40,7 @@ "@testing-library/dom": "10.4.0", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", - "@wordpress/babel-plugin-import-jsx-pragma": "5.16.0", + "@wordpress/babel-plugin-import-jsx-pragma": "5.17.0", "babel-jest": "29.7.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", diff --git a/projects/js-packages/partner-coupon/changelog/renovate-wordpress-monorepo b/projects/js-packages/partner-coupon/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/partner-coupon/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/partner-coupon/package.json b/projects/js-packages/partner-coupon/package.json index 680e91608860b..724cb9e906f48 100644 --- a/projects/js-packages/partner-coupon/package.json +++ b/projects/js-packages/partner-coupon/package.json @@ -27,8 +27,8 @@ "@testing-library/dom": "10.4.0", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", - "@wordpress/base-styles": "5.16.0", - "@wordpress/data": "10.16.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/data": "10.17.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-extended": "4.0.2", @@ -42,7 +42,7 @@ "dependencies": { "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", - "@wordpress/i18n": "5.16.0", + "@wordpress/i18n": "5.17.0", "clsx": "2.1.1", "prop-types": "15.8.1" }, diff --git a/projects/js-packages/publicize-components/changelog/renovate-wordpress-monorepo b/projects/js-packages/publicize-components/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/publicize-components/package.json b/projects/js-packages/publicize-components/package.json index d1ca05530510e..30cc9e03e2353 100644 --- a/projects/js-packages/publicize-components/package.json +++ b/projects/js-packages/publicize-components/package.json @@ -26,25 +26,25 @@ "@automattic/jetpack-shared-extension-utils": "workspace:*", "@automattic/popup-monitor": "1.0.2", "@automattic/social-previews": "2.1.0-beta.9", - "@wordpress/annotations": "3.16.0", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/block-editor": "14.11.0", - "@wordpress/blocks": "14.5.0", - "@wordpress/components": "29.2.0", - "@wordpress/compose": "7.16.0", - "@wordpress/core-data": "7.16.0", - "@wordpress/data": "10.16.0", + "@wordpress/annotations": "3.17.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/blocks": "14.6.0", + "@wordpress/components": "29.3.0", + "@wordpress/compose": "7.17.0", + "@wordpress/core-data": "7.17.0", + "@wordpress/data": "10.17.0", "@wordpress/dataviews": "4.12.0", - "@wordpress/date": "5.16.0", - "@wordpress/edit-post": "8.16.0", - "@wordpress/editor": "14.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/hooks": "4.16.0", - "@wordpress/html-entities": "4.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", - "@wordpress/media-utils": "5.16.0", - "@wordpress/notices": "5.16.0", + "@wordpress/date": "5.17.0", + "@wordpress/edit-post": "8.17.0", + "@wordpress/editor": "14.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/hooks": "4.17.0", + "@wordpress/html-entities": "4.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", + "@wordpress/media-utils": "5.17.0", + "@wordpress/notices": "5.17.0", "clsx": "2.1.1", "prop-types": "15.8.1", "react-page-visibility": "7.0.0", @@ -63,7 +63,7 @@ "@testing-library/user-event": "14.5.2", "@types/jest": "29.5.12", "@types/react": "18.3.18", - "@wordpress/babel-plugin-import-jsx-pragma": "5.16.0", + "@wordpress/babel-plugin-import-jsx-pragma": "5.17.0", "babel-jest": "29.4.3", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", diff --git a/projects/js-packages/scan/changelog/renovate-wordpress-monorepo b/projects/js-packages/scan/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/scan/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/scan/package.json b/projects/js-packages/scan/package.json index d19d48f118c0b..2c8e85ee4421b 100644 --- a/projects/js-packages/scan/package.json +++ b/projects/js-packages/scan/package.json @@ -48,16 +48,16 @@ "dependencies": { "@automattic/jetpack-api": "workspace:*", "@automattic/jetpack-base-styles": "workspace:*", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/url": "4.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/url": "4.17.0", "debug": "4.4.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, "peerDependencies": { - "@wordpress/i18n": "5.16.0", + "@wordpress/i18n": "5.17.0", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/projects/js-packages/shared-extension-utils/changelog/renovate-wordpress-monorepo b/projects/js-packages/shared-extension-utils/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/shared-extension-utils/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/shared-extension-utils/package.json b/projects/js-packages/shared-extension-utils/package.json index 0d3d53845c8d4..fe103b809f8eb 100644 --- a/projects/js-packages/shared-extension-utils/package.json +++ b/projects/js-packages/shared-extension-utils/package.json @@ -21,13 +21,13 @@ "@automattic/jetpack-analytics": "workspace:*", "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/compose": "7.16.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/plugins": "7.16.0", - "@wordpress/url": "4.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/compose": "7.17.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/plugins": "7.17.0", + "@wordpress/url": "4.17.0", "lodash": "4.17.21" }, "devDependencies": { @@ -38,7 +38,7 @@ "@testing-library/dom": "10.4.0", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", - "@wordpress/babel-plugin-import-jsx-pragma": "5.16.0", + "@wordpress/babel-plugin-import-jsx-pragma": "5.17.0", "babel-jest": "29.3.1", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", diff --git a/projects/js-packages/storybook/changelog/renovate-wordpress-monorepo#3 b/projects/js-packages/storybook/changelog/renovate-wordpress-monorepo#3 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/storybook/changelog/renovate-wordpress-monorepo#3 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/storybook/package.json b/projects/js-packages/storybook/package.json index 84097dfe1cdfe..6ae97a868771d 100644 --- a/projects/js-packages/storybook/package.json +++ b/projects/js-packages/storybook/package.json @@ -40,13 +40,13 @@ "@storybook/test-runner": "0.19.1", "@storybook/theming": "8.4.7", "@types/react": "18.3.18", - "@wordpress/base-styles": "5.16.0", - "@wordpress/block-editor": "14.11.0", - "@wordpress/block-library": "9.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/element": "6.16.0", - "@wordpress/format-library": "5.16.0", - "@wordpress/postcss-plugins-preset": "5.16.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/block-library": "9.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/element": "6.17.0", + "@wordpress/format-library": "5.17.0", + "@wordpress/postcss-plugins-preset": "5.17.0", "allure-playwright": "2.9.2", "babel-loader": "9.1.2", "babel-plugin-inline-json-import": "0.3.2", @@ -71,6 +71,6 @@ "webpack-cli": "6.0.1" }, "dependencies": { - "@wordpress/api-fetch": "7.16.0" + "@wordpress/api-fetch": "7.17.0" } } diff --git a/projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo b/projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/webpack-config/package.json b/projects/js-packages/webpack-config/package.json index 22f5722152675..92e28ab9e3f6f 100644 --- a/projects/js-packages/webpack-config/package.json +++ b/projects/js-packages/webpack-config/package.json @@ -28,8 +28,8 @@ "@babel/preset-react": "7.26.3", "@babel/preset-typescript": "7.26.0", "@cerner/duplicate-package-checker-webpack-plugin": "2.3.0", - "@wordpress/browserslist-config": "6.16.0", - "@wordpress/dependency-extraction-webpack-plugin": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", + "@wordpress/dependency-extraction-webpack-plugin": "6.17.0", "babel-loader": "9.1.2", "babel-plugin-polyfill-corejs3": "0.10.6", "browserslist": "4.24.3", diff --git a/projects/packages/assets/changelog/renovate-wordpress-monorepo b/projects/packages/assets/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/assets/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/assets/package.json b/projects/packages/assets/package.json index 701961d09ded8..d5799296c69d2 100644 --- a/projects/packages/assets/package.json +++ b/projects/packages/assets/package.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@automattic/jetpack-webpack-config": "workspace:*", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "concurrently": "7.6.0", "jest": "29.7.0", "md5-es": "1.8.2", diff --git a/projects/packages/backup/changelog/renovate-wordpress-monorepo b/projects/packages/backup/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/backup/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/backup/package.json b/projects/packages/backup/package.json index 28e8bab6e0b87..c5dde0b8e651e 100644 --- a/projects/packages/backup/package.json +++ b/projects/packages/backup/package.json @@ -33,12 +33,12 @@ "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", "@tanstack/react-query": "5.20.5", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/data": "10.16.0", - "@wordpress/date": "5.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/data": "10.17.0", + "@wordpress/date": "5.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", "moment": "2.30.1", "prop-types": "^15.8.1", "react": "18.3.1", @@ -54,7 +54,7 @@ "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", "@types/react": "18.3.18", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "concurrently": "7.6.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", diff --git a/projects/packages/blaze/changelog/renovate-wordpress-monorepo b/projects/packages/blaze/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/blaze/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/blaze/package.json b/projects/packages/blaze/package.json index f01f76910735a..89073fe28e5a3 100644 --- a/projects/packages/blaze/package.json +++ b/projects/packages/blaze/package.json @@ -25,14 +25,14 @@ "@automattic/jetpack-analytics": "workspace:*", "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-shared-extension-utils": "workspace:*", - "@wordpress/block-editor": "14.11.0", - "@wordpress/components": "29.2.0", - "@wordpress/compose": "7.16.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", - "@wordpress/plugins": "7.16.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/components": "29.3.0", + "@wordpress/compose": "7.17.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", + "@wordpress/plugins": "7.17.0", "react": "18.3.1", "react-dom": "18.3.1" }, @@ -41,7 +41,7 @@ "@babel/core": "7.26.0", "@babel/preset-env": "7.26.0", "@babel/runtime": "7.26.0", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", diff --git a/projects/packages/calypsoify/changelog/renovate-wordpress-monorepo#2 b/projects/packages/calypsoify/changelog/renovate-wordpress-monorepo#2 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/calypsoify/changelog/renovate-wordpress-monorepo#2 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/calypsoify/package.json b/projects/packages/calypsoify/package.json index db2e180eead3e..e5a89fdd11784 100644 --- a/projects/packages/calypsoify/package.json +++ b/projects/packages/calypsoify/package.json @@ -28,7 +28,7 @@ }, "devDependencies": { "@automattic/jetpack-webpack-config": "workspace:*", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", diff --git a/projects/packages/classic-theme-helper/changelog/renovate-wordpress-monorepo b/projects/packages/classic-theme-helper/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/classic-theme-helper/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/classic-theme-helper/package.json b/projects/packages/classic-theme-helper/package.json index eebf0f0b07cd9..c287b86ee87e5 100644 --- a/projects/packages/classic-theme-helper/package.json +++ b/projects/packages/classic-theme-helper/package.json @@ -28,7 +28,7 @@ "@automattic/remove-asset-webpack-plugin": "workspace:*", "@babel/core": "7.26.0", "@csstools/postcss-global-data": "2.1.1", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "autoprefixer": "10.4.20", "glob": "11.0.0", "postcss": "8.4.47", diff --git a/projects/packages/connection/changelog/renovate-wordpress-monorepo b/projects/packages/connection/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/connection/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/connection/package.json b/projects/packages/connection/package.json index 05e6452c719d3..5f70a26dbf5b7 100644 --- a/projects/packages/connection/package.json +++ b/projects/packages/connection/package.json @@ -27,15 +27,15 @@ "dependencies": { "@automattic/jetpack-connection": "workspace:*", "@automattic/jetpack-idc": "workspace:*", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0" + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0" }, "devDependencies": { "@automattic/jetpack-webpack-config": "workspace:*", "@babel/core": "7.26.0", "@babel/preset-env": "7.26.0", "@babel/runtime": "7.26.0", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "glob": "11.0.0", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/projects/packages/explat/changelog/renovate-wordpress-monorepo b/projects/packages/explat/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/explat/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/explat/package.json b/projects/packages/explat/package.json index 3d4ef073fae0b..b268cede9edbd 100644 --- a/projects/packages/explat/package.json +++ b/projects/packages/explat/package.json @@ -43,8 +43,8 @@ "dependencies": { "@automattic/explat-client": "0.1.0", "@automattic/explat-client-react-helpers": "0.1.1", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/url": "4.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/url": "4.17.0", "cookie": "1.0.1", "qs": "6.12.1" } diff --git a/projects/packages/forms/changelog/renovate-wordpress-monorepo b/projects/packages/forms/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/forms/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/forms/package.json b/projects/packages/forms/package.json index 630fd1298567c..d503229bf2c94 100644 --- a/projects/packages/forms/package.json +++ b/projects/packages/forms/package.json @@ -34,15 +34,15 @@ "@automattic/jetpack-analytics": "workspace:*", "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-shared-extension-utils": "workspace:*", - "@wordpress/block-editor": "14.11.0", - "@wordpress/blocks": "14.5.0", - "@wordpress/compose": "7.16.0", - "@wordpress/core-data": "7.16.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/hooks": "4.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/blocks": "14.6.0", + "@wordpress/compose": "7.17.0", + "@wordpress/core-data": "7.17.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/hooks": "4.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", "clsx": "2.1.1", "copy-webpack-plugin": "11.0.0", "email-validator": "2.0.4", @@ -66,11 +66,11 @@ "@babel/core": "7.26.0", "@babel/runtime": "7.26.0", "@testing-library/dom": "10.4.0", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/babel-plugin-import-jsx-pragma": "5.16.0", - "@wordpress/browserslist-config": "6.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/date": "5.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/babel-plugin-import-jsx-pragma": "5.17.0", + "@wordpress/browserslist-config": "6.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/date": "5.17.0", "autoprefixer": "10.4.20", "concurrently": "7.6.0", "glob": "11.0.0", diff --git a/projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo#2 b/projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo#2 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/renovate-wordpress-monorepo#2 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/jetpack-mu-wpcom/package.json b/projects/packages/jetpack-mu-wpcom/package.json index 32d2433b787f2..a587378d50f88 100644 --- a/projects/packages/jetpack-mu-wpcom/package.json +++ b/projects/packages/jetpack-mu-wpcom/package.json @@ -60,20 +60,20 @@ "@preact/signals": "^1.2.2", "@sentry/browser": "8.33.0", "@tanstack/react-query": "^5.15.5", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/base-styles": "5.16.0", - "@wordpress/blocks": "14.5.0", - "@wordpress/components": "29.2.0", - "@wordpress/data": "10.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/blocks": "14.6.0", + "@wordpress/components": "29.3.0", + "@wordpress/data": "10.17.0", "@wordpress/dom-ready": "^4.8.1", - "@wordpress/element": "6.16.0", - "@wordpress/hooks": "4.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", - "@wordpress/plugins": "7.16.0", + "@wordpress/element": "6.17.0", + "@wordpress/hooks": "4.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", + "@wordpress/plugins": "7.17.0", "@wordpress/private-apis": "^1.8.1", "@wordpress/router": "^1.8.11", - "@wordpress/url": "4.16.0", + "@wordpress/url": "4.17.0", "clsx": "2.1.1", "debug": "4.4.0", "events": "^3.3.0", diff --git a/projects/packages/jitm/changelog/renovate-wordpress-monorepo b/projects/packages/jitm/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/jitm/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/jitm/package.json b/projects/packages/jitm/package.json index 696a1f4d0e8c8..22ada71be8680 100644 --- a/projects/packages/jitm/package.json +++ b/projects/packages/jitm/package.json @@ -24,7 +24,7 @@ "browserslist": "extends @wordpress/browserslist-config", "devDependencies": { "@automattic/jetpack-webpack-config": "workspace:*", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", diff --git a/projects/packages/masterbar/changelog/renovate-wordpress-monorepo b/projects/packages/masterbar/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/masterbar/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/masterbar/package.json b/projects/packages/masterbar/package.json index fffeac51d8189..a4eb04c5f24a8 100644 --- a/projects/packages/masterbar/package.json +++ b/projects/packages/masterbar/package.json @@ -33,7 +33,7 @@ "@automattic/remove-asset-webpack-plugin": "workspace:*", "@babel/core": "7.26.0", "@csstools/postcss-global-data": "2.1.1", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "autoprefixer": "10.4.20", "glob": "11.0.0", "postcss": "8.4.47", diff --git a/projects/packages/my-jetpack/changelog/renovate-wordpress-monorepo b/projects/packages/my-jetpack/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/my-jetpack/package.json b/projects/packages/my-jetpack/package.json index e1cd294e708ff..a181455348220 100644 --- a/projects/packages/my-jetpack/package.json +++ b/projects/packages/my-jetpack/package.json @@ -33,15 +33,15 @@ "@automattic/jetpack-explat": "workspace:*", "@automattic/jetpack-licensing": "workspace:*", "@tanstack/react-query": "5.20.5", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/compose": "7.16.0", - "@wordpress/data": "10.16.0", - "@wordpress/date": "5.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", - "@wordpress/url": "4.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/compose": "7.17.0", + "@wordpress/data": "10.17.0", + "@wordpress/date": "5.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", + "@wordpress/url": "4.17.0", "clsx": "2.1.1", "debug": "4.4.0", "gridicons": "3.4.1", diff --git a/projects/packages/post-list/changelog/renovate-wordpress-monorepo b/projects/packages/post-list/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/post-list/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/post-list/package.json b/projects/packages/post-list/package.json index 594be9b6f58eb..565c4c6730cfb 100644 --- a/projects/packages/post-list/package.json +++ b/projects/packages/post-list/package.json @@ -21,7 +21,7 @@ "validate": "pnpm exec validate-es build/" }, "dependencies": { - "@wordpress/i18n": "5.16.0" + "@wordpress/i18n": "5.17.0" }, "devDependencies": { "@automattic/jetpack-webpack-config": "workspace:*", diff --git a/projects/packages/publicize/changelog/renovate-wordpress-monorepo b/projects/packages/publicize/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/publicize/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/publicize/package.json b/projects/packages/publicize/package.json index 5d8b8cdc35aa3..f27bded1d27d3 100644 --- a/projects/packages/publicize/package.json +++ b/projects/packages/publicize/package.json @@ -34,7 +34,7 @@ "@babel/preset-env": "7.26.0", "@babel/runtime": "7.26.0", "@csstools/postcss-global-data": "2.1.1", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "autoprefixer": "10.4.20", "concurrently": "7.6.0", "postcss": "8.4.47", @@ -48,6 +48,6 @@ "dependencies": { "@automattic/jetpack-analytics": "workspace:*", "@automattic/jetpack-publicize-components": "workspace:*", - "@wordpress/i18n": "5.16.0" + "@wordpress/i18n": "5.17.0" } } diff --git a/projects/packages/search/changelog/renovate-wordpress-monorepo b/projects/packages/search/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/search/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/search/package.json b/projects/packages/search/package.json index 034765fd53fb9..f4d91de58e3a0 100644 --- a/projects/packages/search/package.json +++ b/projects/packages/search/package.json @@ -40,12 +40,12 @@ "@automattic/jetpack-base-styles": "workspace:*", "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", - "@wordpress/base-styles": "5.16.0", - "@wordpress/block-editor": "14.11.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", "clsx": "2.1.1", "fast-json-stable-stringify": "2.1.0", "lodash": "4.17.21", @@ -75,9 +75,9 @@ "@testing-library/dom": "10.4.0", "@testing-library/preact": "3.2.4", "@testing-library/react": "16.0.1", - "@wordpress/babel-plugin-import-jsx-pragma": "5.16.0", - "@wordpress/browserslist-config": "6.16.0", - "@wordpress/dependency-extraction-webpack-plugin": "6.16.0", + "@wordpress/babel-plugin-import-jsx-pragma": "5.17.0", + "@wordpress/browserslist-config": "6.17.0", + "@wordpress/dependency-extraction-webpack-plugin": "6.17.0", "autoprefixer": "10.4.20", "babel-jest": "29.4.3", "concurrently": "7.6.0", diff --git a/projects/packages/videopress/changelog/renovate-wordpress-monorepo b/projects/packages/videopress/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/videopress/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/videopress/package.json b/projects/packages/videopress/package.json index 3c40e35c05936..e857090efc09f 100644 --- a/projects/packages/videopress/package.json +++ b/projects/packages/videopress/package.json @@ -40,7 +40,7 @@ "@types/jest": "29.5.12", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "autoprefixer": "10.4.20", "concurrently": "7.6.0", "copy-webpack-plugin": "11.0.0", @@ -64,22 +64,22 @@ "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", "@automattic/jetpack-shared-extension-utils": "workspace:*", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/blob": "4.16.0", - "@wordpress/block-editor": "14.11.0", - "@wordpress/blocks": "14.5.0", - "@wordpress/components": "29.2.0", - "@wordpress/compose": "7.16.0", - "@wordpress/core-data": "7.16.0", - "@wordpress/data": "10.16.0", - "@wordpress/date": "5.16.0", - "@wordpress/dom-ready": "4.16.0", - "@wordpress/editor": "14.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/html-entities": "4.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", - "@wordpress/url": "4.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/blob": "4.17.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/blocks": "14.6.0", + "@wordpress/components": "29.3.0", + "@wordpress/compose": "7.17.0", + "@wordpress/core-data": "7.17.0", + "@wordpress/data": "10.17.0", + "@wordpress/date": "5.17.0", + "@wordpress/dom-ready": "4.17.0", + "@wordpress/editor": "14.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/html-entities": "4.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", + "@wordpress/url": "4.17.0", "clsx": "2.1.1", "debug": "4.4.0", "filesize": "10.1.6", diff --git a/projects/packages/wordads/changelog/renovate-wordpress-monorepo b/projects/packages/wordads/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/wordads/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/wordads/package.json b/projects/packages/wordads/package.json index 333c577f8e186..4d7187fa93ff7 100644 --- a/projects/packages/wordads/package.json +++ b/projects/packages/wordads/package.json @@ -35,12 +35,12 @@ "@automattic/jetpack-analytics": "workspace:*", "@automattic/jetpack-api": "workspace:*", "@automattic/jetpack-components": "workspace:*", - "@wordpress/base-styles": "5.16.0", - "@wordpress/block-editor": "14.11.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", "chart.js": "3.7.1", "clsx": "2.1.1", "fast-json-stable-stringify": "2.1.0", @@ -69,8 +69,8 @@ "@testing-library/dom": "10.4.0", "@testing-library/preact": "3.2.4", "@testing-library/react": "16.0.1", - "@wordpress/babel-plugin-import-jsx-pragma": "5.16.0", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/babel-plugin-import-jsx-pragma": "5.17.0", + "@wordpress/browserslist-config": "6.17.0", "babel-jest": "29.4.3", "concurrently": "7.6.0", "core-js": "3.38.1", diff --git a/projects/packages/yoast-promo/changelog/renovate-wordpress-monorepo#3 b/projects/packages/yoast-promo/changelog/renovate-wordpress-monorepo#3 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/packages/yoast-promo/changelog/renovate-wordpress-monorepo#3 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/packages/yoast-promo/package.json b/projects/packages/yoast-promo/package.json index d9344bc634679..41fd185e43970 100644 --- a/projects/packages/yoast-promo/package.json +++ b/projects/packages/yoast-promo/package.json @@ -24,12 +24,12 @@ "dependencies": { "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-shared-extension-utils": "workspace:*", - "@wordpress/components": "29.2.0", - "@wordpress/data": "10.16.0", - "@wordpress/edit-post": "8.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/plugins": "7.16.0", + "@wordpress/components": "29.3.0", + "@wordpress/data": "10.17.0", + "@wordpress/edit-post": "8.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/plugins": "7.17.0", "gridicons": "3.4.1", "react": "18.3.1", "react-dom": "18.3.1" @@ -39,7 +39,7 @@ "@babel/core": "7.26.0", "@babel/preset-env": "7.26.0", "@babel/runtime": "7.26.0", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "sass": "1.64.1", "sass-loader": "12.4.0", "webpack": "5.94.0", diff --git a/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#2 b/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#2 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/changelog/renovate-wordpress-monorepo#2 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/automattic-for-agencies-client/package.json b/projects/plugins/automattic-for-agencies-client/package.json index aea55fc6a1c64..9b411ff06eb14 100644 --- a/projects/plugins/automattic-for-agencies-client/package.json +++ b/projects/plugins/automattic-for-agencies-client/package.json @@ -32,10 +32,10 @@ "@automattic/jetpack-base-styles": "workspace:*", "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", - "@wordpress/data": "10.16.0", - "@wordpress/date": "5.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", + "@wordpress/data": "10.17.0", + "@wordpress/date": "5.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", "clsx": "2.1.1", "react": "18.3.1", "react-dom": "18.3.1" @@ -47,8 +47,8 @@ "@babel/runtime": "7.26.0", "@testing-library/dom": "10.4.0", "@testing-library/react": "16.0.1", - "@wordpress/browserslist-config": "6.16.0", - "@wordpress/components": "29.2.0", + "@wordpress/browserslist-config": "6.17.0", + "@wordpress/components": "29.3.0", "babel-jest": "29.4.3", "concurrently": "7.6.0", "jest": "29.7.0", diff --git a/projects/plugins/boost/changelog/renovate-wordpress-monorepo b/projects/plugins/boost/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/boost/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/boost/package.json b/projects/plugins/boost/package.json index 6753d2d82e30f..1b383ee106963 100644 --- a/projects/plugins/boost/package.json +++ b/projects/plugins/boost/package.json @@ -12,8 +12,8 @@ "@react-spring/web": "9.7.3", "@types/react": "18.3.18", "@types/react-router-dom": "5.3.3", - "@wordpress/components": "29.2.0", - "@wordpress/element": "6.16.0", + "@wordpress/components": "29.3.0", + "@wordpress/element": "6.17.0", "clsx": "2.1.1", "copy-webpack-plugin": "11.0.0", "history": "5.3.0", @@ -35,8 +35,8 @@ "@storybook/react": "8.4.7", "@types/jest": "29.5.12", "@types/jquery": "3.5.32", - "@wordpress/browserslist-config": "6.16.0", - "@wordpress/i18n": "5.16.0", + "@wordpress/browserslist-config": "6.17.0", + "@wordpress/i18n": "5.17.0", "concurrently": "7.6.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", diff --git a/projects/plugins/classic-theme-helper-plugin/changelog/renovate-wordpress-monorepo#14 b/projects/plugins/classic-theme-helper-plugin/changelog/renovate-wordpress-monorepo#14 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/classic-theme-helper-plugin/changelog/renovate-wordpress-monorepo#14 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/classic-theme-helper-plugin/package.json b/projects/plugins/classic-theme-helper-plugin/package.json index 560d9fad27562..96214a1ddb211 100644 --- a/projects/plugins/classic-theme-helper-plugin/package.json +++ b/projects/plugins/classic-theme-helper-plugin/package.json @@ -30,10 +30,10 @@ "@automattic/jetpack-base-styles": "workspace:*", "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", - "@wordpress/data": "10.16.0", - "@wordpress/date": "5.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", + "@wordpress/data": "10.17.0", + "@wordpress/date": "5.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", "react": "18.3.1", "react-dom": "18.3.1" }, @@ -44,7 +44,7 @@ "@babel/runtime": "7.26.0", "@testing-library/dom": "10.4.0", "@testing-library/react": "16.0.1", - "@wordpress/browserslist-config": "6.16.0", + "@wordpress/browserslist-config": "6.17.0", "babel-jest": "29.4.3", "concurrently": "7.6.0", "jest": "29.7.0", diff --git a/projects/plugins/crm/changelog/renovate-wordpress-monorepo b/projects/plugins/crm/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/crm/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/crm/package.json b/projects/plugins/crm/package.json index 933f0b90ddbae..d140050be39aa 100644 --- a/projects/plugins/crm/package.json +++ b/projects/plugins/crm/package.json @@ -22,13 +22,13 @@ "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-shared-extension-utils": "workspace:*", "@tanstack/react-query": "4.35.3", - "@wordpress/api-fetch": "7.16.0", - "@wordpress/base-styles": "5.16.0", - "@wordpress/components": "29.2.0", - "@wordpress/data": "10.16.0", - "@wordpress/element": "6.16.0", - "@wordpress/i18n": "5.16.0", - "@wordpress/icons": "10.16.0", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/base-styles": "5.17.0", + "@wordpress/components": "29.3.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", "clsx": "2.1.1", "prop-types": "15.8.1", "react": "18.3.1", diff --git a/projects/plugins/inspect/changelog/renovate-wordpress-monorepo#28 b/projects/plugins/inspect/changelog/renovate-wordpress-monorepo#28 new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/plugins/inspect/changelog/renovate-wordpress-monorepo#28 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/plugins/inspect/package.json b/projects/plugins/inspect/package.json index a0105a76162ea..f78ce0995d56b 100644 --- a/projects/plugins/inspect/package.json +++ b/projects/plugins/inspect/package.json @@ -32,7 +32,7 @@ "@rollup/plugin-node-resolve": "15.3.0", "@rollup/plugin-terser": "0.4.3", "@rollup/plugin-typescript": "12.1.0", - "@wordpress/i18n": "5.16.0", + "@wordpress/i18n": "5.17.0", "postcss": "8.4.47", "rollup": "3.29.5", "rollup-plugin-livereload": "2.0.5", diff --git a/projects/plugins/jetpack/changelog/renovate-wordpress-monorepo b/projects/plugins/jetpack/changelog/renovate-wordpress-monorepo new file mode 100644 index 0000000000000..1eaea6a769e84 --- /dev/null +++ b/projects/plugins/jetpack/changelog/renovate-wordpress-monorepo @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Updated package dependencies. diff --git a/projects/plugins/jetpack/extensions/blocks/tiled-gallery/editor.scss b/projects/plugins/jetpack/extensions/blocks/tiled-gallery/editor.scss index 957af492f7ead..0d2e84046e8c4 100644 --- a/projects/plugins/jetpack/extensions/blocks/tiled-gallery/editor.scss +++ b/projects/plugins/jetpack/extensions/blocks/tiled-gallery/editor.scss @@ -138,7 +138,7 @@ .tiled-gallery__item__inline-menu { margin: $grid-unit-10; display: inline-flex; - z-index: z-index(".block-library-gallery-item__inline-menu"); + z-index: 20; .components-button { color: transparent; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx index df077b9a74dbd..ee7ff03ea1925 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx @@ -319,6 +319,7 @@ export const PluginDocumentSettingPanelAiExcerpt = () => { }; return ( + // @ts-expect-error - TS1003: TypeScript is unhappy with it returning ReactNode rather than ReactElement. Date: Mon, 3 Feb 2025 22:24:00 +0100 Subject: [PATCH 334/420] Update dependency @wordpress/dataviews to v4.13.0 (#41486) * Update dependency @wordpress/dataviews to v4.13.0 * Fix patch --------- Co-authored-by: Renovate Bot Co-authored-by: Brad Jorsch --- package.json | 2 +- pnpm-lock.yaml | 58 +++++-------------- .../changelog/renovate-@wordpressdataviews | 4 ++ projects/js-packages/components/package.json | 2 +- .../changelog/renovate-@wordpressdataviews | 4 ++ .../publicize-components/package.json | 2 +- 6 files changed, 26 insertions(+), 46 deletions(-) create mode 100644 projects/js-packages/components/changelog/renovate-@wordpressdataviews create mode 100644 projects/js-packages/publicize-components/changelog/renovate-@wordpressdataviews diff --git a/package.json b/package.json index 312f6709ae600..a5b7ce7747021 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "packageManager": "pnpm@9.15.0", "pnpm": { "patchedDependencies": { - "@wordpress/dataviews@4.12.0": ".pnpm-patches/@wordpress__dataviews@4.12.0.patch" + "@wordpress/dataviews": ".pnpm-patches/@wordpress__dataviews@4.12.0.patch" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96c77d8ca3b4d..c5d7917dbfcd2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: pnpmfileChecksum: 4dabxzjqxv2glgjc2d7l77h7ii patchedDependencies: - '@wordpress/dataviews@4.12.0': + '@wordpress/dataviews': hash: uzs6glhpt3sq2uqjvqzk6vk2ze path: .pnpm-patches/@wordpress__dataviews@4.12.0.patch @@ -531,8 +531,8 @@ importers: specifier: 10.17.0 version: 10.17.0(react@18.3.1) '@wordpress/dataviews': - specifier: 4.12.0 - version: 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 4.13.0 + version: 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': specifier: 5.17.0 version: 5.17.0 @@ -1213,8 +1213,8 @@ importers: specifier: 10.17.0 version: 10.17.0(react@18.3.1) '@wordpress/dataviews': - specifier: 4.12.0 - version: 4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 4.13.0 + version: 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': specifier: 5.17.0 version: 5.17.0 @@ -8316,12 +8316,6 @@ packages: peerDependencies: react: ^18.0.0 - '@wordpress/dataviews@4.12.0': - resolution: {integrity: sha512-hxUJ7OyXL131r1nY0Fm5PiN12+oMclCVooON3hwlh5/x0t/FydcsMp0toGrLmtQQz38VVKl9dIpjjLgUmpSbEw==} - engines: {node: '>=18.12.0', npm: '>=8.19.2'} - peerDependencies: - react: ^18.0.0 - '@wordpress/dataviews@4.13.0': resolution: {integrity: sha512-fJyHzNBvI/mivZh5z5+XC3tOSHojNOYVbSA9ifPB6hNcZjFJ+fsNt/I8tmOQdmOOb4dUESkOOKmk6RlPKCjErg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -20363,29 +20357,7 @@ snapshots: rememo: 4.0.2 use-memo-one: 1.1.3(react@18.3.1) - '@wordpress/dataviews@4.12.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@babel/runtime': 7.25.7 - '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 7.17.0(react@18.3.1) - '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/element': 6.17.0 - '@wordpress/i18n': 5.17.0 - '@wordpress/icons': 10.17.0(react@18.3.1) - '@wordpress/primitives': 4.17.0(react@18.3.1) - '@wordpress/private-apis': 1.17.0 - '@wordpress/warning': 3.17.0 - clsx: 2.1.1 - react: 18.3.1 - remove-accents: 0.5.0 - transitivePeerDependencies: - - '@emotion/is-prop-valid' - - '@types/react' - - react-dom - - supports-color - - '@wordpress/dataviews@4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/dataviews@4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 @@ -20407,7 +20379,7 @@ snapshots: - react-dom - supports-color - '@wordpress/dataviews@4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@wordpress/dataviews@4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ariakit/react': 0.4.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.25.7 @@ -20633,7 +20605,7 @@ snapshots: '@wordpress/compose': 7.17.0(react@18.3.1) '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': 5.17.0 '@wordpress/deprecated': 4.17.0 '@wordpress/dom': 4.17.0 @@ -20695,7 +20667,7 @@ snapshots: '@wordpress/compose': 7.17.0(react@18.3.1) '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': 5.17.0 '@wordpress/deprecated': 4.17.0 '@wordpress/dom': 4.17.0 @@ -20757,7 +20729,7 @@ snapshots: '@wordpress/compose': 7.17.0(react@18.3.1) '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': 5.17.0 '@wordpress/deprecated': 4.17.0 '@wordpress/dom': 4.17.0 @@ -20819,7 +20791,7 @@ snapshots: '@wordpress/compose': 7.17.0(react@18.3.1) '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/dataviews': 4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': 5.17.0 '@wordpress/deprecated': 4.17.0 '@wordpress/dom': 4.17.0 @@ -20934,7 +20906,7 @@ snapshots: '@wordpress/compose': 7.17.0(react@18.3.1) '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': 5.17.0 '@wordpress/element': 6.17.0 '@wordpress/hooks': 4.17.0 @@ -20977,7 +20949,7 @@ snapshots: '@wordpress/compose': 7.17.0(react@18.3.1) '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': 5.17.0 '@wordpress/element': 6.17.0 '@wordpress/hooks': 4.17.0 @@ -21020,7 +20992,7 @@ snapshots: '@wordpress/compose': 7.17.0(react@18.3.1) '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/dataviews': 4.13.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': 5.17.0 '@wordpress/element': 6.17.0 '@wordpress/hooks': 4.17.0 @@ -21063,7 +21035,7 @@ snapshots: '@wordpress/compose': 7.17.0(react@18.3.1) '@wordpress/core-data': 7.17.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) '@wordpress/data': 10.17.0(react@18.3.1) - '@wordpress/dataviews': 4.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/date': 5.17.0 '@wordpress/element': 6.17.0 '@wordpress/hooks': 4.17.0 diff --git a/projects/js-packages/components/changelog/renovate-@wordpressdataviews b/projects/js-packages/components/changelog/renovate-@wordpressdataviews new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/components/changelog/renovate-@wordpressdataviews @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/components/package.json b/projects/js-packages/components/package.json index bb8eb9fe61e40..e9ed2b1564878 100644 --- a/projects/js-packages/components/package.json +++ b/projects/js-packages/components/package.json @@ -23,7 +23,7 @@ "@wordpress/components": "29.3.0", "@wordpress/compose": "7.17.0", "@wordpress/data": "10.17.0", - "@wordpress/dataviews": "4.12.0", + "@wordpress/dataviews": "4.13.0", "@wordpress/date": "5.17.0", "@wordpress/element": "6.17.0", "@wordpress/i18n": "5.17.0", diff --git a/projects/js-packages/publicize-components/changelog/renovate-@wordpressdataviews b/projects/js-packages/publicize-components/changelog/renovate-@wordpressdataviews new file mode 100644 index 0000000000000..c47cb18e82997 --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/renovate-@wordpressdataviews @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated package dependencies. diff --git a/projects/js-packages/publicize-components/package.json b/projects/js-packages/publicize-components/package.json index 30cc9e03e2353..5f38dda31952e 100644 --- a/projects/js-packages/publicize-components/package.json +++ b/projects/js-packages/publicize-components/package.json @@ -34,7 +34,7 @@ "@wordpress/compose": "7.17.0", "@wordpress/core-data": "7.17.0", "@wordpress/data": "10.17.0", - "@wordpress/dataviews": "4.12.0", + "@wordpress/dataviews": "4.13.0", "@wordpress/date": "5.17.0", "@wordpress/edit-post": "8.17.0", "@wordpress/editor": "14.17.0", From 29aac6d13bc12ce22d9f3f0b114b84b216c1c195 Mon Sep 17 00:00:00 2001 From: Anna McPhee <30754158+annacmc@users.noreply.github.com> Date: Tue, 4 Feb 2025 09:58:36 +1100 Subject: [PATCH 335/420] Chart Library: Adds separate Storybook story for Donut Chart (#41496) * adds a donut chart story * changelog --- .../changelog/update-charts-add-donut-story | 4 + .../pie-chart/stories/donut.stories.tsx | 178 ++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 projects/js-packages/charts/changelog/update-charts-add-donut-story create mode 100644 projects/js-packages/charts/src/components/pie-chart/stories/donut.stories.tsx diff --git a/projects/js-packages/charts/changelog/update-charts-add-donut-story b/projects/js-packages/charts/changelog/update-charts-add-donut-story new file mode 100644 index 0000000000000..2109b1d87d066 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-charts-add-donut-story @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Charts: adds donut pie chart story diff --git a/projects/js-packages/charts/src/components/pie-chart/stories/donut.stories.tsx b/projects/js-packages/charts/src/components/pie-chart/stories/donut.stories.tsx new file mode 100644 index 0000000000000..22aabd267fa4c --- /dev/null +++ b/projects/js-packages/charts/src/components/pie-chart/stories/donut.stories.tsx @@ -0,0 +1,178 @@ +import { Group } from '@visx/group'; +import { Text } from '@visx/text'; +import { ThemeProvider, jetpackTheme, wooTheme } from '../../../providers/theme'; +import { PieChart } from '../../pie-chart'; +import type { Meta, StoryObj } from '@storybook/react'; + +const data = [ + { + label: 'Active Users', + value: 65000, + valueDisplay: '65K', + percentage: 65, + }, + { + label: 'Inactive Users', + value: 35000, + valueDisplay: '35K', + percentage: 35, + }, +]; + +const meta = { + title: 'JS Packages/Charts/Types/Donut Chart', + component: PieChart, + parameters: { + layout: 'centered', + }, + decorators: [ + ( Story, { args } ) => ( + +
      + +
      +
      + ), + ], + argTypes: { + size: { + control: { + type: 'range', + min: 100, + max: 800, + step: 10, + default: 400, + }, + }, + thickness: { + control: { + type: 'range', + min: 0, + max: 1, + step: 0.01, + }, + }, + gapScale: { + control: { + type: 'range', + min: 0, + max: 1, + step: 0.01, + }, + }, + cornerScale: { + control: { + type: 'range', + min: 0, + max: 1, + step: 0.01, + }, + }, + theme: { + control: 'select', + options: { + default: undefined, + jetpack: jetpackTheme, + woo: wooTheme, + }, + defaultValue: undefined, + }, + }, +} satisfies Meta< typeof PieChart >; + +export default meta; +type Story = StoryObj< typeof PieChart >; + +export const Default: Story = { + args: { + thickness: 0.4, + gapScale: 0.03, + padding: 20, + cornerScale: 0.03, + withTooltips: true, + data, + theme: 'default', + showLegend: true, + legendOrientation: 'horizontal', + children: ( + + + User Activity + + + Total: 100K Users + + + ), + }, +}; + +export const WithVerticalLegend: Story = { + args: { + ...Default.args, + legendOrientation: 'vertical', + }, +}; + +export const WithoutCenter: Story = { + args: { + ...Default.args, + children: undefined, + }, +}; + +export const CustomTheme: Story = { + args: { + ...Default.args, + theme: wooTheme, + }, +}; + +export const ErrorStates: Story = { + render: () => ( +
      +
      +

      Empty Data

      + +
      +
      +

      Single Value

      + +
      +
      + ), +}; + +export const Thin: Story = { + args: { + ...Default.args, + thickness: 0.2, + gapScale: 0.01, + children: ( + + + Thin Donut + + + Thickness: 20% + + + ), + }, +}; From d91a77a72cd1074c4d8ddd30e575b8b0ef589658 Mon Sep 17 00:00:00 2001 From: Anna McPhee <30754158+annacmc@users.noreply.github.com> Date: Tue, 4 Feb 2025 09:59:12 +1100 Subject: [PATCH 336/420] Chart Library: Add a prop to control line smoothing (#41495) * add smoothing to the LineChartProps interface * update LineChart component to use the smoothing prop * changelog * add story + curvelinear * Apply suggestions from code review --------- Co-authored-by: Jasper Kang --- .../changelog/update-chart-library-toggle-line-smoothing | 4 ++++ .../charts/src/components/line-chart/line-chart.tsx | 6 ++++-- .../src/components/line-chart/stories/index.stories.tsx | 7 +++++++ 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-chart-library-toggle-line-smoothing diff --git a/projects/js-packages/charts/changelog/update-chart-library-toggle-line-smoothing b/projects/js-packages/charts/changelog/update-chart-library-toggle-line-smoothing new file mode 100644 index 0000000000000..3b33e34f8bdb7 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-chart-library-toggle-line-smoothing @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Charts: add line smoothing toggle on line chart diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index ad300d003c1b5..75e8d2780ef5e 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -1,4 +1,4 @@ -import { curveNatural } from '@visx/curve'; +import { curveCatmullRom, curveLinear } from '@visx/curve'; import { LinearGradient } from '@visx/gradient'; import { XYChart, @@ -19,6 +19,7 @@ import type { BaseChartProps, DataPointDate, SeriesData } from '../../types'; interface LineChartProps extends BaseChartProps< SeriesData[] > { margin?: { top: number; right: number; bottom: number; left: number }; withGradientFill: boolean; + smoothing?: boolean; } type TooltipData = { @@ -102,6 +103,7 @@ const LineChart: FC< LineChartProps > = ( { showLegend = false, legendOrientation = 'horizontal', withGradientFill = false, + smoothing = true, options = {}, } ) => { const providerTheme = useChartTheme(); @@ -191,7 +193,7 @@ const LineChart: FC< LineChartProps > = ( { { ...accessors } fill={ withGradientFill ? `url(#area-gradient-${ index + 1 })` : undefined } renderLine={ true } - curve={ curveNatural } + curve={ smoothing ? curveCatmullRom : curveLinear } /> ); diff --git a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx index 0baf56d371ffa..c270d09866b9f 100644 --- a/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx +++ b/projects/js-packages/charts/src/components/line-chart/stories/index.stories.tsx @@ -39,6 +39,7 @@ Default.args = { showLegend: false, legendOrientation: 'horizontal', withGradientFill: false, + smoothing: true, margin: { top: 20, right: 40, bottom: 40, left: 20 }, options: { axis: { @@ -182,3 +183,9 @@ export const ErrorStates: StoryObj< typeof LineChart > = { }, }, }; + +export const WithoutSmoothing: StoryObj< typeof LineChart > = Template.bind( {} ); +WithoutSmoothing.args = { + ...Default.args, + smoothing: false, +}; From b160249477504cabb180960a3f2b87dfe2312664 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Tue, 4 Feb 2025 13:05:43 +1300 Subject: [PATCH 337/420] Charts: Small type, style and exports changes (#41523) * a bunch small type and style fixes * changelog * export themes * default no margin * seems value is enough --- .../charts/changelog/update-type-and-style-fixes | 4 ++++ .../src/components/line-chart/line-chart.tsx | 5 ++--- .../charts/src/components/pie-chart/pie-chart.tsx | 5 ----- .../src/components/shared/with-responsive.tsx | 7 +++---- projects/js-packages/charts/src/index.ts | 3 ++- projects/js-packages/charts/src/types.ts | 15 +++++++++++---- 6 files changed, 22 insertions(+), 17 deletions(-) create mode 100644 projects/js-packages/charts/changelog/update-type-and-style-fixes diff --git a/projects/js-packages/charts/changelog/update-type-and-style-fixes b/projects/js-packages/charts/changelog/update-type-and-style-fixes new file mode 100644 index 0000000000000..2560b84ccf150 --- /dev/null +++ b/projects/js-packages/charts/changelog/update-type-and-style-fixes @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Small type and style fixes diff --git a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx index 75e8d2780ef5e..e18497baa74b1 100644 --- a/projects/js-packages/charts/src/components/line-chart/line-chart.tsx +++ b/projects/js-packages/charts/src/components/line-chart/line-chart.tsx @@ -17,7 +17,6 @@ import styles from './line-chart.module.scss'; import type { BaseChartProps, DataPointDate, SeriesData } from '../../types'; interface LineChartProps extends BaseChartProps< SeriesData[] > { - margin?: { top: number; right: number; bottom: number; left: number }; withGradientFill: boolean; smoothing?: boolean; } @@ -120,7 +119,7 @@ const LineChart: FC< LineChartProps > = ( { margin = useMemo( () => { // Auto-margin unless specified to make room for axis labels. // Default margin is for bottom and left axis labels. - let defaultMargin = { top: 0, right: 0, bottom: 40, left: 40 }; + let defaultMargin = {}; if ( options.axis?.y?.orientation === 'right' ) { defaultMargin = { ...defaultMargin, right: 40, left: 0 }; } @@ -159,7 +158,7 @@ const LineChart: FC< LineChartProps > = ( { theme={ theme } width={ width } height={ height } - margin={ margin } + margin={ { top: 0, right: 0, bottom: 0, left: 0, ...margin } } xScale={ { type: 'time', ...options?.xScale } } yScale={ { type: 'linear', nice: true, zero: false, ...options?.yScale } } > diff --git a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx index f5160948f584a..5c339a039a4f5 100644 --- a/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx +++ b/projects/js-packages/charts/src/components/pie-chart/pie-chart.tsx @@ -20,11 +20,6 @@ interface PieChartProps extends OmitBaseChartProps { */ innerRadius?: number; - /** - * Size of the chart in pixels - */ - size?: number; - /** * Add padding to the chart */ diff --git a/projects/js-packages/charts/src/components/shared/with-responsive.tsx b/projects/js-packages/charts/src/components/shared/with-responsive.tsx index 41b0c79f35337..9718aaa676366 100644 --- a/projects/js-packages/charts/src/components/shared/with-responsive.tsx +++ b/projects/js-packages/charts/src/components/shared/with-responsive.tsx @@ -1,6 +1,6 @@ import { useParentSize } from '@visx/responsive'; import { ComponentType } from 'react'; -import type { BaseChartProps } from '../../types'; +import type { BaseChartProps, Optional } from '../../types'; type ResponsiveConfig = { maxWidth?: number; @@ -23,7 +23,7 @@ export function withResponsive< T extends BaseChartProps< unknown > >( ) { const { maxWidth = 1200, aspectRatio = 0.5, debounceTime = 50 } = config || {}; - return function ResponsiveChart( props: Omit< T, 'width' | 'height' | 'size' > ) { + return function ResponsiveChart( props: Optional< T, 'width' | 'height' | 'size' > ) { const { parentRef, width: parentWidth } = useParentSize( { debounceTime, enableDebounceLeadingCall: true, @@ -32,14 +32,13 @@ export function withResponsive< T extends BaseChartProps< unknown > >( // Calculate dimensions const containerWidth = parentWidth ? Math.min( parentWidth, maxWidth ) : 600; - const containerHeight = containerWidth * aspectRatio; + const containerHeight = props.height ?? containerWidth * aspectRatio; return (
      = T[ keyof T ]; +export type Optional< T, K extends keyof T > = Pick< Partial< T >, K > & Omit< T, K >; + declare type OrientationType = ValueOf< typeof Orientation >; export type DataPoint = { @@ -84,6 +86,7 @@ declare type AxisOptions = { axisLineClassName?: string; labelClassName?: string; tickClassName?: string; + tickFormat?: ( value: number ) => string; }; /** @@ -106,14 +109,18 @@ export type BaseChartProps< T = DataPoint | DataPointDate > = { * Height of the chart in pixels */ height?: number; + /** + * Size of the chart in pixels for pie and donut charts + */ + size?: number; /** * Chart margins */ margin?: { - top: number; - right: number; - bottom: number; - left: number; + top?: number; + right?: number; + bottom?: number; + left?: number; }; /** * Whether to show tooltips on hover. False by default. From f97d1a05e6137a791ab7d9401fb3f6cc700091ba Mon Sep 17 00:00:00 2001 From: "okmttdhr, tada" Date: Tue, 4 Feb 2025 10:23:41 +0900 Subject: [PATCH 338/420] Add Site Management Panel link to General Settings page (#41497) * Add Site Management Panel link to General Settings page * changelog * Remove redundant `tr`s * Add Site Setting only for hold-out users * Add options-general.php to duplicated views temporarily --- .../changelog/add-add-smp-link | 4 ++ .../wpcom-admin-interface.php | 4 +- .../wpcom-options-general/options-general.php | 51 ++++++++++++------- .../options-general.scss | 10 ++-- .../wpcom-options-general/options-general.ts | 2 +- 5 files changed, 45 insertions(+), 26 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-add-smp-link diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-add-smp-link b/projects/packages/jetpack-mu-wpcom/changelog/add-add-smp-link new file mode 100644 index 0000000000000..e1b915a80bb32 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-add-smp-link @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Add Site Management Panel link to General Settings page diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index 5e4d3928df0c3..9a46e01c7ffda 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -18,7 +18,7 @@ * The setting is displayed only if the has the wp-admin interface selected. */ function wpcomsh_wpcom_admin_interface_settings_field() { - add_settings_field( 'wpcom_admin_interface', '', 'wpcom_admin_interface_display', 'general', 'default' ); + add_settings_field( 'wpcom_admin_interface', __( 'Admin Interface Style', 'jetpack-mu-wpcom' ), 'wpcom_admin_interface_display', 'general', 'default' ); register_setting( 'general', 'wpcom_admin_interface', array( 'sanitize_callback' => 'esc_attr' ) ); } @@ -29,7 +29,6 @@ function wpcomsh_wpcom_admin_interface_settings_field() { function wpcom_admin_interface_display() { $value = get_option( 'wpcom_admin_interface' ); - echo ''; echo '
      '; echo '

      ' . esc_html__( 'Use WP-Admin to manage your site.', 'jetpack-mu-wpcom' ) . '


      '; echo '

      ' . esc_html__( 'Use WordPress.com’s native dashboard to manage your site.', 'jetpack-mu-wpcom' ) . '


      '; @@ -126,6 +125,7 @@ function ( $location ) { 'edit-comments.php', 'edit-tags.php?taxonomy=category', 'edit-tags.php?taxonomy=post_tag', + 'options-general.php', ); /** diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-options-general/options-general.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-options-general/options-general.php index 244a23336ef0e..5f47d7cd21cd7 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-options-general/options-general.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-options-general/options-general.php @@ -12,22 +12,17 @@ */ function wpcom_fiverr_cta() { ?> - - - - - -

      -

      - - - +
      +

      +

      + +
      + + + + { - const fiverrCtaRow = document.querySelector( '.wpcom-fiverr-cta' ); + const fiverrCtaRow = document.getElementById( 'wpcom-fiverr-cta' )?.closest( 'tr' ); if ( fiverrCtaRow ) { fragment.appendChild( fiverrCtaRow ); } From b9ca37b7fb82f8da4321c2df7cca2be00db4a78d Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Tue, 4 Feb 2025 15:12:47 +1300 Subject: [PATCH 339/420] add changelog (#41528) --- projects/js-packages/charts/CHANGELOG.md | 5 +++++ projects/js-packages/charts/package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/js-packages/charts/CHANGELOG.md b/projects/js-packages/charts/CHANGELOG.md index 5ff1605e2acee..5da619c7a9e4e 100644 --- a/projects/js-packages/charts/CHANGELOG.md +++ b/projects/js-packages/charts/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.7.1] - 2025-02-04 +### Changed +- Internal updates. + ## [0.7.0] - 2025-01-31 ### Added - Automatic margin for axis labels [#41325] @@ -89,6 +93,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed lints following ESLint rule changes for TS [#40584] - Fixing a bug in Chart storybook data. [#40640] +[0.7.1]: https://github.com/Automattic/charts/compare/v0.7.0...v0.7.1 [0.7.0]: https://github.com/Automattic/charts/compare/v0.6.0...v0.7.0 [0.6.0]: https://github.com/Automattic/charts/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/Automattic/charts/compare/v0.4.0...v0.5.0 diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index b248db7293b38..23a4e859a6d47 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/charts", - "version": "0.7.0", + "version": "0.7.1", "description": "Display charts within Automattic products.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/charts/#readme", "bugs": { From 7fd198930e690fa5c01b848ed58fcd470e7d9da3 Mon Sep 17 00:00:00 2001 From: Daniel Richards Date: Tue, 4 Feb 2025 10:22:06 +0800 Subject: [PATCH 340/420] Update usage of deprecated block editor APIs (#41176) * Update getBlocks call to use block editor store * Update deprecated code in the voice-to-content block * Remove usage of old nux package in page patterns plugin * Remove nux imports and usage for custom wpcom welcome guide * Update deprecated usage of Card isElevated prop * Update isInserterSidebar usage - avoid deprecated selector in favor of core/editor store selector * changelog --- .../update-deprecated-block-editor-code | 4 +++ .../components/wpcom-tour-kit-step-card.tsx | 2 +- .../page-patterns-plugin.tsx | 35 +++++++------------ .../features/wpcom-block-editor-nux/index.js | 2 +- ...e-nux.js => disable-core-welcome-guide.js} | 10 +----- .../src/welcome-tour/tour-launch.jsx | 2 +- .../update-deprecated-block-editor-code | 4 +++ .../blocks/voice-to-content/edit.tsx | 12 ++++--- .../external-media/media-service/index.ts | 12 ++----- 9 files changed, 35 insertions(+), 48 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-deprecated-block-editor-code rename projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/{disable-core-nux.js => disable-core-welcome-guide.js} (75%) create mode 100644 projects/plugins/jetpack/changelog/update-deprecated-block-editor-code diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-deprecated-block-editor-code b/projects/packages/jetpack-mu-wpcom/changelog/update-deprecated-block-editor-code new file mode 100644 index 0000000000000..53270b7d72191 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-deprecated-block-editor-code @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Code Quality: Update deprecated block editor API usage. diff --git a/projects/packages/jetpack-mu-wpcom/src/common/tour-kit/variants/wpcom/components/wpcom-tour-kit-step-card.tsx b/projects/packages/jetpack-mu-wpcom/src/common/tour-kit/variants/wpcom/components/wpcom-tour-kit-step-card.tsx index b86e4202c01a1..1918dcb773ff9 100644 --- a/projects/packages/jetpack-mu-wpcom/src/common/tour-kit/variants/wpcom/components/wpcom-tour-kit-step-card.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/common/tour-kit/variants/wpcom/components/wpcom-tour-kit-step-card.tsx @@ -25,7 +25,7 @@ const WpcomTourKitStepCard: React.FunctionComponent< WpcomTourStepRendererProps const description = descriptions[ isMobile ? 'mobile' : 'desktop' ] ?? descriptions.desktop; return ( - + { imgSrc && ( diff --git a/projects/packages/jetpack-mu-wpcom/src/features/starter-page-templates/page-patterns-plugin.tsx b/projects/packages/jetpack-mu-wpcom/src/features/starter-page-templates/page-patterns-plugin.tsx index 3718dfd82cfcd..7579efb86085d 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/starter-page-templates/page-patterns-plugin.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/starter-page-templates/page-patterns-plugin.tsx @@ -5,7 +5,6 @@ import { useCallback } from '@wordpress/element'; import { addFilter, removeFilter } from '@wordpress/hooks'; import { __ } from '@wordpress/i18n'; import { pageLayoutStore } from './store'; -import '@wordpress/nux'; const INSERTING_HOOK_NAME = 'isInsertingPagePattern'; const INSERTING_HOOK_NAMESPACE = 'automattic/full-site-editing/inserting-pattern'; @@ -13,16 +12,15 @@ const INSERTING_HOOK_NAMESPACE = 'automattic/full-site-editing/inserting-pattern interface PagePatternsPluginProps { patterns: PatternDefinition[]; } -type CoreEditorPlaceholder = { +type CoreBlockEditorPlaceholder = { getBlocks: ( ...args: unknown[] ) => BlockInstance[]; +}; +type CoreEditorPlaceholder = { getEditedPostAttribute: ( ...args: unknown[] ) => unknown; }; type CoreEditPostPlaceholder = { isFeatureActive: ( ...args: unknown[] ) => boolean; }; -type CoreNuxPlaceholder = { - areTipsEnabled: ( ...args: unknown[] ) => boolean; -}; /** * Recursively finds the Content block if any. @@ -55,16 +53,21 @@ export function PagePatternsPlugin( props: PagePatternsPluginProps ): JSX.Elemen const { replaceInnerBlocks } = useDispatch( 'core/block-editor' ); const { editPost } = useDispatch( 'core/editor' ); const { toggleFeature } = useDispatch( 'core/edit-post' ); - const { disableTips } = useDispatch( 'core/nux' ); const selectProps = useSelect( select => { + const getMetaNew = () => + ( select( 'core/editor' ) as CoreEditorPlaceholder ).getEditedPostAttribute( 'meta' ); + const currentBlocks = ( + select( 'core/block-editor' ) as CoreBlockEditorPlaceholder + ).getBlocks(); const { isOpen, isPatternPicker } = select( pageLayoutStore ); return { + getMeta: getMetaNew, + postContentBlock: findPostContentBlock( currentBlocks ), isOpen: isOpen(), isWelcomeGuideActive: ( select( 'core/edit-post' ) as CoreEditPostPlaceholder ).isFeatureActive( 'welcomeGuide' ) as boolean, - areTipsEnabled: ( select( 'core/nux' ) as CoreNuxPlaceholder ).areTipsEnabled() as boolean, ...( isPatternPicker() && { title: __( 'Choose a Pattern', 'jetpack-mu-wpcom' ), description: __( @@ -75,15 +78,7 @@ export function PagePatternsPlugin( props: PagePatternsPluginProps ): JSX.Elemen }; }, [] ); - const { getMeta, postContentBlock } = useSelect( select => { - const getMetaNew = () => - ( select( 'core/editor' ) as CoreEditorPlaceholder ).getEditedPostAttribute( 'meta' ); - const currentBlocks = ( select( 'core/editor' ) as CoreEditorPlaceholder ).getBlocks(); - return { - getMeta: getMetaNew, - postContentBlock: findPostContentBlock( currentBlocks ), - }; - }, [] ); + const { getMeta, postContentBlock } = selectProps; const savePatternChoice = useCallback( ( name: string, selectedCategory: string | null ) => { @@ -123,17 +118,13 @@ export function PagePatternsPlugin( props: PagePatternsPluginProps ): JSX.Elemen [ editPost, postContentBlock, replaceInnerBlocks ] ); - const { isWelcomeGuideActive, areTipsEnabled } = selectProps; + const { isWelcomeGuideActive } = selectProps; const hideWelcomeGuide = useCallback( () => { if ( isWelcomeGuideActive ) { - // Gutenberg 7.2.0 or higher. toggleFeature( 'welcomeGuide' ); - } else if ( areTipsEnabled ) { - // Gutenberg 7.1.0 or lower. - disableTips(); } - }, [ areTipsEnabled, disableTips, isWelcomeGuideActive, toggleFeature ] ); + }, [ isWelcomeGuideActive, toggleFeature ] ); const handleClose = useCallback( () => { setOpenState( 'CLOSED' ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/index.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/index.js index 4479be948bef3..55c54afac2319 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/index.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/index.js @@ -2,7 +2,7 @@ import '../../common/public-path'; import { register } from './src/store'; -import './src/disable-core-nux'; +import './src/disable-core-welcome-guide'; import './src/block-editor-nux'; register(); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-nux.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-welcome-guide.js similarity index 75% rename from projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-nux.js rename to projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-welcome-guide.js index 6591d4e0b5c2d..ea3881b6f95ca 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-nux.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-welcome-guide.js @@ -1,10 +1,7 @@ import { select, dispatch, subscribe } from '@wordpress/data'; -import '@wordpress/nux'; //ensure nux store loads - -// Disable nux and welcome guide features from core. +// Disable welcome guide features from core. const unsubscribe = subscribe( () => { - dispatch( 'core/nux' ).disableTips(); if ( select( 'core/edit-post' )?.isFeatureActive( 'welcomeGuide' ) ) { dispatch( 'core/edit-post' ).toggleFeature( 'welcomeGuide' ); unsubscribe(); @@ -16,12 +13,7 @@ const unsubscribe = subscribe( () => { } ); // Listen for these features being triggered to call dotcom welcome guide instead. -// Note migration of areTipsEnabled: https://github.com/WordPress/gutenberg/blob/5c3a32dabe4393c45f7fe6ac5e4d78aebd5ee274/packages/data/src/plugins/persistence/index.js#L269 subscribe( () => { - if ( select( 'core/nux' ).areTipsEnabled() ) { - dispatch( 'core/nux' ).disableTips(); - dispatch( 'automattic/wpcom-welcome-guide' ).setShowWelcomeGuide( true ); - } if ( select( 'core/edit-post' )?.isFeatureActive( 'welcomeGuide' ) ) { dispatch( 'core/edit-post' ).toggleFeature( 'welcomeGuide' ); // On mounting, the welcomeGuide feature is turned on by default. This opens the welcome guide despite `welcomeGuideStatus` value. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/tour-launch.jsx b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/tour-launch.jsx index 277353f9864aa..a9e6270f24123 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/tour-launch.jsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/tour-launch.jsx @@ -113,7 +113,7 @@ function WelcomeTour( { siteIntent } ) { } const { isInserterOpened, isSidebarOpened, isSettingsOpened } = useSelect( select => ( { - isInserterOpened: select( 'core/edit-post' ).isInserterOpened(), + isInserterOpened: select( 'core/editor' ).isInserterOpened(), isSidebarOpened: select( 'automattic/block-editor-nav-sidebar' )?.isSidebarOpened() ?? false, // The sidebar store may not always be loaded. isSettingsOpened: select( 'core/interface' ).getActiveComplementaryArea( 'core/edit-post' ) === diff --git a/projects/plugins/jetpack/changelog/update-deprecated-block-editor-code b/projects/plugins/jetpack/changelog/update-deprecated-block-editor-code new file mode 100644 index 0000000000000..6708c50117f07 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-deprecated-block-editor-code @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Code Quality: Update deprecated block editor APU usage. diff --git a/projects/plugins/jetpack/extensions/blocks/voice-to-content/edit.tsx b/projects/plugins/jetpack/extensions/blocks/voice-to-content/edit.tsx index d7939f218596f..3b847b90e7ace 100644 --- a/projects/plugins/jetpack/extensions/blocks/voice-to-content/edit.tsx +++ b/projects/plugins/jetpack/extensions/blocks/voice-to-content/edit.tsx @@ -8,9 +8,10 @@ import { } from '@automattic/jetpack-ai-client'; import { ThemeProvider } from '@automattic/jetpack-components'; import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; +import { store as blockEditorStore } from '@wordpress/block-editor'; +import { BlockInstance } from '@wordpress/blocks'; import { Button, Modal, Icon } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; -import { store as editorStore } from '@wordpress/editor'; import { useCallback, useEffect, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { external } from '@wordpress/icons'; @@ -58,12 +59,13 @@ const transcriptionStateHelper = ( export default function VoiceToContentEdit( { clientId } ) { const [ audio, setAudio ] = useState< Blob >( null ); - const { removeBlock } = useDispatch( 'core/block-editor' ) as { - removeBlock: ( id: string ) => void; + const { removeBlock } = useDispatch( blockEditorStore ); + // TODO: The second `deps` argument shouldn't be needed, but it's added to make the type checker happy. + // This can be removed when the core data types are updated to fix the issue. + const { getBlocks } = useSelect( blockEditorStore, [] ) as { + getBlocks: () => BlockInstance[]; }; - const { getBlocks } = useSelect( select => select( editorStore ), [] ); - const destroyBlock = useCallback( () => { // Remove the block from the editor setTimeout( () => { diff --git a/projects/plugins/jetpack/extensions/shared/external-media/media-service/index.ts b/projects/plugins/jetpack/extensions/shared/external-media/media-service/index.ts index f938fd65e0fe4..5f981262cd9f4 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/media-service/index.ts +++ b/projects/plugins/jetpack/extensions/shared/external-media/media-service/index.ts @@ -210,16 +210,10 @@ const isMediaSourceConnected = async ( source: MediaSource ) => * @return {boolean} True if the inserter is opened false otherwise. */ const isInserterOpened = (): boolean => { - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - const selectIsInserterOpened = ( select( 'core/editor' ) as any )?.isInserterOpened; + const editorIsInserterOpened = select( 'core/editor' ).isInserterOpened?.(); - const editorIsInserterOpened = selectIsInserterOpened?.(); - - return ( - editorIsInserterOpened || - select( 'core/edit-site' )?.isInserterOpened() || - select( 'core/edit-widgets' )?.isInserterOpened() - ); + // The widgets editor doesn't use the `core/editor` store, so check is separately. + return editorIsInserterOpened || select( 'core/edit-widgets' )?.isInserterOpened(); }; const registerInInserter = ( mediaCategoryProvider: () => object ) => From 6c3d0613702170914381bb1ebebe67fc4b12d480 Mon Sep 17 00:00:00 2001 From: Daniel Richards Date: Tue, 4 Feb 2025 10:22:28 +0800 Subject: [PATCH 341/420] Forms: update form field and button blocks to support content only mode (#41411) * Add role:content to field block attributes * Add role:content for button block * changelog * Support updating the label of options in content only mode --- .../update-form-blocks-for-content-only-mode | 4 ++++ .../forms/src/blocks/contact-form/child-blocks.js | 14 ++++++++++++++ .../jetpack-field-choice/item/settings.js | 1 + .../update-form-blocks-for-content-only-mode | 4 ++++ .../jetpack/extensions/blocks/button/attributes.js | 3 +++ 5 files changed, 26 insertions(+) create mode 100644 projects/packages/forms/changelog/update-form-blocks-for-content-only-mode create mode 100644 projects/plugins/jetpack/changelog/update-form-blocks-for-content-only-mode diff --git a/projects/packages/forms/changelog/update-form-blocks-for-content-only-mode b/projects/packages/forms/changelog/update-form-blocks-for-content-only-mode new file mode 100644 index 0000000000000..a5143e2855ee9 --- /dev/null +++ b/projects/packages/forms/changelog/update-form-blocks-for-content-only-mode @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Forms: Update fields and button blocks to support contentOnly editing. diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index 03add2e890a14..edfe9b2d3f4ab 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -31,6 +31,7 @@ const FieldDefaults = { label: { type: 'string', default: null, + role: 'content', }, required: { type: 'boolean', @@ -38,18 +39,22 @@ const FieldDefaults = { }, requiredText: { type: 'string', + role: 'content', }, options: { type: 'array', default: [], + role: 'content', }, defaultValue: { type: 'string', default: '', + role: 'content', }, placeholder: { type: 'string', default: '', + role: 'content', }, id: { type: 'string', @@ -366,6 +371,7 @@ export const childBlocks = [ label: { type: 'string', default: 'Text', + role: 'content', }, }, }, @@ -388,6 +394,7 @@ export const childBlocks = [ label: { type: 'string', default: 'Name', + role: 'content', }, }, }, @@ -409,6 +416,7 @@ export const childBlocks = [ label: { type: 'string', default: 'Email', + role: 'content', }, }, }, @@ -435,6 +443,7 @@ export const childBlocks = [ label: { type: 'string', default: __( 'Website', 'jetpack-forms' ), + role: 'content', }, }, }, @@ -464,6 +473,7 @@ export const childBlocks = [ label: { type: 'string', default: 'Date', + role: 'content', }, dateFormat: { type: 'string', @@ -493,6 +503,7 @@ export const childBlocks = [ label: { type: 'string', default: 'Phone', + role: 'content', }, }, }, @@ -542,6 +553,7 @@ export const childBlocks = [ label: { type: 'string', default: '', + role: 'content', }, }, }, @@ -649,10 +661,12 @@ export const childBlocks = [ toggleLabel: { type: 'string', default: null, + role: 'content', }, options: { type: 'array', default: [ '' ], + role: 'content', }, }, }, diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-choice/item/settings.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-choice/item/settings.js index 8793ef3060dc5..81edaa3554c74 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-choice/item/settings.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field-choice/item/settings.js @@ -4,6 +4,7 @@ export default { attributes: { label: { type: 'string', + role: 'content', }, fieldType: { enum: [ 'checkbox', 'radio' ], diff --git a/projects/plugins/jetpack/changelog/update-form-blocks-for-content-only-mode b/projects/plugins/jetpack/changelog/update-form-blocks-for-content-only-mode new file mode 100644 index 0000000000000..d526252ab0ca2 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-form-blocks-for-content-only-mode @@ -0,0 +1,4 @@ +Significance: minor +Type: enhancement + +Forms: Update field and button blocks to support contentOnly editing. diff --git a/projects/plugins/jetpack/extensions/blocks/button/attributes.js b/projects/plugins/jetpack/extensions/blocks/button/attributes.js index a6bd20bbcf45d..875a48b67d7d2 100644 --- a/projects/plugins/jetpack/extensions/blocks/button/attributes.js +++ b/projects/plugins/jetpack/extensions/blocks/button/attributes.js @@ -17,12 +17,15 @@ export default { }, text: { type: 'string', + role: 'content', }, placeholder: { type: 'string', + role: 'content', }, url: { type: 'string', + role: 'content', }, textColor: { type: 'string', From 5f6e41063c8a83e4eac2417064202f9631523611 Mon Sep 17 00:00:00 2001 From: "okmttdhr, tada" Date: Tue, 4 Feb 2025 11:27:36 +0900 Subject: [PATCH 342/420] Remove options-general.phph from duplicated view experiment (#41529) * Remove options-general.phph from WPCOM_DUPLICATED_VIEW * changelog --- .../changelog/update-revert-duplicated-view-options-general | 4 ++++ .../features/wpcom-admin-interface/wpcom-admin-interface.php | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-revert-duplicated-view-options-general diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-revert-duplicated-view-options-general b/projects/packages/jetpack-mu-wpcom/changelog/update-revert-duplicated-view-options-general new file mode 100644 index 0000000000000..6262862651b6a --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-revert-duplicated-view-options-general @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Remove options-general.phph from WPCOM_DUPLICATED_VIEW diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php index 9a46e01c7ffda..f89c1e5e71691 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/wpcom-admin-interface.php @@ -125,7 +125,6 @@ function ( $location ) { 'edit-comments.php', 'edit-tags.php?taxonomy=category', 'edit-tags.php?taxonomy=post_tag', - 'options-general.php', ); /** From fdcb6814478faff5ac191d5265b6ae0c88614bcb Mon Sep 17 00:00:00 2001 From: "okmttdhr, tada" Date: Tue, 4 Feb 2025 16:14:21 +0900 Subject: [PATCH 343/420] Fix Site Visibility link for duplicated view experiment users (#41531) * Fix Site Visibility link for duplicated view experiment users * changelog --- .../update-reading-settings-site-visibility-link | 4 ++++ .../replace-site-visibility/replace-site-visibility.php | 8 ++++++++ 2 files changed, 12 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-reading-settings-site-visibility-link diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-reading-settings-site-visibility-link b/projects/packages/jetpack-mu-wpcom/changelog/update-reading-settings-site-visibility-link new file mode 100644 index 0000000000000..715f8643a4b3a --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-reading-settings-site-visibility-link @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix Site Visibility link for duplicated view experiment users diff --git a/projects/packages/jetpack-mu-wpcom/src/features/replace-site-visibility/replace-site-visibility.php b/projects/packages/jetpack-mu-wpcom/src/features/replace-site-visibility/replace-site-visibility.php index 51f060d585c12..420d2eeab7b29 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/replace-site-visibility/replace-site-visibility.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/replace-site-visibility/replace-site-visibility.php @@ -26,6 +26,7 @@ function replace_site_visibility() { $jetpack_status = new Automattic\Jetpack\Status(); $site_slug = $jetpack_status->get_site_suffix(); + $current_screen = wpcom_admin_get_current_screen(); if ( ! is_jetpack_connected() && $jetpack_status->is_private_site() ) { $settings_url = esc_url_raw( sprintf( '/wp-admin/admin.php?page=jetpack' ) ); @@ -34,6 +35,13 @@ function replace_site_visibility() { return; } else { $settings_url = esc_url_raw( sprintf( 'https://wordpress.com/settings/general/%s#site-privacy-settings', $site_slug ) ); + + // To prevent "Default + hold-out" users from redirecting to /wp-admin/options-general.php. + // p1738634823404529/1738634703.754159-slack-CRWCHQGUB + if ( in_array( $current_screen, WPCOM_DUPLICATED_VIEW, true ) && wpcom_is_duplicate_views_experiment_enabled() ) { + $settings_url = esc_url_raw( sprintf( 'https://wordpress.com/sites/settings/site/%s', $site_slug ) ); + } + $manage_label = __( 'Manage your privacy settings', 'jetpack-mu-wpcom' ); } From b1341be0784d2014b32a546540295b8111a0a0a5 Mon Sep 17 00:00:00 2001 From: Karen Attfield Date: Tue, 4 Feb 2025 09:17:55 +0000 Subject: [PATCH 344/420] Custom Content Types: Ensure settings page functionality works without module requirement (#41349) --- docs/rest-api.md | 22 ++++ ...ove-custom-content-type-module-requirement | 4 + projects/js-packages/api/index.jsx | 5 + ...ove-custom-content-type-module-requirement | 4 + .../src/custom-content-types.php | 104 ++++++++++++++++- .../class-jetpack-portfolio.php | 4 +- .../class-jetpack-testimonial.php | 20 ++-- .../components/navigation-settings/index.jsx | 6 +- .../jetpack/_inc/client/state/action-types.js | 4 + .../client/state/feature-check/actions.js | 35 ++++++ .../_inc/client/state/feature-check/index.js | 2 + .../client/state/feature-check/reducer.js | 30 +++++ .../_inc/client/state/modules/actions.js | 31 +---- .../jetpack/_inc/client/state/reducer.js | 2 + .../_inc/client/state/settings/actions.js | 3 +- .../client/writing/custom-content-types.jsx | 80 +++++++------ .../jetpack/_inc/client/writing/index.jsx | 106 ++++++++++++++---- .../lib/class.core-rest-api-endpoints.php | 8 +- ...ove-custom-content-type-module-requirement | 4 + tools/eslint-excludelist.json | 1 - 20 files changed, 358 insertions(+), 117 deletions(-) create mode 100644 projects/js-packages/api/changelog/remove-custom-content-type-module-requirement create mode 100644 projects/packages/classic-theme-helper/changelog/remove-custom-content-type-module-requirement create mode 100644 projects/plugins/jetpack/_inc/client/state/feature-check/actions.js create mode 100644 projects/plugins/jetpack/_inc/client/state/feature-check/index.js create mode 100644 projects/plugins/jetpack/_inc/client/state/feature-check/reducer.js create mode 100644 projects/plugins/jetpack/changelog/remove-custom-content-type-module-requirement diff --git a/docs/rest-api.md b/docs/rest-api.md index c7ba9bb9b1f79..837a2347672d5 100644 --- a/docs/rest-api.md +++ b/docs/rest-api.md @@ -457,6 +457,28 @@ Dismiss a Jetpack notice by Id. * `"feedback_dash_request"` * `"welcome"`. +### Jetpack Features (not modules) + +This has primarily been introduced to distinguish between former modules moved to the Classic Theme Helper package (predominantly Custom Content Types), and existing modules. + +#### GET wp-json/jetpack/v4/feature/:feature-slug + +Get a single feature status, over-ride property, description and search queries by its slug. + +**Example response** for `/feature/custom-content-types` + +```json +{ + "custom-content-types": { + "active": true, + "over_ride": false, + "description": "Display different types of content on your site with custom content types.", + "additional_search_queries": "cpt, custom post types, portfolio, portfolios, testimonial, testimonials", + } +} +``` + + ### Site information Operations related to information about the site. diff --git a/projects/js-packages/api/changelog/remove-custom-content-type-module-requirement b/projects/js-packages/api/changelog/remove-custom-content-type-module-requirement new file mode 100644 index 0000000000000..007d00f00a617 --- /dev/null +++ b/projects/js-packages/api/changelog/remove-custom-content-type-module-requirement @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Custom Content Types: Ensure feature works on Jetpack settings page without using module functionality. diff --git a/projects/js-packages/api/index.jsx b/projects/js-packages/api/index.jsx index 8233d0ba8a616..02a692a6121e9 100644 --- a/projects/js-packages/api/index.jsx +++ b/projects/js-packages/api/index.jsx @@ -277,6 +277,11 @@ function JetpackRestApiClient( root, nonce ) { .then( checkStatus ) .then( parseJsonResponse ), + getFeatureTypeStatus: customContentType => + getRequest( `${ apiRoot }jetpack/v4/feature/${ customContentType }`, getParams ) + .then( checkStatus ) + .then( parseJsonResponse ), + fetchStatsData: range => getRequest( statsDataUrl( range ), getParams ) .then( checkStatus ) diff --git a/projects/packages/classic-theme-helper/changelog/remove-custom-content-type-module-requirement b/projects/packages/classic-theme-helper/changelog/remove-custom-content-type-module-requirement new file mode 100644 index 0000000000000..007d00f00a617 --- /dev/null +++ b/projects/packages/classic-theme-helper/changelog/remove-custom-content-type-module-requirement @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Custom Content Types: Ensure feature works on Jetpack settings page without using module functionality. diff --git a/projects/packages/classic-theme-helper/src/custom-content-types.php b/projects/packages/classic-theme-helper/src/custom-content-types.php index 5b2b3deeb15a7..5159b828a5f65 100644 --- a/projects/packages/classic-theme-helper/src/custom-content-types.php +++ b/projects/packages/classic-theme-helper/src/custom-content-types.php @@ -34,18 +34,96 @@ function jetpack_load_custom_post_types() { add_action( 'jetpack_activate_module_custom-content-types', array( '\Automattic\Jetpack\Classic_Theme_Helper\Jetpack_Testimonial', 'activation_post_type_support' ) ); add_action( 'init', array( '\Automattic\Jetpack\Classic_Theme_Helper\Nova_Restaurant', 'init' ) ); + + add_action( 'rest_api_init', 'register_rest_route_custom_content_types' ); + } if ( ! function_exists( 'jetpack_custom_post_types_loaded' ) ) { /** - * Make module configurable. + * Pass the active status to the front-end in it's initial state. */ function jetpack_custom_post_types_loaded() { - if ( class_exists( 'Jetpack' ) ) { - Jetpack::enable_module_configurable( __FILE__ ); - } + $initial_state = 'var CUSTOM_CONTENT_TYPE__INITIAL_STATE; typeof CUSTOM_CONTENT_TYPE__INITIAL_STATE === "object" || (CUSTOM_CONTENT_TYPE__INITIAL_STATE = JSON.parse(decodeURIComponent("' . rawurlencode( + wp_json_encode( + array( + 'active' => true, + 'over_ride' => false, + ) + ) + ) . '")));'; + + // Create a global variable with the custom content type feature status so that the value is available + // earlier than the API method above allows, preventing delayed loading of the settings card. + wp_register_script( 'custom-content-types-data', '', array(), '0.1.0', true ); + wp_enqueue_script( 'custom-content-types-data' ); + wp_add_inline_script( + 'custom-content-types-data', + $initial_state, + 'before' + ); + } + add_action( 'init', 'jetpack_custom_post_types_loaded' ); +} +if ( ! function_exists( 'register_rest_route_custom_content_types' ) ) { + /** + * Register the REST route for the custom content types. + */ + function register_rest_route_custom_content_types() { + + register_rest_route( + 'jetpack/v4', + '/feature/custom-content-types', + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => 'get_custom_content_type_details', + 'permission_callback' => 'custom_content_require_admin_privilege_callback', + ) + ); + } +} + +/** + * Get the custom content type details. + * + * @return WP_REST_Response + */ +function get_custom_content_type_details() { + + $active = true; + $over_ride = false; + $name = 'Custom Content Types'; + $description = 'Display different types of content on your site with custom content types.'; + $additional_search_queries = 'cpt, custom post types, portfolio, portfolios, testimonial, testimonials'; + + return rest_ensure_response( + array( + 'custom-content-types' => array( + 'active' => $active, + 'over_ride' => $over_ride, + 'name' => $name, + 'description' => $description, + 'additional_search_queries' => $additional_search_queries, + ), + ) + ); +} + +/** + * Check if the current user has the required capability. + * + * @return bool|WP_Error True if the request is made by ad administrator, WP_Error otherwise. + */ +function custom_content_require_admin_privilege_callback() { + if ( current_user_can( 'manage_options' ) ) { + return true; } - add_action( 'jetpack_modules_loaded', 'jetpack_custom_post_types_loaded' ); + + return new WP_Error( + 'rest_forbidden', + esc_html__( 'You are not allowed to perform this action.', 'jetpack-classic-theme-helper' ), + array( 'status' => rest_authorization_required_code() ) + ); } if ( ! function_exists( 'jetpack_cpt_settings_api_init' ) ) { @@ -83,6 +161,22 @@ function jetpack_cpt_section_callback() { } } +/** + * Remove Custom Content Types from the old Module list. + * Available at wp-admin/admin.php?page=jetpack_modules + * + * @param array $items Array of Jetpack modules. + * @todo Remove this function once the module file is removed from the Jetpack plugin. + * @return array + */ +function remove_custom_content_types_module_list( $items ) { + if ( isset( $items['custom-content-types'] ) ) { + unset( $items['custom-content-types'] ); + } + return $items; +} +add_filter( 'jetpack_modules_list_table_items', 'remove_custom_content_types_module_list' ); + if ( function_exists( 'jetpack_load_custom_post_types' ) ) { jetpack_load_custom_post_types(); diff --git a/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-portfolio.php b/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-portfolio.php index 758e4e567d064..febe5ffc5889f 100644 --- a/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-portfolio.php +++ b/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-portfolio.php @@ -7,7 +7,6 @@ namespace Automattic\Jetpack\Classic_Theme_Helper; -use Automattic\Jetpack\Modules; use Automattic\Jetpack\Status\Host; use Jetpack_Options; use WP_Customize_Image_Control; @@ -277,7 +276,7 @@ private function site_supports_custom_post_type() { } // Otherwise, say no unless something wants to filter us to say yes. - /** This action is documented in modules/custom-post-types/nova.php */ + /** This action is documented in classic-theme-helper/src/custom-post-types/class-nova-restaurant.php */ return (bool) apply_filters( 'jetpack_enable_cpt', false, self::CUSTOM_POST_TYPE ); } @@ -319,7 +318,6 @@ public function flush_rules_on_switch() { public static function activation_post_type_support() { if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) { update_option( self::OPTION_NAME, '1' ); - ( new Modules() )->activate( 'custom-content-types', false, false ); } } diff --git a/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-testimonial.php b/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-testimonial.php index 60dc7c16571a3..5ad34f04a3f08 100644 --- a/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-testimonial.php +++ b/projects/packages/classic-theme-helper/src/custom-post-types/class-jetpack-testimonial.php @@ -7,7 +7,6 @@ namespace Automattic\Jetpack\Classic_Theme_Helper; -use Automattic\Jetpack\Modules; use Automattic\Jetpack\Status\Host; use Jetpack_Options; use WP_Customize_Image_Control; @@ -51,6 +50,9 @@ public function __construct() { // Add an option to enable the CPT. Set the priority to 11 to ensure "Portfolio Projects" appears above "Testimonials" in the UI. add_action( 'admin_init', array( $this, 'settings_api_init' ), 11 ); + // Check on theme switch if theme supports CPT and setting is disabled + add_action( 'after_switch_theme', array( $this, 'activation_post_type_support' ) ); + // Make sure the post types are loaded for imports add_action( 'import_start', array( $this, 'register_post_types' ) ); @@ -60,7 +62,11 @@ public function __construct() { // Add to REST API post type allowed list. add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_cpt_rest_api_type' ) ); - $this->maybe_register_cpt(); + if ( get_option( self::OPTION_NAME, '0' ) || ( new Host() )->is_wpcom_platform() ) { + $this->maybe_register_cpt(); + } else { + add_action( 'init', array( $this, 'maybe_register_cpt' ) ); + } // Add a variable with the theme support status for the Jetpack Settings Testimonial toggle UI. if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) { @@ -82,9 +88,6 @@ public function __construct() { */ public function maybe_register_cpt() { - // Check on theme switch if theme supports CPT and setting is disabled - add_action( 'after_switch_theme', array( $this, 'activation_post_type_support' ) ); - $setting = class_exists( 'Jetpack_Options' ) ? Jetpack_Options::get_option_and_ensure_autoload( self::OPTION_NAME, '0' ) : '0'; // @phan-suppress-current-line PhanUndeclaredClassMethod -- We check if the class exists first. // Bail early if Testimonial option is not set and the theme doesn't declare support @@ -92,10 +95,6 @@ public function maybe_register_cpt() { return; } - if ( ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) && class_exists( 'Jetpack' ) && ! \Jetpack::is_module_active( 'custom-content-types' ) ) { // @phan-suppress-current-line PhanUndeclaredClassMethod -- We check if the class exists first. - return; - } - // CPT magic $this->register_post_types(); add_action( sprintf( 'add_option_%s', self::OPTION_NAME ), array( $this, 'flush_rules_on_enable' ), 10 ); @@ -223,7 +222,7 @@ private function site_supports_custom_post_type() { } // Otherwise, say no unless something wants to filter us to say yes. - /** This action is documented in modules/custom-post-types/nova.php */ + /** This action is documented in classic-theme-helper/src/custom-post-types/class-nova-restaurant.php */ return (bool) apply_filters( 'jetpack_enable_cpt', false, self::CUSTOM_POST_TYPE ); } @@ -311,7 +310,6 @@ public function flush_rules_on_switch() { public static function activation_post_type_support() { if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) { update_option( self::OPTION_NAME, '1' ); - ( new Modules() )->activate( 'custom-content-types', false, false ); } } diff --git a/projects/plugins/jetpack/_inc/client/components/navigation-settings/index.jsx b/projects/plugins/jetpack/_inc/client/components/navigation-settings/index.jsx index da60e1b8b2701..7203d7f30cb19 100644 --- a/projects/plugins/jetpack/_inc/client/components/navigation-settings/index.jsx +++ b/projects/plugins/jetpack/_inc/client/components/navigation-settings/index.jsx @@ -147,13 +147,13 @@ export class NavigationSettings extends React.Component { { _x( 'Performance', 'Navigation item.', 'jetpack' ) } ) } - { this.props.hasAnyOfTheseModules( [ + { ( this.props.hasAnyOfTheseModules( [ 'markdown', - 'custom-content-types', 'post-by-email', 'infinite-scroll', 'copy-post', - ] ) && ( + ] ) || + window.CUSTOM_CONTENT_TYPE__INITIAL_STATE.active ) && ( { + return dispatch => { + dispatch( { + type: CUSTOM_FEATURE_ACTIVE_FETCH, + } ); + return restApi + .getFeatureTypeStatus( featureType ) + .then( data => { + dispatch( { + type: CUSTOM_FEATURE_ACTIVE_FETCH_SUCCESS, + feature_data: data, + } ); + return data; + } ) + .catch( error => { + dispatch( { + type: CUSTOM_FEATURE_ACTIVE_FETCH_FAIL, + error: error, + } ); + } ); + }; +}; diff --git a/projects/plugins/jetpack/_inc/client/state/feature-check/index.js b/projects/plugins/jetpack/_inc/client/state/feature-check/index.js new file mode 100644 index 0000000000000..5e3164b4c9f72 --- /dev/null +++ b/projects/plugins/jetpack/_inc/client/state/feature-check/index.js @@ -0,0 +1,2 @@ +export * from './reducer'; +export * from './actions'; diff --git a/projects/plugins/jetpack/_inc/client/state/feature-check/reducer.js b/projects/plugins/jetpack/_inc/client/state/feature-check/reducer.js new file mode 100644 index 0000000000000..b346b49c20bf6 --- /dev/null +++ b/projects/plugins/jetpack/_inc/client/state/feature-check/reducer.js @@ -0,0 +1,30 @@ +import { assign } from 'lodash'; +import { combineReducers } from 'redux'; +import { + CUSTOM_FEATURE_ACTIVE_FETCH_FAIL, + CUSTOM_FEATURE_ACTIVE_FETCH_SUCCESS, + CUSTOM_FEATURE_ACTIVE_FETCH, +} from 'state/action-types'; + +export const items = ( state = { fetchingCustomContentTypeStatus: false }, action ) => { + switch ( action.type ) { + case CUSTOM_FEATURE_ACTIVE_FETCH: + return assign( {}, state, { fetchingCustomContentTypeStatus: true } ); + case CUSTOM_FEATURE_ACTIVE_FETCH_SUCCESS: + return { + ...state, + featureData: { + ...state.featureCheck, + ...action.feature_data, + }, + }; + case CUSTOM_FEATURE_ACTIVE_FETCH_FAIL: + return { ...state, fetchingCustomContentTypeStatus: false, error: action.error }; + default: + return state; + } +}; + +export const reducer = combineReducers( { + items, +} ); diff --git a/projects/plugins/jetpack/_inc/client/state/modules/actions.js b/projects/plugins/jetpack/_inc/client/state/modules/actions.js index 84cd71471ea87..a603ae57b5f87 100644 --- a/projects/plugins/jetpack/_inc/client/state/modules/actions.js +++ b/projects/plugins/jetpack/_inc/client/state/modules/actions.js @@ -1,7 +1,6 @@ import restApi from '@automattic/jetpack-api'; import { __, sprintf } from '@wordpress/i18n'; -import jQuery from 'jquery'; -import { forEach, some } from 'lodash'; +import { some } from 'lodash'; import { createNotice, removeNotice } from 'components/global-notices/state/notices/actions'; import { JETPACK_MODULES_LIST_FETCH, @@ -230,7 +229,6 @@ export const updateModuleOptions = ( module, newOptionValues ) => { newOptionValues, success: success, } ); - maybeHideNavMenuItem( slug, newOptionValues ); dispatch( removeNotice( `module-setting-${ slug }` ) ); dispatch( createNotice( @@ -343,29 +341,10 @@ export const regeneratePostByEmailAddress = () => { }; }; -export function maybeHideNavMenuItem( module, values ) { - switch ( module ) { - case 'custom-content-types': - if ( ! values ) { - // Means the module was deactivated - jQuery( '#menu-posts-jetpack-portfolio, #menu-posts-jetpack-testimonial' ).toggle(); - } - - forEach( values, function ( v, key ) { - if ( 'jetpack_portfolio' === key ) { - jQuery( '#menu-posts-jetpack-portfolio, .jp-toggle-portfolio' ).toggle(); - } - - if ( 'jetpack_testimonial' === key ) { - jQuery( '#menu-posts-jetpack-testimonial, .jp-toggle-testimonial' ).toggle(); - } - } ); - break; - default: - return false; - } -} - +/** + * Reload the page if the option values are jetpack_testimonial or jetpack_portfolio. + * @param { object } newOptionValue - The new option value. + */ export function maybeReloadAfterAction( newOptionValue ) { const reloadForOptionValues = [ 'jetpack_testimonial', 'jetpack_portfolio' ]; diff --git a/projects/plugins/jetpack/_inc/client/state/reducer.js b/projects/plugins/jetpack/_inc/client/state/reducer.js index 5ff156b807a49..c50656c1c4a47 100644 --- a/projects/plugins/jetpack/_inc/client/state/reducer.js +++ b/projects/plugins/jetpack/_inc/client/state/reducer.js @@ -4,6 +4,7 @@ import { dashboard } from 'state/at-a-glance/reducer'; import { reducer as connection } from 'state/connection/reducer'; import { reducer as devCard } from 'state/dev-version/reducer'; import { reducer as disconnectSurvey } from 'state/disconnect-survey/reducer'; +import { reducer as featureCheck } from 'state/feature-check/reducer'; import { initialState } from 'state/initial-state/reducer'; import { reducer as introOffers } from 'state/intro-offers'; import { reducer as jetpackNotices } from 'state/jetpack-notices/reducer'; @@ -43,6 +44,7 @@ const jetpackReducer = combineReducers( { siteData, siteProducts, siteVerify, + featureCheck, disconnectSurvey, trackingSettings, licensing, diff --git a/projects/plugins/jetpack/_inc/client/state/settings/actions.js b/projects/plugins/jetpack/_inc/client/state/settings/actions.js index 00052174c62eb..6fac3ca6a96f1 100644 --- a/projects/plugins/jetpack/_inc/client/state/settings/actions.js +++ b/projects/plugins/jetpack/_inc/client/state/settings/actions.js @@ -15,7 +15,7 @@ import { JETPACK_SETTINGS_SET_UNSAVED_FLAG, JETPACK_SETTINGS_CLEAR_UNSAVED_FLAG, } from 'state/action-types'; -import { maybeHideNavMenuItem, maybeReloadAfterAction } from 'state/modules'; +import { maybeReloadAfterAction } from 'state/modules'; export const setUnsavedSettingsFlag = () => { return { @@ -134,7 +134,6 @@ export const updateSettings = ( newOptionValues, noticeMessages = {} ) => { updatedOptions: mapUpdateSettingsResponseFromApi( success, newOptionValues ), success: success, } ); - maybeHideNavMenuItem( newOptionValues ); maybeReloadAfterAction( newOptionValues ); dispatch( removeNotice( 'module-setting-update' ) ); diff --git a/projects/plugins/jetpack/_inc/client/writing/custom-content-types.jsx b/projects/plugins/jetpack/_inc/client/writing/custom-content-types.jsx index 05bf0f2a398ab..6ac03b61147cd 100644 --- a/projects/plugins/jetpack/_inc/client/writing/custom-content-types.jsx +++ b/projects/plugins/jetpack/_inc/client/writing/custom-content-types.jsx @@ -7,23 +7,23 @@ import CompactCard from 'components/card/compact'; import { withModuleSettingsFormHelpers } from 'components/module-settings/with-module-settings-form-helpers'; import SettingsCard from 'components/settings-card'; import SettingsGroup from 'components/settings-group'; -import { getModule, getModuleOverride } from 'state/modules'; -import { isModuleFound as _isModuleFound } from 'state/search'; +import { getModule } from 'state/modules'; +import { updateSettings } from 'state/settings'; export class CustomContentTypes extends React.Component { state = { - testimonial: - this.props.getOptionValue( 'jetpack_testimonial', 'custom-content-types' ) || false, - portfolio: this.props.getOptionValue( 'jetpack_portfolio', 'custom-content-types' ) || false, + testimonial: this.props.getOptionValue( 'jetpack_testimonial' ) || false, + portfolio: this.props.getOptionValue( 'jetpack_portfolio' ) || false, }; updateCPTs = type => { - const deactivate = - 'testimonial' === type - ? ! ( ! this.state.testimonial || this.state.portfolio ) - : ! ( ! this.state.portfolio || this.state.testimonial ); + const deactivate = 'testimonial' === type ? ! this.state.testimonial : ! this.state.portfolio; - this.props.updateFormStateModuleOption( 'custom-content-types', 'jetpack_' + type, deactivate ); + if ( type === 'portfolio' ) { + this.props.updateSettings( { jetpack_portfolio: deactivate } ); + } else { + this.props.updateSettings( { jetpack_testimonial: deactivate } ); + } this.setState( { [ type ]: ! this.state[ type ], @@ -31,7 +31,7 @@ export class CustomContentTypes extends React.Component { }; linkIfActiveCPT = type => { - return this.props.getSettingCurrentValue( `jetpack_${ type }`, 'custom-content-types' ) ? ( + return this.props.getSettingCurrentValue( `jetpack_${ type }` ) ? ( ) : ( @@ -47,13 +47,11 @@ export class CustomContentTypes extends React.Component { }; render() { - if ( ! this.props.isModuleFound( 'custom-content-types' ) ) { + if ( ! this.props.customContentTypeIsActive ) { return null; } - const module = this.props.module( 'custom-content-types' ); - const disabledByOverride = - 'inactive' === this.props.getModuleOverride( 'custom-content-types' ); + const disabledByOverride = this.props.customContentTypeIsOverridden; const disabledReason = disabledByOverride && __( 'This feature has been disabled by a site administrator.', 'jetpack' ); @@ -115,10 +113,15 @@ export class CustomContentTypes extends React.Component { ); return ( - + { testimonialText }

      - { this.props.testimonialActive && ( + { this.props.getOptionValue( 'jetpack_testimonial' ) && ( { portfolioText }

      - { this.props.portfolioActive && ( + { this.props.getOptionValue( 'jetpack_portfolio' ) && ( { - const portfolioActive = ownProps.getSettingCurrentValue( - 'jetpack_portfolio', - 'custom-content-types' - ); - const testimonialActive = ownProps.getSettingCurrentValue( - 'jetpack_testimonial', - 'custom-content-types' - ); - return { - module: module_name => getModule( state, module_name ), - isModuleFound: module_name => _isModuleFound( state, module_name ), - getModuleOverride: module_name => getModuleOverride( state, module_name ), - portfolioActive, - testimonialActive, - }; - } )( CustomContentTypes ) + connect( + state => { + return { + module: module_name => getModule( state, module_name ), + }; + }, + dispatch => ( { + updateSettings: module_option => { + return dispatch( updateSettings( module_option ) ); + }, + } ) + )( CustomContentTypes ) ); diff --git a/projects/plugins/jetpack/_inc/client/writing/index.jsx b/projects/plugins/jetpack/_inc/client/writing/index.jsx index 8e4400163869a..058d1bde67a3d 100644 --- a/projects/plugins/jetpack/_inc/client/writing/index.jsx +++ b/projects/plugins/jetpack/_inc/client/writing/index.jsx @@ -9,6 +9,7 @@ import { isCurrentUserLinked, getConnectUrl, } from 'state/connection'; +import { getActiveFeatureDetails } from 'state/feature-check'; import { userCanManageModules, userCanEditPosts } from 'state/initial-state'; import { isModuleActivated, getModuleOverride, getModule } from 'state/modules'; import { isModuleFound } from 'state/search'; @@ -23,6 +24,59 @@ import WritingMedia from './writing-media'; export class Writing extends React.Component { static displayName = 'WritingSettings'; + constructor( props ) { + super( props ); + + const customContentTypeStatusInitialState = window?.CUSTOM_CONTENT_TYPE__INITIAL_STATE?.active + ? window.CUSTOM_CONTENT_TYPE__INITIAL_STATE.active + : false; + + const customContentTypeOverrideStatusInitialState = window?.CUSTOM_CONTENT_TYPE__INITIAL_STATE + ?.over_ride + ? window.CUSTOM_CONTENT_TYPE__INITIAL_STATE.over_ride + : false; + + this.state = { + customContentTypeIsActive: customContentTypeStatusInitialState, + customContentTypeIsOverridden: customContentTypeOverrideStatusInitialState, + customContentKeywords: [], + }; + + // Call async initialization directly + this.initializeCustomContentTypes(); + } + + initializeCustomContentTypes() { + this.props + .getActiveFeatureDetails() + .then( response => { + if ( response && response[ 'custom-content-types' ].active !== undefined ) { + this.setState( { + customContentTypeIsActive: response[ 'custom-content-types' ].active, + customContentTypeIsOverridden: response[ 'custom-content-types' ].over_ride, + customContentKeywords: [ + ...response[ 'custom-content-types' ].additional_search_queries + .split( ',' ) + .map( keyword => keyword.trim().toLowerCase() ), + ...response[ 'custom-content-types' ].description + .toLowerCase() + .split( ' ' ) + .map( word => word.trim() ), + ], + } ); + } else { + this.setState( { customContentTypeIsActive: false } ); + } + } ) + .catch( error => { + // eslint-disable-next-line no-console + console.error( 'Error fetching custom content type status:', error ); + + // Update state to reflect that the route doesn't exist or an error occurred + this.setState( { customContentTypeIsActive: false } ); + } ); + } + render() { const commonProps = { settings: this.props.settings, @@ -31,6 +85,8 @@ export class Writing extends React.Component { isUnavailableInOfflineMode: this.props.isUnavailableInOfflineMode, isLinked: this.props.isLinked, getModuleOverride: this.props.getModuleOverride, + customContentTypeIsActive: this.state.customContentTypeIsActive || false, + customContentTypeIsOverridden: this.state.customContentTypeIsOverridden || false, }; if ( ! this.props.searchTerm && ! this.props.active ) { @@ -43,18 +99,21 @@ export class Writing extends React.Component { 'latex', 'markdown', 'shortcodes', - 'custom-content-types', 'post-by-email', 'infinite-scroll', 'widgets', 'widget-visibility', 'blocks', ].some( this.props.isModuleFound ); - - if ( ! found ) { + if ( ! found && ! this.state.customContentTypeIsActive ) { return null; } + const shouldRenderCustomContent = + ( this.state.customContentTypeIsActive && this.props.searchTerm === '' ) || + ( this.state.customContentTypeIsActive && + this.state.customContentKeywords.includes( this.props.searchTerm?.toLowerCase() ) ); + const showComposing = this.props.userCanManageModules || this.props.userCanEditPosts, showPostByEmail = this.props.userCanManageModules || @@ -76,9 +135,7 @@ export class Writing extends React.Component { { showComposing && ( ) } - { this.props.isModuleFound( 'custom-content-types' ) && ( - - ) } + { shouldRenderCustomContent && } { this.props.isModuleFound( 'post-by-email' ) && showPostByEmail && ( @@ -102,18 +159,25 @@ export class Writing extends React.Component { } } -export default connect( state => { - return { - module: module_name => getModule( state, module_name ), - settings: getSettings( state ), - isOfflineMode: isOfflineMode( state ), - isUnavailableInOfflineMode: module_name => isUnavailableInOfflineMode( state, module_name ), - userCanEditPosts: userCanEditPosts( state ), - isModuleActivated: module_name => isModuleActivated( state, module_name ), - isLinked: isCurrentUserLinked( state ), - userCanManageModules: userCanManageModules( state ), - isModuleFound: module_name => isModuleFound( state, module_name ), - connectUrl: getConnectUrl( state ), - getModuleOverride: module_name => getModuleOverride( state, module_name ), - }; -} )( Writing ); +export default connect( + state => { + return { + module: module_name => getModule( state, module_name ), + settings: getSettings( state ), + isOfflineMode: isOfflineMode( state ), + isUnavailableInOfflineMode: module_name => isUnavailableInOfflineMode( state, module_name ), + userCanEditPosts: userCanEditPosts( state ), + isModuleActivated: module_name => isModuleActivated( state, module_name ), + isLinked: isCurrentUserLinked( state ), + userCanManageModules: userCanManageModules( state ), + isModuleFound: module_name => isModuleFound( state, module_name ), + connectUrl: getConnectUrl( state ), + getModuleOverride: module_name => getModuleOverride( state, module_name ), + }; + }, + dispatch => ( { + getActiveFeatureDetails: () => { + return dispatch( getActiveFeatureDetails( 'custom-content-types' ) ); + }, + } ) +)( Writing ); diff --git a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php index 500069fb7ca1e..efcad64729a94 100644 --- a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php @@ -2335,28 +2335,28 @@ public static function get_updateable_data_list( $selector = '' ) { 'type' => 'boolean', 'default' => 0, 'validate_callback' => __CLASS__ . '::validate_boolean', - 'jp_group' => 'custom-content-types', + 'jp_group' => 'settings', ), 'jetpack_portfolio_posts_per_page' => array( 'description' => esc_html__( 'Number of entries to show at most in Portfolio pages.', 'jetpack' ), 'type' => 'integer', 'default' => 10, 'validate_callback' => __CLASS__ . '::validate_posint', - 'jp_group' => 'custom-content-types', + 'jp_group' => 'settings', ), 'jetpack_testimonial' => array( 'description' => esc_html__( 'Enable or disable Jetpack testimonial post type.', 'jetpack' ), 'type' => 'boolean', 'default' => 0, 'validate_callback' => __CLASS__ . '::validate_boolean', - 'jp_group' => 'custom-content-types', + 'jp_group' => 'settings', ), 'jetpack_testimonial_posts_per_page' => array( 'description' => esc_html__( 'Number of entries to show at most in Testimonial pages.', 'jetpack' ), 'type' => 'integer', 'default' => 10, 'validate_callback' => __CLASS__ . '::validate_posint', - 'jp_group' => 'custom-content-types', + 'jp_group' => 'settings', ), // WAF. diff --git a/projects/plugins/jetpack/changelog/remove-custom-content-type-module-requirement b/projects/plugins/jetpack/changelog/remove-custom-content-type-module-requirement new file mode 100644 index 0000000000000..602e84ff91c46 --- /dev/null +++ b/projects/plugins/jetpack/changelog/remove-custom-content-type-module-requirement @@ -0,0 +1,4 @@ +Significance: minor +Type: compat + +Custom Content Types: Ensure feature works on Jetpack settings page without using module functionality. diff --git a/tools/eslint-excludelist.json b/tools/eslint-excludelist.json index 159becca965db..10b619053c743 100644 --- a/tools/eslint-excludelist.json +++ b/tools/eslint-excludelist.json @@ -8,6 +8,5 @@ "projects/plugins/jetpack/_inc/client/mixins/emitter/index.js", "projects/plugins/jetpack/_inc/client/my-plan/index.jsx", "projects/plugins/jetpack/_inc/client/state/initial-state/reducer.js", - "projects/plugins/jetpack/_inc/client/state/modules/actions.js", "projects/plugins/jetpack/_inc/twitter-timeline.js" ] From a5b3cb006a2fa0d248563fdd7c29dd085c1fe564 Mon Sep 17 00:00:00 2001 From: Sotiris Poulias Date: Tue, 4 Feb 2025 11:33:29 +0200 Subject: [PATCH 345/420] Jetpack Search: Fix widget activation log. (#40688) --- projects/packages/search/changelog/fix-search-widget-init-log | 4 ++++ .../search/src/instant-search/class-instant-search.php | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 projects/packages/search/changelog/fix-search-widget-init-log diff --git a/projects/packages/search/changelog/fix-search-widget-init-log b/projects/packages/search/changelog/fix-search-widget-init-log new file mode 100644 index 0000000000000..d95a7ef42d8cf --- /dev/null +++ b/projects/packages/search/changelog/fix-search-widget-init-log @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + + diff --git a/projects/packages/search/src/instant-search/class-instant-search.php b/projects/packages/search/src/instant-search/class-instant-search.php index 710f13909a13d..e6c8f5987441b 100644 --- a/projects/packages/search/src/instant-search/class-instant-search.php +++ b/projects/packages/search/src/instant-search/class-instant-search.php @@ -366,6 +366,7 @@ public function auto_config_overlay_sidebar_widgets() { // Init overlay sidebar if it doesn't exists. if ( ! isset( $sidebars[ self::INSTANT_SEARCH_SIDEBAR ] ) ) { + $this->register_jetpack_instant_sidebar(); $sidebars[ self::INSTANT_SEARCH_SIDEBAR ] = array(); } @@ -380,6 +381,9 @@ public function auto_config_overlay_sidebar_widgets() { $widget_options[ $next_id ] = $widget_options[ $sidebar_jp_searchbox_wiget_id ]; } else { // If JP Search widget doesn't exist in the theme sidebar, we have nothing to copy from, so we create a new one within the overlay sidebar. + $search_widget = new Search_Widget(); + $search_widget->_set( $next_id ); + $search_widget->_register_one( $next_id ); $widget_options[ $next_id ] = $this->get_preconfig_widget_options(); } array_unshift( $sidebars[ self::INSTANT_SEARCH_SIDEBAR ], Helper::build_widget_id( $next_id ) ); From 9239363f4c3cc1a45c670eb9b1f8969f2a239da2 Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Tue, 4 Feb 2025 11:10:13 +0100 Subject: [PATCH 346/420] Repo Gardening > Team triage: update VideoPress assignment (#41537) VideoPress issues should get posted in the VideoPress channel from now on. --- .../changelog/update-repo-gardening-videopress-slack | 5 +++++ .../tasks/triage-issues/automattic-label-team-assignments.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 projects/github-actions/repo-gardening/changelog/update-repo-gardening-videopress-slack diff --git a/projects/github-actions/repo-gardening/changelog/update-repo-gardening-videopress-slack b/projects/github-actions/repo-gardening/changelog/update-repo-gardening-videopress-slack new file mode 100644 index 0000000000000..8c9c84386dd0f --- /dev/null +++ b/projects/github-actions/repo-gardening/changelog/update-repo-gardening-videopress-slack @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Team assignments: update Slack channel where VideoPress issues get posted. + + diff --git a/projects/github-actions/repo-gardening/src/tasks/triage-issues/automattic-label-team-assignments.js b/projects/github-actions/repo-gardening/src/tasks/triage-issues/automattic-label-team-assignments.js index 5118601cb46ba..41d3b0d3ae00e 100644 --- a/projects/github-actions/repo-gardening/src/tasks/triage-issues/automattic-label-team-assignments.js +++ b/projects/github-actions/repo-gardening/src/tasks/triage-issues/automattic-label-team-assignments.js @@ -207,7 +207,7 @@ export const automatticAssignments = { VideoPress: { team: 'Nexus', labels: [ '[Package] VideoPress', '[Feature] VideoPress', '[Plugin] VideoPress' ], - slack_id: 'C02TQF5VAJD', + slack_id: 'C02LT75D3', board_id: 'https://github.com/orgs/Automattic/projects/460', }, // Let this be the last item. It will act as a catch-all for any issues that haven't been matched until now. From aa3a69ba1815750aaab5f2c050f526eeaf59a38e Mon Sep 17 00:00:00 2001 From: Anton Vlasenko <43744263+anton-vlasenko@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:32:13 +0100 Subject: [PATCH 347/420] REST API: Enhance author details by including additional data when either user_id or site_id are available. (#41159) 1. Use the wp_comments table as the source of truth if the $author parameter passed to the WPCOM_JSON_API_Endpoint::get_author method is an instance of WP_Comment; 2. If the WP_Comment instance has a valid user_id, include the first_name, last_name, nice_name, and login fields in the response; 3. Add the site_id field to the response when a WP_Comment instance is passed to the WPCOM_JSON_API_Endpoint::get_author method. --- .../changelog/fix-author-details-are-missing | 3 + .../jetpack/class.json-api-endpoints.php | 187 +++++++++--------- ...t_class.json-api-jetpack-base-endpoint.php | 85 ++++++++ 3 files changed, 186 insertions(+), 89 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-author-details-are-missing diff --git a/projects/plugins/jetpack/changelog/fix-author-details-are-missing b/projects/plugins/jetpack/changelog/fix-author-details-are-missing new file mode 100644 index 0000000000000..42ee0ea85b33b --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-author-details-are-missing @@ -0,0 +1,3 @@ +Significance: patch +Type: enhancement +Comment: REST API: Enhance author details by including additional data when either user_id or site_id are available. \ No newline at end of file diff --git a/projects/plugins/jetpack/class.json-api-endpoints.php b/projects/plugins/jetpack/class.json-api-endpoints.php index 1bdbe1ef254bd..e3c7611c552f3 100644 --- a/projects/plugins/jetpack/class.json-api-endpoints.php +++ b/projects/plugins/jetpack/class.json-api-endpoints.php @@ -1392,109 +1392,118 @@ public function get_author( $author, $show_email_and_ip = false ) { $nice = null; $url = null; $ip_address = isset( $author->comment_author_IP ) ? $author->comment_author_IP : ''; + $site_id = -1; if ( isset( $author->comment_author_email ) ) { - $id = ( isset( $author->user_id ) && $author->user_id ) ? $author->user_id : 0; - $login = ''; - $email = $author->comment_author_email; - $name = $author->comment_author; - $first_name = ''; - $last_name = ''; - $url = $author->comment_author_url; - $avatar_url = $this->api->get_avatar_url( $author ); - $profile_url = 'https://gravatar.com/' . md5( strtolower( trim( $email ) ) ); - $nice = ''; - $site_id = -1; + $id = empty( $author->user_id ) ? 0 : (int) $author->user_id; + $login = ''; + $email = $author->comment_author_email; + $name = $author->comment_author; + $first_name = ''; + $last_name = ''; + $url = $author->comment_author_url; + $avatar_url = $this->api->get_avatar_url( $author ); + $nice = ''; + + // Add additional user data to the response if a valid user ID is available. + if ( 0 < $id ) { + $user = get_user_by( 'id', $id ); + if ( $user instanceof WP_User ) { + $login = $user->user_login ?? ''; + $first_name = $user->first_name ?? ''; + $last_name = $user->last_name ?? ''; + $nice = $user->user_nicename ?? ''; + } else { + trigger_error( 'Unknown user', E_USER_WARNING ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error + } + } // Comment author URLs and Emails are sent through wp_kses() on save, which replaces "&" with "&" // "&" is the only email/URL character altered by wp_kses(). foreach ( array( 'email', 'url' ) as $field ) { $$field = str_replace( '&', '&', $$field ); } - } else { - if ( $author instanceof WP_User || isset( $author->user_email ) ) { - $author = $author->ID; - } elseif ( isset( $author->user_id ) && $author->user_id ) { - $author = $author->user_id; - } elseif ( isset( $author->post_author ) ) { - // then $author is a Post Object. - if ( ! $author->post_author ) { - return null; - } - /** - * Filter whether the current site is a Jetpack site. - * - * @module json-api - * - * @since 3.3.0 - * - * @param bool false Is the current site a Jetpack site. Default to false. - * @param int get_current_blog_id() Blog ID. - */ - $is_jetpack = true === apply_filters( 'is_jetpack_site', false, get_current_blog_id() ); - $post_id = $author->ID; - if ( $is_jetpack && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) { - $id = get_post_meta( $post_id, '_jetpack_post_author_external_id', true ); - $email = get_post_meta( $post_id, '_jetpack_author_email', true ); - $login = ''; - $name = get_post_meta( $post_id, '_jetpack_author', true ); - $first_name = ''; - $last_name = ''; - $url = ''; - $nice = ''; - } else { - $author = $author->post_author; - } + } elseif ( $author instanceof WP_User || isset( $author->user_email ) ) { + $author = $author->ID; + } elseif ( isset( $author->user_id ) && $author->user_id ) { + $author = $author->user_id; + } elseif ( isset( $author->post_author ) ) { + // then $author is a Post Object. + if ( ! $author->post_author ) { + return null; } + /** + * Filter whether the current site is a Jetpack site. + * + * @module json-api + * + * @since 3.3.0 + * + * @param bool false Is the current site a Jetpack site. Default to false. + * @param int get_current_blog_id() Blog ID. + */ + $is_jetpack = true === apply_filters( 'is_jetpack_site', false, get_current_blog_id() ); + $post_id = $author->ID; + if ( $is_jetpack && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) { + $id = get_post_meta( $post_id, '_jetpack_post_author_external_id', true ); + $email = get_post_meta( $post_id, '_jetpack_author_email', true ); + $login = ''; + $name = get_post_meta( $post_id, '_jetpack_author', true ); + $first_name = ''; + $last_name = ''; + $url = ''; + $nice = ''; + } else { + $author = $author->post_author; + } + } - if ( ! isset( $id ) ) { - $user = get_user_by( 'id', $author ); - if ( ! $user || is_wp_error( $user ) ) { - trigger_error( 'Unknown user', E_USER_WARNING ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error + if ( ! isset( $id ) ) { + $user = get_user_by( 'id', $author ); + if ( ! $user || is_wp_error( $user ) ) { + trigger_error( 'Unknown user', E_USER_WARNING ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error - return null; - } - $id = $user->ID; - $email = $user->user_email; - $login = $user->user_login; - $name = $user->display_name; - $first_name = $user->first_name; - $last_name = $user->last_name; - $url = $user->user_url; - $nice = $user->user_nicename; + return null; } - if ( defined( 'IS_WPCOM' ) && IS_WPCOM && ! $is_jetpack ) { - $site_id = -1; - - /** - * Allow customizing the blog ID returned with the author in WordPress.com REST API queries. - * - * @since 12.9 - * - * @module json-api - * - * @param bool|int $active_blog Blog ID, or false by default. - * @param int $id User ID. - */ - $active_blog = apply_filters( 'wpcom_api_pre_get_active_blog_author', false, $id ); - if ( false === $active_blog ) { - $active_blog = get_active_blog_for_user( $id ); - } - if ( ! empty( $active_blog ) ) { - $site_id = $active_blog->blog_id; - } - if ( $site_id > -1 ) { - $site_visible = ( - -1 !== (int) $active_blog->public || - is_private_blog_user( $site_id, get_current_user_id() ) - ); - } - $profile_url = "https://gravatar.com/{$login}"; - } else { - $profile_url = 'https://gravatar.com/' . md5( strtolower( trim( $email ) ) ); - $site_id = -1; + $id = $user->ID; + $email = $user->user_email; + $login = $user->user_login; + $name = $user->display_name; + $first_name = $user->first_name; + $last_name = $user->last_name; + $url = $user->user_url; + $nice = $user->user_nicename; + } + if ( defined( 'IS_WPCOM' ) && IS_WPCOM && ! $is_jetpack ) { + /** + * Allow customizing the blog ID returned with the author in WordPress.com REST API queries. + * + * @since 12.9 + * + * @module json-api + * + * @param bool|int $active_blog Blog ID, or false by default. + * @param int $id User ID. + */ + $active_blog = apply_filters( 'wpcom_api_pre_get_active_blog_author', false, $id ); + if ( false === $active_blog ) { + $active_blog = get_active_blog_for_user( $id ); } + if ( ! empty( $active_blog ) ) { + $site_id = $active_blog->blog_id; + } + if ( $site_id > - 1 ) { + $site_visible = ( + - 1 !== (int) $active_blog->public || + is_private_blog_user( $site_id, get_current_user_id() ) + ); + } + $profile_url = "https://gravatar.com/{$login}"; + } else { + $profile_url = 'https://gravatar.com/' . md5( strtolower( trim( $email ) ) ); + } + if ( ! isset( $avatar_url ) ) { $avatar_url = $this->api->get_avatar_url( $email ); } diff --git a/projects/plugins/jetpack/tests/php/json-api/test_class.json-api-jetpack-base-endpoint.php b/projects/plugins/jetpack/tests/php/json-api/test_class.json-api-jetpack-base-endpoint.php index 489b492df260a..73e7cbd451913 100644 --- a/projects/plugins/jetpack/tests/php/json-api/test_class.json-api-jetpack-base-endpoint.php +++ b/projects/plugins/jetpack/tests/php/json-api/test_class.json-api-jetpack-base-endpoint.php @@ -28,6 +28,13 @@ class WP_Test_Jetpack_Base_Json_Api_Endpoints extends WP_UnitTestCase { */ private static $super_admin_alt_user_id; + /** + * A contributor user used for test. + * + * @var int + */ + private static $contributor_user_id; + /** * Inserts globals needed to initialize the endpoint. */ @@ -45,6 +52,21 @@ private function set_globals() { public static function wpSetUpBeforeClass( $factory ) { self::$super_admin_user_id = $factory->user->create( array( 'role' => 'administrator' ) ); self::$super_admin_alt_user_id = $factory->user->create( array( 'role' => 'administrator' ) ); + self::$contributor_user_id = $factory->user->create( + array( + 'user_login' => 'john_doe', + 'user_pass' => 'password123', + 'user_nicename' => 'John Doe', + 'user_email' => 'john.doe@example.com', + 'user_url' => 'https://example.com', + 'display_name' => 'John Doe', + 'nickname' => 'Johnny', + 'first_name' => 'John', + 'last_name' => 'Doe', + 'description' => 'This is a dummy user for testing.', + 'role' => 'contributor', + ) + ); } /** @@ -113,6 +135,69 @@ public function test_get_author_should_return_the_same_user_if_user_meta_is_set( $this->assertSame( self::$super_admin_user_id, $author->ID ); } + /** + * @covers Jetpack_JSON_API_Endpoint::get_author + * @group json-api + */ + public function test_get_author_should_provide_additional_data_when_user_id_is_specified() { + $endpoint = $this->get_dummy_endpoint(); + $commment_data = new stdClass(); + $commment_data->comment_author_email = 'foo@bar.foo'; + $commment_data->comment_author = 'John Doe'; + $commment_data->comment_author_url = 'https://foo.bar.foo'; + $commment_data->user_id = static::$contributor_user_id; + $comment = new WP_Comment( $commment_data ); + + $author = $endpoint->get_author( $comment, true ); + + $this->assertIsObject( $author, 'The returned author should be an object.' ); + $this->assertNotNull( $author, 'The returned author should not be null.' ); + $this->assertSame( + $commment_data->comment_author_email, + $author->email, + 'The author email does not match the expected comment author email.' + ); + $this->assertSame( + $commment_data->comment_author, + $author->name, + 'The author name does not match the expected comment author name.' + ); + $this->assertSame( + $commment_data->comment_author_url, + $author->URL, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + 'The author URL does not match the expected comment author URL.' + ); + + $user = get_user_by( 'id', static::$contributor_user_id ); + + // The user should be the same as the one passed as object to the method. + $this->assertSame( + static::$contributor_user_id, + $author->ID, + 'The author ID does not match the expected user ID.' + ); + $this->assertSame( + $user->user_login, + $author->login, + 'The author login does not match the expected user login.' + ); + $this->assertSame( + $user->first_name, + $author->first_name, + 'The author first name does not match the expected first name.' + ); + $this->assertSame( + $user->last_name, + $author->last_name, + 'The author last name does not match the expected last name.' + ); + $this->assertSame( + $user->user_nicename, + $author->nice_name, + 'The author nicename does not match the expected nicename.' + ); + } + /** * Generate a dummy endpoint. */ From e629b292f604c34f3ac7c1c184dacc6c19eed43a Mon Sep 17 00:00:00 2001 From: Paul Bunkham Date: Tue, 4 Feb 2025 13:55:56 +0000 Subject: [PATCH 348/420] Social: Enable the new admin page for the Social plugin. (#41498) Currently we have a feature check that is enabling the feature if the Social plugin is active. That is causing some problems where the admin page doesn't show up until the feature information is updated for the site, after the site is connected etc.) This change sets the constant in the Social plugin, so the feature is always enabled from now on with the Social plugin active. We can then remove the version check from the feature check in WPCOM. --- projects/plugins/social/changelog/update-social-new-admin | 4 ++++ projects/plugins/social/jetpack-social.php | 1 + 2 files changed, 5 insertions(+) create mode 100644 projects/plugins/social/changelog/update-social-new-admin diff --git a/projects/plugins/social/changelog/update-social-new-admin b/projects/plugins/social/changelog/update-social-new-admin new file mode 100644 index 0000000000000..629363148b85b --- /dev/null +++ b/projects/plugins/social/changelog/update-social-new-admin @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Social: Enable new admin page for the Social plugn diff --git a/projects/plugins/social/jetpack-social.php b/projects/plugins/social/jetpack-social.php index b32f11808190e..9bec4929d56a3 100644 --- a/projects/plugins/social/jetpack-social.php +++ b/projects/plugins/social/jetpack-social.php @@ -40,6 +40,7 @@ define( 'JETPACK_SOCIAL_PLUGIN_NAME', 'Jetpack Social' ); define( 'JETPACK_SOCIAL_PLUGIN_URI', 'https://jetpack.com/jetpack-social' ); define( 'JETPACK_SOCIAL_PLUGIN_FOLDER', dirname( plugin_basename( __FILE__ ) ) ); +define( 'JETPACK_SOCIAL_HAS_ADMIN_PAGE', true ); // Jetpack Autoloader. $jetpack_autoloader = JETPACK_SOCIAL_PLUGIN_DIR . 'vendor/autoload_packages.php'; From dba3fb0ae33064c341470de3a34e7060d929bc9e Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Tue, 4 Feb 2025 12:07:39 -0300 Subject: [PATCH 349/420] Jetpack SEO: fix state effects and suspense prop (#41546) * add use-welcome-step hook * accept isBusy prop on wizard-step and Messages component * address design colors for buttons * address deprecated props on TextControl * change step hooks to use the new global isBusy for suspense * simplify types * use onStart for keywords step instead of effect, remove unnecessary props * update types on completion step * move welcome step from seo-assistant wrapper to assistant-wizard, it is now a very thin wrapper, we might need to remove it * use new isBusy suspense for completion step * rework effects, split for better understanding where things go south. add retry handlers, implement global suspense (isBusy) * changelog --- .../change-jetpack-seo-state-effects | 4 + .../seo-assistant/assistant-wizard.tsx | 133 ++++++++++++------ .../seo-assistant/seo-assistant-wizard.tsx | 38 +---- .../components/seo-assistant/style.scss | 21 ++- .../components/seo-assistant/types.tsx | 28 ++-- .../seo-assistant/use-completion-step.tsx | 22 +-- .../seo-assistant/use-keywords-step.tsx | 38 ++--- .../use-meta-description-step.tsx | 22 +-- .../seo-assistant/use-title-step.tsx | 22 +-- .../seo-assistant/use-welcome-step.tsx | 31 ++++ .../components/seo-assistant/wizard-input.tsx | 8 +- .../seo-assistant/wizard-messages.tsx | 18 +-- .../components/seo-assistant/wizard-step.tsx | 13 +- 13 files changed, 200 insertions(+), 198 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/change-jetpack-seo-state-effects create mode 100644 projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-welcome-step.tsx diff --git a/projects/plugins/jetpack/changelog/change-jetpack-seo-state-effects b/projects/plugins/jetpack/changelog/change-jetpack-seo-state-effects new file mode 100644 index 0000000000000..2fd057b492d76 --- /dev/null +++ b/projects/plugins/jetpack/changelog/change-jetpack-seo-state-effects @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack SEO: fix state inconsistencies, change effects and use global isBusy suspense flag diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx index 42a78912a1806..8b47ef18db062 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx @@ -7,68 +7,115 @@ import { useCompletionStep } from './use-completion-step'; import { useKeywordsStep } from './use-keywords-step'; import { useMetaDescriptionStep } from './use-meta-description-step'; import { useTitleStep } from './use-title-step'; +import { useWelcomeStep } from './use-welcome-step'; import { OptionsInput, TextInput, CompletionInput } from './wizard-input'; import WizardStep from './wizard-step'; -import type { Step, OptionMessage, OnStartFunction } from './types'; +import type { Step, OptionMessage } from './types'; const debug = debugFactory( 'jetpack-seo:assistant-wizard' ); -export default function AssistantWizard( { close, tasks } ) { +export default function AssistantWizard( { close } ) { const [ currentStep, setCurrentStep ] = useState( 0 ); - const [ currentStepData, setCurrentStepData ] = useState< Step >(); - const [ isBusy ] = useState( false ); + const [ isBusy, setIsBusy ] = useState( false ); const stepsEndRef = useRef( null ); const scrollToBottom = () => { stepsEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); }; const keywordsInputRef = useRef( null ); + const [ , setResults ] = useState( {} ); + const [ lastStepValue, setLastStepValue ] = useState( '' ); useEffect( () => { scrollToBottom(); - }, [ currentStep ] ); + } ); // Keywords const keywordsStepData = useKeywordsStep(); const titleStepData = useTitleStep(); const metaStepData = useMetaDescriptionStep(); const completionStepData = useCompletionStep(); + const welcomeStepData = useWelcomeStep(); // Memoize steps array to prevent unnecessary recreations const steps = useMemo( - () => [ tasks[ 0 ], keywordsStepData, titleStepData, metaStepData, completionStepData ], - [ tasks, keywordsStepData, titleStepData, metaStepData, completionStepData ] + () => [ welcomeStepData, keywordsStepData, titleStepData, metaStepData, completionStepData ], + [ welcomeStepData, keywordsStepData, titleStepData, metaStepData, completionStepData ] ); + const [ currentStepData, setCurrentStepData ] = useState< Step >( welcomeStepData ); - const handleNext = useCallback( - ( options: Parameters< OnStartFunction >[ 0 ] ) => { - debug( 'step value', steps[ currentStep ].value ); - debug( 'next step value', steps[ currentStep + 1 ].value ); - if ( currentStep + 1 < steps.length ) { - debug( 'moving to ' + ( currentStep + 1 ) ); - setCurrentStep( currentStep + 1 ); - setCurrentStepData( steps[ currentStep + 1 ] ); - steps[ currentStep + 1 ].onStart?.( options ); + const stepsCount = steps.length; + + const handleStepStart = useCallback( async () => { + debug( 'handleStepStart', currentStepData?.id ); + if ( ! currentStepData || ! currentStepData.onStart ) { + return; + } + await currentStepData?.onStart( { + fromSkip: ! lastStepValue, + stepValue: lastStepValue, + } ); + setIsBusy( false ); + }, [ currentStepData, lastStepValue ] ); + + const handleNext = useCallback( () => { + debug( 'handleNext, stepsCount', stepsCount ); + let nextStep; + setCurrentStep( prev => { + if ( prev + 1 < stepsCount ) { + nextStep = prev + 1; + debug( 'moving to ' + nextStep ); + setCurrentStepData( steps[ nextStep ] ); + return nextStep; } - }, - [ currentStep, steps ] - ); + return prev; + } ); + }, [ stepsCount, steps ] ); + + useEffect( () => { + debug( 'currentStepData changed', currentStepData?.id ); + handleStepStart(); + }, [ currentStepData, handleStepStart ] ); + + // Initialize current step data + useEffect( () => { + if ( currentStep === 0 && steps[ 0 ].autoAdvance ) { + debug( 'init assistant wizard' ); + debug( 'auto advancing' ); + setIsBusy( true ); + const timeout = setTimeout( handleNext, steps[ 0 ].autoAdvance ); + return () => clearTimeout( timeout ); + } + }, [ currentStep, handleNext, steps ] ); // Reset states and close the wizard const handleDone = useCallback( () => { close(); setCurrentStep( 0 ); - setCurrentStepData( steps[ 0 ] ); - }, [ close, steps ] ); + }, [ close ] ); const handleStepSubmit = useCallback( async () => { + debug( 'step submitted' ); + setIsBusy( true ); const stepValue = await steps[ currentStep ]?.onSubmit?.(); - debug( 'step submitted, moving next' ); - if ( steps[ currentStep ].type === 'completion' ) { + debug( 'stepValue', stepValue ); + const newResults = { + [ steps[ currentStep ].id ]: { + value: steps[ currentStep ].value.trim(), + type: steps[ currentStep ].type, + label: steps[ currentStep ].label, + }, + }; + debug( 'newResults', newResults ); + setResults( prev => ( { ...prev, ...newResults } ) ); + debug( 'set last step value', stepValue ); + setLastStepValue( stepValue.trim() ); + + if ( steps[ currentStep ]?.type === 'completion' ) { handleDone(); } else { // always give half a second before moving forward - setTimeout( () => handleNext( { fromSkip: ! stepValue.trim(), stepValue } ), 500 ); + handleNext(); } - }, [ currentStep, handleNext, steps, handleDone ] ); + }, [ currentStep, handleDone, handleNext, steps ] ); const jumpToStep = useCallback( ( stepNumber: number ) => { @@ -90,32 +137,26 @@ export default function AssistantWizard( { close, tasks } ) { [ currentStep, jumpToStep, steps ] ); - // Initialize current step data - useEffect( () => { - if ( currentStep === 0 ) { - setCurrentStepData( steps[ 0 ] ); - if ( steps[ 0 ].autoAdvance ) { - setTimeout( handleNext, steps[ 0 ].autoAdvance ); - } - } - }, [ currentStep, handleNext, steps ] ); - const handleBack = () => { if ( currentStep > 1 ) { - debug( 'moving to ' + ( currentStep - 1 ) ); + debug( 'moving back to ' + ( currentStep - 1 ) ); setCurrentStep( currentStep - 1 ); setCurrentStepData( steps[ currentStep - 1 ] ); } }; const handleSkip = useCallback( async () => { - await currentStepData?.onSkip?.(); - handleNext( { - fromSkip: true, - // if skip is NOT meant to reset, pass stepValue as steps[ currentStep ].value - stepValue: '', - } ); - }, [ currentStepData, handleNext ] ); + setIsBusy( true ); + await steps[ currentStep ]?.onSkip?.(); + handleNext(); + }, [ currentStep, steps, handleNext ] ); + + const handleRetry = useCallback( async () => { + debug( 'handleRetry' ); + setIsBusy( true ); + await steps[ currentStep ].onRetry?.(); + setIsBusy( false ); + }, [ currentStep, steps ] ); return (
      @@ -143,6 +184,8 @@ export default function AssistantWizard( { close, tasks } ) { messages={ step.messages } visible={ currentStep >= index } onSelect={ option => handleSelect( index, option ) } + current={ currentStep === index } + isBusy={ isBusy } /> ) ) }
      @@ -163,7 +206,7 @@ export default function AssistantWizard( { close, tasks } ) { disabled={ ! steps[ currentStep ].value } submitCtaLabel={ steps[ currentStep ].submitCtaLabel } retryCtaLabel={ steps[ currentStep ].retryCtaLabel } - handleRetry={ steps[ currentStep ].onRetry } + handleRetry={ handleRetry } handleSubmit={ handleStepSubmit } /> ) } @@ -172,7 +215,7 @@ export default function AssistantWizard( { close, tasks } ) { disabled={ ! steps[ currentStep ].value } submitCtaLabel={ steps[ currentStep ].submitCtaLabel } retryCtaLabel={ steps[ currentStep ].retryCtaLabel } - handleRetry={ steps[ currentStep ].onRetry } + handleRetry={ handleRetry } handleSubmit={ handleStepSubmit } /> ) } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx index 2d55d5ac6c598..5b91beac93c0d 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/seo-assistant-wizard.tsx @@ -1,5 +1,3 @@ -import { createInterpolateElement } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; import debugFactory from 'debug'; import './style.scss'; import AssistantWizard from './assistant-wizard'; @@ -8,39 +6,5 @@ const debug = debugFactory( 'jetpack-ai:seo-assistant-wizard' ); export default function SeoAssistantWizard( { close }: { close?: () => void } ) { debug( 'render' ); - return ( - Hi there! 👋 Let's optimise your blog post for SEO.", 'jetpack' ), - { b: } - ), - showIcon: true, - id: '1', - }, - { - content: createInterpolateElement( - __( - "Here's what we can improve:
      1. Keywords
      2. Title
      3. Meta description", - 'jetpack' - ), - { br:
      } - ), - showIcon: false, - id: '2', - }, - ], - }, - ] } - /> - ); + return ; } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss index 854d07e33a542..ae8357f5faf48 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -41,7 +41,7 @@ color: #1e1e1e; &:hover { - color: #374151; + color:#3858E9; } } } @@ -127,8 +127,7 @@ animation: assistantInputAppear 0.3s ease-out; &:focus-within { - outline-width: 2px; - outline-color: var( --wp-components-color-accent, var( --wp-admin-theme-color, #007cba ) ); + outline-color: #3858E9; } @@ -144,12 +143,15 @@ .components-text-control__input, .components-text-control__input:focus { - padding: 8px; border: 0; border-radius: 12px; box-shadow: none; outline: 0; } + + .components-button.is-primary { + background-color: #3858E9; + } } // submit and retry buttons @@ -179,7 +181,7 @@ &.is-selected { background: #fff; - border-color: var( --wp-components-color-accent, var( --wp-admin-theme-color, #007cba ) ); + border-color: #3858E9; } // target buttons only @@ -198,6 +200,15 @@ align-items: center; gap: 16px; animation: assistantInputAppear 0.3s ease-out; + + .components-button.is-primary { + background-color: #3858E9; + } + + .components-button.is-secondary { + box-shadow: inset 0 0 0 1px #3858e9, 0 0 0 currentColor; + color: #3858e9; + } } &__completion { diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx index 3b8da1f87dc82..cca9bcebce3e3 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx @@ -11,13 +11,13 @@ export interface Message { export type OptionMessage = Pick< Message, 'id' | 'content' >; -interface BaseStep { +export interface Step { id: string; title: string; label?: string; messages: Message[]; type: StepType; - onStart?: OnStartFunction; + onStart?: ( options?: { fromSkip: boolean; stepValue: string } ) => void; onSubmit?: () => Promise< string >; onSkip?: () => void; value?: string; @@ -26,27 +26,15 @@ interface BaseStep { | React.Dispatch< React.SetStateAction< Array< string > > >; setCompleted?: React.Dispatch< React.SetStateAction< boolean > >; completed?: boolean; -} + autoAdvance?: number; -export interface InputStep extends BaseStep { - type: 'input'; - placeholder: string; -} + // Input step properties + placeholder?: string; -interface OptionsStep extends BaseStep { - type: 'options'; - options: OptionMessage[]; - onSelect: ( option: OptionMessage ) => void; + // Options step properties + options?: OptionMessage[]; + onSelect?: ( option: OptionMessage ) => void; submitCtaLabel?: string; onRetry?: () => void; retryCtaLabel?: string; } - -export interface CompletionStep extends BaseStep { - type: 'completion'; - submitCtaLabel?: string; -} - -export type Step = BaseStep | InputStep | OptionsStep | CompletionStep; - -export type OnStartFunction = ( options?: { fromSkip: boolean; stepValue: string } ) => void; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx index f359a39738e24..221b3a01b1751 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx @@ -1,26 +1,18 @@ import { createInterpolateElement, useCallback, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import TypingMessage from './typing-message'; import { useMessages } from './wizard-messages'; -import type { CompletionStep } from './types'; +import type { Step } from './types'; -export const useCompletionStep = (): CompletionStep => { +export const useCompletionStep = (): Step => { const [ keywords, setKeywords ] = useState( '' ); const [ completed, setCompleted ] = useState( false ); - const { messages, setMessages, addMessage, removeLastMessage } = useMessages(); + const { messages, setMessages, addMessage } = useMessages(); const startHandler = useCallback( async ( { fromSkip } ) => { - const firstMessages = [ - { - content: , - showIcon: true, - id: '2', - }, - ]; + const firstMessages = []; if ( fromSkip ) { - firstMessages.unshift( { - // @ts-expect-error - type is properly defined, unsure why it's erroring + firstMessages.push( { content: __( 'Skipped!', 'jetpack' ), showIcon: true, id: 'a', @@ -28,8 +20,6 @@ export const useCompletionStep = (): CompletionStep => { } setMessages( firstMessages ); await new Promise( resolve => setTimeout( resolve, 2000 ) ); - removeLastMessage(); - // await new Promise( resolve => setTimeout( resolve, 1000 ) ); addMessage( { content: createInterpolateElement( "Here's your updated checklist:
      ✅ Title
      ✅ Meta description

      ", @@ -57,7 +47,7 @@ export const useCompletionStep = (): CompletionStep => { } ); return 'completion'; }, - [ setMessages, addMessage, removeLastMessage ] + [ setMessages, addMessage ] ); return { diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx index 274487f76dc51..5429467663a9a 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-keywords-step.tsx @@ -1,32 +1,27 @@ -import { createInterpolateElement, useCallback, useState, useEffect } from '@wordpress/element'; +import { createInterpolateElement, useCallback, useState } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; -import TypingMessage from './typing-message'; import { useMessages } from './wizard-messages'; -import type { InputStep } from './types'; +import type { Step } from './types'; -export const useKeywordsStep = (): InputStep => { +export const useKeywordsStep = (): Step => { const [ keywords, setKeywords ] = useState( '' ); - const [ completed, setCompleted ] = useState( false ); - const { messages, setMessages, addMessage, removeLastMessage } = useMessages(); + const { messages, addMessage } = useMessages(); - useEffect( () => { - setMessages( [ - { - content: __( - 'To start, please enter 1–3 focus keywords that describe your blog post.', - 'jetpack' - ), - showIcon: true, - }, - ] ); - }, [ setMessages ] ); + const onStart = useCallback( async () => { + addMessage( { + content: __( + 'To start, please enter 1–3 focus keywords that describe your blog post.', + 'jetpack' + ), + showIcon: true, + } ); + }, [ addMessage ] ); const handleKeywordsSubmit = useCallback( async () => { if ( ! keywords.trim() ) { return ''; } addMessage( { content: keywords, isUser: true } ); - addMessage( { content: } ); const keywordlist = await new Promise( resolve => setTimeout( () => { @@ -49,7 +44,6 @@ export const useKeywordsStep = (): InputStep => { resolve( commaSeparatedKeywords ); }, 500 ) ); - removeLastMessage(); const message = createInterpolateElement( /* Translators: wrapped string is list of keywords user has entered */ @@ -59,9 +53,8 @@ export const useKeywordsStep = (): InputStep => { } ); addMessage( { content: message } ); - setCompleted( true ); return keywords; - }, [ addMessage, keywords, removeLastMessage ] ); + }, [ addMessage, keywords ] ); return { id: 'keywords', @@ -71,9 +64,8 @@ export const useKeywordsStep = (): InputStep => { type: 'input', placeholder: __( 'Photography, plants', 'jetpack' ), onSubmit: handleKeywordsSubmit, - completed, - setCompleted, value: keywords, setValue: setKeywords, + onStart, }; }; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx index f853a5942e292..df6be1b60e573 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx @@ -1,21 +1,13 @@ import { useDispatch } from '@wordpress/data'; import { useCallback, useState, createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import TypingMessage from './typing-message'; import { useMessages } from './wizard-messages'; import type { Step, OptionMessage } from './types'; export const useMetaDescriptionStep = (): Step => { const [ selectedMetaDescription, setSelectedMetaDescription ] = useState< string >(); const [ metaDescriptionOptions, setMetaDescriptionOptions ] = useState< OptionMessage[] >( [] ); - const { - messages, - setMessages, - addMessage, - removeLastMessage, - editLastMessage, - setSelectedMessage, - } = useMessages(); + const { messages, setMessages, addMessage, editLastMessage, setSelectedMessage } = useMessages(); const { editPost } = useDispatch( 'core/editor' ); const [ completed, setCompleted ] = useState( false ); @@ -28,13 +20,11 @@ export const useMetaDescriptionStep = (): Step => { ); const handleMetaDescriptionSubmit = useCallback( async () => { - addMessage( { content: } ); await editPost( { meta: { advanced_seo_description: selectedMetaDescription } } ); - removeLastMessage(); addMessage( { content: __( 'Meta description updated! ✅', 'jetpack' ) } ); setCompleted( true ); return selectedMetaDescription; - }, [ selectedMetaDescription, addMessage, editPost, removeLastMessage ] ); + }, [ selectedMetaDescription, addMessage, editPost ] ); const handleMetaDescriptionGenerate = useCallback( async ( { fromSkip } ) => { @@ -54,7 +44,6 @@ export const useMetaDescriptionStep = (): Step => { // we only generate if options are empty setMessages( [ initialMessage ] ); if ( newMetaDescriptions.length === 0 ) { - addMessage( { content: } ); newMetaDescriptions = await new Promise( resolve => setTimeout( () => @@ -68,7 +57,6 @@ export const useMetaDescriptionStep = (): Step => { 3000 ) ); - removeLastMessage(); } setMetaDescriptionOptions( newMetaDescriptions ); const editedFirstMessage = fromSkip @@ -88,7 +76,7 @@ export const useMetaDescriptionStep = (): Step => { addMessage( { ...meta, type: 'option', isUser: true } ) ); }, - [ metaDescriptionOptions, addMessage, removeLastMessage, setMessages, editLastMessage ] + [ metaDescriptionOptions, addMessage, setMessages, editLastMessage ] ); const handleMetaDescriptionRegenerate = useCallback( async () => { @@ -96,7 +84,6 @@ export const useMetaDescriptionStep = (): Step => { setMessages( [ { content: __( "Now, let's optimize your meta description.", 'jetpack' ), showIcon: true }, ] ); - addMessage( { content: } ); const newMetaDescription = await new Promise< Array< OptionMessage > >( resolve => setTimeout( () => @@ -110,7 +97,6 @@ export const useMetaDescriptionStep = (): Step => { 3000 ) ); - removeLastMessage(); const editedFirstMessage = createInterpolateElement( __( "Now, let's optimize your meta description.
      Here's a suggestion:", 'jetpack' ), { br:
      } @@ -118,7 +104,7 @@ export const useMetaDescriptionStep = (): Step => { editLastMessage( editedFirstMessage ); setMetaDescriptionOptions( newMetaDescription ); newMetaDescription.forEach( meta => addMessage( { ...meta, type: 'option', isUser: true } ) ); - }, [ addMessage, removeLastMessage, editLastMessage, setMessages ] ); + }, [ addMessage, editLastMessage, setMessages ] ); return { id: 'meta', diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx index fa275f58afda0..87f2764b82385 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx @@ -1,7 +1,6 @@ import { useDispatch } from '@wordpress/data'; import { useCallback, useState, createInterpolateElement } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import TypingMessage from './typing-message'; import { useMessages } from './wizard-messages'; import type { Step, OptionMessage } from './types'; @@ -9,14 +8,7 @@ export const useTitleStep = (): Step => { const [ selectedTitle, setSelectedTitle ] = useState< string >( '' ); const [ titleOptions, setTitleOptions ] = useState< OptionMessage[] >( [] ); const { editPost } = useDispatch( 'core/editor' ); - const { - messages, - setMessages, - addMessage, - removeLastMessage, - editLastMessage, - setSelectedMessage, - } = useMessages(); + const { messages, setMessages, addMessage, editLastMessage, setSelectedMessage } = useMessages(); const [ completed, setCompleted ] = useState( false ); const [ prevStepValue, setPrevStepValue ] = useState(); @@ -51,7 +43,6 @@ export const useTitleStep = (): Step => { let newTitles = [ ...titleOptions ]; // we only generate if options are empty if ( newTitles.length === 0 || prevStepHasChanged ) { - addMessage( { content: } ); newTitles = await new Promise( resolve => setTimeout( () => @@ -69,7 +60,6 @@ export const useTitleStep = (): Step => { 3000 ) ); - removeLastMessage(); } let editedMessage; @@ -99,11 +89,10 @@ export const useTitleStep = (): Step => { newTitles.forEach( title => addMessage( { ...title, type: 'option', isUser: true } ) ); } }, - [ titleOptions, addMessage, removeLastMessage, setMessages, prevStepValue, editLastMessage ] + [ titleOptions, addMessage, setMessages, prevStepValue, editLastMessage ] ); const handleTitleRegenerate = useCallback( async () => { - addMessage( { content: } ); const newTitles = await new Promise< Array< OptionMessage > >( resolve => setTimeout( () => @@ -121,19 +110,16 @@ export const useTitleStep = (): Step => { 2000 ) ); - removeLastMessage(); setTitleOptions( [ ...titleOptions, ...newTitles ] ); newTitles.forEach( title => addMessage( { ...title, type: 'option', isUser: true } ) ); - }, [ addMessage, removeLastMessage, titleOptions ] ); + }, [ addMessage, titleOptions ] ); const handleTitleSubmit = useCallback( async () => { - addMessage( { content: } ); await editPost( { title: selectedTitle, meta: { jetpack_seo_html_title: selectedTitle } } ); - removeLastMessage(); addMessage( { content: __( 'Title updated! ✅', 'jetpack' ) } ); setCompleted( true ); return selectedTitle; - }, [ selectedTitle, addMessage, editPost, removeLastMessage ] ); + }, [ selectedTitle, addMessage, editPost ] ); return { id: 'title', diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-welcome-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-welcome-step.tsx new file mode 100644 index 0000000000000..5163f890b8dc0 --- /dev/null +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-welcome-step.tsx @@ -0,0 +1,31 @@ +import { createInterpolateElement } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import type { Step } from './types'; + +export const useWelcomeStep = (): Step => { + return { + id: 'welcome', + title: __( 'Optimise for SEO', 'jetpack' ), + label: 'welcome', + type: 'welcome', + messages: [ + { + content: createInterpolateElement( + __( "Hi there! 👋 Let's optimise your blog post for SEO.", 'jetpack' ), + { b: } + ), + showIcon: true, + id: '1', + }, + { + content: createInterpolateElement( + __( "Here's what we can improve:
      1. Title
      2. Meta description", 'jetpack' ), + { br:
      } + ), + showIcon: false, + id: '2', + }, + ], + autoAdvance: 2000, + }; +}; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx index abe3bc5ed02fb..2fc1d13a38e20 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-input.tsx @@ -32,7 +32,13 @@ function UnforwardedKeywordsInput( { placeholder, value, setValue, handleSubmit return (
      - + - ${ - wpcomSidebarNoticeData.dismissible - ? '' - : '' - } -
      -
      - - - ` - ); - // Record impression event in Tracks. - wpcomSidebarNoticeRecordEvent( wpcomSidebarNoticeData.tracks?.display ); + wpcomSidebarNoticeRecordEvent( wpcomSidebarNoticeData.tracks?.display, wpcomSidebarNoticeData ); - const sidebarNotice = adminMenu.firstElementChild; sidebarNotice.addEventListener( 'click', event => { if ( event.target.classList.contains( 'upsell_banner__dismiss' ) || @@ -74,32 +39,15 @@ const wpcomShowSidebarNotice = wpcomSidebarNoticeData => { sidebarNotice.remove(); // Record dismiss event in Tracks. - wpcomSidebarNoticeRecordEvent( wpcomSidebarNoticeData.tracks?.dismiss ); + wpcomSidebarNoticeRecordEvent( + wpcomSidebarNoticeData.tracks?.dismiss, + wpcomSidebarNoticeData + ); } else { // Record click event in Tracks. - wpcomSidebarNoticeRecordEvent( wpcomSidebarNoticeData.tracks?.click ); + wpcomSidebarNoticeRecordEvent( wpcomSidebarNoticeData.tracks?.click, wpcomSidebarNoticeData ); } } ); }; -const wpcomFetchSidebarNotice = async () => { - try { - const response = await fetch( - `${ wpcomSidebarNoticeConfig.ajaxUrl }?action=wpcom_fetch_sidebar_notice&nonce=${ wpcomSidebarNoticeConfig.nonce }` - ); - - if ( response.status !== 200 ) { - return; - } - - const res = await response.json(); - - if ( res.success && res.data ) { - wpcomShowSidebarNotice( res.data ); - } - } catch { - // End silently - } -}; - -document.addEventListener( 'DOMContentLoaded', wpcomFetchSidebarNotice ); +document.addEventListener( 'DOMContentLoaded', wpcomShowSidebarNotice ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php index ada1b6fc1383d..bdc74bfa1ce94 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.php @@ -22,6 +22,11 @@ * Enqueue assets needed by the WordPress.com sidebar notice. */ function wpcom_enqueue_sidebar_notice_assets() { + $data = wpcom_get_sidebar_notice_data(); + if ( ! $data ) { + return; + } + $asset_file = include Jetpack_Mu_Wpcom::BASE_DIR . 'build/wpcom-sidebar-notice/wpcom-sidebar-notice.asset.php'; wp_enqueue_script( @@ -42,11 +47,7 @@ function wpcom_enqueue_sidebar_notice_assets() { $asset_file['version'] ?? filemtime( Jetpack_Mu_Wpcom::BASE_DIR . 'build/wpcom-sidebar-notice/wpcom-sidebar-notice.css' ) ); - $data = array( - 'ajaxUrl' => admin_url( 'admin-ajax.php' ), - 'nonce' => wp_create_nonce( 'wpcom_fetch_sidebar_notice' ), - ); - $inline_script = 'const wpcomSidebarNoticeConfig = ' . wp_json_encode( $data ) . ';'; + $inline_script = 'const wpcomSidebarNoticeData = ' . wp_json_encode( $data ) . ';'; wp_add_inline_script( 'wpcom-sidebar-notice', $inline_script, 'before' ); } add_action( 'admin_enqueue_scripts', 'wpcom_enqueue_sidebar_notice_assets' ); @@ -93,15 +94,12 @@ function wpcom_get_sidebar_notice() { } /** - * Fetch sidebar notice data asynchronously via AJAX. + * Get sidebar notice data. */ -function wpcom_fetch_sidebar_notice_data() { - check_ajax_referer( 'wpcom_fetch_sidebar_notice', 'nonce' ); - +function wpcom_get_sidebar_notice_data() { $notice = wpcom_get_sidebar_notice(); if ( ! $notice ) { - status_header( 204 ); - wp_die(); + return; } $link = ! empty( $notice['link'] ) ? $notice['link'] : ''; @@ -125,14 +123,7 @@ function wpcom_fetch_sidebar_notice_data() { } } - $data = array( - 'url' => esc_url( $link ), - 'text' => wp_kses( $notice['content'] ?? '', array() ), - 'action' => wp_kses( $notice['cta'] ?? '', array() ), - 'dismissible' => $notice['dismissible'] ?? false, - 'dismissLabel' => esc_html__( 'Dismiss', 'jetpack-mu-wpcom' ), - 'id' => $notice['id'] ?? '', - 'featureClass' => $notice['feature_class'] ?? '', + return array( 'dismissNonce' => wp_create_nonce( 'wpcom_dismiss_sidebar_notice' ), 'tracks' => $notice['tracks'] ?? null, 'user' => array( @@ -140,10 +131,32 @@ function wpcom_fetch_sidebar_notice_data() { 'username' => $user_login, ), ); +} + +/** + * Add a menu page to the admin menu. + */ +function wpcom_add_sidebar_notice_menu_page() { + $notice = wpcom_get_sidebar_notice(); + if ( ! $notice ) { + return; + } + + $link = ! empty( $notice['link'] ) ? $notice['link'] : ''; + if ( str_starts_with( $link, '/' ) ) { + $link = 'https://wordpress.com' . $link; + } - wp_send_json_success( $data ); + echo '
    • '; + echo '
      '; + echo '
      ' . wp_kses( $notice['content'] ?? '', array() ) . '
      '; + echo '' . wp_kses( $notice['cta'] ?? '', array() ) . ''; + echo $notice['dismissible'] ? '' : ''; + echo '
      '; + echo '
    • '; + echo ''; } -add_action( 'wp_ajax_wpcom_fetch_sidebar_notice', 'wpcom_fetch_sidebar_notice_data' ); +add_action( 'adminmenu', 'wpcom_add_sidebar_notice_menu_page' ); /** * Handle AJAX requests to dismiss a sidebar notice. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.scss index 884fa91b11d6d..62ccc5968d21f 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.scss +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-sidebar-notice/wpcom-sidebar-notice.scss @@ -38,15 +38,8 @@ /** * Sidebar notice */ -#adminmenu li.menu-top.toplevel_page_site-notices { - &:hover, - &:focus { - background-color: inherit; - } - +#adminmenu li.toplevel_page_site-notices { a { - cursor: default; - &:hover, &:focus { box-shadow: none; @@ -54,9 +47,7 @@ } } - .wp-menu-name { - padding: 0 8px 8px 8px; - } + padding: 0 8px 8px 8px; .upsell_banner { border-radius: 2px; @@ -66,34 +57,17 @@ gap: 6px; } - .upsell_banner__icon { - display: none; - - &:before { - content: '\f534'; - font-family: 'dashicons'; - background-color: #a7aaad; - color: white; - border-radius: 50%; - } - } - .upsell_banner__text { font-size: 12px; line-height: 16px; } .upsell_banner__action { - width: 100%; - font-size: 13px; - line-height: 20px; - cursor: pointer; - min-height: 32px; - margin-bottom: 0; - border: 0; + text-align: center; + line-height: 2; } - .upsell_banner__dismiss { + .upsell_banner__dismiss.button-link { background-color: transparent; color: inherit; min-height: 0; From eba4dd450835557ab7d109b32d403b4d2241fce9 Mon Sep 17 00:00:00 2001 From: Miguel Lezama Date: Tue, 4 Feb 2025 14:09:36 -0300 Subject: [PATCH 353/420] Forms: Add tracks to form submission. (#41307) --- .../connection/changelog/update-forms-tracks | 4 +++ .../forms/changelog/update-forms-tracks | 4 +++ .../forms/src/contact-form/class-util.php | 29 +++++++++++++++++-- 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 projects/packages/connection/changelog/update-forms-tracks create mode 100644 projects/packages/forms/changelog/update-forms-tracks diff --git a/projects/packages/connection/changelog/update-forms-tracks b/projects/packages/connection/changelog/update-forms-tracks new file mode 100644 index 0000000000000..461f03a464db6 --- /dev/null +++ b/projects/packages/connection/changelog/update-forms-tracks @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Tracks: Add site type to events diff --git a/projects/packages/forms/changelog/update-forms-tracks b/projects/packages/forms/changelog/update-forms-tracks new file mode 100644 index 0000000000000..6405a131f2173 --- /dev/null +++ b/projects/packages/forms/changelog/update-forms-tracks @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Forms: tracks forms submissions in orden to improve the product. diff --git a/projects/packages/forms/src/contact-form/class-util.php b/projects/packages/forms/src/contact-form/class-util.php index 6bfaf7e6b4451..9ea840c3a9a77 100644 --- a/projects/packages/forms/src/contact-form/class-util.php +++ b/projects/packages/forms/src/contact-form/class-util.php @@ -35,7 +35,7 @@ public static function init() { add_action( 'init', '\Automattic\Jetpack\Forms\ContactForm\Contact_Form_Plugin::init', 9 ); add_action( 'grunion_scheduled_delete', '\Automattic\Jetpack\Forms\ContactForm\Util::grunion_delete_old_spam' ); - add_action( 'grunion_pre_message_sent', '\Automattic\Jetpack\Forms\ContactForm\Util::jetpack_tracks_record_grunion_pre_message_sent', 12 ); + add_action( 'grunion_pre_message_sent', '\Automattic\Jetpack\Forms\ContactForm\Util::jetpack_tracks_record_grunion_pre_message_sent', 12, 3 ); } /** @@ -262,11 +262,13 @@ public static function grunion_delete_old_spam() { /** * Send an event to Tracks on form submission. * - * @param int $post_id - the post_id for the CPT that is created. + * @param int $post_id - the post_id for the CPT that is created. + * @param array $all_values - array containing all form fields. + * @param array $extra_values - array containing extra form metadata. * * @return null|void */ - public static function jetpack_tracks_record_grunion_pre_message_sent( $post_id ) { + public static function jetpack_tracks_record_grunion_pre_message_sent( $post_id, $all_values = array(), $extra_values = array() ) { $post = get_post( $post_id ); if ( $post ) { $extra = gmdate( 'Y-W', strtotime( $post->post_date_gmt ) ); @@ -276,6 +278,27 @@ public static function jetpack_tracks_record_grunion_pre_message_sent( $post_id /** This action is documented in jetpack/modules/widgets/social-media-icons.php */ do_action( 'jetpack_bump_stats_extras', 'jetpack_forms_message_sent', $extra ); + + $form_type = isset( $extra_values['widget'] ) ? 'widget' : 'block'; + + $context = ''; + if ( isset( $extra_values['block_template'] ) ) { + $context = 'template'; + } elseif ( isset( $extra_values['block_template_part'] ) ) { + $context = 'template_part'; + } + + $plugin = Contact_Form_Plugin::init(); + + $plugin->record_tracks_event( + 'jetpack_forms_message_sent', + array( + 'post_id' => $post_id, + 'form_type' => $form_type, + 'context' => $context, + 'has_consent' => empty( $all_values['email_marketing_consent'] ) ? 0 : 1, + ) + ); } /** From c2b0cc1f5eed9aaf0902eaa6d96a04d95c638d63 Mon Sep 17 00:00:00 2001 From: Adnan Haque <3737780+haqadn@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:43:06 -0500 Subject: [PATCH 354/420] Boost: Prioritized Cloud CSS regeneration for cornerstone pages (#41516) * Update parameter description * Separate some utils method into Cornerstone_Utils * Send appropriate regeneration reason if a cornerstone page is updated * Regenerate Cloud CSS when the list of cornerstone pages is updated. * changelog * Fix possibly undeclared variable --------- Co-authored-by: Peter Petrov --- .../plugins/boost/app/class-jetpack-boost.php | 2 +- .../app/lib/Environment_Change_Detector.php | 13 +++--- .../{ => cornerstone}/Cornerstone_Pages.php | 26 ++---------- .../app/lib/cornerstone/Cornerstone_Utils.php | 42 +++++++++++++++++++ .../providers/Cornerstone_Provider.php | 9 ++-- .../optimizations/cloud-css/Cloud_CSS.php | 22 ++++++++++ .../endpoints/List_Cornerstone_Pages.php | 5 +-- .../boost/changelog/update-ccss-regeneration | 4 ++ 8 files changed, 83 insertions(+), 40 deletions(-) rename projects/plugins/boost/app/lib/{ => cornerstone}/Cornerstone_Pages.php (82%) create mode 100644 projects/plugins/boost/app/lib/cornerstone/Cornerstone_Utils.php create mode 100644 projects/plugins/boost/changelog/update-ccss-regeneration diff --git a/projects/plugins/boost/app/class-jetpack-boost.php b/projects/plugins/boost/app/class-jetpack-boost.php index 1b190f51a61c1..82923d28026a1 100644 --- a/projects/plugins/boost/app/class-jetpack-boost.php +++ b/projects/plugins/boost/app/class-jetpack-boost.php @@ -24,7 +24,7 @@ use Automattic\Jetpack_Boost\Lib\Analytics; use Automattic\Jetpack_Boost\Lib\CLI; use Automattic\Jetpack_Boost\Lib\Connection; -use Automattic\Jetpack_Boost\Lib\Cornerstone_Pages; +use Automattic\Jetpack_Boost\Lib\Cornerstone\Cornerstone_Pages; use Automattic\Jetpack_Boost\Lib\Critical_CSS\Critical_CSS_State; use Automattic\Jetpack_Boost\Lib\Critical_CSS\Critical_CSS_Storage; use Automattic\Jetpack_Boost\Lib\Critical_CSS\Generator; diff --git a/projects/plugins/boost/app/lib/Environment_Change_Detector.php b/projects/plugins/boost/app/lib/Environment_Change_Detector.php index ee77a9954332a..3cdcb4de7a090 100644 --- a/projects/plugins/boost/app/lib/Environment_Change_Detector.php +++ b/projects/plugins/boost/app/lib/Environment_Change_Detector.php @@ -9,6 +9,8 @@ namespace Automattic\Jetpack_Boost\Lib; +use Automattic\Jetpack_Boost\Lib\Cornerstone\Cornerstone_Utils; + /** * Class Environment_Change_Detector */ @@ -66,7 +68,7 @@ public function handle_cornerstone_pages_list_update() { /** * Fire the environment change action. * - * @param bool $is_major_change Whether the change is major. + * @param bool $is_major_change Whether the change is such that we should stop serving existing critical CSS immediately unless refreshed. * @param string $change_type The change type. */ public function do_action( $is_major_change, $change_type ) { @@ -109,13 +111,8 @@ private function is_post_type_invalidating( $post_type ) { * @return string The change type. */ private function get_post_change_type( $post ) { - $cornerstone_pages = ( new Cornerstone_Pages() )->get_pages(); - if ( $cornerstone_pages ) { - $cornerstone_pages_sanitized = array_map( 'untrailingslashit', $cornerstone_pages ); - $current_url = untrailingslashit( get_permalink( $post ) ); - if ( in_array( $current_url, $cornerstone_pages_sanitized, true ) ) { - return $this::ENV_CHANGE_CORNERSTONE_PAGE_SAVED; - } + if ( Cornerstone_Utils::is_cornerstone_page( $post->ID ) ) { + return $this::ENV_CHANGE_CORNERSTONE_PAGE_SAVED; } if ( 'page' === $post->post_type ) { diff --git a/projects/plugins/boost/app/lib/Cornerstone_Pages.php b/projects/plugins/boost/app/lib/cornerstone/Cornerstone_Pages.php similarity index 82% rename from projects/plugins/boost/app/lib/Cornerstone_Pages.php rename to projects/plugins/boost/app/lib/cornerstone/Cornerstone_Pages.php index 8a659b6f67ae4..dd5bf351ba2f7 100644 --- a/projects/plugins/boost/app/lib/Cornerstone_Pages.php +++ b/projects/plugins/boost/app/lib/cornerstone/Cornerstone_Pages.php @@ -1,10 +1,11 @@ $this->get_max_pages(), @@ -135,14 +123,8 @@ public function get_properties() { } public function add_display_post_states( $post_states, $post ) { - $cornerstone_pages = $this->get_pages(); - if ( ! empty( $cornerstone_pages ) ) { - $post_url = untrailingslashit( get_permalink( $post ) ); - $cornerstone_pages = array_map( 'untrailingslashit', $cornerstone_pages ); - - if ( in_array( $post_url, $cornerstone_pages, true ) ) { - $post_states[] = __( 'Cornerstone Page', 'jetpack-boost' ); - } + if ( Cornerstone_Utils::is_cornerstone_page( $post->ID ) ) { + $post_states[] = __( 'Cornerstone Page', 'jetpack-boost' ); } return $post_states; diff --git a/projects/plugins/boost/app/lib/cornerstone/Cornerstone_Utils.php b/projects/plugins/boost/app/lib/cornerstone/Cornerstone_Utils.php new file mode 100644 index 0000000000000..adebb1e2aff32 --- /dev/null +++ b/projects/plugins/boost/app/lib/cornerstone/Cornerstone_Utils.php @@ -0,0 +1,42 @@ +get_pages(); + $urls = Cornerstone_Utils::get_list(); $groups = array(); foreach ( $urls as $url ) { @@ -67,8 +65,7 @@ private static function get_request_url() { * @return array */ public static function get_keys() { - $cornerstone_pages = new Cornerstone_Pages(); - $urls = $cornerstone_pages->get_pages(); + $urls = Cornerstone_Utils::get_list(); return array_map( array( __CLASS__, 'get_hash_for_url' ), $urls ); } diff --git a/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php b/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php index 5158e7b7c3827..9eb13aa3e18c7 100644 --- a/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php +++ b/projects/plugins/boost/app/modules/optimizations/cloud-css/Cloud_CSS.php @@ -6,6 +6,7 @@ use Automattic\Jetpack_Boost\Contracts\Changes_Page_Output; use Automattic\Jetpack_Boost\Contracts\Optimization; use Automattic\Jetpack_Boost\Contracts\Pluggable; +use Automattic\Jetpack_Boost\Lib\Cornerstone\Cornerstone_Utils; use Automattic\Jetpack_Boost\Lib\Critical_CSS\Admin_Bar_Compatibility; use Automattic\Jetpack_Boost\Lib\Critical_CSS\Critical_CSS_Invalidator; use Automattic\Jetpack_Boost\Lib\Critical_CSS\Critical_CSS_State; @@ -13,6 +14,7 @@ use Automattic\Jetpack_Boost\Lib\Critical_CSS\Display_Critical_CSS; use Automattic\Jetpack_Boost\Lib\Critical_CSS\Generator; use Automattic\Jetpack_Boost\Lib\Critical_CSS\Source_Providers\Source_Providers; +use Automattic\Jetpack_Boost\Lib\Environment_Change_Detector; use Automattic\Jetpack_Boost\Lib\Premium_Features; use Automattic\Jetpack_Boost\REST_API\Contracts\Has_Always_Available_Endpoints; use Automattic\Jetpack_Boost\REST_API\Endpoints\Update_Cloud_CSS; @@ -25,6 +27,9 @@ class Cloud_CSS implements Pluggable, Has_Always_Available_Endpoints, Changes_Pa /** A post was updated/created. */ const REGENERATE_REASON_SAVE_POST = 'save_post'; + /** A cornerstone page or the list of cornerstone pages was updated. */ + const REGENERATE_REASON_CORNERSTONE_UPDATE = 'cornerstone_update'; + /** Existing critical CSS invalidated because of a significant change, e.g. Theme changed. */ const REGENERATE_REASON_INVALIDATED = 'invalidated'; @@ -164,6 +169,11 @@ public function handle_save_post( $post_id, $post ) { // phpcs:ignore VariableAn return; } + if ( Cornerstone_Utils::is_cornerstone_page( $post_id ) ) { + $this->regenerate_cloud_css( self::REGENERATE_REASON_CORNERSTONE_UPDATE, $this->get_all_providers() ); + return; + } + // This checks against the latest providers list, not the list // stored in the database because newly added posts are always // included in the providers list that will be used to generate @@ -173,6 +183,18 @@ public function handle_save_post( $post_id, $post ) { // phpcs:ignore VariableAn } } + /** + * Handle when a critical CSS environment change is detected. + */ + public function handle_environment_change( $is_major_change, $change_type ) { + /* + * Regenerate Cloud CSS when the list of cornerstone pages is updated. + */ + if ( $change_type === Environment_Change_Detector::ENV_CHANGE_CORNERSTONE_PAGES_LIST_UPDATED ) { + $this->regenerate_cloud_css( self::REGENERATE_REASON_CORNERSTONE_UPDATE, $this->get_all_providers() ); + } + } + public function regenerate_cloud_css( $reason, $providers ) { $result = $this->generate_cloud_css( $reason, $providers ); if ( is_wp_error( $result ) ) { diff --git a/projects/plugins/boost/app/rest-api/endpoints/List_Cornerstone_Pages.php b/projects/plugins/boost/app/rest-api/endpoints/List_Cornerstone_Pages.php index f173fb076e9e4..24ba4ed81dd01 100644 --- a/projects/plugins/boost/app/rest-api/endpoints/List_Cornerstone_Pages.php +++ b/projects/plugins/boost/app/rest-api/endpoints/List_Cornerstone_Pages.php @@ -7,7 +7,7 @@ namespace Automattic\Jetpack_Boost\REST_API\Endpoints; -use Automattic\Jetpack_Boost\Lib\Cornerstone_Pages; +use Automattic\Jetpack_Boost\Lib\Cornerstone\Cornerstone_Utils; use Automattic\Jetpack_Boost\REST_API\Contracts\Endpoint; use Automattic\Jetpack_Boost\REST_API\Permissions\Signed_With_Blog_Token; @@ -18,8 +18,7 @@ public function request_methods() { } public function response( $_request ) { - $cornerstone_pages = new Cornerstone_Pages(); - return rest_ensure_response( $cornerstone_pages->get_pages() ); + return rest_ensure_response( Cornerstone_Utils::get_list() ); } public function permissions() { diff --git a/projects/plugins/boost/changelog/update-ccss-regeneration b/projects/plugins/boost/changelog/update-ccss-regeneration new file mode 100644 index 0000000000000..34179bc2686af --- /dev/null +++ b/projects/plugins/boost/changelog/update-ccss-regeneration @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Cloud CSS: Handle prioritized cloud CSS regeneration for cornerstone pages updates. From e658a26a3d18893b6a78468c733684fd376ca2eb Mon Sep 17 00:00:00 2001 From: Kev Date: Tue, 4 Feb 2025 13:57:23 -0500 Subject: [PATCH 355/420] Jetpack button: fix width and alignment settings (#41139) * Jetpack button: fix width and alignment setting * changelog * Update styles of components using jetpack/button * Move align styles in mixin * Add align support for older themes * Add missing code after rebase * Fix unmerged conflict * Fix alignment for payment buttons --- .../changelog/fix-jetpack-button-styling | 4 ++ .../forms/src/blocks/contact-form/editor.scss | 7 ++- .../forms/src/contact-form/css/grunion.css | 25 ++++++++-- .../changelog/fix-jetpack-button-styling | 4 ++ .../extensions/blocks/button/button.php | 8 +--- .../jetpack/extensions/blocks/button/edit.js | 13 ++--- .../extensions/blocks/button/editor.scss | 48 +++++++++---------- .../extensions/blocks/button/view.scss | 10 +++- .../extensions/blocks/calendly/view.scss | 4 ++ .../extensions/blocks/eventbrite/editor.scss | 6 +++ .../extensions/blocks/eventbrite/style.scss | 7 +++ .../extensions/blocks/mailchimp/view.scss | 3 ++ .../blocks/premium-content/editor.scss | 2 + .../blocks/premium-content/view.scss | 2 + .../blocks/recurring-payments/editor.scss | 2 + .../blocks/recurring-payments/view.scss | 6 +++ .../extensions/shared/styles/align.scss | 20 ++++++++ 17 files changed, 123 insertions(+), 48 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-jetpack-button-styling create mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-button-styling create mode 100644 projects/plugins/jetpack/extensions/shared/styles/align.scss diff --git a/projects/packages/forms/changelog/fix-jetpack-button-styling b/projects/packages/forms/changelog/fix-jetpack-button-styling new file mode 100644 index 0000000000000..27fee2c68ac94 --- /dev/null +++ b/projects/packages/forms/changelog/fix-jetpack-button-styling @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix submit button width and alignment diff --git a/projects/packages/forms/src/blocks/contact-form/editor.scss b/projects/packages/forms/src/blocks/contact-form/editor.scss index 9a591c5793b2b..80deddb8c5246 100644 --- a/projects/packages/forms/src/blocks/contact-form/editor.scss +++ b/projects/packages/forms/src/blocks/contact-form/editor.scss @@ -50,7 +50,12 @@ .wp-block { flex: 0 0 100%; - margin: 0; + margin-top: 0; + margin-bottom: 0; + + &.wp-block-jetpack-button { + flex-basis: auto; + } &.jetpack-field__width-25, &.jetpack-field__width-50, diff --git a/projects/packages/forms/src/contact-form/css/grunion.css b/projects/packages/forms/src/contact-form/css/grunion.css index db3af87444d3e..d189111812244 100644 --- a/projects/packages/forms/src/contact-form/css/grunion.css +++ b/projects/packages/forms/src/contact-form/css/grunion.css @@ -230,7 +230,7 @@ gap: var(--wp--style--block-gap, 1.5rem); } -.wp-block-jetpack-contact-form > * { +.wp-block-jetpack-contact-form > *:not(.wp-block-jetpack-button) { flex: 0 0 100%; box-sizing: border-box; } @@ -241,8 +241,27 @@ padding-left: 0; } -.wp-block-jetpack-button.alignright button { - float: right; +.wp-block-jetpack-contact-form .wp-block-jetpack-button { + width: fit-content; +} + +.wp-block-jetpack-contact-form .wp-block-jetpack-button.aligncenter { + display: block; + + margin-left: auto; + margin-right: auto; +} + +.wp-block-jetpack-contact-form .wp-block-jetpack-button.alignleft { + display: block; + + margin-right: auto; +} + +.wp-block-jetpack-contact-form .wp-block-jetpack-button.alignright { + display: block; + + margin-left: auto; } .wp-block-jetpack-contact-form .grunion-field-wrap { diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-button-styling b/projects/plugins/jetpack/changelog/fix-jetpack-button-styling new file mode 100644 index 0000000000000..e20ecbb410d9c --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-jetpack-button-styling @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack button: fix width and alignment diff --git a/projects/plugins/jetpack/extensions/blocks/button/button.php b/projects/plugins/jetpack/extensions/blocks/button/button.php index cca7a513bc229..a7794531c91f1 100644 --- a/projects/plugins/jetpack/extensions/blocks/button/button.php +++ b/projects/plugins/jetpack/extensions/blocks/button/button.php @@ -166,7 +166,6 @@ function get_button_styles( $attributes ) { $has_named_gradient = array_key_exists( 'gradient', $attributes ); $has_custom_gradient = array_key_exists( 'customGradient', $attributes ); $has_border_radius = array_key_exists( 'borderRadius', $attributes ); - $has_width = array_key_exists( 'width', $attributes ); $has_font_family = array_key_exists( 'fontFamily', $attributes ); $has_typography_styles = array_key_exists( 'style', $attributes ) && array_key_exists( 'typography', $attributes['style'] ); $has_custom_font_size = $has_typography_styles && array_key_exists( 'fontSize', $attributes['style']['typography'] ); @@ -206,11 +205,6 @@ function get_button_styles( $attributes ) { $styles[] = sprintf( 'border-radius: %spx;', $attributes['borderRadius'] ); } - if ( $has_width ) { - $styles[] = sprintf( 'width: %s;', $attributes['width'] ); - $styles[] = 'max-width: 100%'; - } - return implode( ' ', $styles ); } @@ -226,7 +220,7 @@ function get_button_wrapper_styles( $attributes ) { $has_width = array_key_exists( 'width', $attributes ); if ( $has_width ) { - $styles[] = 'max-width: 100%'; + $styles[] = sprintf( 'width: %s;', $attributes['width'] ); } return implode( ' ', $styles ); diff --git a/projects/plugins/jetpack/extensions/blocks/button/edit.js b/projects/plugins/jetpack/extensions/blocks/button/edit.js index c1d57607b21c3..432fdb3522d0e 100644 --- a/projects/plugins/jetpack/extensions/blocks/button/edit.js +++ b/projects/plugins/jetpack/extensions/blocks/button/edit.js @@ -8,21 +8,16 @@ import { import { compose } from '@wordpress/compose'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; -import useWidth from '../../shared/use-width'; -import applyFallbackStyles from './apply-fallback-styles'; import { IS_GRADIENT_AVAILABLE } from './constants'; import ButtonControls from './controls'; import usePassthroughAttributes from './use-passthrough-attributes'; import './editor.scss'; export function ButtonEdit( props ) { - const { attributes, backgroundColor, className, clientId, context, setAttributes, textColor } = - props; + const { attributes, backgroundColor, className, clientId, setAttributes, textColor } = props; const { borderRadius, element, placeholder, text, width, fontSize } = attributes; - const isWidthSetOnParentBlock = 'jetpack/parentBlockWidth' in context; usePassthroughAttributes( { attributes, clientId, setAttributes } ); - useWidth( { attributes, disableEffects: isWidthSetOnParentBlock, setAttributes } ); /* eslint-disable react-hooks/rules-of-hooks */ const { @@ -39,6 +34,7 @@ export function ButtonEdit( props ) { const blockProps = useBlockProps( { className: clsx( 'wp-block-button', className ), + style: { width }, } ); const buttonClasses = clsx( 'wp-block-button__link', { @@ -48,7 +44,6 @@ export function ButtonEdit( props ) { [ textColor.class ]: textColor.class, [ gradientClass ]: gradientClass, 'no-border-radius': 0 === borderRadius, - 'has-custom-width': !! width, [ `has-${ fontSize }-font-size` ]: !! fontSize, 'has-custom-font-size': !! fontSize, } ); @@ -60,7 +55,6 @@ export function ButtonEdit( props ) { fontSize: attributes.style?.typography?.fontSize, color: textColor.color, borderRadius: borderRadius ? borderRadius + 'px' : undefined, - width, }; return ( @@ -90,6 +84,5 @@ export function ButtonEdit( props ) { } export default compose( - withColors( { backgroundColor: 'background-color' }, { textColor: 'color' } ), - applyFallbackStyles + withColors( { backgroundColor: 'background-color' }, { textColor: 'color' } ) )( ButtonEdit ); diff --git a/projects/plugins/jetpack/extensions/blocks/button/editor.scss b/projects/plugins/jetpack/extensions/blocks/button/editor.scss index aa0173e0a0635..124d209d529b0 100644 --- a/projects/plugins/jetpack/extensions/blocks/button/editor.scss +++ b/projects/plugins/jetpack/extensions/blocks/button/editor.scss @@ -1,6 +1,11 @@ -.wp-block[data-type='jetpack/button'] { - display: inline-block; - margin: 0 auto; +@import "../../shared/styles/align"; + +// This level of CSS specificity is required to overwrite existing styles +.editor-styles-wrapper .block-editor-block-list__block.wp-block-jetpack-button { + @include align-block; + max-width: 100%; + width: fit-content; + margin: 0; &.is-style-outline > .wp-block-button__link { background-color: transparent; @@ -9,34 +14,25 @@ } } -.wp-block[data-align="center"] { - .wp-block-jetpack-button { - display: flex; - justify-content: center; - } +// Support align feature for older themes +.wp-block[data-align]:has(> .wp-block-jetpack-button) { + margin-left: 0; + margin-right: 0; } -.wp-block[data-align="right"] { - .wp-block-jetpack-button { - display: flex; - justify-content: flex-end; - } +.wp-block[data-align] > .wp-block-jetpack-button { + display: block; } -div[data-type="jetpack/button"]:not([data-align='left']):not([data-align='right']) { - width: 100%; +.wp-block[data-align="center"] > .wp-block-jetpack-button { + margin-left: auto; + margin-right: auto; } -div[data-type="jetpack/button"][data-align] { - z-index: 1; - width: 100%; - - .wp-block > div { - max-width: 100%; - } +.wp-block[data-align="left"] > .wp-block-jetpack-button { + margin-right: auto; } -.wp-block-jetpack-button, -.wp-block-button__link.has-custom-width { - max-width: 100%; -} +.wp-block[data-align="right"] > .wp-block-jetpack-button { + margin-left: auto; +} \ No newline at end of file diff --git a/projects/plugins/jetpack/extensions/blocks/button/view.scss b/projects/plugins/jetpack/extensions/blocks/button/view.scss index 7db0bedb6403d..41394986df71f 100644 --- a/projects/plugins/jetpack/extensions/blocks/button/view.scss +++ b/projects/plugins/jetpack/extensions/blocks/button/view.scss @@ -1,14 +1,22 @@ +@import "../../shared/styles/align"; + .amp-wp-article .wp-block-jetpack-button { color: #ffffff; } .wp-block-jetpack-button { + @include align-block; + max-width: 100%; + width: fit-content; + margin: 0; + &.is-style-outline > .wp-block-button__link { background-color: transparent; border: solid 1px currentColor; color: currentColor; } + &:not(.is-style-outline) button { border: none; } -} +} \ No newline at end of file diff --git a/projects/plugins/jetpack/extensions/blocks/calendly/view.scss b/projects/plugins/jetpack/extensions/blocks/calendly/view.scss index c5218066cbc18..b268084ec0a05 100644 --- a/projects/plugins/jetpack/extensions/blocks/calendly/view.scss +++ b/projects/plugins/jetpack/extensions/blocks/calendly/view.scss @@ -1,3 +1,5 @@ +@import "../../shared/styles/align"; + .admin-bar .calendly-overlay .calendly-popup-close { top: 47px; } @@ -16,5 +18,7 @@ } .wp-block-jetpack-calendly .wp-block-jetpack-button { + @include align-block; + color: #ffffff; } diff --git a/projects/plugins/jetpack/extensions/blocks/eventbrite/editor.scss b/projects/plugins/jetpack/extensions/blocks/eventbrite/editor.scss index de0b32985551f..85d958d7e8642 100644 --- a/projects/plugins/jetpack/extensions/blocks/eventbrite/editor.scss +++ b/projects/plugins/jetpack/extensions/blocks/eventbrite/editor.scss @@ -1,6 +1,12 @@ +@import '../../shared/styles/align'; + .wp-block-jetpack-eventbrite { position: relative; + .wp-block-jetpack-button { + @include align-block; + } + .components-placeholder__learn-more { margin-top: 1em; } diff --git a/projects/plugins/jetpack/extensions/blocks/eventbrite/style.scss b/projects/plugins/jetpack/extensions/blocks/eventbrite/style.scss index baf34bb5e25e8..778444a1021ac 100644 --- a/projects/plugins/jetpack/extensions/blocks/eventbrite/style.scss +++ b/projects/plugins/jetpack/extensions/blocks/eventbrite/style.scss @@ -1,3 +1,4 @@ +@import "../../shared/styles/align"; // Hide the link if an iframe got appended to the container. .eventbrite__direct-link:not(:only-child) { display: none; @@ -65,3 +66,9 @@ height: 40px; /* @todo More styling could be copied from Eventbrite */ } + +.wp-block-jetpack-eventbrite { + .wp-block-jetpack-button { + @include align-block; + } +} \ No newline at end of file diff --git a/projects/plugins/jetpack/extensions/blocks/mailchimp/view.scss b/projects/plugins/jetpack/extensions/blocks/mailchimp/view.scss index b99d84fdb8fa2..b3af767adb0fc 100644 --- a/projects/plugins/jetpack/extensions/blocks/mailchimp/view.scss +++ b/projects/plugins/jetpack/extensions/blocks/mailchimp/view.scss @@ -1,5 +1,6 @@ @import '@automattic/jetpack-base-styles/gutenberg-base-styles'; @import '../../shared/styles/jetpack-variables.scss'; +@import "../../shared/styles/align"; .wp-block-jetpack-mailchimp { &.is-processing { @@ -9,6 +10,8 @@ } .wp-block-jetpack-button, p { + @include align-block; + margin-bottom: 1em; } diff --git a/projects/plugins/jetpack/extensions/blocks/premium-content/editor.scss b/projects/plugins/jetpack/extensions/blocks/premium-content/editor.scss index 6dccbac43bfb9..af1b73dc8df85 100644 --- a/projects/plugins/jetpack/extensions/blocks/premium-content/editor.scss +++ b/projects/plugins/jetpack/extensions/blocks/premium-content/editor.scss @@ -49,6 +49,8 @@ /* Subscribe/Login buttons */ .wp-block-buttons .wp-block[data-type='jetpack/recurring-payments'] { + --jetpack-payment-buttons-gap: 0.5em; + display: inline-block; margin: 0 0.5em 0 0; width: auto; diff --git a/projects/plugins/jetpack/extensions/blocks/premium-content/view.scss b/projects/plugins/jetpack/extensions/blocks/premium-content/view.scss index d014f58bd8657..ce430df8f19eb 100644 --- a/projects/plugins/jetpack/extensions/blocks/premium-content/view.scss +++ b/projects/plugins/jetpack/extensions/blocks/premium-content/view.scss @@ -14,6 +14,8 @@ /** Subscribe button **/ .wp-block-premium-content-logged-out-view .wp-block-jetpack-recurring-payments { + --jetpack-payment-buttons-gap: 0.5em; + display: inline-block; margin-inline-end: 0.5em; } diff --git a/projects/plugins/jetpack/extensions/blocks/recurring-payments/editor.scss b/projects/plugins/jetpack/extensions/blocks/recurring-payments/editor.scss index 0871222b61e46..d33e4b30ac743 100644 --- a/projects/plugins/jetpack/extensions/blocks/recurring-payments/editor.scss +++ b/projects/plugins/jetpack/extensions/blocks/recurring-payments/editor.scss @@ -115,7 +115,9 @@ display: block; } + .wp-block-jetpack-button, .wp-block[data-type='jetpack/button'] { + width: 100%; margin-top: 0; margin-bottom: 0; } diff --git a/projects/plugins/jetpack/extensions/blocks/recurring-payments/view.scss b/projects/plugins/jetpack/extensions/blocks/recurring-payments/view.scss index fb7c975e845ed..2f72936b8409b 100644 --- a/projects/plugins/jetpack/extensions/blocks/recurring-payments/view.scss +++ b/projects/plugins/jetpack/extensions/blocks/recurring-payments/view.scss @@ -3,3 +3,9 @@ .wp-block-jetpack-recurring-payments.aligncenter .wp-block-jetpack-button { text-align: center; } + +.wp-block-jetpack-recurring-payments { + .wp-block-jetpack-button { + width: 100%; + } +} diff --git a/projects/plugins/jetpack/extensions/shared/styles/align.scss b/projects/plugins/jetpack/extensions/shared/styles/align.scss new file mode 100644 index 0000000000000..b75c0fcf29b5f --- /dev/null +++ b/projects/plugins/jetpack/extensions/shared/styles/align.scss @@ -0,0 +1,20 @@ +@mixin align-block { + &.aligncenter, + &.alignleft, + &.alignright { + display: block; + } + + &.aligncenter { + margin-left: auto; + margin-right: auto; + } + + &.alignleft { + margin-right: auto; + } + + &.alignright { + margin-left: auto; + } +} \ No newline at end of file From 7f489d0fa86b99b3939b7b9b8d5fc4c0b7391591 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Wed, 5 Feb 2025 08:38:27 +1300 Subject: [PATCH 356/420] Stats: Fix stats role checks (#41530) * validate roles with registered roles * changelog * require file for get_editable_roles --- .../jetpack/_inc/lib/class.core-rest-api-endpoints.php | 8 ++++++-- projects/plugins/jetpack/changelog/fix-stats-role-checks | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-stats-role-checks diff --git a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php index efcad64729a94..cd88ff556ce84 100644 --- a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php @@ -3398,14 +3398,18 @@ public static function validate_verification_service( $value, $request, $param ) * @return bool|WP_Error */ public static function validate_stats_roles( $value, $request, $param ) { - if ( ! empty( $value ) && ! array_intersect( self::$stats_roles, $value ) ) { + if ( ! function_exists( 'get_editable_roles' ) ) { + require_once ABSPATH . 'wp-admin/includes/user.php'; + } + $editable_roles = array_keys( get_editable_roles() ); + if ( ! empty( $value ) && ! array_intersect( $editable_roles, $value ) ) { return new WP_Error( 'invalid_param', sprintf( /* Translators: first variable is the name of a parameter passed to endpoint holding the role that will be checked, the second is a list of roles allowed to see stats. The parameter is checked against this list. */ esc_html__( '%1$s must be %2$s.', 'jetpack' ), $param, - implode( ', ', self::$stats_roles ) + implode( ', ', $editable_roles ) ) ); } diff --git a/projects/plugins/jetpack/changelog/fix-stats-role-checks b/projects/plugins/jetpack/changelog/fix-stats-role-checks new file mode 100644 index 0000000000000..442b35073b970 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-stats-role-checks @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Fix count roles not able to be updated From 35db567f98a32fb54d5c276bdb1719bd62dcf76b Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:13:21 -0700 Subject: [PATCH 357/420] Backport jetpack 14.3 changes (#41553) * add default value for prompt on error response (#41551) * Bump version to stable * Update changelog * Squash changelog * Update readme --------- Co-authored-by: Christian Gastrell --- projects/plugins/jetpack/CHANGELOG.md | 108 +++++++----------- ...atured-image-free-ver-range-error-handling | 4 - projects/plugins/jetpack/composer.json | 2 +- projects/plugins/jetpack/jetpack.php | 4 +- projects/plugins/jetpack/readme.txt | 2 +- 5 files changed, 48 insertions(+), 72 deletions(-) delete mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-ai-featured-image-free-ver-range-error-handling diff --git a/projects/plugins/jetpack/CHANGELOG.md b/projects/plugins/jetpack/CHANGELOG.md index 79225670449c8..1104dd4756ca6 100644 --- a/projects/plugins/jetpack/CHANGELOG.md +++ b/projects/plugins/jetpack/CHANGELOG.md @@ -2,111 +2,91 @@ ### This is a list detailing changes for all Jetpack releases. -## 14.3-beta - 2025-02-03 +## 14.3 - 2025-02-04 ### Enhancements - Blocks: Improve performance. [#39734] -- Social: Post character limits are now dynamic based on selected connections. [#41429] +- Forms: Add Checkbox and Consent field enter action to create a new block. [#41297] +- Forms: Allow HTML block within forms. [#41040] +- Show Infinite Scroll options in Simple Classic. [#41144] - Social: Enable Social post UI for WordPress.com sites. [#41219] +- Social: Post character limits are now dynamic based on selected connections. [#41429] ### Improved compatibility +- Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. [#40782] - Open Graph Meta Tags: Do not display Jetpack's tags when the SEOPress plugin is active. [#41331] - Social: Remove "Your post" section from previews in favor of newer Social Post UI. [#41329] ### Bug fixes +- Authors widget: Fix saving of unchecked "Display all authors" checkbox in the legacy widget editor. [#40878] - Copy Post: Ensure Copy option is still available on all CPTs after quick edit in post list. [#41339] +- Fix: Newsletter toggle in editor sidebar has a visually broken active state. [#41036] - Forms: Fix datepicker appearance on dark themes. [#41342] +- Forms: Fix dropdown icon style. [#41074] - Forms: Fix field spacing and widths. [#41415] - Forms: Fix permanent deletion of form reponses via quicklinks. [#41321] - Forms: Hide empty radio fields. [#41379] - Forms: Keep content as-is when switching Feedback status between spam and publish. [#41359] -- Forms: Prevent error in block placeholder when the Forms module is disabled. [#41382] - -### Other changes -- Code: Remove extra params on function calls. [#41263] -- Forms: Rename contact form module to "Forms". [#41384] -- Post List: Add a Copy Link Quick Action. [#41305] -- SEO Assistant: Adjust step flow in wizard. [#41268] -- SEO Assistant: Implement completion step and review copy edits. [#41469] -- SEO Assistant: Improve assistant flow by letting steps depend on previous steps. [#41341] -- SEO Assistant: Tweak design CSS. [#41506] [#41473] -- Subscriptions block: Fix button width when not on a new line. [#41156] -- Sync: Full Sync comments now send dynamic chunks if chunk size default is too big. [#41350] -- Testing: Add manual testing instructions. [#41364] -- Theme compat: Wrap relevant functions in a `function_exists` check to prevent collisions with Classic Theme Helper package. [#41394] -- Updated package dependencies. [#41286] -- Update text copies based on whether the site is public. [#41387] -- Update settings endpoint to return the updated toggle state in the success response. [#41461] - -## 14.3-a.5 - 2025-01-27 -### Enhancements -- Forms: Add Checkbox and Consent field enter action to create a new block. [#41297] - -### Bug fixes - Forms: Make the icons show up as expected in the style editor. [#41314] +- Forms: Prevent error in block placeholder when the Forms module is disabled. [#41382] +- Pages and Posts: Fix the layout on mobile when details are open. [#40872] +- Photon: Fix double encoding image urls. [#40886] +- Sharing: Fix the location of the sharing dialog so it is not always the first sharing element on the page. [#41002] - Sitemaps: Ensure a valid news sitemap is present even if no posts are eligible. [#40893] - Social: Fix profile links for LinkedIn connections. [#40873] - Social: Fix Publicize error in the editor due to malformed connections data. [#40679] +- Social: Fix wordpress.com login error when connecting Social accounts. [#41149] +- Stats: Fix saving of custom roles settings. [#40853] +- Testimonials: Fix shortcode-related bug. [#40896] +- Tiled Gallery block: Ensure icons are visible when selecting image in editor. [#40779] - VideoPress: Fix issue with VideoPress block with zero height and width. [#41319] ### Other changes +- Code: Remove extra params on function calls. [#41263] +- Code: Use function-style exit() and die() with a default status code of 0. [#41167] - Comments API: Add wpcom_id and wpcom_login fields to comment author responses when requested via author_wpcom_data parameter. [#41254] +- Embeds: Fix the Descript block variation icon SVG path. [#41017] - Forms: Fix default editor stying for textarea. [#41229] - Forms: Remove wrapping
      element from form block. [#41274] -- General: Fix the rendering of Jetpack Google Fonts font faces for classic themes. [#41190] -- General: Deprecate Jetpack geo location module. [#41193] -- Jetpack AI: Use the PluginDocumentSettingPanel slotfill for compatibility with site and post editor in the Excerpt panel. [#41251] -- Jetpack button: Implement outline style. [#41194] -- Related Posts: Revert "Hide settings in block themes." [#41203] - -## 14.3-a.3 - 2025-01-20 -### Enhancements -- Forms: Allow HTML block within forms. [#41040] -- Show Infinite Scroll options in Simple Classic. [#41144] - -### Bug fixes -- Fix: Newsletter toggle in editor sidebar has a visually broken active state. [#41036] -- Forms: Fix dropdown icon style. [#41074] -- Photon: Fix double encoding image urls. [#40886] -- Sharing: Fix the location of the sharing dialog so it is not always the first sharing element on the page. [#41002] -- Social: Fix wordpress.com login error when connecting Social accounts. [#41149] - -### Other changes -- Code: Use function-style exit() and die() with a default status code of 0. [#41167] -- Embeds: Fix the Descript block variation icon SVG path. [#41017] +- Forms: Rename contact form module to "Forms". [#41384] - Full Sync: Send context on initial sync action. [#40930] +- General: Deprecate Jetpack geo location module. [#41193] +- General: Fix the rendering of Jetpack Google Fonts font faces for classic themes. [#41190] - Hide related posts options for block themes. [#41075] - Jetpack AI: Add message that displays when a post has no content. [#41161] - Jetpack AI: Add PoC for SEO assistant (hardcoded and no actionables yet). [#40802] - Jetpack AI: Buttons now have 100% width and are 40px tall. [#41161] - Jetpack AI: Changed color of some text. [#41161] +- Jetpack AI: Enable ratings feedback thumbs for all. [#40772] +- Jetpack AI: Prevent error when generating a featured image while quota is exceeded. [#41551] - Jetpack AI: Updated text and spacing in various places. [#41161] +- Jetpack AI: Use the PluginDocumentSettingPanel slotfill for compatibility with site and post editor in the Excerpt panel. [#41251] - Jetpack AI: Write Brief checkboxes are hidden by toggle now. [#41161] +- Jetpack button: Implement outline style. [#41194] - Move WPCOM_REST_API_Proxy_Request trait to the connection package. [#41023] -- Social Image Generator: Change description for toggle. [#40991] -- Update composer.lock files. [#41066] -- Updated package dependencies. [#40980] [#41099] -- Pexels: Update title of option to be sentence case. [#41024] - -## 14.3-a.1 - 2025-01-13 -### Improved compatibility -- Nova Restaurant: ensure that the custom post type is now loaded via the Classic Theme Helper package. [#40782] - -### Bug fixes -- Authors widget: Fix saving of unchecked "Display all authors" checkbox in the legacy widget editor. [#40878] -- Stats: Fix saving of custom roles settings. [#40853] -- Pages and Posts: Fix the layout on mobile when details are open. [#40872] -- Testimonials: Fix shortcode-related bug. [#40896] -- Tiled Gallery block: Ensure icons are visible when selecting image in editor. [#40779] - -### Other changes -- Jetpack AI: Enable ratings feedback thumbs for all. [#40772] - Newsletter: Update category settings to clarify that one or more categories must be selected to allow people to subscribe. [#40727] - Notifications: Support three-letter language code translations. [#40973] +- Pexels: Update title of option to be sentence case. [#41024] +- Post List: Add a Copy Link Quick Action. [#41305] - Post list: Ensure copy quick link is added after quick edit. [#40889] +- Related Posts: Revert "Hide settings in block themes." [#41203] +- SEO Assistant: Adjust step flow in wizard. [#41268] +- SEO Assistant: Implement completion step and review copy edits. [#41469] +- SEO Assistant: Improve assistant flow by letting steps depend on previous steps. [#41341] +- SEO Assistant: Tweak design CSS. [#41506] [#41473] +- Social Image Generator: Change description for toggle. [#40991] - Stats: Load the adminbar stats graph lazily. [#40865] - Stats: Remove legacy Stats widget loader. [#40839] +- Subscriptions block: Fix button width when not on a new line. [#41156] +- Sync: Full Sync comments now send dynamic chunks if chunk size default is too big. [#41350] +- Testing: Add manual testing instructions. [#41364] +- Theme compat: Wrap relevant functions in a `function_exists` check to prevent collisions with Classic Theme Helper package. [#41394] +- Update composer.lock files. [#41066] - Updated dependencies. [#40773] +- Updated package dependencies. [#40980] [#41099] +- Updated package dependencies. [#41286] +- Update settings endpoint to return the updated toggle state in the success response. [#41461] - Update social-logos import from default to named. [#40816] +- Update text copies based on whether the site is public. [#41387] ## 14.2.1 - 2025-01-09 ### Bug fixes diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-ai-featured-image-free-ver-range-error-handling b/projects/plugins/jetpack/changelog/fix-jetpack-ai-featured-image-free-ver-range-error-handling deleted file mode 100644 index ab81fba40ad2e..0000000000000 --- a/projects/plugins/jetpack/changelog/fix-jetpack-ai-featured-image-free-ver-range-error-handling +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: other - -Jetpack AI: featured image will try to set a null prompt when quota is exceeded. This patch sets a default value (empty string) on those cases diff --git a/projects/plugins/jetpack/composer.json b/projects/plugins/jetpack/composer.json index 74abf60051d45..a72aea147920f 100644 --- a/projects/plugins/jetpack/composer.json +++ b/projects/plugins/jetpack/composer.json @@ -106,7 +106,7 @@ "platform": { "ext-intl": "0.0.0" }, - "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3_beta", + "autoloader-suffix": "f11009ded9fc4592b6a05b61ce272b3c_jetpackⓥ14_3", "allow-plugins": { "automattic/jetpack-autoloader": true, "automattic/jetpack-composer-plugin": true diff --git a/projects/plugins/jetpack/jetpack.php b/projects/plugins/jetpack/jetpack.php index ceabc571e27eb..eb60efbbef4a0 100644 --- a/projects/plugins/jetpack/jetpack.php +++ b/projects/plugins/jetpack/jetpack.php @@ -4,7 +4,7 @@ * Plugin URI: https://jetpack.com * Description: Security, performance, and marketing tools made by WordPress experts. Jetpack keeps your site protected so you can focus on more important things. * Author: Automattic - * Version: 14.3-beta + * Version: 14.3 * Author URI: https://jetpack.com * License: GPL2+ * Text Domain: jetpack @@ -34,7 +34,7 @@ define( 'JETPACK__MINIMUM_WP_VERSION', '6.6' ); define( 'JETPACK__MINIMUM_PHP_VERSION', '7.2' ); -define( 'JETPACK__VERSION', '14.3-beta' ); +define( 'JETPACK__VERSION', '14.3' ); /** * Constant used to fetch the connection owner token diff --git a/projects/plugins/jetpack/readme.txt b/projects/plugins/jetpack/readme.txt index 44b31f173ff13..5e24533bffd79 100644 --- a/projects/plugins/jetpack/readme.txt +++ b/projects/plugins/jetpack/readme.txt @@ -326,7 +326,7 @@ Jetpack Backup can do a full website migration to a new host, migrate theme file == Changelog == -### 14.3-beta - 2025-02-03 +### 14.3 - 2025-02-04 #### Enhancements - Blocks: Improve performance. - Forms: Add Checkbox and Consent field enter action to create a new block. From 753f7bba982d12879ca164adbf8dc4b6c3af5676 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Wed, 5 Feb 2025 09:40:08 +1300 Subject: [PATCH 358/420] charts lib 0.8.0 (#41558) --- projects/js-packages/charts/CHANGELOG.md | 13 +++++++++++++ .../add-chart-library-improve-overall-test-coverage | 4 ---- .../add-chart-library-test-semi-circle-chart | 4 ---- .../charts/changelog/renovate-wordpress-monorepo | 4 ---- .../update-chart-library-more-test-coverage | 4 ---- .../update-chart-library-toggle-line-smoothing | 4 ---- .../charts/changelog/update-charts-add-donut-story | 4 ---- .../charts/changelog/update-type-and-style-fixes | 4 ---- projects/js-packages/charts/package.json | 2 +- .../i18n-loader-webpack-plugin/CHANGELOG.md | 5 +++++ .../changelog/renovate-wordpress-monorepo | 4 ---- .../i18n-loader-webpack-plugin/package.json | 2 +- projects/js-packages/webpack-config/CHANGELOG.md | 4 ++++ .../changelog/renovate-wordpress-monorepo | 4 ---- projects/js-packages/webpack-config/package.json | 2 +- 15 files changed, 25 insertions(+), 39 deletions(-) delete mode 100644 projects/js-packages/charts/changelog/add-chart-library-improve-overall-test-coverage delete mode 100644 projects/js-packages/charts/changelog/add-chart-library-test-semi-circle-chart delete mode 100644 projects/js-packages/charts/changelog/renovate-wordpress-monorepo delete mode 100644 projects/js-packages/charts/changelog/update-chart-library-more-test-coverage delete mode 100644 projects/js-packages/charts/changelog/update-chart-library-toggle-line-smoothing delete mode 100644 projects/js-packages/charts/changelog/update-charts-add-donut-story delete mode 100644 projects/js-packages/charts/changelog/update-type-and-style-fixes delete mode 100644 projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo delete mode 100644 projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo diff --git a/projects/js-packages/charts/CHANGELOG.md b/projects/js-packages/charts/CHANGELOG.md index 5da619c7a9e4e..20a11a56def7f 100644 --- a/projects/js-packages/charts/CHANGELOG.md +++ b/projects/js-packages/charts/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.8.0] - 2025-02-04 +### Added +- Charts: add additional testing for library [#41449] +- Charts: add line smoothing toggle on line chart [#41495] +- Charts: adds donut pie chart story [#41496] +- Charts: adds tests for mouse-handler hook, responsive HOC, and grid control [#41455] +- Charts: adds tests for semi circle chart [#41416] + +### Changed +- Small type and style fixes [#41523] +- Updated package dependencies. [#41491] + ## [0.7.1] - 2025-02-04 ### Changed - Internal updates. @@ -93,6 +105,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed lints following ESLint rule changes for TS [#40584] - Fixing a bug in Chart storybook data. [#40640] +[0.8.0]: https://github.com/Automattic/charts/compare/v0.7.1...v0.8.0 [0.7.1]: https://github.com/Automattic/charts/compare/v0.7.0...v0.7.1 [0.7.0]: https://github.com/Automattic/charts/compare/v0.6.0...v0.7.0 [0.6.0]: https://github.com/Automattic/charts/compare/v0.5.0...v0.6.0 diff --git a/projects/js-packages/charts/changelog/add-chart-library-improve-overall-test-coverage b/projects/js-packages/charts/changelog/add-chart-library-improve-overall-test-coverage deleted file mode 100644 index 527305221d8ee..0000000000000 --- a/projects/js-packages/charts/changelog/add-chart-library-improve-overall-test-coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Charts: add additional testing for library diff --git a/projects/js-packages/charts/changelog/add-chart-library-test-semi-circle-chart b/projects/js-packages/charts/changelog/add-chart-library-test-semi-circle-chart deleted file mode 100644 index 05c4e04369613..0000000000000 --- a/projects/js-packages/charts/changelog/add-chart-library-test-semi-circle-chart +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Charts: adds tests for semi circle chart diff --git a/projects/js-packages/charts/changelog/renovate-wordpress-monorepo b/projects/js-packages/charts/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/js-packages/charts/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/js-packages/charts/changelog/update-chart-library-more-test-coverage b/projects/js-packages/charts/changelog/update-chart-library-more-test-coverage deleted file mode 100644 index 77e39904ec2e8..0000000000000 --- a/projects/js-packages/charts/changelog/update-chart-library-more-test-coverage +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Charts: adds tests for mouse-handler hook, responsive HOC, and grid control diff --git a/projects/js-packages/charts/changelog/update-chart-library-toggle-line-smoothing b/projects/js-packages/charts/changelog/update-chart-library-toggle-line-smoothing deleted file mode 100644 index 3b33e34f8bdb7..0000000000000 --- a/projects/js-packages/charts/changelog/update-chart-library-toggle-line-smoothing +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Charts: add line smoothing toggle on line chart diff --git a/projects/js-packages/charts/changelog/update-charts-add-donut-story b/projects/js-packages/charts/changelog/update-charts-add-donut-story deleted file mode 100644 index 2109b1d87d066..0000000000000 --- a/projects/js-packages/charts/changelog/update-charts-add-donut-story +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Charts: adds donut pie chart story diff --git a/projects/js-packages/charts/changelog/update-type-and-style-fixes b/projects/js-packages/charts/changelog/update-type-and-style-fixes deleted file mode 100644 index 2560b84ccf150..0000000000000 --- a/projects/js-packages/charts/changelog/update-type-and-style-fixes +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Small type and style fixes diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 23a4e859a6d47..084487914fa9f 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/charts", - "version": "0.7.1", + "version": "0.8.0", "description": "Display charts within Automattic products.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/charts/#readme", "bugs": { diff --git a/projects/js-packages/i18n-loader-webpack-plugin/CHANGELOG.md b/projects/js-packages/i18n-loader-webpack-plugin/CHANGELOG.md index 606ad59b3fd7a..2a3c86745f16f 100644 --- a/projects/js-packages/i18n-loader-webpack-plugin/CHANGELOG.md +++ b/projects/js-packages/i18n-loader-webpack-plugin/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.0.70] - 2025-02-04 +### Changed +- Updated package dependencies. [#41491] + ## [2.0.69] - 2025-01-31 ### Changed - Updated package dependencies. [#41286] @@ -305,6 +309,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Initial release. +[2.0.70]: https://github.com/Automattic/i18n-loader-webpack-plugin/compare/v2.0.69...v2.0.70 [2.0.69]: https://github.com/Automattic/i18n-loader-webpack-plugin/compare/v2.0.68...v2.0.69 [2.0.68]: https://github.com/Automattic/i18n-loader-webpack-plugin/compare/v2.0.67...v2.0.68 [2.0.67]: https://github.com/Automattic/i18n-loader-webpack-plugin/compare/v2.0.66...v2.0.67 diff --git a/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo b/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/js-packages/i18n-loader-webpack-plugin/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/js-packages/i18n-loader-webpack-plugin/package.json b/projects/js-packages/i18n-loader-webpack-plugin/package.json index fdb0569e1d49a..61a94f2d5670d 100644 --- a/projects/js-packages/i18n-loader-webpack-plugin/package.json +++ b/projects/js-packages/i18n-loader-webpack-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/i18n-loader-webpack-plugin", - "version": "2.0.69", + "version": "2.0.70", "description": "A Webpack plugin to load WordPress i18n when Webpack lazy-loads a bundle.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/i18n-loader-webpack-plugin/#readme", "bugs": { diff --git a/projects/js-packages/webpack-config/CHANGELOG.md b/projects/js-packages/webpack-config/CHANGELOG.md index 0d8fc86a4205a..74e1e39278a30 100644 --- a/projects/js-packages/webpack-config/CHANGELOG.md +++ b/projects/js-packages/webpack-config/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 3.6.2 - 2025-02-04 +### Changed +- Updated package dependencies. [#41491] + ## 3.6.1 - 2025-01-31 ### Changed - Updated package dependencies. [#41286] diff --git a/projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo b/projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo deleted file mode 100644 index c47cb18e82997..0000000000000 --- a/projects/js-packages/webpack-config/changelog/renovate-wordpress-monorepo +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Updated package dependencies. diff --git a/projects/js-packages/webpack-config/package.json b/projects/js-packages/webpack-config/package.json index 92e28ab9e3f6f..2083d1d05bae7 100644 --- a/projects/js-packages/webpack-config/package.json +++ b/projects/js-packages/webpack-config/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-webpack-config", - "version": "3.6.1", + "version": "3.6.2", "description": "Library of pieces for webpack config in Jetpack projects.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/webpack-config/#readme", "bugs": { From 3b33cdbc9a76225cf5763b58dd7b8c72c4552039 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Wed, 5 Feb 2025 10:44:20 +1300 Subject: [PATCH 359/420] Charts: Fix types exports (#41562) * fix exports * changelog * no need to export types * export themes --- .../js-packages/charts/changelog/fix-fix-types-file-charts | 4 ++++ projects/js-packages/charts/index.ts | 5 +---- projects/js-packages/charts/package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 projects/js-packages/charts/changelog/fix-fix-types-file-charts diff --git a/projects/js-packages/charts/changelog/fix-fix-types-file-charts b/projects/js-packages/charts/changelog/fix-fix-types-file-charts new file mode 100644 index 0000000000000..afa543fb044c6 --- /dev/null +++ b/projects/js-packages/charts/changelog/fix-fix-types-file-charts @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Charts: fixed type exports diff --git a/projects/js-packages/charts/index.ts b/projects/js-packages/charts/index.ts index 95eee9d57711a..668f7c2cb2491 100644 --- a/projects/js-packages/charts/index.ts +++ b/projects/js-packages/charts/index.ts @@ -10,10 +10,7 @@ export { Legend } from './src/components/legend'; // Providers export { ThemeProvider } from './src/providers/theme'; +export { defaultTheme, jetpackTheme, wooTheme } from './src/providers/theme/themes'; // Hooks export { default as useChartMouseHandler } from './src/hooks/use-chart-mouse-handler'; - -// Types -export type * from './src/types'; -export type { BaseTooltipProps } from './src/components/tooltip'; diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index 084487914fa9f..abd97bc1c22f3 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -28,7 +28,7 @@ }, "main": "./dist/cjs/index.js", "module": "./dist/mjs/index.js", - "types": "./dist/types/index.d.ts", + "types": "./dist/index.d.ts", "sideEffects": [ "*.css", "*.scss" From b83c45c6a1fa82a1f4d74d807024cb20bcb717a8 Mon Sep 17 00:00:00 2001 From: Jasper Kang Date: Wed, 5 Feb 2025 11:12:31 +1300 Subject: [PATCH 360/420] release charts 0.8.1 (#41563) --- projects/js-packages/charts/CHANGELOG.md | 5 +++++ .../js-packages/charts/changelog/fix-fix-types-file-charts | 4 ---- projects/js-packages/charts/package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 projects/js-packages/charts/changelog/fix-fix-types-file-charts diff --git a/projects/js-packages/charts/CHANGELOG.md b/projects/js-packages/charts/CHANGELOG.md index 20a11a56def7f..6143fa2520492 100644 --- a/projects/js-packages/charts/CHANGELOG.md +++ b/projects/js-packages/charts/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.8.1] - 2025-02-04 +### Fixed +- Charts: fixed type exports [#41562] + ## [0.8.0] - 2025-02-04 ### Added - Charts: add additional testing for library [#41449] @@ -105,6 +109,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed lints following ESLint rule changes for TS [#40584] - Fixing a bug in Chart storybook data. [#40640] +[0.8.1]: https://github.com/Automattic/charts/compare/v0.8.0...v0.8.1 [0.8.0]: https://github.com/Automattic/charts/compare/v0.7.1...v0.8.0 [0.7.1]: https://github.com/Automattic/charts/compare/v0.7.0...v0.7.1 [0.7.0]: https://github.com/Automattic/charts/compare/v0.6.0...v0.7.0 diff --git a/projects/js-packages/charts/changelog/fix-fix-types-file-charts b/projects/js-packages/charts/changelog/fix-fix-types-file-charts deleted file mode 100644 index afa543fb044c6..0000000000000 --- a/projects/js-packages/charts/changelog/fix-fix-types-file-charts +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Charts: fixed type exports diff --git a/projects/js-packages/charts/package.json b/projects/js-packages/charts/package.json index abd97bc1c22f3..09ecb9cae3ca7 100644 --- a/projects/js-packages/charts/package.json +++ b/projects/js-packages/charts/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/charts", - "version": "0.8.0", + "version": "0.8.1", "description": "Display charts within Automattic products.", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/js-packages/charts/#readme", "bugs": { From 6c87a8b7714d1e37332319ed628548ae072b9968 Mon Sep 17 00:00:00 2001 From: Piotr Stankowski <6437642+trakos@users.noreply.github.com> Date: Tue, 4 Feb 2025 23:36:12 +0100 Subject: [PATCH 361/420] Jetpack Sync: fix extracting UTF-8 characters from image alt text (#41451) --- .../fix-media-extractor-image-alt-text-encoding | 4 ++++ .../plugins/jetpack/class.jetpack-post-images.php | 10 +++++++++- .../php/media/test-class.jetpack-post-images.php | 13 +++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/fix-media-extractor-image-alt-text-encoding diff --git a/projects/plugins/jetpack/changelog/fix-media-extractor-image-alt-text-encoding b/projects/plugins/jetpack/changelog/fix-media-extractor-image-alt-text-encoding new file mode 100644 index 0000000000000..97971a435381e --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-media-extractor-image-alt-text-encoding @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack Sync: Fixed extracting UTF-8 characters from image alt-text diff --git a/projects/plugins/jetpack/class.jetpack-post-images.php b/projects/plugins/jetpack/class.jetpack-post-images.php index 3a51a876eae70..f34d62dbc8b5f 100644 --- a/projects/plugins/jetpack/class.jetpack-post-images.php +++ b/projects/plugins/jetpack/class.jetpack-post-images.php @@ -495,10 +495,18 @@ public static function from_html( $html_or_id, $width = 200, $height = 200 ) { // Let's grab all image tags from the HTML. $dom_doc = new DOMDocument(); + // DOMDocument defaults to ISO-8859 because we're loading only the post content, without head tag. + // Fix: Enforce encoding with meta tag. + $charset = get_option( 'blog_charset' ); + if ( empty( $charset ) || ! preg_match( '/^[a-zA-Z0-9_-]+$/', $charset ) ) { + $charset = 'UTF-8'; + } + $html_prefix = sprintf( '', esc_attr( $charset ) ); + // The @ is not enough to suppress errors when dealing with libxml, // we have to tell it directly how we want to handle errors. libxml_use_internal_errors( true ); - @$dom_doc->loadHTML( $html_info['html'] ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged + @$dom_doc->loadHTML( $html_prefix . $html_info['html'] ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged libxml_use_internal_errors( false ); $image_tags = $dom_doc->getElementsByTagName( 'img' ); diff --git a/projects/plugins/jetpack/tests/php/media/test-class.jetpack-post-images.php b/projects/plugins/jetpack/tests/php/media/test-class.jetpack-post-images.php index 30d6923929ef9..8771c9d4fc17e 100644 --- a/projects/plugins/jetpack/tests/php/media/test-class.jetpack-post-images.php +++ b/projects/plugins/jetpack/tests/php/media/test-class.jetpack-post-images.php @@ -83,6 +83,19 @@ public function test_from_html_no_size() { $this->assertEquals( array(), $result ); } + /** + * @covers Jetpack_PostImages::from_html + */ + public function test_from_html_alt_utf8() { + $s = 'Ḽơᶉëᶆ ȋṕšᶙṁ ḍỡḽǭᵳ ʂǐť ӓṁệẗ'; + + $result = Jetpack_PostImages::from_html( $s ); + + $this->assertIsArray( $result ); + $this->assertNotEmpty( $result ); + $this->assertEquals( 'Ḽơᶉëᶆ ȋṕšᶙṁ ḍỡḽǭᵳ ʂǐť ӓṁệẗ', $result[0]['alt_text'] ); + } + /** * @author scotchfield * @covers Jetpack_PostImages::from_slideshow From 0c2bb97a6a441c6ea560e63761164eb364a145f7 Mon Sep 17 00:00:00 2001 From: Piotr Stankowski <6437642+trakos@users.noreply.github.com> Date: Tue, 4 Feb 2025 23:54:31 +0100 Subject: [PATCH 362/420] Jetpack Search: hide module toggle on wpcom (#41492) --- .../fix-disable-search-toggle-on-wpcom | 4 +++ .../components/module-control/index.jsx | 35 ++++++++++--------- 2 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 projects/packages/search/changelog/fix-disable-search-toggle-on-wpcom diff --git a/projects/packages/search/changelog/fix-disable-search-toggle-on-wpcom b/projects/packages/search/changelog/fix-disable-search-toggle-on-wpcom new file mode 100644 index 0000000000000..d95a7ef42d8cf --- /dev/null +++ b/projects/packages/search/changelog/fix-disable-search-toggle-on-wpcom @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + + diff --git a/projects/packages/search/src/dashboard/components/module-control/index.jsx b/projects/packages/search/src/dashboard/components/module-control/index.jsx index 8b031f0d00ade..b61c79b91586b 100644 --- a/projects/packages/search/src/dashboard/components/module-control/index.jsx +++ b/projects/packages/search/src/dashboard/components/module-control/index.jsx @@ -279,25 +279,28 @@ const SearchToggle = ( { const isSearchToggleChecked = isModuleEnabled && supportsSearch && ! isDisabledFromOverLimit; const isSearchToggleDisabled = isSavingEitherOption || ! supportsSearch || isDisabledFromOverLimit; + const isWpcom = useSelect( select => select( STORE_ID ).isWpcom(), [] ); return (
      -
      -
      - - { __( 'Enable Jetpack Search', 'jetpack-search-pkg' ) } - -
      -
      + { ! isWpcom && ( +
      +
      + + { __( 'Enable Jetpack Search', 'jetpack-search-pkg' ) } + +
      +
      + ) }
      From 4967a2f99c7c1499c1b21f2767ea7bdd0bf6bce2 Mon Sep 17 00:00:00 2001 From: Dognose Date: Wed, 5 Feb 2025 11:49:00 +0800 Subject: [PATCH 363/420] Stats: Show stats widget to admins on Simple sites (#41549) * Temporarily show the widget to administrators for Simple sites * changelog * Restore apply_filters for the user capability --- .../jetpack/changelog/test-stats_widget_check_connection | 4 ++++ .../plugins/jetpack/class-jetpack-stats-dashboard-widget.php | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/test-stats_widget_check_connection diff --git a/projects/plugins/jetpack/changelog/test-stats_widget_check_connection b/projects/plugins/jetpack/changelog/test-stats_widget_check_connection new file mode 100644 index 0000000000000..83481fb3773d4 --- /dev/null +++ b/projects/plugins/jetpack/changelog/test-stats_widget_check_connection @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Temporarily show the widget to administrators for Simple sites diff --git a/projects/plugins/jetpack/class-jetpack-stats-dashboard-widget.php b/projects/plugins/jetpack/class-jetpack-stats-dashboard-widget.php index ad030aa4d77b0..91a28e4626ed9 100644 --- a/projects/plugins/jetpack/class-jetpack-stats-dashboard-widget.php +++ b/projects/plugins/jetpack/class-jetpack-stats-dashboard-widget.php @@ -51,7 +51,10 @@ public static function wp_dashboard_setup() { * * @param bool Whether to show the widget to the current user. */ - if ( ! apply_filters( 'jetpack_stats_dashboard_widget_show_to_user', current_user_can( 'view_stats' ) ) ) { + // Temporarily show the widget to administrators for Simple sites as the view_stats capability is not available. + // TODO: Grant the view_stats capability to corresponding users for Simple sites. + $can_user_view_stats = current_user_can( 'manage_options' ) || current_user_can( 'view_stats' ); + if ( ! apply_filters( 'jetpack_stats_dashboard_widget_show_to_user', $can_user_view_stats ) ) { return; } From 116f2cf58f8c148d6893d2db3f8367c16cae1375 Mon Sep 17 00:00:00 2001 From: arthur791004 Date: Wed, 5 Feb 2025 14:19:25 +0800 Subject: [PATCH 364/420] External Media: Move the external-media to the new @automattic/jetpack-external-media package (#41078) * External Media: Move OpenverseMedia to @automattic/jetpack-shared-extension-utils * External Media: Move PexelsMedia to @automattic/jetpack-shared-extension-utils * External Media: Move GooglePhotosMedia to @automattic/jetpack-shared-extension-utils * changelog * Fix textdomain * Fix dependencies * Fix the asset of the google-photos-picker-button * Fix block assets * Fix test of external-media * Fix requestExternalAccess * Fix GooglePhotosMediaIcon * Introduce @automattic/jetpack-external-media * Move all of external-media to @automattic/jetpack-shared-extension-utils * changelog * Fix dependencies * Move all of external-media to @automattic/jetpack-external-media * Fix lint * Move store/wordpress-com to jetpack-ai-client * Update projects/packages/external-media/.phan/baseline.php * Fix types * Fix apiFetch * Fix the import of the jetpack-components under ai-client * changelog * Fix lint * Fix block-nudge * Fix build of @automattic/jetpack-external-media * Fix tests * Fix build of external-media * Update pnpm-lock.yaml * Fix translation * Fix storybook * changelog * Load external-media assets * Add external media module * Add mirror repo * Fix lint * Move external-media module to module-extras.php * Exclude babel.config.js on production * Move number-control to jetpack-components * Move libs/connection to jetpack-shared-extension-utils * Update the comment of the external media module * Move store/wordpress-com to jetpack-shared-extension-utils * Use Connection_Initial_State::render_script to get rid of dependency * Register JetpackExternalMediaData by external media package itself * Update composer.lock * Fix lint * Export components and icons from subpath to resolve deps of the story block * changelog --- pnpm-lock.yaml | 562 ++++++++++++++++++ .../feat-move-external-media-to-package | 4 + projects/js-packages/ai-client/package.json | 6 + .../src}/components/ai-icon/index.tsx | 5 + .../ai-image/components/ai-image-modal.scss | 0 .../ai-image/components/ai-image-modal.tsx | 107 ++-- .../ai-image/components/carrousel.scss | 0 .../ai-image/components/carrousel.tsx | 42 +- .../ai-image/components/usage-counter.scss | 0 .../ai-image/components/usage-counter.tsx | 14 +- .../components/ai-image/featured-image.tsx | 69 ++- .../ai-image/general-purpose-image.tsx | 50 +- .../components/ai-image/hooks/use-ai-image.ts | 89 ++- .../ai-image/hooks/use-site-type.ts | 5 + .../src}/components/ai-image/index.ts | 6 +- .../src}/components/ai-image/style.scss | 0 .../src}/components/ai-image/types.ts | 0 .../ai-client/src/components/index.ts | 12 + .../ai-client/src}/components/modal/index.tsx | 30 +- .../src}/components/modal/style.scss | 0 .../quota-exceeded-message/index.tsx | 35 +- .../quota-exceeded-message/light-nudge.tsx | 2 +- .../quota-exceeded-message/style.scss | 0 .../js-packages/ai-client/src/constants.ts | 5 + .../src}/hooks/use-ai-checkout/index.ts | 17 +- .../src}/hooks/use-ai-feature/Readme.md | 0 .../src}/hooks/use-ai-feature/index.ts | 11 +- .../ai-client/src}/hooks/use-post-content.ts | 7 +- .../src}/hooks/use-save-to-media-library.ts | 14 +- projects/js-packages/ai-client/src/index.ts | 3 + .../components/upgrade-screen.tsx | 2 +- .../hooks/use-fair-usage-notice-message.tsx | 2 +- .../feat-move-external-media-to-package | 4 + .../components/number-control/index.jsx | 8 +- projects/js-packages/components/index.ts | 1 + projects/js-packages/components/package.json | 3 +- .../feat-move-external-media-to-package | 4 + .../post-publish-manual-sharing/index.jsx | 2 +- .../feat-move-external-media-to-package | 4 + .../shared-extension-utils/index.js | 6 +- .../shared-extension-utils/package.json | 13 +- .../src}/block-icons.js | 2 +- .../src/components/index.js | 2 + .../src}/components/upgrade-nudge/index.jsx | 3 +- .../src}/components/upgrade-nudge/style.scss | 0 .../use-autosave-and-redirect/README.md | 0 .../hooks}/use-autosave-and-redirect/index.js | 14 + .../src/hooks}/use-plan-type/index.ts | 0 .../src/hooks}/use-ref-interval.ts | 0 .../shared-extension-utils/src}/icons.js | 41 +- .../src}/icons.native.scss | 0 .../shared-extension-utils/src}/icons.scss | 0 .../src/is-current-user-connected.js | 9 +- .../src/libs}/connection/index.ts | 9 +- .../shared-extension-utils/src/libs/index.js | 1 + .../src}/store/wordpress-com/actions.ts | 5 +- .../src}/store/wordpress-com/constants.ts | 0 .../src}/store/wordpress-com/index.ts | 6 +- .../src}/store/wordpress-com/reducer.ts | 10 +- .../src}/store/wordpress-com/test/index.ts | 8 +- .../src}/store/wordpress-com/types.ts | 28 + .../feat-move-external-media-to-package | 4 + .../js-packages/storybook/storybook/main.js | 2 +- .../packages/external-media/.gitattributes | 19 + projects/packages/external-media/.gitignore | 4 + .../external-media/.phan/baseline.php | 17 + .../packages/external-media/.phan/config.php | 13 + .../packages/external-media/.phpcs.dir.xml | 24 + projects/packages/external-media/CHANGELOG.md | 7 + projects/packages/external-media/README.md | 24 + .../packages/external-media/babel.config.js | 10 + .../external-media/changelog/.gitkeep | 0 .../external-media/changelog/initial-version | 4 + .../packages/external-media/composer.json | 68 +++ .../packages/external-media/eslint.config.mjs | 10 + .../packages/external-media/jest.config.js | 13 + projects/packages/external-media/package.json | 60 ++ .../packages/external-media/phpunit.xml.dist | 14 + .../src/class-external-media.php | 81 +++ .../src/features/editor}/editor.scss | 0 .../src/features/editor}/index.js | 15 +- .../external-media/src/shared}/constants.js | 60 +- .../external-media/src/shared/index.js | 8 + .../src/shared}/media-browser/index.js | 15 +- .../src/shared}/media-browser/media-item.js | 11 +- .../src/shared}/media-browser/placeholder.js | 6 + .../src/shared}/media-button/index.js | 24 +- .../shared}/media-button/media-ai-button.js | 12 +- .../src/shared}/media-button/media-menu.js | 21 +- .../src/shared}/media-button/media-sources.js | 20 +- .../src/shared}/media-service/index.ts | 12 +- .../src/shared}/media-service/types.ts | 0 .../external-media/src/shared}/sources/api.js | 10 +- .../google-photos/auth-instructions.js | 47 ++ .../sources/google-photos/auth-progress.js | 14 + .../sources/google-photos/breadcrumbs.js | 11 +- .../sources/google-photos/filter-option.js | 92 ++- .../sources/google-photos/filter-request.js | 6 + .../sources/google-photos/filter-view.js | 44 +- .../google-photos/google-photos-account.js | 0 .../google-photos-auth-upgrade.js | 10 +- .../google-photos/google-photos-auth.js | 13 +- .../google-photos/google-photos-disconnect.js | 6 +- .../google-photos/google-photos-media.js | 17 +- .../google-photos-picker-button.js | 24 +- .../shared}/sources/google-photos/index.js | 8 +- .../src/shared}/sources/index.js | 35 +- .../sources/jetpack-ai-featured-image.js | 14 + ...pack-ai-general-purpose-image-for-block.js | 29 + ...-general-purpose-image-for-media-source.js | 29 + .../src/shared}/sources/jetpack-app-media.js | 42 +- .../src/shared}/sources/openverse.js | 17 +- .../src/shared}/sources/pexels.js | 17 +- .../src/shared}/sources/with-media.js | 14 +- .../src/shared}/store/actions.ts | 0 .../external-media/src/shared}/store/index.ts | 0 .../src/shared}/store/reducer.ts | 0 .../src/shared}/store/selectors.ts | 0 .../external-media/src/shared}/store/types.ts | 0 .../test/external-media-service-test.js | 0 ...al-purpose-image-generator-beta-enabled.js | 15 + .../src/shared/utils}/wait-for.js | 0 .../external-media/tests/.phpcs.dir.xml | 4 + .../external-media/tests/php/bootstrap.php | 11 + .../packages/external-media/webpack.config.js | 58 ++ .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + projects/plugins/jetpack/composer.json | 1 + projects/plugins/jetpack/composer.lock | 70 ++- .../extensions/blocks/ai-assistant/edit.js | 17 +- .../components/ai-assistant-input/index.tsx | 4 +- .../lib/can-ai-assistant-be-enabled.ts | 2 +- .../extensions/with-ai-extension.tsx | 2 +- .../hooks/use-ai-product-page/index.ts | 3 +- .../components/nudge-enable-search/index.js | 7 +- .../blocks/blogroll/blogroll-item/index.js | 2 +- .../jetpack/extensions/blocks/paywall/edit.js | 2 +- .../send-a-message/whatsapp-button/icon.js | 2 +- .../send-a-message/whatsapp-button/index.js | 2 +- .../simple-payments/deprecated/v2/index.js | 7 +- .../extensions/blocks/subscriptions/panel.js | 2 +- .../extensions/blocks/videopress/edit.js | 2 +- .../videopress/uploading-editor/index.js | 6 +- projects/plugins/jetpack/extensions/editor.js | 3 +- .../extended-blocks/core-embed/descript.js | 2 +- .../extended-blocks/core-embed/facebook.js | 4 +- .../extended-blocks/core-embed/instagram.js | 4 +- .../extended-blocks/core-embed/loom.js | 2 +- .../extended-blocks/core-embed/smartframe.js | 2 +- .../paid-blocks/upgrade-plan-banner.jsx | 2 +- .../ai-assistant-plugin-sidebar/index.tsx | 19 +- .../ai-assistant-plugin-sidebar/upgrade.tsx | 5 +- .../components/breve/highlight/index.tsx | 3 +- .../components/feedback/index.tsx | 4 +- .../components/title-optimization/index.tsx | 11 +- .../components/usage-bar/index.tsx | 10 +- .../components/usage-bar/types.ts | 2 +- .../components/usage-panel/index.tsx | 22 +- .../components/usage-panel/types.ts | 2 +- .../extend/ai-post-excerpt/index.tsx | 8 +- .../components/qr-post.js | 2 +- .../post-publish-qr-post-panel/index.js | 2 +- .../plugins/publicize/pre-publish.js | 2 +- .../jetpack/extensions/plugins/seo/index.js | 2 +- .../plugins/social-previews/index.js | 2 +- .../extensions/shared/block-category.js | 2 +- .../shared/block-category.native.js | 3 +- .../shared/components/block-nudge/index.jsx | 2 +- .../components/connect-banner/index.tsx | 5 +- .../extensions/shared/components/index.jsx | 2 +- .../components/media-player-control/index.js | 5 +- .../components/plans-setup-dialog/index.jsx | 2 +- .../stripe-connect-toolbar-button/index.js | 5 +- .../google-photos/auth-instructions.js | 31 - .../sources/google-photos/auth-progress.js | 8 - .../sources/jetpack-ai-featured-image.js | 10 - ...pack-ai-general-purpose-image-for-block.js | 20 - ...-general-purpose-image-for-media-source.js | 20 - .../shared/jetpack-plugin-sidebar.js | 2 +- .../shared/use-upgrade-flow/index.js | 3 +- projects/plugins/jetpack/extensions/types.ts | 32 - projects/plugins/jetpack/images/media.svg | 1 - .../modules/external-media/external-media.php | 12 + .../plugins/jetpack/modules/module-extras.php | 1 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + projects/plugins/social/src/js/editor.js | 2 +- .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + .../feat-move-external-media-to-package | 4 + 197 files changed, 2315 insertions(+), 602 deletions(-) create mode 100644 projects/js-packages/ai-client/changelog/feat-move-external-media-to-package rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-icon/index.tsx (89%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/components/ai-image-modal.scss (100%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/components/ai-image-modal.tsx (88%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/components/carrousel.scss (100%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/components/carrousel.tsx (88%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/components/usage-counter.scss (100%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/components/usage-counter.tsx (75%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/featured-image.tsx (89%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/general-purpose-image.tsx (89%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/hooks/use-ai-image.ts (81%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/hooks/use-site-type.ts (83%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/index.ts (56%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/style.scss (100%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/ai-image/types.ts (100%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/modal/index.tsx (73%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/components/modal/style.scss (100%) rename projects/{plugins/jetpack/extensions/blocks/ai-assistant => js-packages/ai-client/src}/components/quota-exceeded-message/index.tsx (90%) rename projects/{plugins/jetpack/extensions/blocks/ai-assistant => js-packages/ai-client/src}/components/quota-exceeded-message/light-nudge.tsx (92%) rename projects/{plugins/jetpack/extensions/blocks/ai-assistant => js-packages/ai-client/src}/components/quota-exceeded-message/style.scss (100%) rename projects/{plugins/jetpack/extensions/blocks/ai-assistant => js-packages/ai-client/src}/hooks/use-ai-checkout/index.ts (80%) rename projects/{plugins/jetpack/extensions/blocks/ai-assistant => js-packages/ai-client/src}/hooks/use-ai-feature/Readme.md (100%) rename projects/{plugins/jetpack/extensions/blocks/ai-assistant => js-packages/ai-client/src}/hooks/use-ai-feature/index.ts (81%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/hooks/use-post-content.ts (81%) rename projects/{plugins/jetpack/extensions/plugins/ai-assistant-plugin => js-packages/ai-client/src}/hooks/use-save-to-media-library.ts (82%) create mode 100644 projects/js-packages/components/changelog/feat-move-external-media-to-package rename projects/{plugins/jetpack/extensions/shared => js-packages/components}/components/number-control/index.jsx (65%) create mode 100644 projects/js-packages/publicize-components/changelog/feat-move-external-media-to-package create mode 100644 projects/js-packages/shared-extension-utils/changelog/feat-move-external-media-to-package rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src}/block-icons.js (85%) create mode 100644 projects/js-packages/shared-extension-utils/src/components/index.js rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src}/components/upgrade-nudge/index.jsx (93%) rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src}/components/upgrade-nudge/style.scss (100%) rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src/hooks}/use-autosave-and-redirect/README.md (100%) rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src/hooks}/use-autosave-and-redirect/index.js (80%) rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src/hooks}/use-plan-type/index.ts (100%) rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src/hooks}/use-ref-interval.ts (100%) rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src}/icons.js (94%) rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src}/icons.native.scss (100%) rename projects/{plugins/jetpack/extensions/shared => js-packages/shared-extension-utils/src}/icons.scss (100%) rename projects/{plugins/jetpack/extensions/blocks/ai-assistant/lib => js-packages/shared-extension-utils/src/libs}/connection/index.ts (81%) create mode 100644 projects/js-packages/shared-extension-utils/src/libs/index.js rename projects/{plugins/jetpack/extensions => js-packages/shared-extension-utils/src}/store/wordpress-com/actions.ts (97%) rename projects/{plugins/jetpack/extensions => js-packages/shared-extension-utils/src}/store/wordpress-com/constants.ts (100%) rename projects/{plugins/jetpack/extensions => js-packages/shared-extension-utils/src}/store/wordpress-com/index.ts (95%) rename projects/{plugins/jetpack/extensions => js-packages/shared-extension-utils/src}/store/wordpress-com/reducer.ts (95%) rename projects/{plugins/jetpack/extensions => js-packages/shared-extension-utils/src}/store/wordpress-com/test/index.ts (97%) rename projects/{plugins/jetpack/extensions => js-packages/shared-extension-utils/src}/store/wordpress-com/types.ts (80%) create mode 100644 projects/js-packages/storybook/changelog/feat-move-external-media-to-package create mode 100644 projects/packages/external-media/.gitattributes create mode 100644 projects/packages/external-media/.gitignore create mode 100644 projects/packages/external-media/.phan/baseline.php create mode 100644 projects/packages/external-media/.phan/config.php create mode 100644 projects/packages/external-media/.phpcs.dir.xml create mode 100644 projects/packages/external-media/CHANGELOG.md create mode 100644 projects/packages/external-media/README.md create mode 100644 projects/packages/external-media/babel.config.js create mode 100644 projects/packages/external-media/changelog/.gitkeep create mode 100644 projects/packages/external-media/changelog/initial-version create mode 100644 projects/packages/external-media/composer.json create mode 100644 projects/packages/external-media/eslint.config.mjs create mode 100644 projects/packages/external-media/jest.config.js create mode 100644 projects/packages/external-media/package.json create mode 100644 projects/packages/external-media/phpunit.xml.dist create mode 100644 projects/packages/external-media/src/class-external-media.php rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/features/editor}/editor.scss (100%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/features/editor}/index.js (86%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/constants.js (67%) create mode 100644 projects/packages/external-media/src/shared/index.js rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-browser/index.js (93%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-browser/media-item.js (93%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-browser/placeholder.js (76%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-button/index.js (72%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-button/media-ai-button.js (64%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-button/media-menu.js (79%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-button/media-sources.js (69%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-service/index.ts (96%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/media-service/types.ts (100%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/api.js (58%) create mode 100644 projects/packages/external-media/src/shared/sources/google-photos/auth-instructions.js create mode 100644 projects/packages/external-media/src/shared/sources/google-photos/auth-progress.js rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/breadcrumbs.js (54%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/filter-option.js (52%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/filter-request.js (94%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/filter-view.js (59%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/google-photos-account.js (100%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/google-photos-auth-upgrade.js (65%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/google-photos-auth.js (79%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/google-photos-disconnect.js (82%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/google-photos-media.js (91%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/google-photos-picker-button.js (68%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/google-photos/index.js (94%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/index.js (78%) create mode 100644 projects/packages/external-media/src/shared/sources/jetpack-ai-featured-image.js create mode 100644 projects/packages/external-media/src/shared/sources/jetpack-ai-general-purpose-image-for-block.js create mode 100644 projects/packages/external-media/src/shared/sources/jetpack-ai-general-purpose-image-for-media-source.js rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/jetpack-app-media.js (78%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/openverse.js (85%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/pexels.js (86%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/sources/with-media.js (97%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/store/actions.ts (100%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/store/index.ts (100%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/store/reducer.ts (100%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/store/selectors.ts (100%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/store/types.ts (100%) rename projects/{plugins/jetpack/extensions/shared/external-media => packages/external-media/src/shared}/test/external-media-service-test.js (100%) create mode 100644 projects/packages/external-media/src/shared/utils/is-general-purpose-image-generator-beta-enabled.js rename projects/{plugins/jetpack/extensions/shared => packages/external-media/src/shared/utils}/wait-for.js (100%) create mode 100644 projects/packages/external-media/tests/.phpcs.dir.xml create mode 100644 projects/packages/external-media/tests/php/bootstrap.php create mode 100644 projects/packages/external-media/webpack.config.js create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/backup/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/boost/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/classic-theme-helper-plugin/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/crm/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/inspect/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/jetpack/changelog/feat-move-external-media-to-package delete mode 100644 projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/auth-instructions.js delete mode 100644 projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/auth-progress.js delete mode 100644 projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-featured-image.js delete mode 100644 projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-general-purpose-image-for-block.js delete mode 100644 projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-general-purpose-image-for-media-source.js delete mode 100644 projects/plugins/jetpack/extensions/types.ts delete mode 100644 projects/plugins/jetpack/images/media.svg create mode 100644 projects/plugins/jetpack/modules/external-media/external-media.php create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/protect/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/search/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/social/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/starter-plugin/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/videopress/changelog/feat-move-external-media-to-package create mode 100644 projects/plugins/wpcomsh/changelog/feat-move-external-media-to-package diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5d7917dbfcd2..fbc31e5aa524d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -120,6 +120,9 @@ importers: '@automattic/jetpack-base-styles': specifier: workspace:* version: link:../base-styles + '@automattic/jetpack-components': + specifier: workspace:* + version: link:../components '@automattic/jetpack-connection': specifier: workspace:* version: link:../connection @@ -129,6 +132,9 @@ importers: '@microsoft/fetch-event-source': specifier: 2.0.1 version: 2.0.1 + '@types/jest': + specifier: 29.5.12 + version: 29.5.12 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -147,6 +153,9 @@ importers: '@wordpress/block-editor': specifier: 14.12.0 version: 14.12.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': + specifier: 14.6.0 + version: 14.6.0(react@18.3.1) '@wordpress/components': specifier: 29.3.0 version: 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -156,6 +165,9 @@ importers: '@wordpress/data': specifier: 10.17.0 version: 10.17.0(react@18.3.1) + '@wordpress/editor': + specifier: 14.17.0 + version: 14.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/element': specifier: 6.17.0 version: 6.17.0 @@ -165,6 +177,12 @@ importers: '@wordpress/icons': specifier: 10.17.0 version: 10.17.0(react@18.3.1) + '@wordpress/primitives': + specifier: 4.17.0 + version: 4.17.0(react@18.3.1) + '@wordpress/url': + specifier: 4.17.0 + version: 4.17.0 clsx: specifier: 2.1.1 version: 2.1.1 @@ -1436,9 +1454,15 @@ importers: projects/js-packages/shared-extension-utils: dependencies: + '@automattic/color-studio': + specifier: 4.0.0 + version: 4.0.0 '@automattic/jetpack-analytics': specifier: workspace:* version: link:../analytics + '@automattic/jetpack-base-styles': + specifier: workspace:* + version: link:../base-styles '@automattic/jetpack-components': specifier: workspace:* version: link:../components @@ -1448,6 +1472,12 @@ importers: '@wordpress/api-fetch': specifier: 7.17.0 version: 7.17.0 + '@wordpress/block-editor': + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': + specifier: 29.3.0 + version: 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/compose': specifier: 7.17.0 version: 7.17.0(react@18.3.1) @@ -1466,6 +1496,12 @@ importers: '@wordpress/url': specifier: 4.17.0 version: 4.17.0 + clsx: + specifier: 2.1.1 + version: 2.1.1 + debug: + specifier: 4.4.0 + version: 4.4.0 lodash: specifier: 4.17.21 version: 4.17.21 @@ -1482,6 +1518,9 @@ importers: '@babel/preset-react': specifier: 7.26.3 version: 7.26.3(@babel/core@7.26.0) + '@babel/runtime': + specifier: 7.26.0 + version: 7.26.0 '@testing-library/dom': specifier: 10.4.0 version: 10.4.0 @@ -2244,6 +2283,103 @@ importers: specifier: 6.0.1 version: 6.0.1(webpack@5.94.0) + projects/packages/external-media: + dependencies: + '@automattic/jetpack-ai-client': + specifier: workspace:* + version: link:../../js-packages/ai-client + '@automattic/jetpack-analytics': + specifier: workspace:* + version: link:../../js-packages/analytics + '@automattic/jetpack-base-styles': + specifier: workspace:* + version: link:../../js-packages/base-styles + '@automattic/jetpack-components': + specifier: workspace:* + version: link:../../js-packages/components + '@automattic/jetpack-shared-extension-utils': + specifier: workspace:* + version: link:../../js-packages/shared-extension-utils + '@automattic/request-external-access': + specifier: 1.0.1 + version: 1.0.1 + '@wordpress/api-fetch': + specifier: 7.17.0 + version: 7.17.0 + '@wordpress/block-editor': + specifier: 14.12.0 + version: 14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0) + '@wordpress/components': + specifier: 29.3.0 + version: 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': + specifier: 7.17.0 + version: 7.17.0(react@18.3.1) + '@wordpress/data': + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) + '@wordpress/element': + specifier: 6.17.0 + version: 6.17.0 + '@wordpress/i18n': + specifier: 5.17.0 + version: 5.17.0 + '@wordpress/icons': + specifier: 10.17.0 + version: 10.17.0(react@18.3.1) + '@wordpress/keycodes': + specifier: 4.17.0 + version: 4.17.0 + '@wordpress/url': + specifier: 4.17.0 + version: 4.17.0 + clsx: + specifier: 2.1.1 + version: 2.1.1 + lodash: + specifier: 4.17.21 + version: 4.17.21 + moment: + specifier: 2.30.1 + version: 2.30.1 + react: + specifier: 18.3.1 + version: 18.3.1 + react-dom: + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@automattic/jetpack-webpack-config': + specifier: workspace:* + version: link:../../js-packages/webpack-config + '@babel/core': + specifier: 7.26.0 + version: 7.26.0 + '@babel/plugin-transform-react-jsx': + specifier: 7.25.9 + version: 7.25.9(@babel/core@7.26.0) + '@babel/preset-react': + specifier: 7.26.3 + version: 7.26.3(@babel/core@7.26.0) + jetpack-js-tools: + specifier: workspace:* + version: link:../../../tools/js-tools + sass: + specifier: 1.64.1 + version: 1.64.1 + sass-loader: + specifier: 12.4.0 + version: 12.4.0(sass@1.64.1)(webpack@5.94.0) + typescript: + specifier: ^5.0.4 + version: 5.7.2 + webpack: + specifier: 5.94.0 + version: 5.94.0(webpack-cli@4.9.1) + webpack-cli: + specifier: 4.9.1 + version: 4.9.1(webpack@5.94.0) + projects/packages/forms: dependencies: '@automattic/jetpack-analytics': @@ -5283,6 +5419,9 @@ packages: '@automattic/request-external-access@1.0.0': resolution: {integrity: sha512-vhN72lwPFzhCVMP1l2ODBqt7fI5jfeJz1JyBnq/AUCg9PpsJfdk4vZxhSOLhSSds8VMkU5WaNnaztkYfkkYOiA==} + '@automattic/request-external-access@1.0.1': + resolution: {integrity: sha512-i7q2yhhQ5V1iLzkVxGG+oCkPIBgkZEfLj0mqCky5qeIleUk+XSXcOFJ1IerOmNeAYxho596rpqlfUyD2evWuLA==} + '@automattic/shopping-cart@2.0.1': resolution: {integrity: sha512-Vnfi+PtgiJu9VSmenTgbFrzB8G7eShVm9EAov7zIt54KeOBS44pn01ZJiZwZRRiA8pi8CkPHRW1sfpR/SAcKiw==} peerDependencies: @@ -5986,6 +6125,10 @@ packages: '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + '@discoveryjs/json-ext@0.5.7': + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + '@discoveryjs/json-ext@0.6.3': resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} engines: {node: '>=14.17.0'} @@ -8164,6 +8307,12 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@webpack-cli/configtest@1.2.0': + resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} + peerDependencies: + webpack: 4.x.x || 5.x.x + webpack-cli: 4.x.x + '@webpack-cli/configtest@3.0.1': resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==} engines: {node: '>=18.12.0'} @@ -8171,6 +8320,11 @@ packages: webpack: ^5.82.0 webpack-cli: 6.x.x + '@webpack-cli/info@1.5.0': + resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} + peerDependencies: + webpack-cli: 4.x.x + '@webpack-cli/info@3.0.1': resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==} engines: {node: '>=18.12.0'} @@ -8178,6 +8332,15 @@ packages: webpack: ^5.82.0 webpack-cli: 6.x.x + '@webpack-cli/serve@1.7.0': + resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} + peerDependencies: + webpack-cli: 4.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + '@webpack-cli/serve@3.0.1': resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==} engines: {node: '>=18.12.0'} @@ -11130,6 +11293,10 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} + interpret@2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + interpret@3.1.1: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} @@ -13362,6 +13529,10 @@ packages: resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} engines: {node: '>= 4'} + rechoir@0.7.1: + resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} + engines: {node: '>= 0.10'} + rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} @@ -14928,6 +15099,26 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + webpack-cli@4.9.1: + resolution: {integrity: sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + '@webpack-cli/migrate': '*' + webpack: 4.x.x || 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + '@webpack-cli/migrate': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + webpack-cli@6.0.1: resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} engines: {node: '>=18.12.0'} @@ -14960,6 +15151,10 @@ packages: webpack-hot-middleware@2.26.1: resolution: {integrity: sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==} + webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + engines: {node: '>=10.0.0'} + webpack-merge@6.0.1: resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} engines: {node: '>=18.0.0'} @@ -15522,6 +15717,11 @@ snapshots: dependencies: '@automattic/popup-monitor': 1.0.2 + '@automattic/request-external-access@1.0.1': + dependencies: + '@automattic/popup-monitor': 1.0.2 + '@babel/runtime': 7.26.0 + '@automattic/shopping-cart@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: debug: 4.4.0 @@ -16407,6 +16607,8 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 + '@discoveryjs/json-ext@0.5.7': {} + '@discoveryjs/json-ext@0.6.3': {} '@emotion/babel-plugin@11.13.5': @@ -19208,16 +19410,30 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@webpack-cli/configtest@1.2.0(webpack-cli@4.9.1)(webpack@5.94.0)': + dependencies: + webpack: 5.94.0(webpack-cli@4.9.1) + webpack-cli: 4.9.1(webpack@5.94.0) + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.94.0)': dependencies: webpack: 5.94.0(webpack-cli@6.0.1) webpack-cli: 6.0.1(webpack@5.94.0) + '@webpack-cli/info@1.5.0(webpack-cli@4.9.1)': + dependencies: + envinfo: 7.14.0 + webpack-cli: 4.9.1(webpack@5.94.0) + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.94.0)': dependencies: webpack: 5.94.0(webpack-cli@6.0.1) webpack-cli: 6.0.1(webpack@5.94.0) + '@webpack-cli/serve@1.7.0(webpack-cli@4.9.1)': + dependencies: + webpack-cli: 4.9.1(webpack@5.94.0) + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.94.0)': dependencies: webpack: 5.94.0(webpack-cli@6.0.1) @@ -19466,6 +19682,69 @@ snapshots: - webpack - webpack-virtual-modules + '@wordpress/block-editor@14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@emotion/react': 11.14.0(react@18.3.1) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1) + '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-serialization-default-parser': 5.17.0 + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/escape-html': 3.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/preferences': 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/priority-queue': 3.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/style-engine': 2.17.0 + '@wordpress/token-list': 3.17.0 + '@wordpress/upload-media': 0.2.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 + change-case: 4.1.2 + clsx: 2.1.1 + colord: 2.9.3 + deepmerge: 4.3.1 + diff: 4.0.2 + fast-deep-equal: 3.1.3 + memize: 2.1.0 + parsel-js: 1.2.1 + postcss: 8.4.47 + postcss-prefix-selector: 1.16.1(postcss@8.4.47) + postcss-urlrebase: 1.4.0(postcss@8.4.47) + react: 18.3.1 + react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-easy-crop: 5.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + remove-accents: 0.5.0 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - supports-color + - webpack + - webpack-virtual-modules + '@wordpress/block-editor@14.12.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 @@ -20311,6 +20590,43 @@ snapshots: - webpack - webpack-virtual-modules + '@wordpress/core-data@7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/block-editor': 14.12.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/deprecated': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/is-shallow-equal': 5.17.0 + '@wordpress/private-apis': 1.17.0 + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/sync': 1.17.0 + '@wordpress/undo-manager': 1.17.0 + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + change-case: 4.1.2 + equivalent-key-map: 0.2.2 + fast-deep-equal: 3.1.3 + memize: 2.1.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + '@wordpress/data-controls@4.16.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 @@ -20840,6 +21156,68 @@ snapshots: - webpack - webpack-virtual-modules + '@wordpress/editor@14.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/a11y': 4.17.0 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/commands': 1.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/deprecated': 4.17.0 + '@wordpress/dom': 4.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/fields': 0.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/interface': 9.2.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/keyboard-shortcuts': 5.17.0(react@18.3.1) + '@wordpress/keycodes': 4.17.0 + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/plugins': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/preferences': 4.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/reusable-blocks': 5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/rich-text': 7.17.0(react@18.3.1) + '@wordpress/server-side-render': 5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + '@wordpress/wordcount': 4.17.0 + change-case: 4.1.2 + client-zip: 2.4.6 + clsx: 2.1.1 + date-fns: 3.6.0 + deepmerge: 4.3.1 + fast-deep-equal: 3.1.3 + is-plain-object: 5.0.0 + memize: 2.1.0 + react: 18.3.1 + react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + remove-accents: 0.5.0 + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + '@wordpress/element@5.35.0': dependencies: '@babel/runtime': 7.26.0 @@ -21067,6 +21445,49 @@ snapshots: - webpack - webpack-virtual-modules + '@wordpress/fields@0.9.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/block-editor': 14.12.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/dataviews': 4.13.0(patch_hash=uzs6glhpt3sq2uqjvqzk6vk2ze)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/date': 5.17.0 + '@wordpress/element': 6.17.0 + '@wordpress/hooks': 4.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/media-utils': 5.17.0 + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/patterns': 2.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/primitives': 4.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/router': 1.17.0(react@18.3.1) + '@wordpress/url': 4.17.0 + '@wordpress/warning': 3.17.0 + change-case: 4.1.2 + client-zip: 2.4.6 + clsx: 2.1.1 + react: 18.3.1 + remove-accents: 0.5.0 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - react-dom + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + '@wordpress/format-library@5.17.0(@babel/core@7.26.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 @@ -21352,6 +21773,36 @@ snapshots: - webpack - webpack-virtual-modules + '@wordpress/patterns@2.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/a11y': 4.17.0 + '@wordpress/block-editor': 14.12.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/core-data': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/html-entities': 4.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + '@wordpress/plugins@7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 @@ -21582,6 +22033,33 @@ snapshots: - webpack - webpack-virtual-modules + '@wordpress/reusable-blocks@5.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@wordpress/block-editor': 14.12.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/blocks': 14.6.0(react@18.3.1) + '@wordpress/components': 29.3.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/core-data': 7.17.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/icons': 10.17.0(react@18.3.1) + '@wordpress/notices': 5.17.0(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - utf-8-validate + - webpack + - webpack-virtual-modules + '@wordpress/rich-text@7.17.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 @@ -21736,6 +22214,30 @@ snapshots: - webpack - webpack-virtual-modules + '@wordpress/upload-media@0.2.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 + '@shopify/web-worker': 6.4.0(@babel/core@7.26.0) + '@wordpress/api-fetch': 7.17.0 + '@wordpress/blob': 4.17.0 + '@wordpress/compose': 7.17.0(react@18.3.1) + '@wordpress/data': 10.17.0(react@18.3.1) + '@wordpress/element': 6.17.0 + '@wordpress/i18n': 5.17.0 + '@wordpress/preferences': 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/private-apis': 1.17.0 + '@wordpress/url': 4.17.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + uuid: 9.0.1 + transitivePeerDependencies: + - '@babel/core' + - '@emotion/is-prop-valid' + - '@types/react' + - supports-color + - webpack + - webpack-virtual-modules + '@wordpress/upload-media@0.2.0(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.94.0)': dependencies: '@babel/runtime': 7.25.7 @@ -24854,6 +25356,8 @@ snapshots: internmap@2.0.3: {} + interpret@2.2.0: {} + interpret@3.1.1: {} intl-messageformat@10.7.11: @@ -27635,6 +28139,10 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.5.0 + rechoir@0.7.1: + dependencies: + resolve: 1.22.10 + rechoir@0.8.0: dependencies: resolve: 1.22.10 @@ -29254,6 +29762,22 @@ snapshots: webidl-conversions@7.0.0: {} + webpack-cli@4.9.1(webpack@5.94.0): + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.9.1)(webpack@5.94.0) + '@webpack-cli/info': 1.5.0(webpack-cli@4.9.1) + '@webpack-cli/serve': 1.7.0(webpack-cli@4.9.1) + colorette: 2.0.20 + commander: 7.2.0 + execa: 5.1.1 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 2.2.0 + rechoir: 0.7.1 + webpack: 5.94.0(webpack-cli@4.9.1) + webpack-merge: 5.10.0 + webpack-cli@6.0.1(webpack@5.94.0): dependencies: '@discoveryjs/json-ext': 0.6.3 @@ -29296,6 +29820,12 @@ snapshots: html-entities: 2.5.2 strip-ansi: 6.0.1 + webpack-merge@5.10.0: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + webpack-merge@6.0.1: dependencies: clone-deep: 4.0.1 @@ -29311,6 +29841,38 @@ snapshots: webpack-virtual-modules@0.6.2: {} + webpack@5.94.0(webpack-cli@4.9.1): + dependencies: + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + acorn-import-attributes: 1.9.5(acorn@8.14.0) + browserslist: 4.24.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.0 + es-module-lexer: 1.6.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.11(webpack@5.94.0) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + optionalDependencies: + webpack-cli: 4.9.1(webpack@5.94.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + webpack@5.94.0(webpack-cli@6.0.1): dependencies: '@types/estree': 1.0.6 diff --git a/projects/js-packages/ai-client/changelog/feat-move-external-media-to-package b/projects/js-packages/ai-client/changelog/feat-move-external-media-to-package new file mode 100644 index 0000000000000..1a3a7a050be21 --- /dev/null +++ b/projects/js-packages/ai-client/changelog/feat-move-external-media-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Add shared components from ai-assistant-plugin diff --git a/projects/js-packages/ai-client/package.json b/projects/js-packages/ai-client/package.json index 5255c2e65744e..fb5667daa3874 100644 --- a/projects/js-packages/ai-client/package.json +++ b/projects/js-packages/ai-client/package.json @@ -46,21 +46,27 @@ "types": "./build/index.d.ts", "dependencies": { "@automattic/jetpack-base-styles": "workspace:*", + "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", "@automattic/jetpack-shared-extension-utils": "workspace:*", "@microsoft/fetch-event-source": "2.0.1", + "@types/jest": "29.5.12", "@types/react": "18.3.18", "@types/wordpress__block-editor": "11.5.16", "@wordpress/api-fetch": "7.17.0", "@wordpress/base-styles": "5.17.0", "@wordpress/blob": "4.17.0", + "@wordpress/blocks": "14.6.0", "@wordpress/block-editor": "14.12.0", "@wordpress/components": "29.3.0", "@wordpress/compose": "7.17.0", "@wordpress/data": "10.17.0", + "@wordpress/editor": "14.17.0", "@wordpress/element": "6.17.0", "@wordpress/i18n": "5.17.0", "@wordpress/icons": "10.17.0", + "@wordpress/primitives": "4.17.0", + "@wordpress/url": "4.17.0", "clsx": "2.1.1", "debug": "4.4.0", "markdown-it": "14.1.0", diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-icon/index.tsx b/projects/js-packages/ai-client/src/components/ai-icon/index.tsx similarity index 89% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-icon/index.tsx rename to projects/js-packages/ai-client/src/components/ai-icon/index.tsx index a66e25e991c72..ed717ff9b8a96 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-icon/index.tsx +++ b/projects/js-packages/ai-client/src/components/ai-icon/index.tsx @@ -29,6 +29,11 @@ export const AiSVG = ( ); +/** + * AiIcon component + * @param {string} className - The wrapper class name. + * @return {React.ReactElement} The `AiIcon` component. + */ export default function AiIcon( { className, size = 42 }: { className?: string; size?: number } ) { return ; } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/components/ai-image-modal.scss b/projects/js-packages/ai-client/src/components/ai-image/components/ai-image-modal.scss similarity index 100% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/components/ai-image-modal.scss rename to projects/js-packages/ai-client/src/components/ai-image/components/ai-image-modal.scss diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/components/ai-image-modal.tsx b/projects/js-packages/ai-client/src/components/ai-image/components/ai-image-modal.tsx similarity index 88% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/components/ai-image-modal.tsx rename to projects/js-packages/ai-client/src/components/ai-image/components/ai-image-modal.tsx index ea6256a9a7bc7..69f0ce6eb22db 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/components/ai-image-modal.tsx +++ b/projects/js-packages/ai-client/src/components/ai-image/components/ai-image-modal.tsx @@ -1,14 +1,6 @@ /** * External dependencies */ -import { - AiModalPromptInput, - IMAGE_STYLE_NONE, - IMAGE_STYLE_AUTO, - ImageStyleObject, - ImageStyle, - AiModalFooter, -} from '@automattic/jetpack-ai-client'; import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import { SelectControl } from '@wordpress/components'; import { useCallback, useRef, useState, useEffect } from '@wordpress/element'; @@ -17,16 +9,64 @@ import debugFactory from 'debug'; /** * Internal dependencies */ -import QuotaExceededMessage from '../../../../../blocks/ai-assistant/components/quota-exceeded-message'; -import AiAssistantModal from '../../modal'; -import Carrousel, { CarrouselImages } from './carrousel'; -import UsageCounter from './usage-counter'; +import { + IMAGE_STYLE_NONE, + IMAGE_STYLE_AUTO, + ImageStyleObject, + ImageStyle, +} from '../../../hooks/use-image-generator/constants.js'; +import { AiModalPromptInput } from '../../../logo-generator/index.js'; +import AiModalFooter from '../../ai-modal-footer/index.js'; +import AiAssistantModal from '../../modal/index.js'; +import QuotaExceededMessage from '../../quota-exceeded-message/index.js'; +import Carrousel, { CarrouselImages } from './carrousel.js'; +import UsageCounter from './usage-counter.js'; import './ai-image-modal.scss'; +type AiImageModalProps = { + title: string; + cost: number; + open: boolean; + placement: string; + images: CarrouselImages; + currentIndex: number; + onClose: () => void; + onTryAgain: ( { userPrompt, style }: { userPrompt?: string; style?: string } ) => void; + onGenerate: ( { userPrompt, style }: { userPrompt?: string; style?: string } ) => void; + generating: boolean; + notEnoughRequests: boolean; + requireUpgrade: boolean; + currentLimit: number; + currentUsage: number; + isUnlimited: boolean; + upgradeDescription: string; + hasError: boolean; + postContent?: string | boolean | null; + handlePreviousImage: () => void; + handleNextImage: () => void; + acceptButton: React.JSX.Element; + autoStart?: boolean; + autoStartAction?: ( { userPrompt, style }: { userPrompt?: string; style?: string } ) => void; + generateButtonLabel: string; + instructionsPlaceholder: string; + imageStyles?: Array< ImageStyleObject >; + onGuessStyle?: ( userPrompt: string ) => Promise< ImageStyle >; + prompt?: string; + setPrompt?: ( userPrompt: string ) => void; + initialStyle?: ImageStyle; + inputDisabled?: boolean; + actionDisabled?: boolean; +}; + const FEATURED_IMAGE_UPGRADE_PROMPT_PLACEMENT = 'ai-image-generator'; -const debug = debugFactory( 'jetpack-ai:ai-image-modal' ); +const debug = debugFactory( 'jetpack-ai-client:ai-image-modal' ); +/** + * AiImageModal component + * @param {AiImageModalProps} props - The component properties. + * @return {React.ReactElement} - rendered component. + */ export default function AiImageModal( { title, cost, @@ -57,40 +97,7 @@ export default function AiImageModal( { initialStyle = null, inputDisabled = false, actionDisabled = false, -}: { - title: string; - cost: number; - open: boolean; - placement: string; - images: CarrouselImages; - currentIndex: number; - onClose: () => void; - onTryAgain: ( { userPrompt, style }: { userPrompt?: string; style?: string } ) => void; - onGenerate: ( { userPrompt, style }: { userPrompt?: string; style?: string } ) => void; - generating: boolean; - notEnoughRequests: boolean; - requireUpgrade: boolean; - currentLimit: number; - currentUsage: number; - isUnlimited: boolean; - upgradeDescription: string; - hasError: boolean; - postContent?: string | boolean | null; - handlePreviousImage: () => void; - handleNextImage: () => void; - acceptButton: React.JSX.Element; - autoStart?: boolean; - autoStartAction?: ( { userPrompt, style }: { userPrompt?: string; style?: string } ) => void; - generateButtonLabel: string; - instructionsPlaceholder: string; - imageStyles?: Array< ImageStyleObject >; - onGuessStyle?: ( userPrompt: string ) => Promise< ImageStyle >; - prompt?: string; - setPrompt?: ( userPrompt: string ) => void; - initialStyle?: ImageStyle; - inputDisabled?: boolean; - actionDisabled?: boolean; -} ) { +}: AiImageModalProps ) { const { tracks } = useAnalytics(); const { recordEvent: recordTracksEvent } = tracks; const triggeredAutoGeneration = useRef( false ); @@ -133,8 +140,8 @@ export default function AiImageModal( { const upgradePromptVisible = ( requireUpgrade || notEnoughRequests ) && ! generating; const counterVisible = Boolean( ! isUnlimited && cost && currentLimit ); - const generateLabel = __( 'Generate', 'jetpack' ); - const tryAgainLabel = __( 'Try again', 'jetpack' ); + const generateLabel = __( 'Generate', 'jetpack-ai-client' ); + const tryAgainLabel = __( 'Try again', 'jetpack-ai-client' ); /** * Trigger image generation automatically. @@ -174,7 +181,7 @@ export default function AiImageModal( { { showStyleSelector && (
      - { __( 'Generate image', 'jetpack' ) } + { __( 'Generate image', 'jetpack-ai-client' ) }
      void; + handleNextImage: () => void; + actions?: React.JSX.Element; +}; + +/** + * Carrousel component + * @param {CarrouselProps} props - The component properties. + * @return {React.ReactElement} - rendered component. + */ export default function Carrousel( { images, current, handlePreviousImage, handleNextImage, actions = null, -}: { - images: CarrouselImages; - current: number; - handlePreviousImage: () => void; - handleNextImage: () => void; - actions?: React.JSX.Element; -} ) { +}: CarrouselProps ) { const [ imageFeedbackDisabled, setImageFeedbackDisabled ] = useState( false ); const prevButton = ( ); @@ -375,7 +382,7 @@ export default function FeaturedImage( { placement === PLACEMENT_DOCUMENT_SETTINGS ) && ( <>

      - { __( 'Based on your post content.', 'jetpack' ) } + { __( 'Based on your post content.', 'jetpack-ai-client' ) }

      ) } @@ -394,7 +401,7 @@ export default function FeaturedImage( { autoStartAction={ handleFirstGenerate } images={ images } currentIndex={ current } - title={ __( 'Generate a featured image with AI', 'jetpack' ) } + title={ __( 'Generate a featured image with AI', 'jetpack-ai-client' ) } cost={ featuredImageCost } open={ isFeaturedImageModalVisible } placement={ placement } @@ -417,7 +424,7 @@ export default function FeaturedImage( { generateButtonLabel={ pointer?.current > 0 ? generateAgainText : generateText } instructionsPlaceholder={ __( "Describe the featured image you'd like to create and select a style.", - 'jetpack' + 'jetpack-ai-client' ) } imageStyles={ imageStyles } onGuessStyle={ handleGuessStyle } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/general-purpose-image.tsx b/projects/js-packages/ai-client/src/components/ai-image/general-purpose-image.tsx similarity index 89% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/general-purpose-image.tsx rename to projects/js-packages/ai-client/src/components/ai-image/general-purpose-image.tsx index 9d87cb99064e4..77da668a8de25 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/general-purpose-image.tsx +++ b/projects/js-packages/ai-client/src/components/ai-image/general-purpose-image.tsx @@ -1,7 +1,11 @@ /** * External dependencies */ -import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; +import { + useAnalytics, + PLAN_TYPE_UNLIMITED, + usePlanType, +} from '@automattic/jetpack-shared-extension-utils'; import { Button } from '@wordpress/components'; import { useCallback, useState } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; @@ -10,18 +14,17 @@ import debugFactory from 'debug'; * Internal dependencies */ import './style.scss'; -import useAiFeature from '../../../../blocks/ai-assistant/hooks/use-ai-feature'; -import { PLAN_TYPE_UNLIMITED, usePlanType } from '../../../../shared/use-plan-type'; -import usePostContent from '../../hooks/use-post-content'; -import useSaveToMediaLibrary from '../../hooks/use-save-to-media-library'; -import AiImageModal from './components/ai-image-modal'; -import useAiImage from './hooks/use-ai-image'; -import useSiteType from './hooks/use-site-type'; +import useAiFeature from '../../hooks/use-ai-feature/index.js'; +import usePostContent from '../../hooks/use-post-content.js'; +import useSaveToMediaLibrary from '../../hooks/use-save-to-media-library.js'; +import AiImageModal from './components/ai-image-modal.js'; +import useAiImage from './hooks/use-ai-image.js'; +import useSiteType from './hooks/use-site-type.js'; import { IMAGE_GENERATION_MODEL_STABLE_DIFFUSION, IMAGE_GENERATION_MODEL_DALL_E_3, GENERAL_IMAGE_FEATURE_NAME, -} from './types'; +} from './types.js'; /** * The type for the callback function that is called when the user selects an image. @@ -31,17 +34,24 @@ type SetImageCallbackProps = { url: string; }; +type GeneralPurposeImageProps = { + placement: string; + onClose?: () => void; + onSetImage?: ( image: SetImageCallbackProps ) => void; +}; + const debug = debugFactory( 'jetpack-ai:general-purpose-image' ); +/** + * GeneralPurposeImage component + * @param {GeneralPurposeImageProps} props - The component properties. + * @return {React.ReactElement} - rendered component. + */ export default function GeneralPurposeImage( { placement, onClose = () => {}, onSetImage = () => {}, -}: { - placement: string; - onClose?: () => void; - onSetImage?: ( image: SetImageCallbackProps ) => void; -} ) { +}: GeneralPurposeImageProps ) { const [ isFeaturedImageModalVisible, setIsFeaturedImageModalVisible ] = useState( true ); const siteType = useSiteType(); const postContent = usePostContent(); @@ -230,15 +240,15 @@ export default function GeneralPurposeImage( { saveToMediaLibrary, ] ); - const generateAgainText = __( 'Generate another image', 'jetpack' ); - const generateText = __( 'Generate', 'jetpack' ); + const generateAgainText = __( 'Generate another image', 'jetpack-ai-client' ); + const generateText = __( 'Generate', 'jetpack-ai-client' ); const upgradeDescription = notEnoughRequests ? sprintf( // Translators: %d is the cost of generating a featured image. __( "Image generation costs %d requests per image. You don't have enough requests to generate another image.", - 'jetpack' + 'jetpack-ai-client' ), generalImageCost ) @@ -250,7 +260,7 @@ export default function GeneralPurposeImage( { variant="primary" disabled={ ! currentImage?.image || currentImage?.generating } > - { __( 'Insert image', 'jetpack' ) } + { __( 'Insert image', 'jetpack-ai-client' ) } ); @@ -259,7 +269,7 @@ export default function GeneralPurposeImage( { postContent={ true } images={ images } currentIndex={ current } - title={ __( 'Generate an image with AI', 'jetpack' ) } + title={ __( 'Generate an image with AI', 'jetpack-ai-client' ) } cost={ generalImageCost } open={ isFeaturedImageModalVisible } placement={ placement } @@ -280,7 +290,7 @@ export default function GeneralPurposeImage( { generateButtonLabel={ pointer?.current > 0 ? generateAgainText : generateText } instructionsPlaceholder={ __( "Describe the image you'd like to create and select a style.", - 'jetpack' + 'jetpack-ai-client' ) } imageStyles={ imageStyles } onGuessStyle={ guessStyle } diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/hooks/use-ai-image.ts b/projects/js-packages/ai-client/src/components/ai-image/hooks/use-ai-image.ts similarity index 81% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/hooks/use-ai-image.ts rename to projects/js-packages/ai-client/src/components/ai-image/hooks/use-ai-image.ts index 0edcb0176663b..3789caace05c9 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/hooks/use-ai-image.ts +++ b/projects/js-packages/ai-client/src/components/ai-image/hooks/use-ai-image.ts @@ -1,28 +1,30 @@ /** * External dependencies */ -import { - useImageGenerator, - ImageStyleObject, - ImageStyle, - askQuestionSync, -} from '@automattic/jetpack-ai-client'; import { useDispatch, useSelect } from '@wordpress/data'; import { useCallback, useEffect, useRef, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { cleanForSlug } from '@wordpress/url'; +import React from 'react'; /** * Internal dependencies */ -import useAiFeature from '../../../../../blocks/ai-assistant/hooks/use-ai-feature'; -import useSaveToMediaLibrary from '../../../hooks/use-save-to-media-library'; +import askQuestionSync from '../../../ask-question/sync.js'; +import useAiFeature from '../../../hooks/use-ai-feature/index.js'; +import { ImageStyleObject, ImageStyle } from '../../../hooks/use-image-generator/constants.js'; +import useImageGenerator from '../../../hooks/use-image-generator/index.js'; +import useSaveToMediaLibrary from '../../../hooks/use-save-to-media-library.js'; /** * Types */ -import { CoreSelectors, FEATURED_IMAGE_FEATURE_NAME, GENERAL_IMAGE_FEATURE_NAME } from '../types'; -import type { CarrouselImageData, CarrouselImages } from '../components/carrousel'; -import type { RoleType } from '@automattic/jetpack-ai-client'; -import type { FeatureControl } from 'extensions/store/wordpress-com/types.js'; +import { + CoreSelectors, + FEATURED_IMAGE_FEATURE_NAME, + GENERAL_IMAGE_FEATURE_NAME, +} from '../types.js'; +import type { RoleType } from '../../../types.js'; +import type { CarrouselImageData, CarrouselImages } from '../components/carrousel.js'; +import type { FeatureControl } from '@automattic/jetpack-shared-extension-utils/store/wordpress-com/types'; type ImageFeatureControl = FeatureControl & { styles: Array< ImageStyleObject > | []; @@ -37,19 +39,54 @@ export type ImageResponse = { revisedPrompt?: string; }; +type ProcessImageGenerationProps = { + userPrompt?: string | null; + postContent?: string | null; + notEnoughRequests: boolean; + style?: string; +}; + +type GuessStyleFunction = ( + prompt: string, + requestType: string, + content: string +) => Promise< ImageStyle | null >; + +type UseAiImageProps = { + feature: AiImageFeature; + type: AiImageType; + cost: number; + autoStart?: boolean; + previousMediaId?: number; +}; + +type UseAiImageReturn = { + current: number; + setCurrent: ( value: number ) => void; + processImageGeneration: ( props: ProcessImageGenerationProps ) => Promise< ImageResponse >; + handlePreviousImage: () => void; + handleNextImage: () => void; + currentImage: CarrouselImageData; + currentPointer: CarrouselImageData; + images: CarrouselImages; + pointer: React.RefObject< number >; + imageStyles: Array< ImageStyleObject >; + guessStyle: GuessStyleFunction; +}; + +/** + * Hook to get properties for AiImage + * + * @param {UseAiImageProps} props - The component properties. + * @return {UseAiImageReturn} - Object containing properties for AiImage. + */ export default function useAiImage( { feature, type, cost, autoStart = true, previousMediaId, -}: { - feature: AiImageFeature; - type: AiImageType; - cost: number; - autoStart?: boolean; - previousMediaId?: number; -} ) { +}: UseAiImageProps ) { const { generateImageWithParameters } = useImageGenerator(); const { increaseRequestsCount, featuresControl } = useAiFeature(); const { saveToMediaLibrary } = useSaveToMediaLibrary(); @@ -140,12 +177,7 @@ export default function useAiImage( { postContent, notEnoughRequests, style = null, - }: { - userPrompt?: string | null; - postContent?: string | null; - notEnoughRequests: boolean; - style?: string; - } ) => { + }: ProcessImageGenerationProps ) => { return new Promise< ImageResponse >( ( resolve, reject ) => { if ( previousMediaId && pointer.current === 0 ) { pointer.current++; @@ -158,7 +190,10 @@ export default function useAiImage( { { generating: false, error: new Error( - __( "You don't have enough requests to generate another image.", 'jetpack' ) + __( + "You don't have enough requests to generate another image.", + 'jetpack-ai-client' + ) ), }, pointer.current @@ -200,7 +235,7 @@ export default function useAiImage( { updateRequestsCount(); saveToMediaLibrary( image, name ) .then( savedImage => { - showSnackbarNotice( __( 'Image saved to media library.', 'jetpack' ) ); + showSnackbarNotice( __( 'Image saved to media library.', 'jetpack-ai-client' ) ); updateImages( { libraryId: savedImage?.id, libraryUrl: savedImage?.url, generating: false }, pointer.current diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/hooks/use-site-type.ts b/projects/js-packages/ai-client/src/components/ai-image/hooks/use-site-type.ts similarity index 83% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/hooks/use-site-type.ts rename to projects/js-packages/ai-client/src/components/ai-image/hooks/use-site-type.ts index cc99cfa282f22..831556a759672 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/hooks/use-site-type.ts +++ b/projects/js-packages/ai-client/src/components/ai-image/hooks/use-site-type.ts @@ -4,6 +4,11 @@ import { isAtomicSite, isSimpleSite } from '@automattic/jetpack-shared-extension-utils'; import { useState } from '@wordpress/element'; +/** + * Hook to get the type of site. + * + * @return {string} - The type of site. + */ export default function useSiteType() { const getSiteType = () => { if ( isAtomicSite() ) { diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/index.ts b/projects/js-packages/ai-client/src/components/ai-image/index.ts similarity index 56% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/index.ts rename to projects/js-packages/ai-client/src/components/ai-image/index.ts index 8eda7aef961f4..f38945a1af2f6 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/index.ts +++ b/projects/js-packages/ai-client/src/components/ai-image/index.ts @@ -1,6 +1,6 @@ -import FeaturedImage from './featured-image'; -import GeneralPurposeImage from './general-purpose-image'; -import { PLACEMENT_MEDIA_SOURCE_DROPDOWN, PLACEMENT_BLOCK_PLACEHOLDER_BUTTON } from './types'; +import FeaturedImage from './featured-image.js'; +import GeneralPurposeImage from './general-purpose-image.js'; +import { PLACEMENT_MEDIA_SOURCE_DROPDOWN, PLACEMENT_BLOCK_PLACEHOLDER_BUTTON } from './types.js'; export { FeaturedImage, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/style.scss b/projects/js-packages/ai-client/src/components/ai-image/style.scss similarity index 100% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/style.scss rename to projects/js-packages/ai-client/src/components/ai-image/style.scss diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/types.ts b/projects/js-packages/ai-client/src/components/ai-image/types.ts similarity index 100% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-image/types.ts rename to projects/js-packages/ai-client/src/components/ai-image/types.ts diff --git a/projects/js-packages/ai-client/src/components/index.ts b/projects/js-packages/ai-client/src/components/index.ts index 1ef8b40b80426..246b9ce9ad6bf 100644 --- a/projects/js-packages/ai-client/src/components/index.ts +++ b/projects/js-packages/ai-client/src/components/index.ts @@ -1,5 +1,12 @@ export { AIControl, BlockAIControl, ExtensionAIControl } from './ai-control/index.js'; export { default as AiFeedbackThumbs } from './ai-feedback/index.js'; +export { default as AiIcon, AiSVG } from './ai-icon/index.js'; +export { + FeaturedImage, + GeneralPurposeImage, + PLACEMENT_MEDIA_SOURCE_DROPDOWN, + PLACEMENT_BLOCK_PLACEHOLDER_BUTTON, +} from './ai-image/index.js'; export { default as AiStatusIndicator } from './ai-status-indicator/index.js'; export { default as AudioDurationDisplay } from './audio-duration-display/index.js'; export { default as AiModalFooter } from './ai-modal-footer/index.js'; @@ -9,3 +16,8 @@ export { ErrorMessage, default as FooterMessage, } from './message/index.js'; +export { default as AiAssistantModal } from './modal/index.js'; +export { + default as QuotaExceededMessage, + FairUsageNotice, +} from './quota-exceeded-message/index.js'; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/modal/index.tsx b/projects/js-packages/ai-client/src/components/modal/index.tsx similarity index 73% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/modal/index.tsx rename to projects/js-packages/ai-client/src/components/modal/index.tsx index 414248b5abf15..bdbbe315bcb90 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/modal/index.tsx +++ b/projects/js-packages/ai-client/src/components/modal/index.tsx @@ -1,13 +1,14 @@ /** * External dependencies */ -import { AiStatusIndicator, RequestingStateProp } from '@automattic/jetpack-ai-client'; import { Modal, Button } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { close } from '@wordpress/icons'; /** * Internal dependencies */ +import AiStatusIndicator from '../ai-status-indicator/index.js'; +import type { RequestingStateProp } from '../../types.js'; import './style.scss'; const ModalHeader = ( { @@ -25,26 +26,33 @@ const ModalHeader = ( {

      { title }

      -
      ); }; -export default function AiAssistantModal( { - children, - handleClose, - hideHeader = true, - requestingState = 'init', - title = __( 'AI Assistant', 'jetpack' ), - maxWidth = 720, -}: { +type AiAssistantModalProps = { children: React.ReactNode; handleClose: () => void; hideHeader?: boolean; requestingState?: RequestingStateProp; title?: string; maxWidth?: number; -} ) { +}; + +/** + * AiAssistantModal component + * @param {AiAssistantModalProps} props - The component properties. + * @return {React.ReactElement} - rendered component. + */ +export default function AiAssistantModal( { + children, + handleClose, + hideHeader = true, + requestingState = 'init', + title = __( 'AI Assistant', 'jetpack-ai-client' ), + maxWidth = 720, +}: AiAssistantModalProps ) { return ( { const getFairUsageNoticeMessage = resetDateString => { const fairUsageMessage = __( "You've reached this month's request limit, per our fair usage policy.", - 'jetpack' + 'jetpack-ai-client' ); if ( ! resetDateString ) { @@ -57,7 +56,7 @@ const useFairUsageNoticeMessage = () => { } // Translators: %s is the date when the requests will reset. - const dateMessage = __( 'Requests will reset on %s.', 'jetpack' ); + const dateMessage = __( 'Requests will reset on %s.', 'jetpack-ai-client' ); const formattedDateMessage = sprintf( dateMessage, resetDateString ); return `${ fairUsageMessage } ${ formattedDateMessage }`; @@ -121,7 +120,7 @@ const DefaultUpgradePrompt = ( { const cantUpgradeDescription = createInterpolateElement( __( 'Congratulations on exploring Jetpack AI and reaching the free requests limit! Reach out to the site administrator to upgrade and keep using Jetpack AI.', - 'jetpack' + 'jetpack-ai-client' ), { strong: , @@ -146,12 +145,12 @@ const DefaultUpgradePrompt = ( { const contactHref = getRedirectUrl( 'jetpack-ai-tiers-more-requests-contact' ); const contactUsDescription = __( 'You have reached the request limit for your current plan.', - 'jetpack' + 'jetpack-ai-client' ); return ( Upgrade now to increase your requests limit to %d.', - 'jetpack' + 'jetpack-ai-client' ), nextTier.limit ), @@ -183,7 +182,7 @@ const DefaultUpgradePrompt = ( { Upgrade now to keep using it.', - 'jetpack' + 'jetpack-ai-client' ), { strong: , @@ -243,7 +242,7 @@ const VIPUpgradePrompt = ( { const vipDescription = createInterpolateElement( __( "You've reached the Jetpack AI rate limit. Please reach out to your VIP account team.", - 'jetpack' + 'jetpack-ai-client' ), { strong: , diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/components/quota-exceeded-message/light-nudge.tsx b/projects/js-packages/ai-client/src/components/quota-exceeded-message/light-nudge.tsx similarity index 92% rename from projects/plugins/jetpack/extensions/blocks/ai-assistant/components/quota-exceeded-message/light-nudge.tsx rename to projects/js-packages/ai-client/src/components/quota-exceeded-message/light-nudge.tsx index 2e7643e48e69f..7b2ad6fbbdf68 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-assistant/components/quota-exceeded-message/light-nudge.tsx +++ b/projects/js-packages/ai-client/src/components/quota-exceeded-message/light-nudge.tsx @@ -13,7 +13,7 @@ export const LightNudge = ( { showButton = true, target = '_top', } ) => { - const redirectingText = __( 'Redirecting…', 'jetpack' ); + const redirectingText = __( 'Redirecting…', 'jetpack-ai-client' ); return (
      diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/components/quota-exceeded-message/style.scss b/projects/js-packages/ai-client/src/components/quota-exceeded-message/style.scss similarity index 100% rename from projects/plugins/jetpack/extensions/blocks/ai-assistant/components/quota-exceeded-message/style.scss rename to projects/js-packages/ai-client/src/components/quota-exceeded-message/style.scss diff --git a/projects/js-packages/ai-client/src/constants.ts b/projects/js-packages/ai-client/src/constants.ts index 24939af6461f3..6a5cce721816c 100644 --- a/projects/js-packages/ai-client/src/constants.ts +++ b/projects/js-packages/ai-client/src/constants.ts @@ -114,3 +114,8 @@ export const WRITE_POST_FROM_LIST_LABEL = __( 'Write a post from this list', 'je export const GENERATE_TITLE_LABEL = __( 'Generate a post title', 'jetpack-ai-client' ); export const SUMMARY_BASED_ON_TITLE_LABEL = __( 'Summary based on title', 'jetpack-ai-client' ); export const CONTINUE_LABEL = __( 'Continue writing', 'jetpack-ai-client' ); + +// Jetpack Sidebar +export const PLACEMENT_JETPACK_SIDEBAR = 'jetpack-sidebar' as const; +export const PLACEMENT_DOCUMENT_SETTINGS = 'document-settings' as const; +export const PLACEMENT_PRE_PUBLISH = 'pre-publish' as const; diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-checkout/index.ts b/projects/js-packages/ai-client/src/hooks/use-ai-checkout/index.ts similarity index 80% rename from projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-checkout/index.ts rename to projects/js-packages/ai-client/src/hooks/use-ai-checkout/index.ts index dde63a080eb2c..93ca2f3c2d42c 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-checkout/index.ts +++ b/projects/js-packages/ai-client/src/hooks/use-ai-checkout/index.ts @@ -1,14 +1,14 @@ /* * External dependencies */ -import { getRedirectUrl } from '@automattic/jetpack-components'; +import getRedirectUrl from '@automattic/jetpack-components/tools/jp-redirect'; import { isAtomicSite, isSimpleSite, getSiteFragment, + useAutosaveAndRedirect, } from '@automattic/jetpack-shared-extension-utils'; -import useAutosaveAndRedirect from '../../../../shared/use-autosave-and-redirect'; -import useAiFeature from '../use-ai-feature'; +import useAiFeature from '../use-ai-feature/index.js'; /* * Types */ @@ -26,11 +26,18 @@ const getWPComRedirectToURL = () => { return `https://wordpress.com/home/${ site }`; }; -export default function useAICheckout(): { +type UseAICheckoutReturn = { checkoutUrl: string; autosaveAndRedirect: ( event: MouseEvent< HTMLButtonElement > ) => void; isRedirecting: boolean; -} { +}; + +/** + * The hook to get properties for AICheckout + * + * @return {UseAICheckoutReturn} - Object containing properties for AICheckout. + */ +export default function useAICheckout(): UseAICheckoutReturn { const { nextTier, tierPlansEnabled } = useAiFeature(); const wpcomRedirectToURL = getWPComRedirectToURL(); diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-feature/Readme.md b/projects/js-packages/ai-client/src/hooks/use-ai-feature/Readme.md similarity index 100% rename from projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-feature/Readme.md rename to projects/js-packages/ai-client/src/hooks/use-ai-feature/Readme.md diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-feature/index.ts b/projects/js-packages/ai-client/src/hooks/use-ai-feature/index.ts similarity index 81% rename from projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-feature/index.ts rename to projects/js-packages/ai-client/src/hooks/use-ai-feature/index.ts index db84bbd4577c7..d028c1af84801 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-feature/index.ts +++ b/projects/js-packages/ai-client/src/hooks/use-ai-feature/index.ts @@ -1,10 +1,17 @@ /** * External dependencies */ +import { + PLAN_TYPE_FREE, + usePlanType as getPlanType, +} from '@automattic/jetpack-shared-extension-utils'; import { useDispatch, useSelect } from '@wordpress/data'; -import { PLAN_TYPE_FREE, usePlanType as getPlanType } from '../../../../shared/use-plan-type'; -import type { WordPressPlansSelectors } from 'extensions/store/wordpress-com'; +import type { WordPressPlansSelectors } from '@automattic/jetpack-shared-extension-utils/store/wordpress-com'; +/** + * Hook to get properties for AiFeature + * @return {object} - Object containing properties for AiFeature. + */ export default function useAiFeature() { const { data, loading, requestsLimit, requestsCount } = useSelect( select => { const { getAiAssistantFeature, getIsRequestingAiAssistantFeature } = select( diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/hooks/use-post-content.ts b/projects/js-packages/ai-client/src/hooks/use-post-content.ts similarity index 81% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/hooks/use-post-content.ts rename to projects/js-packages/ai-client/src/hooks/use-post-content.ts index 09fcc7d1fa54c..e4e983f2d4ec6 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/hooks/use-post-content.ts +++ b/projects/js-packages/ai-client/src/hooks/use-post-content.ts @@ -1,13 +1,16 @@ /** * External dependencies */ -import { renderMarkdownFromHTML } from '@automattic/jetpack-ai-client'; import { serialize } from '@wordpress/blocks'; import { useSelect } from '@wordpress/data'; /** * Types */ -import type * as BlockEditorSelectors from '@wordpress/block-editor/store/selectors'; +import { renderMarkdownFromHTML } from '../libs/markdown/index.js'; +import type * as BlockEditorSelectors from '@wordpress/block-editor/store/selectors.js'; +/** + * Internal dependencies + */ /* * Simple helper to get the post content as markdown diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/hooks/use-save-to-media-library.ts b/projects/js-packages/ai-client/src/hooks/use-save-to-media-library.ts similarity index 82% rename from projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/hooks/use-save-to-media-library.ts rename to projects/js-packages/ai-client/src/hooks/use-save-to-media-library.ts index 89bfc570c369b..9042d8ead73d1 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/hooks/use-save-to-media-library.ts +++ b/projects/js-packages/ai-client/src/hooks/use-save-to-media-library.ts @@ -8,10 +8,20 @@ import debugFactory from 'debug'; /** * Types */ -import type { BlockEditorStore } from '../../../blocks/ai-assistant/types'; +import type { BlockEditorStore } from '../types.js'; -const debug = debugFactory( 'jetpack-ai-assistant-plugin:save-to-media-library' ); +const debug = debugFactory( 'jetpack-ai-client:save-to-media-library' ); +type UseSaveToMediaLibraryReturn = { + isLoading: boolean; + saveToMediaLibrary: ( url: string, name: string ) => Promise< { id: string; url: string } >; +}; + +/** + * Hook to save data to media library + * + * @return {UseSaveToMediaLibraryReturn} - Object containing properties to save data to media library. + */ export default function useSaveToMediaLibrary() { const [ isLoading, setIsLoading ] = useState( false ); const { getSettings } = useSelect( diff --git a/projects/js-packages/ai-client/src/index.ts b/projects/js-packages/ai-client/src/index.ts index c50ee2ff78c3b..8342cf0899312 100644 --- a/projects/js-packages/ai-client/src/index.ts +++ b/projects/js-packages/ai-client/src/index.ts @@ -10,12 +10,15 @@ export { default as transcribeAudio } from './audio-transcription/index.js'; /* * Hooks */ +export { default as useAICheckout } from './hooks/use-ai-checkout/index.js'; +export { default as useAiFeature } from './hooks/use-ai-feature/index.js'; export { default as useAiSuggestions, getErrorData } from './hooks/use-ai-suggestions/index.js'; export { default as useMediaRecording } from './hooks/use-media-recording/index.js'; export { default as useAudioTranscription } from './hooks/use-audio-transcription/index.js'; export { default as useTranscriptionPostProcessing } from './hooks/use-transcription-post-processing/index.js'; export { default as useAudioValidation } from './hooks/use-audio-validation/index.js'; export { default as useImageGenerator } from './hooks/use-image-generator/index.js'; +export { default as usePostContent } from './hooks/use-post-content.js'; export * from './hooks/use-image-generator/constants.js'; /* diff --git a/projects/js-packages/ai-client/src/logo-generator/components/upgrade-screen.tsx b/projects/js-packages/ai-client/src/logo-generator/components/upgrade-screen.tsx index 5c401d17b7369..27182c8634747 100644 --- a/projects/js-packages/ai-client/src/logo-generator/components/upgrade-screen.tsx +++ b/projects/js-packages/ai-client/src/logo-generator/components/upgrade-screen.tsx @@ -1,13 +1,13 @@ /** * External dependencies */ +import getRedirectUrl from '@automattic/jetpack-components/tools/jp-redirect'; import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import { Button } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; /** * Internal dependencies */ -import getRedirectUrl from '../../../../components/tools/jp-redirect/index.js'; import { EVENT_PLACEMENT_FREE_USER_SCREEN, EVENT_UPGRADE } from '../constants.js'; import useLogoGenerator from '../hooks/use-logo-generator.js'; /** diff --git a/projects/js-packages/ai-client/src/logo-generator/hooks/use-fair-usage-notice-message.tsx b/projects/js-packages/ai-client/src/logo-generator/hooks/use-fair-usage-notice-message.tsx index 42251c01ed734..238ad1ae28100 100644 --- a/projects/js-packages/ai-client/src/logo-generator/hooks/use-fair-usage-notice-message.tsx +++ b/projects/js-packages/ai-client/src/logo-generator/hooks/use-fair-usage-notice-message.tsx @@ -1,7 +1,7 @@ +import getRedirectUrl from '@automattic/jetpack-components/tools/jp-redirect'; import { useSelect } from '@wordpress/data'; import { createInterpolateElement, type Element } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; -import getRedirectUrl from '../../../../components/tools/jp-redirect/index.js'; /** * Internal dependencies */ diff --git a/projects/js-packages/components/changelog/feat-move-external-media-to-package b/projects/js-packages/components/changelog/feat-move-external-media-to-package new file mode 100644 index 0000000000000..8b2dab6f32c7e --- /dev/null +++ b/projects/js-packages/components/changelog/feat-move-external-media-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +jetpack-components: Export the getRedirectUrl function with subpath diff --git a/projects/plugins/jetpack/extensions/shared/components/number-control/index.jsx b/projects/js-packages/components/components/number-control/index.jsx similarity index 65% rename from projects/plugins/jetpack/extensions/shared/components/number-control/index.jsx rename to projects/js-packages/components/components/number-control/index.jsx index 086023f3d93eb..b3f730c2a6f8e 100644 --- a/projects/plugins/jetpack/extensions/shared/components/number-control/index.jsx +++ b/projects/js-packages/components/components/number-control/index.jsx @@ -1,19 +1,17 @@ import { - NumberControl as BlockEditorNumberControl, __experimentalNumberControl as ExperimentalNumberControl, // eslint-disable-line @wordpress/no-unsafe-wp-apis TextControl, } from '@wordpress/components'; /** - * This uses the publicly accessible or experimental NumberControl - * from the block editor where available, otherwise it falls back - * to a standard TextControl, limited to numbers. + * This uses the experimental NumberControl from the block + * editor where available, otherwise it falls back to a + * standard TextControl, limited to numbers. * * @param {any} props - the NumberControl component props * @return {object} - NumberControl component */ const NumberControl = - BlockEditorNumberControl || ExperimentalNumberControl || function CustomNumberControl( props ) { return ; diff --git a/projects/js-packages/components/index.ts b/projects/js-packages/components/index.ts index eb90df97ad5fe..6f12955cc1aae 100644 --- a/projects/js-packages/components/index.ts +++ b/projects/js-packages/components/index.ts @@ -49,6 +49,7 @@ export { default as ThreatSeverityBadge } from './components/threat-severity-bad export { default as ThreatsDataViews } from './components/threats-data-views'; export { default as Text, H2, H3, Title } from './components/text'; export { default as ToggleControl } from './components/toggle-control'; +export { default as NumberControl } from './components/number-control'; export { default as numberFormat } from './components/number-format'; export { default as QRCode } from './components/qr-code'; export { default as Button } from './components/button'; diff --git a/projects/js-packages/components/package.json b/projects/js-packages/components/package.json index e9ed2b1564878..d7313633920e2 100644 --- a/projects/js-packages/components/package.json +++ b/projects/js-packages/components/package.json @@ -72,7 +72,8 @@ "extends @wordpress/browserslist-config" ], "exports": { - ".": "./index.ts" + ".": "./index.ts", + "./tools/jp-redirect": "./tools/jp-redirect/index.ts" }, "sideEffects": [ "*.css", diff --git a/projects/js-packages/publicize-components/changelog/feat-move-external-media-to-package b/projects/js-packages/publicize-components/changelog/feat-move-external-media-to-package new file mode 100644 index 0000000000000..b084af6adee0d --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/feat-move-external-media-to-package @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +External Media: Move the external-media to the new @automattic/jetpack-external-media package diff --git a/projects/js-packages/publicize-components/src/components/post-publish-manual-sharing/index.jsx b/projects/js-packages/publicize-components/src/components/post-publish-manual-sharing/index.jsx index 592dd9a49e700..668d9edc88c94 100644 --- a/projects/js-packages/publicize-components/src/components/post-publish-manual-sharing/index.jsx +++ b/projects/js-packages/publicize-components/src/components/post-publish-manual-sharing/index.jsx @@ -1,4 +1,4 @@ -import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils/components'; import { useSelect } from '@wordpress/data'; import { PluginPostPublishPanel } from '@wordpress/edit-post'; import { store as editorStore } from '@wordpress/editor'; diff --git a/projects/js-packages/shared-extension-utils/changelog/feat-move-external-media-to-package b/projects/js-packages/shared-extension-utils/changelog/feat-move-external-media-to-package new file mode 100644 index 0000000000000..5d992aa52a1c8 --- /dev/null +++ b/projects/js-packages/shared-extension-utils/changelog/feat-move-external-media-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +External Media: Move the GooglePhotosMedia, OpenverseMedia, PexelsMedia to @automattic/jetpack-shared-extension-utils diff --git a/projects/js-packages/shared-extension-utils/index.js b/projects/js-packages/shared-extension-utils/index.js index 2dd8f77b42027..5c731e6a43418 100644 --- a/projects/js-packages/shared-extension-utils/index.js +++ b/projects/js-packages/shared-extension-utils/index.js @@ -1,3 +1,4 @@ +export * from './src/block-icons'; export { default as getJetpackData, JETPACK_DATA_PATH } from './src/get-jetpack-data'; export { default as getSiteFragment } from './src/get-site-fragment'; export * from './src/site-type-utils'; @@ -15,9 +16,12 @@ export { } from './src/plan-utils'; export { default as isCurrentUserConnected } from './src/is-current-user-connected'; export { default as useAnalytics } from './src/hooks/use-analytics'; +export { default as useAutosaveAndRedirect } from './src/hooks/use-autosave-and-redirect'; +export * from './src/hooks/use-plan-type'; +export { default as useRefInterval } from './src/hooks/use-ref-interval'; export { default as useModuleStatus } from './src/hooks/use-module-status'; -export { default as JetpackEditorPanelLogo } from './src/components/jetpack-editor-panel-logo'; export { getBlockIconComponent, getBlockIconProp } from './src/get-block-icon-from-metadata'; export { default as getJetpackBlocksVariation } from './src/get-jetpack-blocks-variation'; export * from './src/modules-state'; export { default as isMyJetpackAvailable } from './src/is-my-jetpack-available'; +export * from './src/libs'; diff --git a/projects/js-packages/shared-extension-utils/package.json b/projects/js-packages/shared-extension-utils/package.json index fe103b809f8eb..f31ef11c086a0 100644 --- a/projects/js-packages/shared-extension-utils/package.json +++ b/projects/js-packages/shared-extension-utils/package.json @@ -18,16 +18,22 @@ "test-coverage": "pnpm run test --coverage" }, "dependencies": { + "@automattic/color-studio": "4.0.0", "@automattic/jetpack-analytics": "workspace:*", + "@automattic/jetpack-base-styles": "workspace:*", "@automattic/jetpack-components": "workspace:*", "@automattic/jetpack-connection": "workspace:*", "@wordpress/api-fetch": "7.17.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/components": "29.3.0", "@wordpress/compose": "7.17.0", "@wordpress/data": "10.17.0", "@wordpress/element": "6.17.0", "@wordpress/i18n": "5.17.0", "@wordpress/plugins": "7.17.0", "@wordpress/url": "4.17.0", + "clsx": "2.1.1", + "debug": "4.4.0", "lodash": "4.17.21" }, "devDependencies": { @@ -35,6 +41,7 @@ "@babel/core": "7.26.0", "@babel/plugin-transform-react-jsx": "7.25.9", "@babel/preset-react": "7.26.3", + "@babel/runtime": "7.26.0", "@testing-library/dom": "10.4.0", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", @@ -47,6 +54,10 @@ "react-dom": "18.3.1" }, "exports": { - ".": "./index.js" + ".": "./index.js", + "./components": "./src/components/index.js", + "./icons": "./src/icons.js", + "./store/wordpress-com": "./src/store/wordpress-com/index.ts", + "./store/wordpress-com/types": "./src/store/wordpress-com/types.ts" } } diff --git a/projects/plugins/jetpack/extensions/shared/block-icons.js b/projects/js-packages/shared-extension-utils/src/block-icons.js similarity index 85% rename from projects/plugins/jetpack/extensions/shared/block-icons.js rename to projects/js-packages/shared-extension-utils/src/block-icons.js index c2f176002e749..c072ceac038b3 100644 --- a/projects/plugins/jetpack/extensions/shared/block-icons.js +++ b/projects/js-packages/shared-extension-utils/src/block-icons.js @@ -1,5 +1,5 @@ import colorStudio from '@automattic/color-studio'; -import { isAtomicSite, isSimpleSite } from '@automattic/jetpack-shared-extension-utils'; +import { isAtomicSite, isSimpleSite } from './site-type-utils'; /** * Constants diff --git a/projects/js-packages/shared-extension-utils/src/components/index.js b/projects/js-packages/shared-extension-utils/src/components/index.js new file mode 100644 index 0000000000000..d4f1ffd66fbd7 --- /dev/null +++ b/projects/js-packages/shared-extension-utils/src/components/index.js @@ -0,0 +1,2 @@ +export { default as JetpackEditorPanelLogo } from './jetpack-editor-panel-logo'; +export { Nudge } from './upgrade-nudge'; diff --git a/projects/plugins/jetpack/extensions/shared/components/upgrade-nudge/index.jsx b/projects/js-packages/shared-extension-utils/src/components/upgrade-nudge/index.jsx similarity index 93% rename from projects/plugins/jetpack/extensions/shared/components/upgrade-nudge/index.jsx rename to projects/js-packages/shared-extension-utils/src/components/upgrade-nudge/index.jsx index 4dab71f5bfe78..0055a839ca656 100644 --- a/projects/plugins/jetpack/extensions/shared/components/upgrade-nudge/index.jsx +++ b/projects/js-packages/shared-extension-utils/src/components/upgrade-nudge/index.jsx @@ -1,6 +1,7 @@ import { Button } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; +import React from 'react'; import './style.scss'; @@ -24,7 +25,7 @@ export const Nudge = ( { 'jetpack-upgrade-plan__hidden': ! visible, } ); - const redirectingText = __( 'Redirecting…', 'jetpack' ); + const redirectingText = __( 'Redirecting…', 'jetpack-shared-extension-utils' ); return (
      diff --git a/projects/plugins/jetpack/extensions/shared/components/upgrade-nudge/style.scss b/projects/js-packages/shared-extension-utils/src/components/upgrade-nudge/style.scss similarity index 100% rename from projects/plugins/jetpack/extensions/shared/components/upgrade-nudge/style.scss rename to projects/js-packages/shared-extension-utils/src/components/upgrade-nudge/style.scss diff --git a/projects/plugins/jetpack/extensions/shared/use-autosave-and-redirect/README.md b/projects/js-packages/shared-extension-utils/src/hooks/use-autosave-and-redirect/README.md similarity index 100% rename from projects/plugins/jetpack/extensions/shared/use-autosave-and-redirect/README.md rename to projects/js-packages/shared-extension-utils/src/hooks/use-autosave-and-redirect/README.md diff --git a/projects/plugins/jetpack/extensions/shared/use-autosave-and-redirect/index.js b/projects/js-packages/shared-extension-utils/src/hooks/use-autosave-and-redirect/index.js similarity index 80% rename from projects/plugins/jetpack/extensions/shared/use-autosave-and-redirect/index.js rename to projects/js-packages/shared-extension-utils/src/hooks/use-autosave-and-redirect/index.js index 8d9d494b35cd3..8acb150b23f07 100644 --- a/projects/plugins/jetpack/extensions/shared/use-autosave-and-redirect/index.js +++ b/projects/js-packages/shared-extension-utils/src/hooks/use-autosave-and-redirect/index.js @@ -2,6 +2,13 @@ import { useSelect, dispatch } from '@wordpress/data'; import { useState } from '@wordpress/element'; import { noop } from 'lodash'; +/** + * To handle the redirection + * @param {string} url - The redirect URL. + * @param {Function} callback - The callback of the redirection. + * @param {boolean} shouldOpenNewWindow - Whether to open the new window. + * @return {Window | null} - The open window. + */ function redirect( url, callback, shouldOpenNewWindow = false ) { if ( callback ) { callback( url ); @@ -10,6 +17,13 @@ function redirect( url, callback, shouldOpenNewWindow = false ) { return shouldOpenNewWindow ? window.open( url, '_blank' ) : ( window.top.location.href = url ); } +/** + * Hook to get properties for AiImage + * + * @param {string} redirectUrl - The redirect URL. + * @param {Function} onRedirect - To handle the redirection. + * @return {object} - Object containing properties to handle autosave and redirect. + */ export default function useAutosaveAndRedirect( redirectUrl, onRedirect = noop ) { const [ isRedirecting, setIsRedirecting ] = useState( false ); diff --git a/projects/plugins/jetpack/extensions/shared/use-plan-type/index.ts b/projects/js-packages/shared-extension-utils/src/hooks/use-plan-type/index.ts similarity index 100% rename from projects/plugins/jetpack/extensions/shared/use-plan-type/index.ts rename to projects/js-packages/shared-extension-utils/src/hooks/use-plan-type/index.ts diff --git a/projects/plugins/jetpack/extensions/shared/use-ref-interval.ts b/projects/js-packages/shared-extension-utils/src/hooks/use-ref-interval.ts similarity index 100% rename from projects/plugins/jetpack/extensions/shared/use-ref-interval.ts rename to projects/js-packages/shared-extension-utils/src/hooks/use-ref-interval.ts diff --git a/projects/plugins/jetpack/extensions/shared/icons.js b/projects/js-packages/shared-extension-utils/src/icons.js similarity index 94% rename from projects/plugins/jetpack/extensions/shared/icons.js rename to projects/js-packages/shared-extension-utils/src/icons.js index c0b40c80481f2..b68a35cc99e75 100644 --- a/projects/plugins/jetpack/extensions/shared/icons.js +++ b/projects/js-packages/shared-extension-utils/src/icons.js @@ -1,6 +1,7 @@ import colorStudio from '@automattic/color-studio'; -import { G, Path, Polygon, Rect, SVG } from '@wordpress/components'; +import { G, Path, Polygon, Rect, SVG, Circle } from '@wordpress/components'; import clsx from 'clsx'; +import React from 'react'; import { getIconColor } from './block-icons'; import './icons.scss'; @@ -45,6 +46,44 @@ export const GooglePhotosIcon = props => ( ); +export const GooglePhotosMediaIcon = props => ( + + + + + + +); + export const OpenverseIcon = props => ( { @@ -40,6 +40,11 @@ export function isUserConnected(): boolean { return false; } +/** + * Return whether the user can purchase plan. + * + * @return {boolean} true if the user can purchase plan, false otherwise. + */ export function canUserPurchasePlan(): boolean { if ( isSimpleSite() ) { // Roles on simple sites can't be inferred from the connection status. diff --git a/projects/js-packages/shared-extension-utils/src/libs/index.js b/projects/js-packages/shared-extension-utils/src/libs/index.js new file mode 100644 index 0000000000000..0fb3261750448 --- /dev/null +++ b/projects/js-packages/shared-extension-utils/src/libs/index.js @@ -0,0 +1 @@ +export * from './connection'; diff --git a/projects/plugins/jetpack/extensions/store/wordpress-com/actions.ts b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/actions.ts similarity index 97% rename from projects/plugins/jetpack/extensions/store/wordpress-com/actions.ts rename to projects/js-packages/shared-extension-utils/src/store/wordpress-com/actions.ts index eff7de59114c2..655c12a00d0b1 100644 --- a/projects/plugins/jetpack/extensions/store/wordpress-com/actions.ts +++ b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/actions.ts @@ -18,9 +18,8 @@ import { ENDPOINT_AI_ASSISTANT_FEATURE, NEW_ASYNC_REQUEST_TIMER_INTERVAL, ACTION_SET_TIER_PLANS_ENABLED, -} from './constants'; -import type { Plan, AiFeatureProps } from './types'; -import type { SiteAIAssistantFeatureEndpointResponseProps } from '../../types'; +} from './constants.js'; +import type { Plan, AiFeatureProps, SiteAIAssistantFeatureEndpointResponseProps } from './types.js'; /** * Map the response from the `sites/$site/ai-assistant-feature` diff --git a/projects/plugins/jetpack/extensions/store/wordpress-com/constants.ts b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/constants.ts similarity index 100% rename from projects/plugins/jetpack/extensions/store/wordpress-com/constants.ts rename to projects/js-packages/shared-extension-utils/src/store/wordpress-com/constants.ts diff --git a/projects/plugins/jetpack/extensions/store/wordpress-com/index.ts b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/index.ts similarity index 95% rename from projects/plugins/jetpack/extensions/store/wordpress-com/index.ts rename to projects/js-packages/shared-extension-utils/src/store/wordpress-com/index.ts index ced7da05748df..dffee583597b9 100644 --- a/projects/plugins/jetpack/extensions/store/wordpress-com/index.ts +++ b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/index.ts @@ -5,12 +5,12 @@ import { createReduxStore, register } from '@wordpress/data'; /** * Internal dependencies */ -import actions from './actions'; -import reducer from './reducer'; +import actions from './actions.js'; +import reducer from './reducer.js'; /** * Types */ -import type { AiFeatureProps, PlanStateProps } from './types'; +import type { AiFeatureProps, PlanStateProps } from './types.js'; const store = 'wordpress-com/plans'; diff --git a/projects/plugins/jetpack/extensions/store/wordpress-com/reducer.ts b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/reducer.ts similarity index 95% rename from projects/plugins/jetpack/extensions/store/wordpress-com/reducer.ts rename to projects/js-packages/shared-extension-utils/src/store/wordpress-com/reducer.ts index 7747f4852b7ac..4d947739b0fe5 100644 --- a/projects/plugins/jetpack/extensions/store/wordpress-com/reducer.ts +++ b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/reducer.ts @@ -13,8 +13,8 @@ import { FREE_PLAN_REQUESTS_LIMIT, UNLIMITED_PLAN_REQUESTS_LIMIT, ACTION_SET_TIER_PLANS_ENABLED, -} from './constants'; -import type { PlanStateProps, TierLimitProp } from './types'; +} from './constants.js'; +import type { PlanStateProps, TierLimitProp } from './types.js'; const INITIAL_STATE: PlanStateProps = { plans: [], @@ -49,6 +49,12 @@ const INITIAL_STATE: PlanStateProps = { }, }; +/** + * The reducer of the plan state + * @param {PlanStateProps} state - The plan state. + * @param {object} action - The action. + * @return {PlanStateProps} - The plan state. + */ export default function reducer( state = INITIAL_STATE, action ) { switch ( action.type ) { case ACTION_SET_PLANS: diff --git a/projects/plugins/jetpack/extensions/store/wordpress-com/test/index.ts b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/test/index.ts similarity index 97% rename from projects/plugins/jetpack/extensions/store/wordpress-com/test/index.ts rename to projects/js-packages/shared-extension-utils/src/store/wordpress-com/test/index.ts index 5fcabf16bc7ff..c8474a4ea75d4 100644 --- a/projects/plugins/jetpack/extensions/store/wordpress-com/test/index.ts +++ b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/test/index.ts @@ -1,14 +1,14 @@ /** * Internal dependencies */ -import actions from '../actions'; +import actions from '../actions.js'; import { ACTION_INCREASE_AI_ASSISTANT_REQUESTS_COUNT, FREE_PLAN_REQUESTS_LIMIT, UNLIMITED_PLAN_REQUESTS_LIMIT, -} from '../constants'; -import reducer from '../reducer'; -import { AiFeatureProps, PlanStateProps } from '../types'; +} from '../constants.js'; +import reducer from '../reducer.js'; +import { AiFeatureProps, PlanStateProps } from '../types.js'; describe( 'actions', () => { it( 'should create an action to store the AI Assistant feature', () => { diff --git a/projects/plugins/jetpack/extensions/store/wordpress-com/types.ts b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/types.ts similarity index 80% rename from projects/plugins/jetpack/extensions/store/wordpress-com/types.ts rename to projects/js-packages/shared-extension-utils/src/store/wordpress-com/types.ts index e06d6b5d54e4a..9488a5aaec571 100644 --- a/projects/plugins/jetpack/extensions/store/wordpress-com/types.ts +++ b/projects/js-packages/shared-extension-utils/src/store/wordpress-com/types.ts @@ -131,3 +131,31 @@ export type PlanStateProps = { aiAssistant?: AiFeatureStateProps; }; }; + +/* + * `sites/$site/ai-assistant-feature` endpoint response body props + */ +export type SiteAIAssistantFeatureEndpointResponseProps = { + 'has-feature': boolean; + 'is-over-limit': boolean; + 'requests-count': number; + 'requests-limit': number; + 'usage-period': { + 'current-start': string; + 'next-start': string; + 'requests-count': number; + }; + 'site-require-upgrade': boolean; + 'error-message'?: string; + 'error-code'?: string; + 'upgrade-type': UpgradeTypeProp; + 'current-tier': TierProp; + 'tier-plans': Array< TierProp >; + 'next-tier'?: TierProp | null; + costs?: { + [ key: string ]: { + [ key: string ]: number; + }; + }; + 'features-control'?: FeaturesControl; +}; diff --git a/projects/js-packages/storybook/changelog/feat-move-external-media-to-package b/projects/js-packages/storybook/changelog/feat-move-external-media-to-package new file mode 100644 index 0000000000000..64547aa588d2f --- /dev/null +++ b/projects/js-packages/storybook/changelog/feat-move-external-media-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Storybook: Change target to esnext diff --git a/projects/js-packages/storybook/storybook/main.js b/projects/js-packages/storybook/storybook/main.js index 9101aadcc1a6f..41ec709f9fc46 100644 --- a/projects/js-packages/storybook/storybook/main.js +++ b/projects/js-packages/storybook/storybook/main.js @@ -54,7 +54,7 @@ const sbconfig = { // Use esbuild to minify. config.optimization.minimizer = [ new EsbuildPlugin( { - target: 'es2018', + target: 'esnext', } ), ]; diff --git a/projects/packages/external-media/.gitattributes b/projects/packages/external-media/.gitattributes new file mode 100644 index 0000000000000..035ccf15d402c --- /dev/null +++ b/projects/packages/external-media/.gitattributes @@ -0,0 +1,19 @@ +# Files not needed to be distributed in the package. +.gitattributes export-ignore +.github/ export-ignore +package.json export-ignore + +# Files to include in the mirror repo, but excluded via gitignore +# Remember to end all directories with `/**` to properly tag every file. +# /src/js/example.min.js production-include +src/build/** production-include + +# Files to exclude from the mirror repo, but included in the monorepo. +# Remember to end all directories with `/**` to properly tag every file. +.gitignore production-exclude +babel.config.js production-exclude +changelog/** production-exclude +phpunit.xml.dist production-exclude +.phpcs.dir.xml production-exclude +tests/** production-exclude +.phpcsignore production-exclude diff --git a/projects/packages/external-media/.gitignore b/projects/packages/external-media/.gitignore new file mode 100644 index 0000000000000..7804080492fbd --- /dev/null +++ b/projects/packages/external-media/.gitignore @@ -0,0 +1,4 @@ +vendor/ +node_modules/ +.cache/ +src/build diff --git a/projects/packages/external-media/.phan/baseline.php b/projects/packages/external-media/.phan/baseline.php new file mode 100644 index 0000000000000..3df50068147ad --- /dev/null +++ b/projects/packages/external-media/.phan/baseline.php @@ -0,0 +1,17 @@ + [ + ], + // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. + // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases) +]; diff --git a/projects/packages/external-media/.phan/config.php b/projects/packages/external-media/.phan/config.php new file mode 100644 index 0000000000000..14ba1d8250b95 --- /dev/null +++ b/projects/packages/external-media/.phan/config.php @@ -0,0 +1,13 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/packages/external-media/CHANGELOG.md b/projects/packages/external-media/CHANGELOG.md new file mode 100644 index 0000000000000..721294abd00ad --- /dev/null +++ b/projects/packages/external-media/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/projects/packages/external-media/README.md b/projects/packages/external-media/README.md new file mode 100644 index 0000000000000..41f1a6b353e7e --- /dev/null +++ b/projects/packages/external-media/README.md @@ -0,0 +1,24 @@ +# external-media + +The external media feature allows users to select and import photos from external media + +## How to install external-media + +### Installation From Git Repo + +## Contribute + +## Get Help + +## Using this package in your WordPress plugin + +If you plan on using this package in your WordPress plugin, we would recommend that you use [Jetpack Autoloader](https://packagist.org/packages/automattic/jetpack-autoloader) as your autoloader. This will allow for maximum interoperability with other plugins that use this package as well. + +## Security + +Need to report a security vulnerability? Go to [https://automattic.com/security/](https://automattic.com/security/) or directly to our security bug bounty site [https://hackerone.com/automattic](https://hackerone.com/automattic). + +## License + +external-media is licensed under [GNU General Public License v2 (or later)](./LICENSE.txt) + diff --git a/projects/packages/external-media/babel.config.js b/projects/packages/external-media/babel.config.js new file mode 100644 index 0000000000000..86ab61e5ca991 --- /dev/null +++ b/projects/packages/external-media/babel.config.js @@ -0,0 +1,10 @@ +const config = { + presets: [ + [ + '@automattic/jetpack-webpack-config/babel/preset', + { pluginReplaceTextdomain: { textdomain: 'jetpack-external-media' } }, + ], + ], +}; + +module.exports = config; diff --git a/projects/packages/external-media/changelog/.gitkeep b/projects/packages/external-media/changelog/.gitkeep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/projects/packages/external-media/changelog/initial-version b/projects/packages/external-media/changelog/initial-version new file mode 100644 index 0000000000000..fb1837c901e51 --- /dev/null +++ b/projects/packages/external-media/changelog/initial-version @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Initial version. diff --git a/projects/packages/external-media/composer.json b/projects/packages/external-media/composer.json new file mode 100644 index 0000000000000..b5d178b5684ca --- /dev/null +++ b/projects/packages/external-media/composer.json @@ -0,0 +1,68 @@ +{ + "name": "automattic/jetpack-external-media", + "description": "The external media feature allows users to select and import photos from external media", + "type": "jetpack-library", + "license": "GPL-2.0-or-later", + "require": { + "php": ">=7.2", + "automattic/jetpack-assets": "@dev", + "automattic/jetpack-connection": "@dev", + "automattic/jetpack-constants": "@dev", + "automattic/jetpack-status": "@dev" + }, + "require-dev": { + "yoast/phpunit-polyfills": "^1.1.1", + "automattic/jetpack-changelogger": "@dev" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "build-development": "pnpm run build-js", + "build-production": "pnpm run build-production-js", + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-coverage": [ + "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "repositories": [ + { + "type": "path", + "url": "../../packages/*", + "options": { + "monorepo": true + } + } + ], + "minimum-stability": "dev", + "prefer-stable": true, + "extra": { + "mirror-repo": "Automattic/jetpack-external-media", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-external-media/compare/v${old}...v${new}" + }, + "autotagger": true, + "branch-alias": { + "dev-trunk": "0.1.x-dev" + }, + "textdomain": "jetpack-external-media", + "version-constants": { + "::PACKAGE_VERSION": "src/class-external-media.php" + } + }, + "config": { + "allow-plugins": { + "roots/wordpress-core-installer": true + } + } +} diff --git a/projects/packages/external-media/eslint.config.mjs b/projects/packages/external-media/eslint.config.mjs new file mode 100644 index 0000000000000..31bf76a4383d5 --- /dev/null +++ b/projects/packages/external-media/eslint.config.mjs @@ -0,0 +1,10 @@ +import makeBaseConfig from 'jetpack-js-tools/eslintrc/base.mjs'; + +export default [ + ...makeBaseConfig( import.meta.url ), + { + rules: { + 'react/jsx-no-bind': 'off', + }, + }, +]; diff --git a/projects/packages/external-media/jest.config.js b/projects/packages/external-media/jest.config.js new file mode 100644 index 0000000000000..b8c629c6b8ae4 --- /dev/null +++ b/projects/packages/external-media/jest.config.js @@ -0,0 +1,13 @@ +const baseConfig = require( 'jetpack-js-tools/jest/config.base.js' ); + +module.exports = { + ...baseConfig, + roots: [ '/src' ], + setupFiles: [ ...baseConfig.setupFiles, '/jest-globals.js' ], + transform: { + ...baseConfig.transform, + '\\.[jt]sx?$': require( 'jetpack-js-tools/jest/babel-jest-config-factory.js' )( + require.resolve + ), + }, +}; diff --git a/projects/packages/external-media/package.json b/projects/packages/external-media/package.json new file mode 100644 index 0000000000000..d3dac2da95e77 --- /dev/null +++ b/projects/packages/external-media/package.json @@ -0,0 +1,60 @@ +{ + "private": true, + "name": "@automattic/jetpack-external-media", + "version": "0.1.0-alpha", + "description": "The external media feature allows users to select and import photos from external media", + "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/external-media/#readme", + "bugs": { + "url": "https://github.com/Automattic/jetpack/labels/[Package] External Media" + }, + "repository": { + "type": "git", + "url": "https://github.com/Automattic/jetpack.git", + "directory": "projects/packages/external-media" + }, + "license": "GPL-2.0-or-later", + "author": "Automattic", + "scripts": { + "build": "echo 'Not implemented.'", + "build-js": "pnpm clean && webpack", + "build-production": "echo 'Not implemented.'", + "build-production-js": "NODE_ENV=production BABEL_ENV=production pnpm build-js", + "clean": "rm -rf src/build/", + "watch": "pnpm run build-production-js && pnpm webpack watch" + }, + "devDependencies": { + "@automattic/jetpack-webpack-config": "workspace:*", + "@babel/core": "7.26.0", + "@babel/plugin-transform-react-jsx": "7.25.9", + "@babel/preset-react": "7.26.3", + "jetpack-js-tools": "workspace:*", + "sass": "1.64.1", + "sass-loader": "12.4.0", + "typescript": "^5.0.4", + "webpack": "5.94.0", + "webpack-cli": "4.9.1" + }, + "dependencies": { + "@automattic/jetpack-ai-client": "workspace:*", + "@automattic/jetpack-analytics": "workspace:*", + "@automattic/jetpack-base-styles": "workspace:*", + "@automattic/jetpack-components": "workspace:*", + "@automattic/jetpack-shared-extension-utils": "workspace:*", + "@automattic/request-external-access": "1.0.1", + "@wordpress/api-fetch": "7.17.0", + "@wordpress/block-editor": "14.12.0", + "@wordpress/components": "29.3.0", + "@wordpress/compose": "7.17.0", + "@wordpress/data": "10.17.0", + "@wordpress/element": "6.17.0", + "@wordpress/i18n": "5.17.0", + "@wordpress/icons": "10.17.0", + "@wordpress/keycodes": "4.17.0", + "@wordpress/url": "4.17.0", + "clsx": "2.1.1", + "lodash": "4.17.21", + "moment": "2.30.1", + "react": "18.3.1", + "react-dom": "18.3.1" + } +} diff --git a/projects/packages/external-media/phpunit.xml.dist b/projects/packages/external-media/phpunit.xml.dist new file mode 100644 index 0000000000000..3223c32458db2 --- /dev/null +++ b/projects/packages/external-media/phpunit.xml.dist @@ -0,0 +1,14 @@ + + + + tests/php + + + + + + + src + + + diff --git a/projects/packages/external-media/src/class-external-media.php b/projects/packages/external-media/src/class-external-media.php new file mode 100644 index 0000000000000..c8552680b7db9 --- /dev/null +++ b/projects/packages/external-media/src/class-external-media.php @@ -0,0 +1,81 @@ + true, + 'textdomain' => 'jetpack-external-media', + ) + ); + + wp_add_inline_script( + $asset_name, + sprintf( 'var JetpackExternalMediaData = %s;', wp_json_encode( self::get_data() ) ), + 'before' + ); + + Connection_Initial_State::render_script( $asset_name ); + } + + /** + * Get the initial state data. + * + * @return array + */ + private static function get_data() { + $host = new Host(); + if ( $host->is_wpcom_simple() ) { + $blog_id = get_current_blog_id(); + } else { + $blog_id = Jetpack_Options::get_option( 'id', 0 ); + } + + $jetpack_ai_enabled = false; + if ( $host->is_wpcom_simple() || $host->is_woa_site() ) { + $jetpack_ai_enabled = true; + } + + return array( + 'wpcomBlogId' => $blog_id, + 'pluginBasePath' => plugins_url( '', Constants::get_constant( 'JETPACK__PLUGIN_FILE' ) ), + 'ai-assistant' => array( + 'is-enabled' => apply_filters( 'jetpack_ai_enabled', $jetpack_ai_enabled ), + ), + ); + } +} diff --git a/projects/plugins/jetpack/extensions/shared/external-media/editor.scss b/projects/packages/external-media/src/features/editor/editor.scss similarity index 100% rename from projects/plugins/jetpack/extensions/shared/external-media/editor.scss rename to projects/packages/external-media/src/features/editor/editor.scss diff --git a/projects/plugins/jetpack/extensions/shared/external-media/index.js b/projects/packages/external-media/src/features/editor/index.js similarity index 86% rename from projects/plugins/jetpack/extensions/shared/external-media/index.js rename to projects/packages/external-media/src/features/editor/index.js index ecf704908fa6f..1cac88e31cbbf 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/index.js +++ b/projects/packages/external-media/src/features/editor/index.js @@ -1,11 +1,20 @@ import { isCurrentUserConnected } from '@automattic/jetpack-shared-extension-utils'; import { useBlockEditContext } from '@wordpress/block-editor'; import { addFilter } from '@wordpress/hooks'; -import MediaButton from './media-button'; -import { addPexelsToMediaInserter, addGooglePhotosToMediaInserter } from './media-service'; -import { mediaSources } from './sources'; +import { + addPexelsToMediaInserter, + addGooglePhotosToMediaInserter, + MediaButton, + mediaSources, +} from '../../shared'; import './editor.scss'; +/** + * Insert external media blocks + * @param {object} settings - The block settings. + * @param {string} name - The block name. + * @return {object} - The inserted block settings. + */ function insertExternalMediaBlocks( settings, name ) { if ( name !== 'core/image' ) { return settings; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/constants.js b/projects/packages/external-media/src/shared/constants.js similarity index 67% rename from projects/plugins/jetpack/extensions/shared/external-media/constants.js rename to projects/packages/external-media/src/shared/constants.js index 83e1731df976e..396889b863221 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/constants.js +++ b/projects/packages/external-media/src/shared/constants.js @@ -18,11 +18,11 @@ export const PATH_ROOT = '/'; export const PATH_OPTIONS = [ { value: PATH_RECENT, - label: __( 'Photos', 'jetpack' ), + label: __( 'Photos', 'jetpack-external-media' ), }, { value: PATH_ROOT, - label: __( 'Albums', 'jetpack' ), + label: __( 'Albums', 'jetpack-external-media' ), }, ]; export const GOOGLE_PHOTOS_PICKER_SESSION = 'google_photos_picker_session'; @@ -30,107 +30,107 @@ export const GOOGLE_PHOTOS_CATEGORIES = [ { value: '', /* translators: category of images */ - label: __( 'All categories', 'jetpack' ), + label: __( 'All categories', 'jetpack-external-media' ), }, { value: 'animals', /* translators: category of images */ - label: __( 'Animals', 'jetpack' ), + label: __( 'Animals', 'jetpack-external-media' ), }, { value: 'arts', /* translators: category of images */ - label: __( 'Arts', 'jetpack' ), + label: __( 'Arts', 'jetpack-external-media' ), }, { value: 'birthdays', /* translators: category of images */ - label: __( 'Birthdays', 'jetpack' ), + label: __( 'Birthdays', 'jetpack-external-media' ), }, { value: 'cityscapes', /* translators: category of images */ - label: __( 'Cityscapes', 'jetpack' ), + label: __( 'Cityscapes', 'jetpack-external-media' ), }, { value: 'crafts', /* translators: category of images */ - label: __( 'Crafts', 'jetpack' ), + label: __( 'Crafts', 'jetpack-external-media' ), }, { value: 'fashion', /* translators: category of images */ - label: __( 'Fashion', 'jetpack' ), + label: __( 'Fashion', 'jetpack-external-media' ), }, { value: 'food', /* translators: category of images */ - label: __( 'Food', 'jetpack' ), + label: __( 'Food', 'jetpack-external-media' ), }, { value: 'flowers', /* translators: category of images */ - label: __( 'Flowers', 'jetpack' ), + label: __( 'Flowers', 'jetpack-external-media' ), }, { value: 'gardens', /* translators: category of images */ - label: __( 'Gardens', 'jetpack' ), + label: __( 'Gardens', 'jetpack-external-media' ), }, { value: 'holidays', /* translators: category of images */ - label: __( 'Holidays', 'jetpack' ), + label: __( 'Holidays', 'jetpack-external-media' ), }, { value: 'houses', /* translators: category of images */ - label: __( 'Houses', 'jetpack' ), + label: __( 'Houses', 'jetpack-external-media' ), }, { value: 'landmarks', /* translators: category of images */ - label: __( 'Landmarks', 'jetpack' ), + label: __( 'Landmarks', 'jetpack-external-media' ), }, { value: 'landscapes', /* translators: category of images */ - label: __( 'Landscapes', 'jetpack' ), + label: __( 'Landscapes', 'jetpack-external-media' ), }, { value: 'night', /* translators: category of images */ - label: __( 'Night', 'jetpack' ), + label: __( 'Night', 'jetpack-external-media' ), }, { value: 'people', /* translators: category of images */ - label: __( 'People', 'jetpack' ), + label: __( 'People', 'jetpack-external-media' ), }, { value: 'pets', /* translators: category of images */ - label: __( 'Pets', 'jetpack' ), + label: __( 'Pets', 'jetpack-external-media' ), }, { value: 'selfies', /* translators: category of images */ - label: __( 'Selfies', 'jetpack' ), + label: __( 'Selfies', 'jetpack-external-media' ), }, { value: 'sport', /* translators: category of images */ - label: __( 'Sport', 'jetpack' ), + label: __( 'Sport', 'jetpack-external-media' ), }, { value: 'travel', /* translators: category of images */ - label: __( 'Travel', 'jetpack' ), + label: __( 'Travel', 'jetpack-external-media' ), }, { value: 'weddings', /* translators: category of images */ - label: __( 'Weddings', 'jetpack' ), + label: __( 'Weddings', 'jetpack-external-media' ), }, ]; export const PEXELS_EXAMPLE_QUERIES = [ @@ -151,34 +151,34 @@ export const DATE_RANGE_CUSTOM = 'CUSTOM'; export const GOOGLE_PHOTOS_DATE_PRESETS = [ { value: DATE_RANGE_ANY, - label: __( 'Any time', 'jetpack' ), + label: __( 'Any time', 'jetpack-external-media' ), }, { value: DATE_RANGE_LAST_7_DAYS, - label: __( 'Last 7 days', 'jetpack' ), + label: __( 'Last 7 days', 'jetpack-external-media' ), }, { value: DATE_RANGE_LAST_30_DAYS, - label: __( 'Last 30 days', 'jetpack' ), + label: __( 'Last 30 days', 'jetpack-external-media' ), }, { value: DATE_RANGE_LAST_6_MONTHS, - label: __( 'Last 6 months', 'jetpack' ), + label: __( 'Last 6 months', 'jetpack-external-media' ), }, { value: DATE_RANGE_LAST_12_MONTHS, - label: __( 'Last 12 months', 'jetpack' ), + label: __( 'Last 12 months', 'jetpack-external-media' ), }, { value: DATE_RANGE_CUSTOM, - label: __( 'Specific Month/Year', 'jetpack' ), + label: __( 'Specific Month/Year', 'jetpack-external-media' ), }, ]; export const CURRENT_YEAR = new Date().getFullYear(); export const MONTH_SELECT_OPTIONS = [ - { label: __( 'Any Month', 'jetpack' ), value: -1 }, + { label: __( 'Any Month', 'jetpack-external-media' ), value: -1 }, ...map( range( 0, 12 ), value => ( { // Following call generates a new date object for the particular month and gets its name. label: dateI18n( 'F', new Date( 0, value ) ), diff --git a/projects/packages/external-media/src/shared/index.js b/projects/packages/external-media/src/shared/index.js new file mode 100644 index 0000000000000..799d6945e156f --- /dev/null +++ b/projects/packages/external-media/src/shared/index.js @@ -0,0 +1,8 @@ +export * from './constants'; +export { default as MediaBrowser } from './media-browser'; +export { default as MediaPlaceholder } from './media-browser/placeholder'; +export { default as MediaButton } from './media-button'; +export * from './media-service'; +export * from './media-service/types'; +export * from './sources'; +export { default as withMedia } from './sources/with-media'; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/media-browser/index.js b/projects/packages/external-media/src/shared/media-browser/index.js similarity index 93% rename from projects/plugins/jetpack/extensions/shared/external-media/media-browser/index.js rename to projects/packages/external-media/src/shared/media-browser/index.js index afddfb0cdec73..8bfb203d86403 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/media-browser/index.js +++ b/projects/packages/external-media/src/shared/media-browser/index.js @@ -4,6 +4,7 @@ import { __ } from '@wordpress/i18n'; import { UP, DOWN, LEFT, RIGHT, SPACE, ENTER } from '@wordpress/keycodes'; import clsx from 'clsx'; import { debounce } from 'lodash'; +import React from 'react'; import MediaItem from './media-item'; import MediaPlaceholder from './placeholder'; @@ -11,10 +12,16 @@ const MAX_SELECTED = 10; const EmptyResults = memo( () => (
      -

      { __( 'Sorry, but nothing matched your search criteria.', 'jetpack' ) }

      +

      { __( 'Sorry, but nothing matched your search criteria.', 'jetpack-external-media' ) }

      ) ); +/** + * MediaBrowser component + * + * @param {object} props - The component props + * @return {React.ReactElement} - JSX element + */ function MediaBrowser( props ) { const { media, @@ -168,9 +175,9 @@ function MediaBrowser( props ) { const disabled = selected.length === 0 || isCopying; const defaultLabel = selectProps?.labelText ? selectProps?.labelText( selected.length ) - : __( 'Select', 'jetpack', /* dummy arg to avoid bad minification */ 0 ); + : __( 'Select', 'jetpack-external-media', /* dummy arg to avoid bad minification */ 0 ); - const label = isCopying ? __( 'Inserting…', 'jetpack' ) : defaultLabel; + const label = isCopying ? __( 'Inserting…', 'jetpack-external-media' ) : defaultLabel; return (
      @@ -214,7 +221,7 @@ function MediaBrowser( props ) { disabled={ isLoading || isCopying } onClick={ onLoadMoreClick } > - { __( 'Load More', 'jetpack' ) } + { __( 'Load More', 'jetpack-external-media' ) } ) }
    diff --git a/projects/plugins/jetpack/extensions/shared/external-media/media-browser/media-item.js b/projects/packages/external-media/src/shared/media-browser/media-item.js similarity index 93% rename from projects/plugins/jetpack/extensions/shared/external-media/media-browser/media-item.js rename to projects/packages/external-media/src/shared/media-browser/media-item.js index ad94853dd0618..d72a2d6d2c5b3 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/media-browser/media-item.js +++ b/projects/packages/external-media/src/shared/media-browser/media-item.js @@ -3,7 +3,14 @@ import { Spinner } from '@wordpress/components'; import { useRef, useEffect, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; - +import React from 'react'; + +/** + * MediaItem component + * + * @param {object} props - The component props + * @return {React.ReactElement} - JSX element + */ function MediaItem( props ) { const onClick = event => { const { item, index, imageOnly } = props; @@ -101,7 +108,7 @@ function MediaItem( props ) {
    - { __( 'Inserting Image…', 'jetpack' ) } + { __( 'Inserting Image…', 'jetpack-external-media' ) }
    ) } diff --git a/projects/plugins/jetpack/extensions/shared/external-media/media-browser/placeholder.js b/projects/packages/external-media/src/shared/media-browser/placeholder.js similarity index 76% rename from projects/plugins/jetpack/extensions/shared/external-media/media-browser/placeholder.js rename to projects/packages/external-media/src/shared/media-browser/placeholder.js index b3e9d20f54c7f..804710b8f18bd 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/media-browser/placeholder.js +++ b/projects/packages/external-media/src/shared/media-browser/placeholder.js @@ -1,5 +1,11 @@ import { memo } from '@wordpress/element'; +import React from 'react'; +/** + * MediaPlaceholder component + * + * @return {React.ReactElement} - JSX element + */ function MediaPlaceholder() { const className = 'jetpack-external-media-browser__media__item jetpack-external-media-browser__media__placeholder'; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/media-button/index.js b/projects/packages/external-media/src/shared/media-button/index.js similarity index 72% rename from projects/plugins/jetpack/extensions/shared/external-media/media-button/index.js rename to projects/packages/external-media/src/shared/media-button/index.js index f796c3b4bbe84..ac16b3282fa7d 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/media-button/index.js +++ b/projects/packages/external-media/src/shared/media-button/index.js @@ -1,6 +1,8 @@ import { useBlockEditContext } from '@wordpress/block-editor'; import { useState } from '@wordpress/element'; +import React from 'react'; import { getExternalLibrary } from '../sources'; +import { isGeneralPurposeImageGeneratorBetaEnabled } from '../utils/is-general-purpose-image-generator-beta-enabled'; import MediaAiButton from './media-ai-button'; import MediaButtonMenu from './media-menu'; @@ -12,18 +14,10 @@ const isReplaceMenu = props => props.multiple === undefined && ! isFeaturedImage const blocksWithAiButtonSupport = [ 'core/image', 'core/gallery', 'jetpack/slideshow' ]; /** - * Temporary feature flag to control generalPurposeImageExclusiveMediaSources - * visibility. + * MediaButton component + * @param {object} props - The component properties. + * @return {React.ReactElement} The `MediaButton` component. */ -const GENERAL_PURPOSE_IMAGE_GENERATOR_BETA_FLAG = 'ai-general-purpose-image-generator'; -const isGeneralPurposeImageGeneratorBetaEnabled = - window?.Jetpack_Editor_Initial_State?.available_blocks?.[ - GENERAL_PURPOSE_IMAGE_GENERATOR_BETA_FLAG - ]?.available === true; - -// to-do: remove when Jetpack requires WordPress 6.7. -const hasLargeButtons = window?.Jetpack_Editor_Initial_State?.next40pxDefaultSize; - function MediaButton( props ) { const { name } = useBlockEditContext(); const { mediaProps } = props; @@ -59,13 +53,9 @@ function MediaButton( props ) { isReplace={ isReplaceMenu( mediaProps ) } isFeatured={ isFeatured } hasImage={ mediaProps.value > 0 } - hasLargeButtons={ hasLargeButtons } /> - { isGeneralPurposeImageGeneratorBetaEnabled && ! isFeatured && hasAiButtonSupport && ( - + { isGeneralPurposeImageGeneratorBetaEnabled() && ! isFeatured && hasAiButtonSupport && ( + ) } { ExternalLibrary && } diff --git a/projects/plugins/jetpack/extensions/shared/external-media/media-button/media-ai-button.js b/projects/packages/external-media/src/shared/media-button/media-ai-button.js similarity index 64% rename from projects/plugins/jetpack/extensions/shared/external-media/media-button/media-ai-button.js rename to projects/packages/external-media/src/shared/media-button/media-ai-button.js index 529b8c2a91275..7d6c221d799ca 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/media-button/media-ai-button.js +++ b/projects/packages/external-media/src/shared/media-button/media-ai-button.js @@ -1,13 +1,19 @@ import { Button } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; +import React from 'react'; import { SOURCE_JETPACK_AI_GENERAL_PURPOSE_IMAGE_FOR_BLOCK } from '../constants'; +/** + * MediaAiButton component + * @param {object} props - The component properties. + * @return {React.ReactElement} The `MediaAiButton` component. + */ function MediaAiButton( props ) { - const { setSelectedSource, hasLargeButtons } = props; + const { setSelectedSource } = props; return ( ); diff --git a/projects/plugins/jetpack/extensions/shared/external-media/media-button/media-menu.js b/projects/packages/external-media/src/shared/media-button/media-menu.js similarity index 79% rename from projects/plugins/jetpack/extensions/shared/external-media/media-button/media-menu.js rename to projects/packages/external-media/src/shared/media-button/media-menu.js index d70335c85dd8b..3a2edcca461f0 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/media-button/media-menu.js +++ b/projects/packages/external-media/src/shared/media-button/media-menu.js @@ -1,11 +1,16 @@ import { Button, MenuItem, MenuGroup, Dropdown, NavigableMenu } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { Icon, media } from '@wordpress/icons'; +import React from 'react'; import MediaSources from './media-sources'; +/** + * MediaButtonMenu component + * @param {object} props - The component properties. + * @return {React.ReactElement} The `MediaButtonMenu` component. + */ function MediaButtonMenu( props ) { - const { mediaProps, open, setSelectedSource, isFeatured, isReplace, hasImage, hasLargeButtons } = - props; + const { mediaProps, open, setSelectedSource, isFeatured, isReplace, hasImage } = props; const originalComponent = mediaProps.render; if ( isReplace ) { @@ -18,18 +23,18 @@ function MediaButtonMenu( props ) { ); } - let label = __( 'Select Image', 'jetpack' ); + let label = __( 'Select Image', 'jetpack-external-media' ); if ( mediaProps.multiple ) { - label = __( 'Select Images', 'jetpack' ); + label = __( 'Select Images', 'jetpack-external-media' ); } if ( mediaProps.allowedTypes.length > 1 ) { - label = __( 'Select Media', 'jetpack' ); + label = __( 'Select Media', 'jetpack-external-media' ); } if ( isFeatured ) { - label = __( 'Replace Image', 'jetpack' ); + label = __( 'Replace Image', 'jetpack-external-media' ); } return ( @@ -49,7 +54,7 @@ function MediaButtonMenu( props ) { } return ( →   { path.name } diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-option.js b/projects/packages/external-media/src/shared/sources/google-photos/filter-option.js similarity index 52% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-option.js rename to projects/packages/external-media/src/shared/sources/google-photos/filter-option.js index fe7d499c94d34..be78e5bb5342d 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-option.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/filter-option.js @@ -1,8 +1,9 @@ +import { NumberControl } from '@automattic/jetpack-components'; import { SelectControl, Button } from '@wordpress/components'; import { useState, Fragment } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { omit } from 'lodash'; -import NumberControl from '../../../components/number-control'; +import React from 'react'; import { GOOGLE_PHOTOS_CATEGORIES, GOOGLE_PHOTOS_DATE_PRESETS, @@ -12,10 +13,18 @@ import { CURRENT_YEAR, } from '../../constants'; +/** + * CategoryOption component + * + * @param {object} props - The component props + * @param {string} props.value - The category + * @param {Function} props.updateFilter - The function to update the filter + * @return {React.ReactElement} - JSX Element + */ function CategoryOption( { value, updateFilter } ) { return ( updateFilter( { range } ) } @@ -42,7 +59,7 @@ function DateOption( { value, updateFilter } ) { { selectedRange === DATE_RANGE_CUSTOM && ( { - updateFilter( { range: selectedRange, month, year } ); - } } + onClick={ () => updateFilter( { range: selectedRange, month, year } ) } > - { __( 'Apply', 'jetpack' ) } + { __( 'Apply', 'jetpack-external-media' ) } ) } @@ -70,20 +85,33 @@ function DateOption( { value, updateFilter } ) { ); } +/** + * FavoriteOption component + * + * @return {React.ReactElement} - JSX Element + */ function FavoriteOption() { - return { __( 'Favorites', 'jetpack' ) }; + return { __( 'Favorites', 'jetpack-external-media' ) }; } +/** + * MediaTypeOption component + * + * @param {object} props - The component props + * @param {object} props.value - The media type + * @param {Function} props.updateFilter - The function to update the filter + * @return {React.ReactElement} - JSX Element + */ function MediaTypeOption( { value, updateFilter } ) { const options = [ - { label: __( 'All', 'jetpack' ), value: '' }, - { label: __( 'Images', 'jetpack' ), value: 'photo' }, - { label: __( 'Videos', 'jetpack' ), value: 'video' }, + { label: __( 'All', 'jetpack-external-media' ), value: '' }, + { label: __( 'Images', 'jetpack-external-media' ), value: 'photo' }, + { label: __( 'Videos', 'jetpack-external-media' ), value: 'video' }, ]; return ( ; @@ -111,6 +147,15 @@ function getFilterOption( optionName, optionValue, updateFilter ) { return null; } +/** + * FilterOption component + * + * @param {object} props - The component props + * @param {React.ReactNode} props.children - The children + * @param {boolean} props.isRemovable - Whether the filter is removable + * @param {Function} props.removeFilter - The function to remove the filter + * @return {React.ReactElement} - JSX Element + */ function FilterOption( { children, removeFilter, isRemovable = false } ) { return (
    @@ -118,13 +163,21 @@ function FilterOption( { children, removeFilter, isRemovable = false } ) { { !! isRemovable && ( ) }
    ); } +/** + * Get updated filters + * + * @param {object} existing - The current filters + * @param {string} key - The key of the filter + * @param {string} value - The value of the filter + * @return {object} - The updated filters + */ function getUpdatedFilters( existing, key, value ) { const copy = { ...existing, @@ -141,6 +194,15 @@ function getUpdatedFilters( existing, key, value ) { return copy; } +/** + * GoogleFilterOption component + * + * @param {object} props - The component props + * @param {object} props.filters - The filters + * @param {boolean} props.canChangeMedia - Whether the media is changeable + * @param {Function} props.setFilters - The function to set the filters + * @return {React.ReactElement} - JSX Element + */ function GoogleFilterOption( { filters, setFilters, canChangeMedia } ) { const options = Object.keys( filters ) .filter( item => canChangeMedia || item !== 'mediaType' ) diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-request.js b/projects/packages/external-media/src/shared/sources/google-photos/filter-request.js similarity index 94% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-request.js rename to projects/packages/external-media/src/shared/sources/google-photos/filter-request.js index f2daae9d3f0f4..d259210251bea 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-request.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/filter-request.js @@ -9,6 +9,12 @@ import { const TODAY = moment(); +/** + * Get filter request + * + * @param {Array} filters - The filters + * @return {Array|null} - The query + */ export default function getFilterRequest( filters ) { const { mediaType, category, favorite, date } = filters; const query = []; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-view.js b/projects/packages/external-media/src/shared/sources/google-photos/filter-view.js similarity index 59% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-view.js rename to projects/packages/external-media/src/shared/sources/google-photos/filter-view.js index d69d2bc2103c8..2bdcdb6a77669 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/filter-view.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/filter-view.js @@ -1,18 +1,32 @@ import { SelectControl, Button } from '@wordpress/components'; import { Fragment, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; +import React from 'react'; const FILTERS = [ - { label: __( 'Category', 'jetpack' ), value: 'category' }, - { label: __( 'Date', 'jetpack' ), value: 'date' }, - { label: __( 'Favorites', 'jetpack' ), value: 'favorite' }, - { label: __( 'Media Type', 'jetpack' ), value: 'mediaType' }, + { label: __( 'Category', 'jetpack-external-media' ), value: 'category' }, + { label: __( 'Date', 'jetpack-external-media' ), value: 'date' }, + { label: __( 'Favorites', 'jetpack-external-media' ), value: 'favorite' }, + { label: __( 'Media Type', 'jetpack-external-media' ), value: 'mediaType' }, ]; +/** + * Get filter options + * + * @param {Array} filters - The filters + * @return {Array} - The filters + */ function getFilterOptions( filters ) { return FILTERS.filter( item => filters[ item.value ] === undefined ); } +/** + * To remove the media type + * + * @param {Array} filters - The filters + * @param {boolean} canUseMedia - Whether the media can be used + * @return {Array} - The filters + */ function removeMediaType( filters, canUseMedia ) { if ( canUseMedia ) { return filters; @@ -21,6 +35,12 @@ function removeMediaType( filters, canUseMedia ) { return filters.filter( item => item.value !== 'mediaType' ); } +/** + * Get first filter + * + * @param {Array} filters - The filters + * @return {string} - The first filter + */ function getFirstFilter( filters ) { const filtered = getFilterOptions( filters ); @@ -31,6 +51,13 @@ function getFirstFilter( filters ) { return ''; } +/** + * Add filter + * + * @param {object} existing - The current filters + * @param {string} newFilter - The new filter + * @return {string} - The filters + */ function addFilter( existing, newFilter ) { return { ...existing, @@ -38,6 +65,11 @@ function addFilter( existing, newFilter ) { }; } +/** + * GoogleFilterView component + * @param {object} props - The component props + * @return {React.ReactElement} - JSX Element + */ function GoogleFilterView( props ) { const [ currentFilter, setCurrentFilter ] = useState( getFirstFilter( [] ) ); const { isLoading, isCopying, filters, canChangeMedia } = props; @@ -56,7 +88,7 @@ function GoogleFilterView( props ) { return ( ); diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-account.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-account.js similarity index 100% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-account.js rename to projects/packages/external-media/src/shared/sources/google-photos/google-photos-account.js diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-auth-upgrade.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-auth-upgrade.js similarity index 65% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-auth-upgrade.js rename to projects/packages/external-media/src/shared/sources/google-photos/google-photos-auth-upgrade.js index 109321f9f7962..52753336561b8 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-auth-upgrade.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-auth-upgrade.js @@ -1,7 +1,13 @@ +import { GooglePhotosLogo } from '@automattic/jetpack-shared-extension-utils/icons'; import { __ } from '@wordpress/i18n'; -import { GooglePhotosLogo } from '../../../icons'; +import React from 'react'; import GooglePhotosDisconnect from './google-photos-disconnect'; +/** + * GooglePhotosAuthUpgrade component + * @param {object} props - The component props + * @return {React.ReactElement} - JSX Element + */ export default function GooglePhotosAuthUpgrade( props ) { const { setAuthenticated } = props; @@ -12,7 +18,7 @@ export default function GooglePhotosAuthUpgrade( props ) {

    { __( "We've updated our Google Photos service. You will need to disconnect and reconnect to continue accessing your photos.", - 'jetpack' + 'jetpack-external-media' ) }

    diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-auth.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-auth.js similarity index 79% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-auth.js rename to projects/packages/external-media/src/shared/sources/google-photos/google-photos-auth.js index a6cc6b8e49647..94ad8975f134e 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-auth.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-auth.js @@ -3,11 +3,18 @@ import apiFetch from '@wordpress/api-fetch'; import { Button } from '@wordpress/components'; import { useState, useCallback } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; +import React from 'react'; import { SOURCE_GOOGLE_PHOTOS } from '../../constants'; -import { getApiUrl } from '../api'; +import { getExternalMediaApiUrl } from '../api'; import AuthInstructions from './auth-instructions'; import AuthProgress from './auth-progress'; +/** + * GooglePhotosAuth component + * + * @param {object} props - The component props + * @return {React.ReactElement} - JSX Element + */ function GooglePhotosAuth( props ) { const { setAuthenticated } = props; const [ isAuthing, setIsAuthing ] = useState( false ); @@ -17,7 +24,7 @@ function GooglePhotosAuth( props ) { // Get connection details apiFetch( { - path: getApiUrl( 'connection', SOURCE_GOOGLE_PHOTOS ), + path: getExternalMediaApiUrl( 'connection', SOURCE_GOOGLE_PHOTOS ), } ) .then( service => { if ( service.error ) { @@ -41,7 +48,7 @@ function GooglePhotosAuth( props ) { { isAuthing ? : }
    ); diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-disconnect.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-disconnect.js similarity index 82% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-disconnect.js rename to projects/packages/external-media/src/shared/sources/google-photos/google-photos-disconnect.js index 6b42c5accf29f..435b7e8eb7daa 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-disconnect.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-disconnect.js @@ -3,7 +3,7 @@ import { Button } from '@wordpress/components'; import { useState, useCallback } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { SOURCE_GOOGLE_PHOTOS } from '../../constants'; -import { getApiUrl } from '../api'; +import { getExternalMediaApiUrl } from '../api'; const GooglePhotosDisconnect = ( { setAuthenticated, buttonVariant = 'secondary' } ) => { const [ isDisconnecting, setIsDisconnecting ] = useState( false ); @@ -13,7 +13,7 @@ const GooglePhotosDisconnect = ( { setAuthenticated, buttonVariant = 'secondary' apiFetch( { method: 'DELETE', - path: getApiUrl( 'connection', SOURCE_GOOGLE_PHOTOS ), + path: getExternalMediaApiUrl( 'connection', SOURCE_GOOGLE_PHOTOS ), } ) .then( () => setAuthenticated( false ) ) .catch( () => setIsDisconnecting( false ) ); @@ -27,7 +27,7 @@ const GooglePhotosDisconnect = ( { setAuthenticated, buttonVariant = 'secondary' disabled={ isDisconnecting } isBusy={ isDisconnecting } > - { __( 'Disconnect from Google Photos', 'jetpack' ) } + { __( 'Disconnect from Google Photos', 'jetpack-external-media' ) } ); }; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-media.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js similarity index 91% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-media.js rename to projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js index 1748986eeccce..f9eecaabf366b 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-media.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js @@ -1,6 +1,7 @@ import { Button, SelectControl } from '@wordpress/components'; import { useRef, useState, useCallback, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; +import React from 'react'; import { SOURCE_GOOGLE_PHOTOS, PATH_RECENT, @@ -9,7 +10,7 @@ import { DATE_RANGE_ANY, } from '../../constants'; import MediaBrowser from '../../media-browser'; -import { getApiUrl } from '../api'; +import { getExternalMediaApiUrl } from '../api'; import Breadcrumbs from './breadcrumbs'; import GoogleFilterOption from './filter-option'; import getFilterRequest from './filter-request'; @@ -18,6 +19,12 @@ import GooglePhotosAccount from './google-photos-account'; const isImageOnly = allowed => allowed && allowed.length === 1 && allowed[ 0 ] === 'image'; +/** + * GooglePhotosMedia component + * + * @param {object} props - The component props + * @return {React.ReactElement} - JSX Element + */ function GooglePhotosMedia( props ) { const { account, @@ -62,7 +69,7 @@ function GooglePhotosMedia( props ) { params.session_id = pickerSession.id; } - const listUrl = getApiUrl( 'list', SOURCE_GOOGLE_PHOTOS, params ); + const listUrl = getExternalMediaApiUrl( 'list', SOURCE_GOOGLE_PHOTOS, params ); const getNextPage = useCallback( ( event, reset = false ) => { @@ -84,7 +91,7 @@ function GooglePhotosMedia( props ) { items => { copyMedia( items, - getApiUrl( 'copy', SOURCE_GOOGLE_PHOTOS ), + getExternalMediaApiUrl( 'copy', SOURCE_GOOGLE_PHOTOS ), SOURCE_GOOGLE_PHOTOS, pickerFeatureEnabled ); @@ -117,7 +124,7 @@ function GooglePhotosMedia( props ) { { - { __( 'Change selection', 'jetpack' ) } + { __( 'Change selection', 'jetpack-external-media' ) }
    ) } diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-picker-button.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-picker-button.js similarity index 68% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-picker-button.js rename to projects/packages/external-media/src/shared/sources/google-photos/google-photos-picker-button.js index 7d17ba066606a..cf2f31b9e124c 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/google-photos-picker-button.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-picker-button.js @@ -1,10 +1,16 @@ +import { GooglePhotosMediaIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import { Button } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { Icon, external } from '@wordpress/icons'; -import { useEffect } from 'react'; -import mediaImage from '../../../../../images/media.svg'; +import React, { useEffect } from 'react'; import GooglePhotosAccount from './google-photos-account'; +/** + * GooglePhotosPickerButton component + * + * @param {object} props - The component props + * @return {React.ReactElement} - JSX Element + */ export default function GooglePhotosPickerButton( props ) { const { pickerSession, fetchPickerSession, setAuthenticated, account } = props; const isButtonBusy = ! pickerSession; @@ -22,10 +28,14 @@ export default function GooglePhotosPickerButton( props ) { return (
    - { - -

    { __( 'Google Photos', 'jetpack' ) }

    -

    { __( 'Select photos directly from your Google Photos library.', 'jetpack' ) }

    + +

    { __( 'Google Photos', 'jetpack-external-media' ) }

    +

    + { __( + 'Select photos directly from your Google Photos library.', + 'jetpack-external-media' + ) } +

    diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/index.js b/projects/packages/external-media/src/shared/sources/google-photos/index.js similarity index 94% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/index.js rename to projects/packages/external-media/src/shared/sources/google-photos/index.js index 9438f568b24ff..df9ea1f72510a 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/index.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/index.js @@ -1,5 +1,5 @@ import moment from 'moment'; -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import MediaLoadingPlaceholder from '../../media-browser/placeholder'; import { getGooglePhotosPickerCachedSessionId } from '../../media-service'; import { MediaSource } from '../../media-service/types'; @@ -9,6 +9,12 @@ import GooglePhotosAuthUpgrade from './google-photos-auth-upgrade'; import GooglePhotosMedia from './google-photos-media'; import GooglePhotosPickerButton from './google-photos-picker-button'; +/** + * GooglePhotos component + * + * @param {object} props - The component props + * @return {React.ReactElement} - JSX Element + */ function GooglePhotos( props ) { const { isAuthenticated, diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/index.js b/projects/packages/external-media/src/shared/sources/index.js similarity index 78% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/index.js rename to projects/packages/external-media/src/shared/sources/index.js index 6c4014efe30f3..80d8eb5f24ff5 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/index.js +++ b/projects/packages/external-media/src/shared/sources/index.js @@ -1,6 +1,12 @@ import { aiAssistantIcon } from '@automattic/jetpack-ai-client'; +import { + GooglePhotosIcon, + OpenverseIcon, + PexelsIcon, + JetpackMobileAppIcon, +} from '@automattic/jetpack-shared-extension-utils/icons'; import { __ } from '@wordpress/i18n'; -import { GooglePhotosIcon, OpenverseIcon, PexelsIcon, JetpackMobileAppIcon } from '../../icons'; +import React from 'react'; import { SOURCE_WORDPRESS, SOURCE_GOOGLE_PHOTOS, @@ -22,7 +28,7 @@ import PexelsMedia from './pexels'; export const internalMediaSources = [ { id: SOURCE_JETPACK_APP_MEDIA, - label: __( 'Your Phone', 'jetpack' ), + label: __( 'Your Phone', 'jetpack-external-media' ), icon: , keyword: 'jetpack mobile app', }, @@ -34,7 +40,7 @@ export const internalMediaSources = [ export const featuredImageExclusiveMediaSources = [ { id: SOURCE_JETPACK_AI_FEATURED_IMAGE, - label: __( 'Generate with AI', 'jetpack' ), + label: __( 'Generate with AI', 'jetpack-external-media' ), icon: aiAssistantIcon, keyword: 'jetpack ai', }, @@ -46,7 +52,7 @@ export const featuredImageExclusiveMediaSources = [ export const generalPurposeImageExclusiveMediaSources = [ { id: SOURCE_JETPACK_AI_GENERAL_PURPOSE_IMAGE_FOR_MEDIA_SOURCE, - label: __( 'Generate with AI', 'jetpack' ), + label: __( 'Generate with AI', 'jetpack-external-media' ), icon: aiAssistantIcon, keyword: 'jetpack ai', }, @@ -55,19 +61,19 @@ export const generalPurposeImageExclusiveMediaSources = [ export const externalMediaSources = [ { id: SOURCE_GOOGLE_PHOTOS, - label: __( 'Google Photos', 'jetpack' ), + label: __( 'Google Photos', 'jetpack-external-media' ), icon: , keyword: 'google photos', }, { id: SOURCE_PEXELS, - label: __( 'Pexels free photos', 'jetpack' ), + label: __( 'Pexels free photos', 'jetpack-external-media' ), icon: , keyword: 'pexels', }, { id: SOURCE_OPENVERSE, - label: __( 'Openverse', 'jetpack' ), + label: __( 'Openverse', 'jetpack-external-media' ), icon: , keyword: 'openverse', }, @@ -75,6 +81,11 @@ export const externalMediaSources = [ export const mediaSources = externalMediaSources.concat( internalMediaSources ); +/** + * Whether we can display the placeholder + * @param {object} props - The properties. + * @return {boolean} True if we can display the placeholder, otherwise false. + */ export function canDisplayPlaceholder( props ) { const { disableMediaButtons, dropZoneUIOnly } = props; @@ -100,6 +111,11 @@ export function canDisplayPlaceholder( props ) { return true; } +/** + * Get the external library + * @param {string} type - The type of external sources. + * @return {React.Component} - The external library. + */ export function getExternalLibrary( type ) { if ( type === SOURCE_PEXELS ) { return PexelsMedia; @@ -119,6 +135,11 @@ export function getExternalLibrary( type ) { return null; } +/** + * Get the external source + * @param {string} type - The type of external sources. + * @return {object} The external source. + */ export function getExternalSource( type ) { return mediaSources.find( item => item.id === type ); } diff --git a/projects/packages/external-media/src/shared/sources/jetpack-ai-featured-image.js b/projects/packages/external-media/src/shared/sources/jetpack-ai-featured-image.js new file mode 100644 index 0000000000000..f9e527461e9bb --- /dev/null +++ b/projects/packages/external-media/src/shared/sources/jetpack-ai-featured-image.js @@ -0,0 +1,14 @@ +import { FeaturedImage, PLACEMENT_MEDIA_SOURCE_DROPDOWN } from '@automattic/jetpack-ai-client'; +import React from 'react'; + +/** + * JetpackAIFeaturedImage component + * @param {object} props - The component properties. + * @param {Function} props.onClose - To handle the close. + * @return {React.ReactElement} The `JetpackAIFeaturedImage` component. + */ +function JetpackAIFeaturedImage( { onClose = () => {} } ) { + return ; +} + +export default JetpackAIFeaturedImage; diff --git a/projects/packages/external-media/src/shared/sources/jetpack-ai-general-purpose-image-for-block.js b/projects/packages/external-media/src/shared/sources/jetpack-ai-general-purpose-image-for-block.js new file mode 100644 index 0000000000000..58dc473790fab --- /dev/null +++ b/projects/packages/external-media/src/shared/sources/jetpack-ai-general-purpose-image-for-block.js @@ -0,0 +1,29 @@ +import { + GeneralPurposeImage, + PLACEMENT_BLOCK_PLACEHOLDER_BUTTON, +} from '@automattic/jetpack-ai-client'; +import React from 'react'; + +/** + * JetpackAIGeneralPurposeImageForBlock component + * @param {object} props - The component properties. + * @param {Function} props.onClose - To handle the close. + * @param {Function} props.onSelect - To handle the selection of the media. + * @param {boolean} props.multiple - Whether to allow multiple selection. + * @return {React.ReactElement} The `JetpackAIGeneralPurposeImageForBlock` component. + */ +function JetpackAIGeneralPurposeImageForBlock( { + onClose = () => {}, + onSelect, + multiple = false, +} ) { + return ( + onSelect( multiple ? [ image ] : image ) } + /> + ); +} + +export default JetpackAIGeneralPurposeImageForBlock; diff --git a/projects/packages/external-media/src/shared/sources/jetpack-ai-general-purpose-image-for-media-source.js b/projects/packages/external-media/src/shared/sources/jetpack-ai-general-purpose-image-for-media-source.js new file mode 100644 index 0000000000000..0fe2027ea475b --- /dev/null +++ b/projects/packages/external-media/src/shared/sources/jetpack-ai-general-purpose-image-for-media-source.js @@ -0,0 +1,29 @@ +import { + GeneralPurposeImage, + PLACEMENT_MEDIA_SOURCE_DROPDOWN, +} from '@automattic/jetpack-ai-client'; +import React from 'react'; + +/** + * JetpackAIGeneralPurposeImageForMediaSource component + * @param {object} props - The component properties. + * @param {Function} props.onClose - To handle the close. + * @param {Function} props.onSelect - To handle the selection of the media. + * @param {boolean} props.multiple - Whether to allow multiple selection. + * @return {React.ReactElement} The `JetpackAIGeneralPurposeImageForMediaSource` component. + */ +function JetpackAIGeneralPurposeImageForMediaSource( { + onClose = () => {}, + onSelect, + multiple = false, +} ) { + return ( + onSelect( multiple ? [ image ] : image ) } + /> + ); +} + +export default JetpackAIGeneralPurposeImageForMediaSource; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-app-media.js b/projects/packages/external-media/src/shared/sources/jetpack-app-media.js similarity index 78% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-app-media.js rename to projects/packages/external-media/src/shared/sources/jetpack-app-media.js index 82030b4127e91..441f00f9d2723 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-app-media.js +++ b/projects/packages/external-media/src/shared/sources/jetpack-app-media.js @@ -1,18 +1,40 @@ import { QRCode } from '@automattic/jetpack-components'; +import { useRefInterval } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackAppIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import { useSelect } from '@wordpress/data'; import { useCallback, useEffect, useState } from '@wordpress/element'; import { __, sprintf, _n } from '@wordpress/i18n'; -import { JetpackAppIcon } from '../../icons'; -import useRefInterval from '../../use-ref-interval'; +import React from 'react'; import MediaBrowser from '../media-browser'; import { MediaSource } from '../media-service/types'; import withMedia from './with-media'; +const getWpcomBlogId = () => + window?.Jetpack_Editor_Initial_State?.wpcomBlogId || + window?.JetpackExternalMediaData?.wpcomBlogId || + 0; + +const getImagePath = () => { + let pluginBasePath = ''; + if ( window?.Jetpack_Editor_Initial_State ) { + pluginBasePath = window?.Jetpack_Editor_Initial_State?.pluginBasePath; + } else if ( window?.JetpackExternalMediaData ) { + pluginBasePath = window?.JetpackExternalMediaData?.pluginBasePath; + } + + return pluginBasePath + '/images/'; +}; + +/** + * JetpackAppMedia component + * @param {object} props - The component properties. + * @return {React.ReactElement} The `JetpackAppMedia` component. + */ function JetpackAppMedia( props ) { const { media, insertMedia, isCopying, multiple, getMedia } = props; - const wpcomBlogId = window?.Jetpack_Editor_Initial_State?.wpcomBlogId || 0; - const imagePath = window?.Jetpack_Editor_Initial_State?.pluginBasePath + '/images/'; + const wpcomBlogId = getWpcomBlogId(); + const imagePath = getImagePath(); const postId = useSelect( select => select( 'core/editor' ).getCurrentPostId() ); // get the current time and store it in the state @@ -53,28 +75,28 @@ function JetpackAppMedia( props ) { return selectedImages ? sprintf( /* translators: %1$d is the number of images that were selected. */ - _n( 'Add %1$d image', 'Add %1$d images', selectedImages, 'jetpack' ), + _n( 'Add %1$d image', 'Add %1$d images', selectedImages, 'jetpack-external-media' ), selectedImages ) - : __( 'Add images', 'jetpack' ); + : __( 'Add images', 'jetpack-external-media' ); }; return (

    - { hasImageUploaded && __( 'Select images to be added', 'jetpack' ) } - { ! hasImageUploaded && __( 'Upload from your phone', 'jetpack' ) } + { hasImageUploaded && __( 'Select images to be added', 'jetpack-external-media' ) } + { ! hasImageUploaded && __( 'Upload from your phone', 'jetpack-external-media' ) }

    { hasImageUploaded && __( 'Select the images below to add, or continue adding more from your device.', - 'jetpack' + 'jetpack-external-media' ) } { ! hasImageUploaded && __( 'Scan the QR code with your iPhone or Android camera to upload from your photos.', - 'jetpack' + 'jetpack-external-media' ) }

    { ! hasImageUploaded && ( diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/openverse.js b/projects/packages/external-media/src/shared/sources/openverse.js similarity index 85% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/openverse.js rename to projects/packages/external-media/src/shared/sources/openverse.js index abf2a66aa0a38..83ca4c3348b46 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/openverse.js +++ b/projects/packages/external-media/src/shared/sources/openverse.js @@ -2,12 +2,19 @@ import { TextControl, Button } from '@wordpress/components'; import { useRef, useCallback, useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { sample } from 'lodash'; +import React from 'react'; import { SOURCE_OPENVERSE, PEXELS_EXAMPLE_QUERIES } from '../constants'; import MediaBrowser from '../media-browser'; import { MediaSource } from '../media-service/types'; -import { getApiUrl } from './api'; +import { getExternalMediaApiUrl } from './api'; import withMedia from './with-media'; +/** + * OpenverseMedia component + * + * @param {object} props - The component props + * @return {React.ReactElement} - JSX element + */ function OpenverseMedia( props ) { const { media, isCopying, isLoading, pageHandle, multiple, copyMedia, getMedia } = props; @@ -16,7 +23,7 @@ function OpenverseMedia( props ) { const onCopy = useCallback( items => { - copyMedia( items, getApiUrl( 'copy', SOURCE_OPENVERSE ), SOURCE_OPENVERSE ); + copyMedia( items, getExternalMediaApiUrl( 'copy', SOURCE_OPENVERSE ), SOURCE_OPENVERSE ); }, [ copyMedia ] ); @@ -25,7 +32,7 @@ function OpenverseMedia( props ) { ( event, reset = false ) => { if ( searchQuery ) { getMedia( - getApiUrl( 'list', SOURCE_OPENVERSE, { + getExternalMediaApiUrl( 'list', SOURCE_OPENVERSE, { number: 20, search: searchQuery, } ), @@ -76,7 +83,7 @@ function OpenverseMedia( props ) { onSubmit={ onSearch } > - { __( 'Search', 'jetpack' ) } + { __( 'Search', 'jetpack-external-media' ) } diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/pexels.js b/projects/packages/external-media/src/shared/sources/pexels.js similarity index 86% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/pexels.js rename to projects/packages/external-media/src/shared/sources/pexels.js index cdd97bc355e8d..5b6ad140105f6 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/pexels.js +++ b/projects/packages/external-media/src/shared/sources/pexels.js @@ -2,12 +2,19 @@ import { TextControl, Button } from '@wordpress/components'; import { useRef, useCallback, useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { sample } from 'lodash'; +import React from 'react'; import { SOURCE_PEXELS, PEXELS_EXAMPLE_QUERIES } from '../constants'; import MediaBrowser from '../media-browser'; import { MediaSource } from '../media-service/types'; -import { getApiUrl } from './api'; +import { getExternalMediaApiUrl } from './api'; import withMedia from './with-media'; +/** + * PexelsMedia component + * + * @param {object} props - The component props + * @return {React.ReactElement} - JSX element + */ function PexelsMedia( props ) { const { media, isCopying, isLoading, pageHandle, multiple, copyMedia, getMedia } = props; @@ -16,7 +23,7 @@ function PexelsMedia( props ) { const onCopy = useCallback( items => { - copyMedia( items, getApiUrl( 'copy', SOURCE_PEXELS ), SOURCE_PEXELS ); + copyMedia( items, getExternalMediaApiUrl( 'copy', SOURCE_PEXELS ), SOURCE_PEXELS ); }, [ copyMedia ] ); @@ -25,7 +32,7 @@ function PexelsMedia( props ) { ( event, reset = false ) => { if ( searchQuery ) { getMedia( - getApiUrl( 'list', SOURCE_PEXELS, { + getExternalMediaApiUrl( 'list', SOURCE_PEXELS, { number: 20, path: 'recent', search: searchQuery, @@ -78,7 +85,7 @@ function PexelsMedia( props ) { onSubmit={ onSearch } > - { __( 'Search', 'jetpack' ) } + { __( 'Search', 'jetpack-external-media' ) } diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/with-media.js b/projects/packages/external-media/src/shared/sources/with-media.js similarity index 97% rename from projects/plugins/jetpack/extensions/shared/external-media/sources/with-media.js rename to projects/packages/external-media/src/shared/sources/with-media.js index 0d460713f5c7c..9cc24e050641c 100644 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/with-media.js +++ b/projects/packages/external-media/src/shared/sources/with-media.js @@ -15,6 +15,12 @@ import { } from '../media-service'; import { MediaSource } from '../media-service/types'; +/** + * withMedia + * + * @param {MediaSource} mediaSource - External media sources. + * @return {Function} - The function to create higher order component. + */ export default function withMedia( mediaSource = MediaSource.Unknown ) { return createHigherOrderComponent( OriginalComponent => { // Legacy class as it was ported from an older codebase. @@ -338,18 +344,18 @@ export default function withMedia( mediaSource = MediaSource.Unknown ) { const { allowedTypes, multiple = false, noticeUI, onClose } = this.props; const defaultTitle = - mediaSource !== 'jetpack_app_media' ? __( 'Select media', 'jetpack' ) : ''; + mediaSource !== 'jetpack_app_media' ? __( 'Select media', 'jetpack-external-media' ) : ''; - const title = isCopying ? __( 'Inserting media', 'jetpack' ) : defaultTitle; + const title = isCopying ? __( 'Inserting media', 'jetpack-external-media' ) : defaultTitle; const description = isCopying ? __( 'When the media is finished copying and inserting, you will be returned to the editor.', - 'jetpack' + 'jetpack-external-media' ) : __( 'Select the media you would like to insert into the editor.', - 'jetpack', + 'jetpack-external-media', /* dummy arg to avoid bad minification */ 0 ); diff --git a/projects/plugins/jetpack/extensions/shared/external-media/store/actions.ts b/projects/packages/external-media/src/shared/store/actions.ts similarity index 100% rename from projects/plugins/jetpack/extensions/shared/external-media/store/actions.ts rename to projects/packages/external-media/src/shared/store/actions.ts diff --git a/projects/plugins/jetpack/extensions/shared/external-media/store/index.ts b/projects/packages/external-media/src/shared/store/index.ts similarity index 100% rename from projects/plugins/jetpack/extensions/shared/external-media/store/index.ts rename to projects/packages/external-media/src/shared/store/index.ts diff --git a/projects/plugins/jetpack/extensions/shared/external-media/store/reducer.ts b/projects/packages/external-media/src/shared/store/reducer.ts similarity index 100% rename from projects/plugins/jetpack/extensions/shared/external-media/store/reducer.ts rename to projects/packages/external-media/src/shared/store/reducer.ts diff --git a/projects/plugins/jetpack/extensions/shared/external-media/store/selectors.ts b/projects/packages/external-media/src/shared/store/selectors.ts similarity index 100% rename from projects/plugins/jetpack/extensions/shared/external-media/store/selectors.ts rename to projects/packages/external-media/src/shared/store/selectors.ts diff --git a/projects/plugins/jetpack/extensions/shared/external-media/store/types.ts b/projects/packages/external-media/src/shared/store/types.ts similarity index 100% rename from projects/plugins/jetpack/extensions/shared/external-media/store/types.ts rename to projects/packages/external-media/src/shared/store/types.ts diff --git a/projects/plugins/jetpack/extensions/shared/external-media/test/external-media-service-test.js b/projects/packages/external-media/src/shared/test/external-media-service-test.js similarity index 100% rename from projects/plugins/jetpack/extensions/shared/external-media/test/external-media-service-test.js rename to projects/packages/external-media/src/shared/test/external-media-service-test.js diff --git a/projects/packages/external-media/src/shared/utils/is-general-purpose-image-generator-beta-enabled.js b/projects/packages/external-media/src/shared/utils/is-general-purpose-image-generator-beta-enabled.js new file mode 100644 index 0000000000000..8d9fdc2b98c19 --- /dev/null +++ b/projects/packages/external-media/src/shared/utils/is-general-purpose-image-generator-beta-enabled.js @@ -0,0 +1,15 @@ +export const isGeneralPurposeImageGeneratorBetaEnabled = () => { + if ( window?.Jetpack_Editor_Initial_State ) { + return ( + window?.Jetpack_Editor_Initial_State?.available_blocks?.[ + 'ai-general-purpose-image-generator' + ]?.available === true + ); + } + + if ( window?.JetpackExternalMediaData ) { + return window?.JetpackExternalMediaData?.[ 'ai-assistant' ]?.[ 'is-enabled' ]; + } + + return false; +}; diff --git a/projects/plugins/jetpack/extensions/shared/wait-for.js b/projects/packages/external-media/src/shared/utils/wait-for.js similarity index 100% rename from projects/plugins/jetpack/extensions/shared/wait-for.js rename to projects/packages/external-media/src/shared/utils/wait-for.js diff --git a/projects/packages/external-media/tests/.phpcs.dir.xml b/projects/packages/external-media/tests/.phpcs.dir.xml new file mode 100644 index 0000000000000..46951fe77b37e --- /dev/null +++ b/projects/packages/external-media/tests/.phpcs.dir.xml @@ -0,0 +1,4 @@ + + + + diff --git a/projects/packages/external-media/tests/php/bootstrap.php b/projects/packages/external-media/tests/php/bootstrap.php new file mode 100644 index 0000000000000..46763b04a2cdb --- /dev/null +++ b/projects/packages/external-media/tests/php/bootstrap.php @@ -0,0 +1,11 @@ +=7.2" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "yoast/phpunit-polyfills": "^1.1.1" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "mirror-repo": "Automattic/jetpack-external-media", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-external-media/compare/v${old}...v${new}" + }, + "autotagger": true, + "branch-alias": { + "dev-trunk": "0.1.x-dev" + }, + "textdomain": "jetpack-external-media", + "version-constants": { + "::PACKAGE_VERSION": "src/class-external-media.php" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "build-development": [ + "pnpm run build-js" + ], + "build-production": [ + "pnpm run build-production-js" + ], + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-coverage": [ + "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-php \"$COVERAGE_DIR/php.cov\"" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "The external media feature allows users to select and import photos from external media", + "transport-options": { + "relative": true + } + }, { "name": "automattic/jetpack-forms", "version": "dev-trunk", @@ -5969,6 +6036,7 @@ "automattic/jetpack-constants": 20, "automattic/jetpack-device-detection": 20, "automattic/jetpack-error": 20, + "automattic/jetpack-external-media": 20, "automattic/jetpack-forms": 20, "automattic/jetpack-image-cdn": 20, "automattic/jetpack-import": 20, diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/edit.js b/projects/plugins/jetpack/extensions/blocks/ai-assistant/edit.js index b9c6770ded6b3..04f7cf193934b 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-assistant/edit.js +++ b/projects/plugins/jetpack/extensions/blocks/ai-assistant/edit.js @@ -7,8 +7,18 @@ import { renderHTMLFromMarkdown, PROMPT_TYPE_GENERATE_TITLE, mapActionToHumanText, + QuotaExceededMessage, + FairUsageNotice, + useAICheckout, + useAiFeature, } from '@automattic/jetpack-ai-client'; -import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; +import { + useAnalytics, + PLAN_TYPE_FREE, + PLAN_TYPE_UNLIMITED, + usePlanType, + isUserConnected, +} from '@automattic/jetpack-shared-extension-utils'; import { useBlockProps, InspectorControls } from '@wordpress/block-editor'; import { rawHandler } from '@wordpress/blocks'; import { @@ -29,16 +39,11 @@ import clsx from 'clsx'; import UsagePanel from '../../plugins/ai-assistant-plugin/components/usage-panel'; import { USAGE_PANEL_PLACEMENT_BLOCK_SETTINGS_SIDEBAR } from '../../plugins/ai-assistant-plugin/components/usage-panel/types'; import ConnectBanner from '../../shared/components/connect-banner'; -import { PLAN_TYPE_FREE, PLAN_TYPE_UNLIMITED, usePlanType } from '../../shared/use-plan-type'; import FeedbackControl from './components/feedback-control'; -import QuotaExceededMessage, { FairUsageNotice } from './components/quota-exceeded-message'; import ToolbarControls from './components/toolbar-controls'; import useAIAssistant from './hooks/use-ai-assistant'; -import useAICheckout from './hooks/use-ai-checkout'; -import useAiFeature from './hooks/use-ai-feature'; import useAiProductPage from './hooks/use-ai-product-page'; import { getStoreBlockId } from './hooks/use-transform-to-assistant'; -import { isUserConnected } from './lib/connection'; import './editor.scss'; const isInBlockEditor = window?.Jetpack_Editor_Initial_State?.screenBase === 'post'; diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/components/ai-assistant-input/index.tsx b/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/components/ai-assistant-input/index.tsx index 1bed0578c16cb..655f4ed6f0871 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/components/ai-assistant-input/index.tsx +++ b/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/components/ai-assistant-input/index.tsx @@ -1,7 +1,7 @@ /* * External dependencies */ -import { ExtensionAIControl } from '@automattic/jetpack-ai-client'; +import { ExtensionAIControl, useAICheckout, useAiFeature } from '@automattic/jetpack-ai-client'; import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import { useState, useEffect, useCallback, useMemo } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; @@ -10,8 +10,6 @@ import React from 'react'; /* * Internal dependencies */ -import useAICheckout from '../../../hooks/use-ai-checkout'; -import useAiFeature from '../../../hooks/use-ai-feature'; import './style.scss'; /* * Types diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/lib/can-ai-assistant-be-enabled.ts b/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/lib/can-ai-assistant-be-enabled.ts index b665b130b8ddd..e5b2e7b99f63d 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/lib/can-ai-assistant-be-enabled.ts +++ b/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/lib/can-ai-assistant-be-enabled.ts @@ -1,12 +1,12 @@ /* * External dependencies */ +import { isUserConnected } from '@automattic/jetpack-shared-extension-utils'; import { getBlockType } from '@wordpress/blocks'; import { select } from '@wordpress/data'; /* * Internal dependencies */ -import { isUserConnected } from '../../lib/connection'; import { getFeatureAvailability } from '../../lib/utils/get-feature-availability'; export const AI_ASSISTANT_SUPPORT_NAME = 'ai-assistant-support'; diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/with-ai-extension.tsx b/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/with-ai-extension.tsx index ab1d0711b6158..e5aba252c1cfd 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/with-ai-extension.tsx +++ b/projects/plugins/jetpack/extensions/blocks/ai-assistant/extensions/with-ai-extension.tsx @@ -6,6 +6,7 @@ import { ERROR_QUOTA_EXCEEDED, mapActionToHumanText, useAiSuggestions, + useAiFeature, } from '@automattic/jetpack-ai-client'; import { BlockControls, useBlockProps } from '@wordpress/block-editor'; import { createHigherOrderComponent } from '@wordpress/compose'; @@ -18,7 +19,6 @@ import React from 'react'; /* * Internal dependencies */ -import useAiFeature from '../hooks/use-ai-feature'; import useAutoScroll from '../hooks/use-auto-scroll'; import useBlockModuleStatus from '../hooks/use-block-module-status'; import { mapInternalPromptTypeToBackendPromptType } from '../lib/prompt/backend-prompt'; diff --git a/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-product-page/index.ts b/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-product-page/index.ts index ffeb7cbf8c66b..167a72be3e762 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-product-page/index.ts +++ b/projects/plugins/jetpack/extensions/blocks/ai-assistant/hooks/use-ai-product-page/index.ts @@ -2,8 +2,7 @@ * External dependencies */ import { getRedirectUrl } from '@automattic/jetpack-components'; -import { getJetpackData } from '@automattic/jetpack-shared-extension-utils'; -import useAutosaveAndRedirect from '../../../../shared/use-autosave-and-redirect'; +import { getJetpackData, useAutosaveAndRedirect } from '@automattic/jetpack-shared-extension-utils'; /* * Types */ diff --git a/projects/plugins/jetpack/extensions/blocks/ai-chat/components/nudge-enable-search/index.js b/projects/plugins/jetpack/extensions/blocks/ai-chat/components/nudge-enable-search/index.js index 482d7e7a4311c..342c65ced8fcd 100644 --- a/projects/plugins/jetpack/extensions/blocks/ai-chat/components/nudge-enable-search/index.js +++ b/projects/plugins/jetpack/extensions/blocks/ai-chat/components/nudge-enable-search/index.js @@ -1,12 +1,9 @@ /* * External dependencies */ +import { useAutosaveAndRedirect } from '@automattic/jetpack-shared-extension-utils'; +import { Nudge } from '@automattic/jetpack-shared-extension-utils/components'; import { __ } from '@wordpress/i18n'; -/* - * Internal dependencies - */ -import { Nudge } from '../../../../shared/components/upgrade-nudge'; -import useAutosaveAndRedirect from '../../../../shared/use-autosave-and-redirect'; const EnableJetpackSearchPrompt = () => { let wpAdminUrl = window?.Jetpack_Editor_Initial_State?.adminUrl || ''; diff --git a/projects/plugins/jetpack/extensions/blocks/blogroll/blogroll-item/index.js b/projects/plugins/jetpack/extensions/blocks/blogroll/blogroll-item/index.js index fcfd2997804f9..9fac0c02c6a00 100644 --- a/projects/plugins/jetpack/extensions/blocks/blogroll/blogroll-item/index.js +++ b/projects/plugins/jetpack/extensions/blocks/blogroll/blogroll-item/index.js @@ -1,6 +1,6 @@ +import { getIconColor } from '@automattic/jetpack-shared-extension-utils'; import { InnerBlocks } from '@wordpress/block-editor'; import { __ } from '@wordpress/i18n'; -import { getIconColor } from '../../../shared/block-icons'; import PlaceholderSiteIcon from '../placeholder-site-icon.svg'; import edit from './edit'; import icon from './icon'; diff --git a/projects/plugins/jetpack/extensions/blocks/paywall/edit.js b/projects/plugins/jetpack/extensions/blocks/paywall/edit.js index 5c0ff4263e58c..9e86a7f0dd8e8 100644 --- a/projects/plugins/jetpack/extensions/blocks/paywall/edit.js +++ b/projects/plugins/jetpack/extensions/blocks/paywall/edit.js @@ -1,5 +1,5 @@ import './editor.scss'; -import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils/components'; import { BlockControls, InspectorControls, useBlockProps } from '@wordpress/block-editor'; import { MenuGroup, MenuItem, PanelBody, ToolbarDropdownMenu } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; diff --git a/projects/plugins/jetpack/extensions/blocks/send-a-message/whatsapp-button/icon.js b/projects/plugins/jetpack/extensions/blocks/send-a-message/whatsapp-button/icon.js index ae5f0e170479f..1f267a06a59e8 100644 --- a/projects/plugins/jetpack/extensions/blocks/send-a-message/whatsapp-button/icon.js +++ b/projects/plugins/jetpack/extensions/blocks/send-a-message/whatsapp-button/icon.js @@ -1,5 +1,5 @@ +import { getIconColor } from '@automattic/jetpack-shared-extension-utils'; import { SVG, Path } from '@wordpress/components'; -import { getIconColor } from '../../../shared/block-icons'; export default ( diff --git a/projects/plugins/jetpack/extensions/blocks/send-a-message/whatsapp-button/index.js b/projects/plugins/jetpack/extensions/blocks/send-a-message/whatsapp-button/index.js index f004c2566b81e..7a1cb4680aee2 100644 --- a/projects/plugins/jetpack/extensions/blocks/send-a-message/whatsapp-button/index.js +++ b/projects/plugins/jetpack/extensions/blocks/send-a-message/whatsapp-button/index.js @@ -1,5 +1,5 @@ +import { getIconColor } from '@automattic/jetpack-shared-extension-utils'; import { __, _x } from '@wordpress/i18n'; -import { getIconColor } from '../../../shared/block-icons'; import attributes from './attributes'; import deprecatedV1 from './deprecated/v1'; import edit from './edit'; diff --git a/projects/plugins/jetpack/extensions/blocks/simple-payments/deprecated/v2/index.js b/projects/plugins/jetpack/extensions/blocks/simple-payments/deprecated/v2/index.js index f46689147a2e3..6a4f19f7f2b23 100644 --- a/projects/plugins/jetpack/extensions/blocks/simple-payments/deprecated/v2/index.js +++ b/projects/plugins/jetpack/extensions/blocks/simple-payments/deprecated/v2/index.js @@ -1,8 +1,11 @@ -import { isAtomicSite, isSimpleSite } from '@automattic/jetpack-shared-extension-utils'; +import { + isAtomicSite, + isSimpleSite, + getIconColor, +} from '@automattic/jetpack-shared-extension-utils'; import { ExternalLink, Path, SVG } from '@wordpress/components'; import { Fragment } from '@wordpress/element'; import { __, _x } from '@wordpress/i18n'; -import { getIconColor } from '../../../../shared/block-icons'; import { DEFAULT_CURRENCY } from '../../constants'; import edit from './edit'; import save from './save'; diff --git a/projects/plugins/jetpack/extensions/blocks/subscriptions/panel.js b/projects/plugins/jetpack/extensions/blocks/subscriptions/panel.js index 8e0269029095c..5030acd400845 100644 --- a/projects/plugins/jetpack/extensions/blocks/subscriptions/panel.js +++ b/projects/plugins/jetpack/extensions/blocks/subscriptions/panel.js @@ -3,9 +3,9 @@ import { getSiteFragment, isComingSoon, isPrivateSite, - JetpackEditorPanelLogo, useAnalytics, } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils/components'; import { Button, Notice, PanelRow } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; import { diff --git a/projects/plugins/jetpack/extensions/blocks/videopress/edit.js b/projects/plugins/jetpack/extensions/blocks/videopress/edit.js index d5ac5ddadf841..23363d18514c9 100644 --- a/projects/plugins/jetpack/extensions/blocks/videopress/edit.js +++ b/projects/plugins/jetpack/extensions/blocks/videopress/edit.js @@ -1,3 +1,4 @@ +import { VideoPressIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import apiFetch from '@wordpress/api-fetch'; import { isBlobURL } from '@wordpress/blob'; import { @@ -40,7 +41,6 @@ import { __, _x, sprintf } from '@wordpress/i18n'; import { Icon } from '@wordpress/icons'; import clsx from 'clsx'; import { get, indexOf } from 'lodash'; -import { VideoPressIcon } from '../../shared/icons'; import { VideoPressBlockProvider } from './components'; import { VIDEO_PRIVACY } from './constants'; import Loading from './loading'; diff --git a/projects/plugins/jetpack/extensions/blocks/videopress/uploading-editor/index.js b/projects/plugins/jetpack/extensions/blocks/videopress/uploading-editor/index.js index 8030003a309f5..dcabf0d7e7755 100644 --- a/projects/plugins/jetpack/extensions/blocks/videopress/uploading-editor/index.js +++ b/projects/plugins/jetpack/extensions/blocks/videopress/uploading-editor/index.js @@ -1,7 +1,7 @@ /** * External dependencies */ - +import { PlayIcon } from '@automattic/jetpack-shared-extension-utils/icons'; /** * WordPress dependencies */ @@ -11,10 +11,6 @@ import { createInterpolateElement, useEffect, useRef, useState } from '@wordpres import { __ } from '@wordpress/i18n'; import { Icon } from '@wordpress/icons'; import clsx from 'clsx'; -/** - * Internal dependencies - */ -import { PlayIcon } from '../../../shared/icons'; import './style.scss'; diff --git a/projects/plugins/jetpack/extensions/editor.js b/projects/plugins/jetpack/extensions/editor.js index 6784c69588508..17ab83121366a 100644 --- a/projects/plugins/jetpack/extensions/editor.js +++ b/projects/plugins/jetpack/extensions/editor.js @@ -1,11 +1,11 @@ import apiFetch from '@wordpress/api-fetch'; import { createHigherOrderComponent } from '@wordpress/compose'; import { addFilter } from '@wordpress/hooks'; +import '@automattic/jetpack-shared-extension-utils/store/wordpress-com'; import './shared/public-path'; import './shared/block-category'; import './shared/plan-upgrade-notification'; import './shared/stripe-connection-notification'; -import './shared/external-media'; import './extended-blocks/core-embed'; import './extended-blocks/core-site-logo/index.js'; import './extended-blocks/core-social-links'; @@ -14,7 +14,6 @@ import './shared/styles/slideshow-fix.scss'; // Register media source store to the centralized data registry. import './store/media-source'; import './store/membership-products'; -import './store/wordpress-com'; import extensionList from './index.json'; import './index.scss'; diff --git a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/descript.js b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/descript.js index 9e4bc499c1d77..0db9efb3e2f7d 100644 --- a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/descript.js +++ b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/descript.js @@ -1,6 +1,6 @@ +import { DescriptIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import { registerBlockVariation } from '@wordpress/blocks'; import { __ } from '@wordpress/i18n'; -import { DescriptIcon } from '../../shared/icons'; /* * New `core/embed` block variation. diff --git a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/facebook.js b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/facebook.js index a4e81b7811207..46bd9c50cbde6 100644 --- a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/facebook.js +++ b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/facebook.js @@ -1,7 +1,7 @@ +import { getIconColor } from '@automattic/jetpack-shared-extension-utils'; +import { FacebookIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import { addFilter } from '@wordpress/hooks'; import { __, _x } from '@wordpress/i18n'; -import { getIconColor } from '../../shared/block-icons'; -import { FacebookIcon } from '../../shared/icons'; const facebookVariation = { name: 'facebook', diff --git a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/instagram.js b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/instagram.js index d967d55c3a8b0..7b741ba5e51e7 100644 --- a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/instagram.js +++ b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/instagram.js @@ -1,7 +1,7 @@ +import { getIconColor } from '@automattic/jetpack-shared-extension-utils'; +import { InstagramIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import { addFilter } from '@wordpress/hooks'; import { __, _x } from '@wordpress/i18n'; -import { getIconColor } from '../../shared/block-icons'; -import { InstagramIcon } from '../../shared/icons'; import isActive from '../../shared/is-active'; const instagramVariation = { diff --git a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/loom.js b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/loom.js index 1d0feca674099..88e28d6bcac0e 100644 --- a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/loom.js +++ b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/loom.js @@ -1,6 +1,6 @@ +import { LoomIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import { registerBlockVariation } from '@wordpress/blocks'; import { __ } from '@wordpress/i18n'; -import { LoomIcon } from '../../shared/icons'; /* * New `core/embed` block variation. diff --git a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/smartframe.js b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/smartframe.js index 40fb6c2a751e3..2c6bb2a00cb47 100644 --- a/projects/plugins/jetpack/extensions/extended-blocks/core-embed/smartframe.js +++ b/projects/plugins/jetpack/extensions/extended-blocks/core-embed/smartframe.js @@ -1,6 +1,6 @@ +import { SmartFrameIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import { registerBlockVariation } from '@wordpress/blocks'; import { __ } from '@wordpress/i18n'; -import { SmartFrameIcon } from '../../shared/icons'; /* * New `core/embed` block variation. */ diff --git a/projects/plugins/jetpack/extensions/extended-blocks/paid-blocks/upgrade-plan-banner.jsx b/projects/plugins/jetpack/extensions/extended-blocks/paid-blocks/upgrade-plan-banner.jsx index 79d543f142a35..75d02e5c67f79 100644 --- a/projects/plugins/jetpack/extensions/extended-blocks/paid-blocks/upgrade-plan-banner.jsx +++ b/projects/plugins/jetpack/extensions/extended-blocks/paid-blocks/upgrade-plan-banner.jsx @@ -1,6 +1,6 @@ +import { Nudge } from '@automattic/jetpack-shared-extension-utils/components'; import { useSelect } from '@wordpress/data'; import { __, _x, sprintf } from '@wordpress/i18n'; -import { Nudge } from '../../shared/components/upgrade-nudge'; import useUpgradeFlow from '../../shared/use-upgrade-flow/index'; export const UPGRADE_NUDGE_TITLE = __( 'Premium Block', 'jetpack' ); diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx index e33d12ba4a753..61b1586c19f0e 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/index.tsx @@ -1,7 +1,19 @@ /** * External dependencies */ -import { JetpackEditorPanelLogo, useAnalytics } from '@automattic/jetpack-shared-extension-utils'; +import { + useAICheckout, + useAiFeature, + FairUsageNotice, + FeaturedImage, +} from '@automattic/jetpack-ai-client'; +import { + useAnalytics, + PLAN_TYPE_FREE, + PLAN_TYPE_UNLIMITED, + usePlanType, +} from '@automattic/jetpack-shared-extension-utils'; +import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils/components'; import { PanelBody, PanelRow, BaseControl, ExternalLink, Notice } from '@wordpress/components'; import { store as coreStore } from '@wordpress/core-data'; import { useSelect } from '@wordpress/data'; @@ -12,15 +24,10 @@ import debugFactory from 'debug'; /** * Internal dependencies */ -import { FairUsageNotice } from '../../../../blocks/ai-assistant/components/quota-exceeded-message'; -import useAICheckout from '../../../../blocks/ai-assistant/hooks/use-ai-checkout'; -import useAiFeature from '../../../../blocks/ai-assistant/hooks/use-ai-feature'; import useAiProductPage from '../../../../blocks/ai-assistant/hooks/use-ai-product-page'; import { getFeatureAvailability } from '../../../../blocks/ai-assistant/lib/utils/get-feature-availability'; // import { isBetaExtension } from '../../../../editor'; import JetpackPluginSidebar from '../../../../shared/jetpack-plugin-sidebar'; -import { PLAN_TYPE_FREE, PLAN_TYPE_UNLIMITED, usePlanType } from '../../../../shared/use-plan-type'; -import { FeaturedImage } from '../ai-image'; import { Breve, registerBreveHighlights, Highlight } from '../breve'; import { getBreveAvailability, canWriteBriefBeEnabled } from '../breve/utils/get-availability'; import Feedback from '../feedback'; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/upgrade.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/upgrade.tsx index 46c3fe57cc336..55d42697402e3 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/upgrade.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/ai-assistant-plugin-sidebar/upgrade.tsx @@ -5,10 +5,7 @@ import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import { Button } from '@wordpress/components'; import { createInterpolateElement, useCallback } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; -/** - * Internal dependencies - */ -import { TierProp } from '../../../../store/wordpress-com/types'; +import type { TierProp } from '@automattic/jetpack-shared-extension-utils/store/wordpress-com/types'; export default function Upgrade( { onClick, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/highlight/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/highlight/index.tsx index ff8298a04fbe8..a0ded9300a6ee 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/highlight/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/breve/highlight/index.tsx @@ -1,7 +1,7 @@ /** * External dependencies */ -import { fixes, Block, AiFeedbackThumbs } from '@automattic/jetpack-ai-client'; +import { fixes, Block, AiFeedbackThumbs, AiSVG } from '@automattic/jetpack-ai-client'; import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import { rawHandler, serialize } from '@wordpress/blocks'; import { Button, Popover, Spinner } from '@wordpress/components'; @@ -14,7 +14,6 @@ import React from 'react'; /** * Internal dependencies */ -import { AiSVG } from '../../ai-icon'; import { BREVE_FEATURE_NAME } from '../constants'; import features from '../features'; import { LONG_SENTENCES } from '../features/long-sentences'; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/feedback/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/feedback/index.tsx index 15e523c3457fe..df04d7861ecf0 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/feedback/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/feedback/index.tsx @@ -1,7 +1,7 @@ /** * External dependencies */ -import { useAiSuggestions } from '@automattic/jetpack-ai-client'; +import { useAiSuggestions, usePostContent, AiAssistantModal } from '@automattic/jetpack-ai-client'; import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import { Button } from '@wordpress/components'; import { useSelect, useDispatch } from '@wordpress/data'; @@ -12,8 +12,6 @@ import React from 'react'; /** * Internal dependencies */ -import usePostContent from '../../hooks/use-post-content'; -import AiAssistantModal from '../modal'; import './style.scss'; export default function Feedback( { diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/title-optimization/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/title-optimization/index.tsx index 3d09305fe2303..10a9c01d586a7 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/title-optimization/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/title-optimization/index.tsx @@ -8,8 +8,11 @@ import { ERROR_NETWORK, ERROR_SERVICE_UNAVAILABLE, ERROR_UNCLEAR_PROMPT, + QuotaExceededMessage, + usePostContent, + AiAssistantModal, } from '@automattic/jetpack-ai-client'; -import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; +import { useAnalytics, useAutosaveAndRedirect } from '@automattic/jetpack-shared-extension-utils'; import { Button, Spinner, ExternalLink, Notice } from '@wordpress/components'; import { useDispatch } from '@wordpress/data'; import { useState, useCallback } from '@wordpress/element'; @@ -17,11 +20,7 @@ import { __ } from '@wordpress/i18n'; /** * Internal dependencies */ -import QuotaExceededMessage from '../../../../blocks/ai-assistant/components/quota-exceeded-message'; import { getFeatureAvailability } from '../../../../blocks/ai-assistant/lib/utils/get-feature-availability'; -import useAutoSaveAndRedirect from '../../../../shared/use-autosave-and-redirect'; -import usePostContent from '../../hooks/use-post-content'; -import AiAssistantModal from '../modal'; import TitleOptimizationKeywords from './title-optimization-keywords'; import TitleOptimizationOptions from './title-optimization-options'; import './style.scss'; @@ -106,7 +105,7 @@ export default function TitleOptimization( { const [ error, setError ] = useState< TitleOptimizationError | null >( null ); const [ optimizationKeywords, setOptimizationKeywords ] = useState( '' ); const { editPost } = useDispatch( 'core/editor' ); - const { autosave } = useAutoSaveAndRedirect(); + const { autosave } = useAutosaveAndRedirect(); const { increaseAiAssistantRequestsCount } = useDispatch( 'wordpress-com/plans' ); const { tracks } = useAnalytics(); const { recordEvent } = tracks; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-bar/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-bar/index.tsx index 0fc83f7523698..b96cee65caf26 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-bar/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-bar/index.tsx @@ -2,6 +2,11 @@ * External dependencies */ import { LoadingPlaceholder } from '@automattic/jetpack-components'; +import { + PLAN_TYPE_FREE, + PLAN_TYPE_TIERED, + PLAN_TYPE_UNLIMITED, +} from '@automattic/jetpack-shared-extension-utils'; import { BaseControl } from '@wordpress/components'; import { createInterpolateElement } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; @@ -11,11 +16,6 @@ import React from 'react'; * Internal dependencies */ import './style.scss'; -import { - PLAN_TYPE_FREE, - PLAN_TYPE_TIERED, - PLAN_TYPE_UNLIMITED, -} from '../../../../shared/use-plan-type'; /** * Types */ diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-bar/types.ts b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-bar/types.ts index 1c0a1d2282840..f4a5ba3ef84fe 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-bar/types.ts +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-bar/types.ts @@ -1,4 +1,4 @@ -import { PlanType } from '../../../../shared/use-plan-type'; +import { PlanType } from '@automattic/jetpack-shared-extension-utils'; export type UsageBarProps = { /** diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-panel/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-panel/index.tsx index eb5eb37835ea5..45c8a4843ccb1 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-panel/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-panel/index.tsx @@ -1,8 +1,18 @@ /** * External dependencies */ +import { useAICheckout, useAiFeature } from '@automattic/jetpack-ai-client'; import { getRedirectUrl } from '@automattic/jetpack-components'; -import { isAtomicSite, isSimpleSite } from '@automattic/jetpack-shared-extension-utils'; +import { + isAtomicSite, + isSimpleSite, + useAutosaveAndRedirect, + PLAN_TYPE_FREE, + PLAN_TYPE_TIERED, + usePlanType, + PlanType, + canUserPurchasePlan, +} from '@automattic/jetpack-shared-extension-utils'; import { Button } from '@wordpress/components'; import { gmdateI18n } from '@wordpress/date'; import { useCallback } from '@wordpress/element'; @@ -11,17 +21,7 @@ import React from 'react'; /** * Internal dependencies */ -import useAICheckout from '../../../../blocks/ai-assistant/hooks/use-ai-checkout'; -import useAiFeature from '../../../../blocks/ai-assistant/hooks/use-ai-feature'; import useAnalytics from '../../../../blocks/ai-assistant/hooks/use-analytics'; -import { canUserPurchasePlan } from '../../../../blocks/ai-assistant/lib/connection'; -import useAutosaveAndRedirect from '../../../../shared/use-autosave-and-redirect'; -import { - PLAN_TYPE_FREE, - PLAN_TYPE_TIERED, - usePlanType, - PlanType, -} from '../../../../shared/use-plan-type'; import UsageControl from '../usage-bar'; import './style.scss'; import type { UsagePanelProps, InternalUsagePanelProps } from './types'; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-panel/types.ts b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-panel/types.ts index 82195674a8c2c..2546c789ed442 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-panel/types.ts +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/usage-panel/types.ts @@ -1,4 +1,4 @@ -import { PlanType } from '../../../../shared/use-plan-type'; +import { PlanType } from '@automattic/jetpack-shared-extension-utils'; import { PLACEMENT_DOCUMENT_SETTINGS, PLACEMENT_JETPACK_SIDEBAR, diff --git a/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx b/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx index ee7ff03ea1925..b81646b5d0de6 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-content-lens/extend/ai-post-excerpt/index.tsx @@ -1,7 +1,11 @@ /** * External dependencies */ -import { useAiSuggestions } from '@automattic/jetpack-ai-client'; +import { + useAiSuggestions, + useAiFeature, + QuotaExceededMessage, +} from '@automattic/jetpack-ai-client'; import { isAtomicSite, isSimpleSite, @@ -20,8 +24,6 @@ import { count } from '@wordpress/wordcount'; /** * Internal dependencies */ -import QuotaExceededMessage from '../../../../blocks/ai-assistant/components/quota-exceeded-message'; -import useAiFeature from '../../../../blocks/ai-assistant/hooks/use-ai-feature'; import { isBetaExtension } from '../../../../editor'; import { AiExcerptControl } from '../../components/ai-excerpt-control'; /** diff --git a/projects/plugins/jetpack/extensions/plugins/post-publish-qr-post-panel/components/qr-post.js b/projects/plugins/jetpack/extensions/plugins/post-publish-qr-post-panel/components/qr-post.js index 6bb7df00c4c40..498b35a7b0319 100644 --- a/projects/plugins/jetpack/extensions/plugins/post-publish-qr-post-panel/components/qr-post.js +++ b/projects/plugins/jetpack/extensions/plugins/post-publish-qr-post-panel/components/qr-post.js @@ -1,10 +1,10 @@ import { QRCode } from '@automattic/jetpack-components'; +import { JetpackLogo } from '@automattic/jetpack-shared-extension-utils/icons'; import { Component, Button, Modal } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; import { store as editorStore } from '@wordpress/editor'; import { useRef, useEffect, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import { JetpackLogo } from '../../../shared/icons.js'; import useSiteLogo from '../hooks/use-site-logo.js'; /** diff --git a/projects/plugins/jetpack/extensions/plugins/post-publish-qr-post-panel/index.js b/projects/plugins/jetpack/extensions/plugins/post-publish-qr-post-panel/index.js index 44a2023c5ddc6..f8b0c57e15e2f 100644 --- a/projects/plugins/jetpack/extensions/plugins/post-publish-qr-post-panel/index.js +++ b/projects/plugins/jetpack/extensions/plugins/post-publish-qr-post-panel/index.js @@ -1,4 +1,4 @@ -import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils/components'; import { PanelBody, PanelRow } from '@wordpress/components'; import { store as coreStore } from '@wordpress/core-data'; import { useSelect } from '@wordpress/data'; diff --git a/projects/plugins/jetpack/extensions/plugins/publicize/pre-publish.js b/projects/plugins/jetpack/extensions/plugins/publicize/pre-publish.js index 559c9edff032d..a6db85ec2a6e8 100644 --- a/projects/plugins/jetpack/extensions/plugins/publicize/pre-publish.js +++ b/projects/plugins/jetpack/extensions/plugins/publicize/pre-publish.js @@ -5,7 +5,7 @@ import { useSocialMediaConnections, usePostCanUseSig, } from '@automattic/jetpack-publicize-components'; -import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils/components'; import { PluginPrePublishPanel } from '@wordpress/edit-post'; import { __ } from '@wordpress/i18n'; import UpsellNotice from './components/upsell'; diff --git a/projects/plugins/jetpack/extensions/plugins/seo/index.js b/projects/plugins/jetpack/extensions/plugins/seo/index.js index a3618e5a60fa0..5feffe1932c03 100644 --- a/projects/plugins/jetpack/extensions/plugins/seo/index.js +++ b/projects/plugins/jetpack/extensions/plugins/seo/index.js @@ -1,11 +1,11 @@ import { - JetpackEditorPanelLogo, useModuleStatus, isSimpleSite, isAtomicSite, getJetpackExtensionAvailability, getRequiredPlan, } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils/components'; import { PanelBody, PanelRow } from '@wordpress/components'; import { store as coreStore } from '@wordpress/core-data'; import { useSelect } from '@wordpress/data'; diff --git a/projects/plugins/jetpack/extensions/plugins/social-previews/index.js b/projects/plugins/jetpack/extensions/plugins/social-previews/index.js index 407d686af17f0..593fda96cc87b 100644 --- a/projects/plugins/jetpack/extensions/plugins/social-previews/index.js +++ b/projects/plugins/jetpack/extensions/plugins/social-previews/index.js @@ -1,5 +1,5 @@ import { SocialPreviewsModal, SocialPreviewsPanel } from '@automattic/jetpack-publicize-components'; -import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackEditorPanelLogo } from '@automattic/jetpack-shared-extension-utils/components'; import { PanelBody } from '@wordpress/components'; import { store as coreStore } from '@wordpress/core-data'; import { useSelect } from '@wordpress/data'; diff --git a/projects/plugins/jetpack/extensions/shared/block-category.js b/projects/plugins/jetpack/extensions/shared/block-category.js index bdd3e485a1eb4..f0bc8c4a69c5b 100644 --- a/projects/plugins/jetpack/extensions/shared/block-category.js +++ b/projects/plugins/jetpack/extensions/shared/block-category.js @@ -1,7 +1,7 @@ import { isAtomicSite, isSimpleSite } from '@automattic/jetpack-shared-extension-utils'; +import { JetpackLogo } from '@automattic/jetpack-shared-extension-utils/icons'; import { getCategories, setCategories, registerBlockCollection } from '@wordpress/blocks'; import { __ } from '@wordpress/i18n'; -import { JetpackLogo } from './icons'; const isWpcom = isSimpleSite() || isAtomicSite(); diff --git a/projects/plugins/jetpack/extensions/shared/block-category.native.js b/projects/plugins/jetpack/extensions/shared/block-category.native.js index 25feac4659cc7..0f5e8c6903834 100644 --- a/projects/plugins/jetpack/extensions/shared/block-category.native.js +++ b/projects/plugins/jetpack/extensions/shared/block-category.native.js @@ -1,7 +1,6 @@ -import { getHostAppNamespace } from '@automattic/jetpack-shared-extension-utils'; +import { getHostAppNamespace, JetpackLogo } from '@automattic/jetpack-shared-extension-utils'; import { getCategories, setCategories, registerBlockCollection } from '@wordpress/blocks'; import { __ } from '@wordpress/i18n'; -import { JetpackLogo } from './icons'; const hostApp = getHostAppNamespace(); if ( hostApp === 'WordPress' ) { diff --git a/projects/plugins/jetpack/extensions/shared/components/block-nudge/index.jsx b/projects/plugins/jetpack/extensions/shared/components/block-nudge/index.jsx index 20bceca99b8a9..d0344f6c170db 100644 --- a/projects/plugins/jetpack/extensions/shared/components/block-nudge/index.jsx +++ b/projects/plugins/jetpack/extensions/shared/components/block-nudge/index.jsx @@ -1,8 +1,8 @@ +import { useAutosaveAndRedirect } from '@automattic/jetpack-shared-extension-utils'; import { Warning } from '@wordpress/block-editor'; import { Button, ExternalLink } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; -import useAutosaveAndRedirect from '../../../shared/use-autosave-and-redirect/index'; import './style.scss'; diff --git a/projects/plugins/jetpack/extensions/shared/components/connect-banner/index.tsx b/projects/plugins/jetpack/extensions/shared/components/connect-banner/index.tsx index 8af620f3857b9..65143ff429752 100644 --- a/projects/plugins/jetpack/extensions/shared/components/connect-banner/index.tsx +++ b/projects/plugins/jetpack/extensions/shared/components/connect-banner/index.tsx @@ -2,14 +2,13 @@ * External dependencies */ import { useConnection } from '@automattic/jetpack-connection'; -import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; +import { useAnalytics, useAutosaveAndRedirect } from '@automattic/jetpack-shared-extension-utils'; +import { Nudge } from '@automattic/jetpack-shared-extension-utils/components'; import { __ } from '@wordpress/i18n'; import { useState, useEffect } from 'react'; /* * Internal dependencies */ -import useAutosaveAndRedirect from '../../use-autosave-and-redirect'; -import { Nudge } from '../upgrade-nudge'; import type { MouseEvent, FC } from 'react'; interface ConnectBannerProps { diff --git a/projects/plugins/jetpack/extensions/shared/components/index.jsx b/projects/plugins/jetpack/extensions/shared/components/index.jsx index 56fe3b1a49543..86bd82794a8d1 100644 --- a/projects/plugins/jetpack/extensions/shared/components/index.jsx +++ b/projects/plugins/jetpack/extensions/shared/components/index.jsx @@ -1,9 +1,9 @@ +import { Nudge } from '@automattic/jetpack-shared-extension-utils/components'; import { renderToStaticMarkup } from 'react-dom/server'; import { UPGRADE_NUDGE_BUTTON_TEXT, UPGRADE_NUDGE_DESCRIPTION, } from '../../extended-blocks/paid-blocks/upgrade-plan-banner'; -import { Nudge } from './upgrade-nudge'; import './style.scss'; // Use dummy props that can be overwritten by a str_replace() on the server. diff --git a/projects/plugins/jetpack/extensions/shared/components/media-player-control/index.js b/projects/plugins/jetpack/extensions/shared/components/media-player-control/index.js index 8f8a2ae4b10cb..c89082cdbe66d 100644 --- a/projects/plugins/jetpack/extensions/shared/components/media-player-control/index.js +++ b/projects/plugins/jetpack/extensions/shared/components/media-player-control/index.js @@ -1,10 +1,13 @@ +import { + ControlBackFiveIcon, + ControlForwardFiveIcon, +} from '@automattic/jetpack-shared-extension-utils/icons'; import { ToolbarGroup, ToolbarButton, ToolbarItem } from '@wordpress/components'; import { useSelect, useDispatch } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; import './style.scss'; import { STATE_PAUSED, STORE_ID } from '../../../store/media-source/constants'; -import { ControlBackFiveIcon, ControlForwardFiveIcon } from '../../icons'; import { convertSecondsToTimeCode } from './utils'; export function MediaPlayerControl( { diff --git a/projects/plugins/jetpack/extensions/shared/components/plans-setup-dialog/index.jsx b/projects/plugins/jetpack/extensions/shared/components/plans-setup-dialog/index.jsx index b12646534cab2..25c360a06cb21 100644 --- a/projects/plugins/jetpack/extensions/shared/components/plans-setup-dialog/index.jsx +++ b/projects/plugins/jetpack/extensions/shared/components/plans-setup-dialog/index.jsx @@ -1,10 +1,10 @@ +import { useAutosaveAndRedirect } from '@automattic/jetpack-shared-extension-utils'; import { __experimentalConfirmDialog as ConfirmDialog, // eslint-disable-line @wordpress/no-unsafe-wp-apis } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import { getPaidPlanLink } from '../../memberships/utils'; -import useAutosaveAndRedirect from '../../use-autosave-and-redirect'; export default function PlansSetupDialog( { showDialog, closeDialog } ) { const { hasTierPlans } = useSelect( select => { diff --git a/projects/plugins/jetpack/extensions/shared/components/stripe-connect-toolbar-button/index.js b/projects/plugins/jetpack/extensions/shared/components/stripe-connect-toolbar-button/index.js index 4ae1bd56dfdc1..4e0cdfa9a7607 100644 --- a/projects/plugins/jetpack/extensions/shared/components/stripe-connect-toolbar-button/index.js +++ b/projects/plugins/jetpack/extensions/shared/components/stripe-connect-toolbar-button/index.js @@ -1,8 +1,7 @@ -import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; +import { useAnalytics, useAutosaveAndRedirect } from '@automattic/jetpack-shared-extension-utils'; +import { flashIcon } from '@automattic/jetpack-shared-extension-utils/icons'; import { ToolbarButton } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; -import { flashIcon } from '../../icons'; -import useAutosaveAndRedirect from '../../use-autosave-and-redirect'; import './style.scss'; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/auth-instructions.js b/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/auth-instructions.js deleted file mode 100644 index 307c22a96efab..0000000000000 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/auth-instructions.js +++ /dev/null @@ -1,31 +0,0 @@ -import { Fragment, memo } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; -import { GooglePhotosLogo } from '../../../icons'; - -function AuthInstructions() { - return ( - - -

    { __( 'To get started, connect your site to your Google Photos library.', 'jetpack' ) }

    -

    { __( 'You can remove the connection in either of these places:', 'jetpack' ) }

    - - - ); -} - -export default memo( AuthInstructions ); diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/auth-progress.js b/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/auth-progress.js deleted file mode 100644 index 33d74de0a9507..0000000000000 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/google-photos/auth-progress.js +++ /dev/null @@ -1,8 +0,0 @@ -import { memo } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; - -function AuthProgress() { - return

    { __( 'Awaiting authorization', 'jetpack' ) }

    ; -} - -export default memo( AuthProgress ); diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-featured-image.js b/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-featured-image.js deleted file mode 100644 index cebcc49e1d33d..0000000000000 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-featured-image.js +++ /dev/null @@ -1,10 +0,0 @@ -import { - FeaturedImage, - PLACEMENT_MEDIA_SOURCE_DROPDOWN, -} from '../../../plugins/ai-assistant-plugin/components/ai-image'; - -function JetpackAIFeaturedImage( { onClose = () => {} } ) { - return ; -} - -export default JetpackAIFeaturedImage; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-general-purpose-image-for-block.js b/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-general-purpose-image-for-block.js deleted file mode 100644 index 1dcdfc1b76743..0000000000000 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-general-purpose-image-for-block.js +++ /dev/null @@ -1,20 +0,0 @@ -import { - GeneralPurposeImage, - PLACEMENT_BLOCK_PLACEHOLDER_BUTTON, -} from '../../../plugins/ai-assistant-plugin/components/ai-image'; - -function JetpackAIGeneralPurposeImageForBlock( { - onClose = () => {}, - onSelect, - multiple = false, -} ) { - return ( - onSelect( multiple ? [ image ] : image ) } - /> - ); -} - -export default JetpackAIGeneralPurposeImageForBlock; diff --git a/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-general-purpose-image-for-media-source.js b/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-general-purpose-image-for-media-source.js deleted file mode 100644 index 9cff6275e8518..0000000000000 --- a/projects/plugins/jetpack/extensions/shared/external-media/sources/jetpack-ai-general-purpose-image-for-media-source.js +++ /dev/null @@ -1,20 +0,0 @@ -import { - GeneralPurposeImage, - PLACEMENT_MEDIA_SOURCE_DROPDOWN, -} from '../../../plugins/ai-assistant-plugin/components/ai-image'; - -function JetpackAIGeneralPurposeImageForMediaSource( { - onClose = () => {}, - onSelect, - multiple = false, -} ) { - return ( - onSelect( multiple ? [ image ] : image ) } - /> - ); -} - -export default JetpackAIGeneralPurposeImageForMediaSource; diff --git a/projects/plugins/jetpack/extensions/shared/jetpack-plugin-sidebar.js b/projects/plugins/jetpack/extensions/shared/jetpack-plugin-sidebar.js index a1af00f7d0375..a2f1dd66ab9b6 100644 --- a/projects/plugins/jetpack/extensions/shared/jetpack-plugin-sidebar.js +++ b/projects/plugins/jetpack/extensions/shared/jetpack-plugin-sidebar.js @@ -1,3 +1,4 @@ +import { JetpackLogo } from '@automattic/jetpack-shared-extension-utils/icons'; import { createSlotFill } from '@wordpress/components'; import { dispatch } from '@wordpress/data'; import domReady from '@wordpress/dom-ready'; @@ -5,7 +6,6 @@ import { PluginSidebar, PluginSidebarMoreMenuItem } from '@wordpress/edit-post'; import { Fragment } from '@wordpress/element'; import { registerPlugin } from '@wordpress/plugins'; import { getQueryArg } from '@wordpress/url'; -import { JetpackLogo } from './icons'; import './jetpack-plugin-sidebar.scss'; diff --git a/projects/plugins/jetpack/extensions/shared/use-upgrade-flow/index.js b/projects/plugins/jetpack/extensions/shared/use-upgrade-flow/index.js index fa556c27a1dbf..d762a7d766a62 100644 --- a/projects/plugins/jetpack/extensions/shared/use-upgrade-flow/index.js +++ b/projects/plugins/jetpack/extensions/shared/use-upgrade-flow/index.js @@ -1,8 +1,7 @@ -import { getUpgradeUrl } from '@automattic/jetpack-shared-extension-utils'; +import { getUpgradeUrl, useAutosaveAndRedirect } from '@automattic/jetpack-shared-extension-utils'; import { useSelect } from '@wordpress/data'; import { doAction, hasAction } from '@wordpress/hooks'; import { noop } from 'lodash'; -import useAutosaveAndRedirect from '../use-autosave-and-redirect/index'; const HOOK_OPEN_CHECKOUT_MODAL = 'a8c.wpcom-block-editor.openCheckoutModal'; diff --git a/projects/plugins/jetpack/extensions/types.ts b/projects/plugins/jetpack/extensions/types.ts deleted file mode 100644 index e0c0539475f08..0000000000000 --- a/projects/plugins/jetpack/extensions/types.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Types for the AI Assistant feature. - */ -import type { TierProp, UpgradeTypeProp, FeaturesControl } from './store/wordpress-com/types'; - -/* - * `sites/$site/ai-assistant-feature` endpoint response body props - */ -export type SiteAIAssistantFeatureEndpointResponseProps = { - 'has-feature': boolean; - 'is-over-limit': boolean; - 'requests-count': number; - 'requests-limit': number; - 'usage-period': { - 'current-start': string; - 'next-start': string; - 'requests-count': number; - }; - 'site-require-upgrade': boolean; - 'error-message'?: string; - 'error-code'?: string; - 'upgrade-type': UpgradeTypeProp; - 'current-tier': TierProp; - 'tier-plans': Array< TierProp >; - 'next-tier'?: TierProp | null; - costs?: { - [ key: string ]: { - [ key: string ]: number; - }; - }; - 'features-control'?: FeaturesControl; -}; diff --git a/projects/plugins/jetpack/images/media.svg b/projects/plugins/jetpack/images/media.svg deleted file mode 100644 index de87c38727b84..0000000000000 --- a/projects/plugins/jetpack/images/media.svg +++ /dev/null @@ -1 +0,0 @@ -Artboard 1 diff --git a/projects/plugins/jetpack/modules/external-media/external-media.php b/projects/plugins/jetpack/modules/external-media/external-media.php new file mode 100644 index 0000000000000..465654905e7e4 --- /dev/null +++ b/projects/plugins/jetpack/modules/external-media/external-media.php @@ -0,0 +1,12 @@ + Date: Wed, 5 Feb 2025 18:15:45 +1100 Subject: [PATCH 365/420] Add general, writing, reading, discussion settings screens to duplicate views list (#40913) * Add general, writing, reading, discussion settings screens to duplicate views list * changelog * Missing description text * Disable wpcom_admin_interface_pre_get_option when looking up the real value on the options page * Prevent calypso redirect when changing between classic/default option in options-general.php * Update title copy --------- Co-authored-by: okmttdhr --- .../update-wpcom-duplicate-views-settings | 4 + .../removed-calypso-screen-notice.tsx | 96 ++++++++++++++++--- .../wpcom-admin-interface.php | 8 +- 3 files changed, 92 insertions(+), 16 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-wpcom-duplicate-views-settings diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-wpcom-duplicate-views-settings b/projects/packages/jetpack-mu-wpcom/changelog/update-wpcom-duplicate-views-settings new file mode 100644 index 0000000000000..fcfad0cbf98fe --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-wpcom-duplicate-views-settings @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Added general, writing, reading, discussion settings screens to duplicate views list \ No newline at end of file diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx index 7b4f279d40e9f..dff5c810059c3 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-interface/removed-calypso-screen-notice.tsx @@ -12,6 +12,8 @@ import { postComments, tag, verse, + settings, + page, } from '@wordpress/icons'; import { addQueryArgs } from '@wordpress/url'; @@ -48,8 +50,8 @@ const Notice = () => { const config = { 'edit.php': { icon: verse, - title: hasTranslation( 'The Posts view just got better' ) - ? __( 'The Posts view just got better', 'jetpack-mu-wpcom' ) + title: hasTranslation( 'The Posts view just got an update' ) + ? __( 'The Posts view just got an update', 'jetpack-mu-wpcom' ) : titleFallback, description: hasTranslation( "We've adopted WordPress' main Posts view to bring improvements to you and millions of WordPress users worldwide." @@ -62,8 +64,8 @@ const Notice = () => { }, 'edit.php?post_type=page': { icon: pages, - title: hasTranslation( 'The Pages view just got better' ) - ? __( 'The Pages view just got better', 'jetpack-mu-wpcom' ) + title: hasTranslation( 'The Pages view just got an update' ) + ? __( 'The Pages view just got an update', 'jetpack-mu-wpcom' ) : titleFallback, description: hasTranslation( "We've adopted WordPress' main Pages view to bring improvements to you and millions of WordPress users worldwide." @@ -76,8 +78,8 @@ const Notice = () => { }, 'edit.php?post_type=jetpack-portfolio': { icon: archive, - title: hasTranslation( 'The Portfolio Projects view just got better' ) - ? __( 'The Portfolio Projects view just got better', 'jetpack-mu-wpcom' ) + title: hasTranslation( 'The Portfolio Projects view just got an update' ) + ? __( 'The Portfolio Projects view just got an update', 'jetpack-mu-wpcom' ) : titleFallback, description: hasTranslation( "We've adopted WordPress' main Portfolio Projects view to bring improvements to you and millions of WordPress users worldwide." @@ -90,8 +92,8 @@ const Notice = () => { }, 'edit.php?post_type=jetpack-testimonial': { icon: commentContent, - title: hasTranslation( 'The Testimonials view just got better' ) - ? __( 'The Testimonials view just got better', 'jetpack-mu-wpcom' ) + title: hasTranslation( 'The Testimonials view just got an update' ) + ? __( 'The Testimonials view just got an update', 'jetpack-mu-wpcom' ) : titleFallback, description: hasTranslation( "We've adopted WordPress' main Testimonials view to bring improvements to you and millions of WordPress users worldwide." @@ -104,8 +106,8 @@ const Notice = () => { }, 'edit-comments.php': { icon: postComments, - title: hasTranslation( 'The Comments view just got better' ) - ? __( 'The Comments view just got better', 'jetpack-mu-wpcom' ) + title: hasTranslation( 'The Comments view just got an update' ) + ? __( 'The Comments view just got an update', 'jetpack-mu-wpcom' ) : titleFallback, description: hasTranslation( "We've adopted WordPress' main Comments view to bring improvements to you and millions of WordPress users worldwide." @@ -118,8 +120,8 @@ const Notice = () => { }, 'edit-tags.php?taxonomy=category': { icon: category, - title: hasTranslation( 'The Categories view just got better' ) - ? __( 'The Categories view just got better', 'jetpack-mu-wpcom' ) + title: hasTranslation( 'The Categories view just got an update' ) + ? __( 'The Categories view just got an update', 'jetpack-mu-wpcom' ) : titleFallback, description: hasTranslation( "We've adopted WordPress' main Categories view to bring improvements to you and millions of WordPress users worldwide." @@ -132,8 +134,8 @@ const Notice = () => { }, 'edit-tags.php?taxonomy=post_tag': { icon: tag, - title: hasTranslation( 'The Tags view just got better' ) - ? __( 'The Tags view just got better', 'jetpack-mu-wpcom' ) + title: hasTranslation( 'The Tags view just got an update' ) + ? __( 'The Tags view just got an update', 'jetpack-mu-wpcom' ) : titleFallback, description: hasTranslation( "We've adopted WordPress' main Tags view to bring improvements to you and millions of WordPress users worldwide." @@ -144,6 +146,62 @@ const Notice = () => { ) : descriptionFallback, }, + 'options-general.php': { + icon: settings, + title: hasTranslation( 'The General Settings view just got an update' ) + ? __( 'The General Settings view just got an update', 'jetpack-mu-wpcom' ) + : titleFallback, + description: hasTranslation( + "We've adopted WordPress' main General Settings view to bring improvements to you and millions of WordPress users worldwide." + ) + ? __( + "We've adopted WordPress' main General Settings view to bring improvements to you and millions of WordPress users worldwide.", + 'jetpack-mu-wpcom' + ) + : descriptionFallback, + }, + 'options-writing.php': { + icon: verse, + title: hasTranslation( 'The Writing Settings view just got an update' ) + ? __( 'The Writing Settings view just got an update', 'jetpack-mu-wpcom' ) + : titleFallback, + description: hasTranslation( + "We've adopted WordPress' main Writing Settings view to bring improvements to you and millions of WordPress users worldwide." + ) + ? __( + "We've adopted WordPress' main Writing Settings view to bring improvements to you and millions of WordPress users worldwide.", + 'jetpack-mu-wpcom' + ) + : descriptionFallback, + }, + 'options-reading.php': { + icon: page, + title: hasTranslation( 'The Reading Settings view just got an update' ) + ? __( 'The Reading Settings view just got an update', 'jetpack-mu-wpcom' ) + : titleFallback, + description: hasTranslation( + "We've adopted WordPress' main Reading Settings view to bring improvements to you and millions of WordPress users worldwide." + ) + ? __( + "We've adopted WordPress' main Reading Settings view to bring improvements to you and millions of WordPress users worldwide.", + 'jetpack-mu-wpcom' + ) + : descriptionFallback, + }, + 'options-discussion.php': { + icon: postComments, + title: hasTranslation( 'The Discussion Settings view just got an update' ) + ? __( 'The Discussion Settings view just got an update', 'jetpack-mu-wpcom' ) + : titleFallback, + description: hasTranslation( + "We've adopted WordPress' main Discussion Settings view to bring improvements to you and millions of WordPress users worldwide." + ) + ? __( + "We've adopted WordPress' main Discussion Settings view to bring improvements to you and millions of WordPress users worldwide.", + 'jetpack-mu-wpcom' + ) + : descriptionFallback, + }, }; if ( ! Object.keys( config ).includes( removedCalypsoScreenNoticeConfig.screen ) ) { @@ -165,12 +223,20 @@ const Notice = () => { ); }; - const title = sprintf( + let title = sprintf( // translators: %s: page name __( 'The %s view just got better', 'jetpack-mu-wpcom' ), removedCalypsoScreenNoticeConfig.title ); + if ( hasTranslation( 'The %s view just got an update' ) ) { + title = sprintf( + // translators: %s: page name + __( 'The %s view just got an update', 'jetpack-mu-wpcom' ), + removedCalypsoScreenNoticeConfig.title + ); + } + return ( '; echo '

    ' . esc_html__( 'Use WP-Admin to manage your site.', 'jetpack-mu-wpcom' ) . '


    '; @@ -103,7 +105,7 @@ function wpcom_admin_interface_pre_update_option( $new_value, $old_value ) { */ function ( $location ) { $updated_settings_page = add_query_arg( 'settings-updated', 'true', wp_get_referer() ); - if ( $location === $updated_settings_page ) { + if ( $location === $updated_settings_page && ! wpcom_is_duplicate_views_experiment_enabled() ) { return 'https://wordpress.com/settings/general/' . wpcom_get_site_slug(); } else { return $location; @@ -125,6 +127,10 @@ function ( $location ) { 'edit-comments.php', 'edit-tags.php?taxonomy=category', 'edit-tags.php?taxonomy=post_tag', + 'options-general.php', + 'options-writing.php', + 'options-reading.php', + 'options-discussion.php', ); /** From bdf64791d11321c00867b081e3c2cc1a972cb931 Mon Sep 17 00:00:00 2001 From: arthur791004 Date: Wed, 5 Feb 2025 16:32:53 +0800 Subject: [PATCH 366/420] Import Media: Integrate external media modal (#41282) * External Media: Move Media Import page to external-media package * External Media: Integrate external media library modal * External Media: Fix styles of the external media modal * changelog * changelog * Address feedback * Update composer.lock * Replace isCurrentUserConnected with isUserConnected --- .../changelog/feat-external-media-import-page | 4 + .../src/class-external-media.php | 11 +- .../features/admin/external-media-import.js | 90 +++ .../features/admin/external-media-import.php | 114 +++ .../src/features/editor/editor.scss | 750 ++++-------------- .../src/features/editor/index.js | 4 +- .../src/shared/media-browser/index.js | 1 + .../src/shared/media-browser/style.scss | 205 +++++ .../src/shared/sources/google-photos/index.js | 1 + .../shared/sources/google-photos/style.scss | 170 ++++ .../{openverse.js => openverse/index.js} | 11 +- .../src/shared/sources/openverse/style.scss | 18 + .../sources/{pexels.js => pexels/index.js} | 11 +- .../src/shared/sources/pexels/style.scss | 18 + .../packages/external-media/webpack.config.js | 1 + .../changelog/feat-external-media-import-page | 4 + .../src/class-jetpack-mu-wpcom.php | 1 - .../wpcom-external-media-import.js | 1 - .../wpcom-external-media-import.php | 98 --- .../jetpack-mu-wpcom/webpack.config.js | 2 - .../changelog/feat-external-media-import-page | 4 + .../changelog/feat-external-media-import-page | 4 + .../wpcomsh/notices/storage-notices.php | 2 +- 23 files changed, 791 insertions(+), 734 deletions(-) create mode 100644 projects/packages/external-media/changelog/feat-external-media-import-page create mode 100644 projects/packages/external-media/src/features/admin/external-media-import.js create mode 100644 projects/packages/external-media/src/features/admin/external-media-import.php create mode 100644 projects/packages/external-media/src/shared/media-browser/style.scss create mode 100644 projects/packages/external-media/src/shared/sources/google-photos/style.scss rename projects/packages/external-media/src/shared/sources/{openverse.js => openverse/index.js} (91%) create mode 100644 projects/packages/external-media/src/shared/sources/openverse/style.scss rename projects/packages/external-media/src/shared/sources/{pexels.js => pexels/index.js} (91%) create mode 100644 projects/packages/external-media/src/shared/sources/pexels/style.scss create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/feat-external-media-import-page delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.js delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.php create mode 100644 projects/plugins/jetpack/changelog/feat-external-media-import-page create mode 100644 projects/plugins/wpcomsh/changelog/feat-external-media-import-page diff --git a/projects/packages/external-media/changelog/feat-external-media-import-page b/projects/packages/external-media/changelog/feat-external-media-import-page new file mode 100644 index 0000000000000..e0571a82bb60e --- /dev/null +++ b/projects/packages/external-media/changelog/feat-external-media-import-page @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +External Media: Add external media modal on the Media Import page diff --git a/projects/packages/external-media/src/class-external-media.php b/projects/packages/external-media/src/class-external-media.php index c8552680b7db9..b6c4ac088d012 100644 --- a/projects/packages/external-media/src/class-external-media.php +++ b/projects/packages/external-media/src/class-external-media.php @@ -23,6 +23,13 @@ class External_Media { * Add hooks and filters. */ public static function init() { + // Load external media import page on WordPress.com sites first. + // We will continue to enable the feature on all sites. + $host = new Host(); + if ( $host->is_wpcom_platform() ) { + require_once __DIR__ . '/features/admin/external-media-import.php'; + } + add_action( 'enqueue_block_editor_assets', array( __CLASS__, 'enqueue_block_editor_assets' ) ); } @@ -36,7 +43,7 @@ public static function enqueue_block_editor_assets() { Assets::register_script( $asset_name, $assets_base_path . "$asset_name/$asset_name.js", - __FILE__, + self::BASE_FILE, array( 'enqueue' => true, 'textdomain' => 'jetpack-external-media', @@ -66,7 +73,7 @@ private static function get_data() { } $jetpack_ai_enabled = false; - if ( $host->is_wpcom_simple() || $host->is_woa_site() ) { + if ( $host->is_wpcom_platform() ) { $jetpack_ai_enabled = true; } diff --git a/projects/packages/external-media/src/features/admin/external-media-import.js b/projects/packages/external-media/src/features/admin/external-media-import.js new file mode 100644 index 0000000000000..ce0463f8f8456 --- /dev/null +++ b/projects/packages/external-media/src/features/admin/external-media-import.js @@ -0,0 +1,90 @@ +import { sprintf, _n } from '@wordpress/i18n'; +import { useState, useEffect } from 'react'; +import ReactDOM from 'react-dom/client'; +import { getExternalLibrary } from '../../shared'; + +const JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_CONTAINER = 'jetpack-external-media-import'; +const JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_MODAL = 'jetpack-external-media-import-modal'; + +const JetpackExternalMediaImport = () => { + const [ selectedSource, setSelectedSource ] = useState( null ); + const ExternalLibrary = getExternalLibrary( selectedSource ); + + const showNotice = message => { + const notice = document.createElement( 'div' ); + notice.className = 'notice notice-success'; + notice.innerHTML = `

    ${ message }

    `; + + // Add the success notice after the page title + const heading = document.querySelector( + `#${ JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_CONTAINER } > h1` + ); + if ( heading ) { + heading.parentNode.insertBefore( notice, heading.nextSibling ); + } + }; + + const handleSelect = media => { + if ( ! media || media.length === 0 ) { + return; + } + + showNotice( + sprintf( + /* translators: %d is the number of the media file */ + _n( + '%d media file imported successfully.', + '%d media files imported successfully.', + media.length, + 'jetpack-external-media' + ), + media.length + ) + ); + }; + + const closeLibrary = event => { + if ( event ) { + event.stopPropagation(); + + // The DateTime picker is triggering a modal close when selected. We don't want this to close the modal + if ( event.target.closest( '.jetpack-external-media-header__dropdown' ) ) { + return; + } + } + + setSelectedSource( null ); + }; + + useEffect( () => { + const element = document.getElementById( JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_CONTAINER ); + const handleClick = event => { + const slug = event.target.dataset.slug; + if ( slug ) { + setSelectedSource( slug ); + } + }; + + if ( element ) { + element.addEventListener( 'click', handleClick ); + } + + return () => { + if ( element ) { + element.removeEventListener( 'click', handleClick ); + } + }; + }, [] ); + + if ( ! ExternalLibrary ) { + return null; + } + + return ; +}; + +const container = document.getElementById( JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_MODAL ); +if ( container ) { + const root = ReactDOM.createRoot( container ); + root.render( ); +} diff --git a/projects/packages/external-media/src/features/admin/external-media-import.php b/projects/packages/external-media/src/features/admin/external-media-import.php new file mode 100644 index 0000000000000..355e7a30646e4 --- /dev/null +++ b/projects/packages/external-media/src/features/admin/external-media-import.php @@ -0,0 +1,114 @@ + Import. + * + * @package automattic/jetpack-external-media + */ + +namespace Automattic\Jetpack; + +/** + * Register the Jetpack external media page to Media > Import. + */ +function add_jetpack_external_media_import_page() { + if ( empty( $_GET['jetpack_external_media_import_page'] ) ) { // phpcs:disable WordPress.Security.NonceVerification.Recommended + return; + } + + $external_media_import_page_hook = add_submenu_page( + 'upload.php', + __( 'Import Media', 'jetpack-external-media' ), + __( 'Import Media', 'jetpack-external-media' ), + 'upload_files', + 'jetpack_external_media_import_page', + __NAMESPACE__ . '\render_jetpack_external_media_import_page' + ); + + add_action( "load-$external_media_import_page_hook", __NAMESPACE__ . '\enqueue_jetpack_external_media_import_page' ); +} +add_action( 'admin_menu', __NAMESPACE__ . '\add_jetpack_external_media_import_page' ); + +/** + * Enqueue the assets of the Jetpack external media page. + */ +function enqueue_jetpack_external_media_import_page() { + $assets_base_path = 'build/'; + $asset_name = 'jetpack-external-media-import-page'; + + Assets::register_script( + $asset_name, + $assets_base_path . "$asset_name/$asset_name.js", + External_Media::BASE_FILE, + array( + 'in_footer' => true, + 'textdomain' => 'jetpack-external-media', + ) + ); + + Assets::enqueue_script( $asset_name ); +} + +/** + * Render the container of the Jetpack external media page. + */ +function render_jetpack_external_media_import_page() { + $title = __( 'Import Media', 'jetpack-external-media' ); + $description = __( 'WordPress allows you to import media from various platforms directly into the Media Library. To begin, select a platform from the options below:', 'jetpack-external-media' ); + $external_media_sources = array( + array( + 'slug' => 'google_photos', + 'name' => __( 'Google Photos', 'jetpack-external-media' ), + 'description' => __( 'Import media from your Google Photos account.', 'jetpack-external-media' ), + ), + array( + 'slug' => 'pexels', + 'name' => __( 'Pexels free photos', 'jetpack-external-media' ), + 'description' => __( 'Free stock photos, royalty free images shared by creators.', 'jetpack-external-media' ), + ), + array( + 'slug' => 'openverse', + 'name' => __( 'Openverse', 'jetpack-external-media' ), + 'description' => __( 'Explore more than 800 million creative works.', 'jetpack-external-media' ), + ), + ); + + ?> +
    +

    +

    + + %3$s', + /* translators: %s: The name of the external media source. */ + esc_attr( sprintf( __( 'Import %s', 'jetpack-external-media' ), $name ) ), + esc_attr( $slug ), + __( 'Import now', 'jetpack-external-media' ) + ); + + ?> + + + + + +
    + + + + + + +
    +
    +
    + div.components-placeholder:not( .jetpack-external-media-replacedholder ) { - display: none; -} - -.jetpack-external-media-browser__empty { - width: 100%; - text-align: center; - padding-top: 2em; -} - -.jetpack-external-media-auth { - max-width: 400px; - margin: 0 auto; - padding-bottom: 80px; - text-align: center; - - p { - margin: 0 0 2em 0; - } -} - -.jetpack-external-media-filters { - display: flex; - justify-content: space-between; -} - -.jetpack-external-media-button-menu__dropdown { - display: flex; - - .jetpack-external-media-button-menu { - width: 100%; - flex-direction: row; - padding-left: 12px; - padding-right: 12px; - } -} - -.jetpack-external-media-button-wrapper { - display: contents; -} - -// Reset placeholder button margin. -.components-placeholder__fieldset, -.editor-post-featured-image { - .components-dropdown .jetpack-external-media-button-menu { - > svg { - display: none; - } - } -} - -// Override DropDown component styles when warpping the "Set featured image" button. -.editor-post-featured-image .components-dropdown { - display: initial; -} - -.block-editor-inserter__media-panel .components-search-control input[type=search].components-search-control__input[placeholder~="Google"] { - display: none; - & + .components-search-control__icon { - display: none; - } -} + @import '@automattic/jetpack-base-styles/gutenberg-base-styles'; + + @keyframes animate-drop { + 0% { + opacity: 0; + transform: translateY(-100%); + } + 100% { + opacity: 1; + transform: translateY(0); + } + } + + /** + * Media button menu + */ + + /** + * Hide the menu when the modal is open. Hacky, but necessary to allow the focus + * to return to selected option when modal is closed. This is how it's currenly + * also implemented in Gutenberg's MediaReplaceFlow. + */ + .modal-open .jetpack-external-media-button-menu__options { + display: none; + } + + /** + * Jetpack App Media + */ + .jetpack-external-media-wrapper__jetpack_app_media-title { + font-family: Recoleta, "Noto Serif", Georgia, "Times New Roman", Times, serif; + font-size: 24px; + font-weight: 400; + line-height: 1.67; + letter-spacing: -0.32px; + margin: 0 0 14px 0; + color:var( --jp-gray-100 ); + + } + .jetpack-external-media-wrapper__jetpack_app_media-description { + font-size: 14px; + font-weight: 400; + line-height: 1.43; + color: var( --jp-gray-60 ); + margin: 0; + } + .jetpack-external-media-wrapper__jetpack_app_media-wrapper.has-no-image-uploaded { + .jetpack-external-media-wrapper__jetpack_app_media-title, + .jetpack-external-media-wrapper__jetpack_app_media-description { + + max-width: 100%; + @media only screen and ( min-width: 600px ) { + max-width: calc( 100% - 300px ); + } + } + } + + .jetpack-external-media-wrapper__jetpack_app_media-qr-code canvas { + width: 100px; + height: 100px; + margin-top: 24px; + } + .jetpack-external-media-wrapper__jetpack_app_media-instructions img { + position: absolute; + right: 56px; + bottom: 0; + display: none; + + @media only screen and ( min-width: 600px ) { + display: inline; + } + } + .jetpack-external-media-browser__jetpack_app_media_browser { + margin: 0 -20px ; + .jetpack-external-media-browser__media { + margin: 6px 0 -15px; + } + } + + .jetpack-external-media-browser.is-jetpack-app-media .jetpack-external-media-browser__media__toolbar { + padding: 0; + background-color: transparent; + } + + .jetpack-external-media-wrapper__jetpack_app_media-qr-code-wrapper { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + flex-grow: 1; + } + + .jetpack-external-media-wrapper__jetpack_app_media .jetpack-external-media-browser__empty { + display: none; + } + + .jetpack-external-media-button-menu__dropdown { + display: flex; + + .jetpack-external-media-button-menu { + width: 100%; + flex-direction: row; + padding-left: 12px; + padding-right: 12px; + } + } + + .jetpack-external-media-button-wrapper { + display: contents; + } + + // Reset placeholder button margin. + .components-placeholder__fieldset, + .editor-post-featured-image { + .components-dropdown .jetpack-external-media-button-menu { + > svg { + display: none; + } + } + } + + // Override DropDown component styles when warpping the "Set featured image" button. + .editor-post-featured-image .components-dropdown { + display: initial; + } + + .block-editor-inserter__media-panel .components-search-control input[type=search].components-search-control__input[placeholder~="Google"] { + display: none; + & + .components-search-control__icon { + display: none; + } + } + \ No newline at end of file diff --git a/projects/packages/external-media/src/features/editor/index.js b/projects/packages/external-media/src/features/editor/index.js index 1cac88e31cbbf..59113cf0481c8 100644 --- a/projects/packages/external-media/src/features/editor/index.js +++ b/projects/packages/external-media/src/features/editor/index.js @@ -1,4 +1,4 @@ -import { isCurrentUserConnected } from '@automattic/jetpack-shared-extension-utils'; +import { isUserConnected } from '@automattic/jetpack-shared-extension-utils'; import { useBlockEditContext } from '@wordpress/block-editor'; import { addFilter } from '@wordpress/hooks'; import { @@ -26,7 +26,7 @@ function insertExternalMediaBlocks( settings, name ) { }; } -if ( isCurrentUserConnected() && 'function' === typeof useBlockEditContext ) { +if ( isUserConnected() && 'function' === typeof useBlockEditContext ) { addPexelsToMediaInserter(); addGooglePhotosToMediaInserter(); diff --git a/projects/packages/external-media/src/shared/media-browser/index.js b/projects/packages/external-media/src/shared/media-browser/index.js index 8bfb203d86403..3cc0aa32b2f3e 100644 --- a/projects/packages/external-media/src/shared/media-browser/index.js +++ b/projects/packages/external-media/src/shared/media-browser/index.js @@ -7,6 +7,7 @@ import { debounce } from 'lodash'; import React from 'react'; import MediaItem from './media-item'; import MediaPlaceholder from './placeholder'; +import './style.scss'; const MAX_SELECTED = 10; diff --git a/projects/packages/external-media/src/shared/media-browser/style.scss b/projects/packages/external-media/src/shared/media-browser/style.scss new file mode 100644 index 0000000000000..703b1524e4225 --- /dev/null +++ b/projects/packages/external-media/src/shared/media-browser/style.scss @@ -0,0 +1,205 @@ +@import '@automattic/jetpack-base-styles/gutenberg-base-styles'; + +$grid-size: 8px; + +@keyframes jetpack-external-media-loading-fade { + 0% { + opacity: 0.5; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0.5; + } +} + +.jetpack-external-media-browser--visually-hidden { + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect( 1px, 1px, 1px, 1px ); + white-space: nowrap; /* added line */ +} + +/** +* Media item container +*/ +.jetpack-external-media-browser { + .is-error { + margin-bottom: 1em; + margin-left: 0; + margin-right: 0; + } + + .components-placeholder { + background-color: transparent; + } + + .components-modal__content { + overflow: auto; + padding-bottom: 0; + width: 100%; + + @media ( min-width: 600px ) { + width: 90vw; + height: 90vh; + } + } +} + +.jetpack-external-media-browser--is-copying { + pointer-events: none; +} + +.jetpack-external-media-browser { + background: white; + display: flex; + flex-direction: column; + align-items: flex-start; + + .jetpack-external-media-browser__media { + width: 100%; + } + + // Individual Thumbnails + .jetpack-external-media-browser__media__item { + height: 0; + width: 50%; + padding-top: 50%; + display: inline-flex; + position: relative; + + // Unset button appearance. + border: 0; + background: transparent; + + img { + display: block; + position: absolute; + top: $grid-size; + left: $grid-size; + width: calc( 100% - #{$grid-size * 2} ); + height: calc( 100% - #{$grid-size * 2} ); + object-fit: contain; + } + + &.is-transient img { + opacity: 0.3; + } + } + + .jetpack-external-media-browser__media__copying_indicator { + display: flex; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + + .components-spinner { + margin-bottom: $grid-size; + } + } + + .jetpack-external-media-browser__media__copying_indicator__label { + font-size: 12px; + } + + .jetpack-external-media-browser__media__folder { + float: left; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + align-content: flex-start; + margin-bottom: 36px; + } + + .jetpack-external-media-browser__media__info { + font-size: 12px; + font-weight: bold; + width: 100%; + display: flex; + justify-content: space-between; + padding: 3px; + } + + .jetpack-external-media-browser__media__count { + background-color: #dcdcde; + padding: 3px 4px; + border-radius: 8px; + margin-bottom: auto; + } + + // Resting, focus and selected. + $border-width: 8px; + + .jetpack-external-media-browser__media__item { + border: $border-width solid transparent; + + &:focus { + outline: none; + box-shadow: inset 0 0 0 2px var(--wp-admin-theme-color); + border-radius: 2px + $border-width; // Add the 4px from the transparent. + } + + &__selected { + box-shadow: inset 0 0 0 6px var(--wp-admin-theme-color); + border-radius: 2px + $border-width; // Add the 4px from the transparent. + } + + &__selected:focus { + box-shadow: inset 0 0 0 2px var(--wp-admin-theme-color), inset 0 0 0 3px white, + inset 0 0 0 6px var(--wp-admin-theme-color); + } + } + + // Transient placeholder when media are loading. + .jetpack-external-media-browser__media__placeholder { + width: 100px; + height: 100px; + margin: $grid-size * 2; + animation: jetpack-external-media-loading-fade 1.6s ease-in-out infinite; + background-color: $gray-400; + border: 0; + } + + // Toolbar for "insert" and pagination button. + .jetpack-external-media-browser__media__toolbar { + position: fixed; + position: sticky; + bottom: 0; + left: 0; + width: 100%; + background: white; + padding: 20px 0; + display: flex; + justify-content: flex-end; + } + + .jetpack-external-media-browser__loadmore { + clear: both; + display: block; + margin: 24px auto 48px auto; + } +} + +// Show more thumbs beyond mobile. +@media only screen and ( min-width: 600px ) { + .jetpack-external-media-browser .jetpack-external-media-browser__media__item { + width: 20%; + padding-top: 20%; + } +} + +.jetpack-external-media-browser__empty { + width: 100%; + text-align: center; + padding-top: 2em; +} diff --git a/projects/packages/external-media/src/shared/sources/google-photos/index.js b/projects/packages/external-media/src/shared/sources/google-photos/index.js index df9ea1f72510a..8e4e641b1fa3d 100644 --- a/projects/packages/external-media/src/shared/sources/google-photos/index.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/index.js @@ -8,6 +8,7 @@ import GooglePhotosAuth from './google-photos-auth'; import GooglePhotosAuthUpgrade from './google-photos-auth-upgrade'; import GooglePhotosMedia from './google-photos-media'; import GooglePhotosPickerButton from './google-photos-picker-button'; +import './style.scss'; /** * GooglePhotos component diff --git a/projects/packages/external-media/src/shared/sources/google-photos/style.scss b/projects/packages/external-media/src/shared/sources/google-photos/style.scss new file mode 100644 index 0000000000000..7af1657f15360 --- /dev/null +++ b/projects/packages/external-media/src/shared/sources/google-photos/style.scss @@ -0,0 +1,170 @@ +@import '@automattic/jetpack-base-styles/gutenberg-base-styles'; + +$grid-size: 8px; + +.jetpack-external-media-header__view { + display: flex; + align-items: flex-start; + justify-content: flex-start; + margin-bottom: 48px; + flex-direction: column; + + @media only screen and ( min-width: 600px ) { + flex-direction: row; + align-items: center; + } + + select { + max-width: 200px !important; + } + + .components-base-control__field { + display: flex; + flex-direction: column; + } +} + +.jetpack-external-media-header__change-selection { + display: flex; + flex-grow: 1; + flex-wrap: wrap; + justify-content: flex-start; + + .components-button { + height: 40px; + margin: 1px 1px 9px 0; + + @media only screen and ( min-width: 783px ) { + height: 30px; + } + } +} + +.jetpack-external-media-header__filter, +.jetpack-external-media-header__view { + label { + margin-right: 10px; + } + + .components-base-control { + padding-right: $grid-size; + margin-bottom: 0; + } +} + +.jetpack-external-media-header__filter { + display: flex; + flex-wrap: wrap; + align-items: center; + flex-grow: 1; + justify-content: flex-start; + + @media only screen and ( min-width: 600px ) { + border-left: 1px solid $gray-400; + margin-left: $grid-size * 2; + padding-left: $grid-size * 2; + } + + .jetpack-external-media-date-filter { + display: flex; + flex-wrap: wrap; + + button { + // Adjust button to match the size and position of inputs. + margin-top: 27px; + height: 40px; + + @media only screen and ( min-width: 783px ) { + height: 30px; + } + } + + .components-base-control { + .components-input-control__label { + margin-bottom: 3px; + } + + .components-input-control__backdrop { + border-color: $gray-200; + border-radius: 3px; + } + + .components-input-control__input { + height: 40px; + width: 70px; // This input holds only years, so 4 digits width is enough. + + @media only screen and ( min-width: 783px ) { + height: 30px; + } + } + } + } +} + +.jetpack-external-media-header__account { + display: flex; + flex-direction: column; + + .jetpack-external-media-header__account-info { + display: flex; + margin-bottom: 8px; + } + + .jetpack-external-media-header__account-image { + margin-right: 8px; + } + + .jetpack-external-media-header__account-name { + height: 18px; + max-width: 190px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .jetpack-external-media-browser__disconnect { + height: 40px; + margin: 1px 1px 9px 0; + + @media only screen and ( min-width: 783px ) { + height: 30px; + } + } +} + +.jetpack-external-media__google-photos-picker { + text-align: center; + margin-bottom: 48px; + + h1 { + font-weight: 400; + } + + p { + font-size: 16px; + } + + .jetpack-external-media__google-photos-picker-button { + margin-bottom: 10px; + } + + .jetpack-external-media-header__account { + justify-content: center; + + .components-button { + display: block; + margin: auto; + } + } +} + +.jetpack-external-media-auth { + max-width: 400px; + margin: 0 auto; + padding-bottom: 80px; + text-align: center; + + p { + margin: 0 0 2em 0; + } +} diff --git a/projects/packages/external-media/src/shared/sources/openverse.js b/projects/packages/external-media/src/shared/sources/openverse/index.js similarity index 91% rename from projects/packages/external-media/src/shared/sources/openverse.js rename to projects/packages/external-media/src/shared/sources/openverse/index.js index 83ca4c3348b46..6a1b0f3ec998e 100644 --- a/projects/packages/external-media/src/shared/sources/openverse.js +++ b/projects/packages/external-media/src/shared/sources/openverse/index.js @@ -3,11 +3,12 @@ import { useRef, useCallback, useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { sample } from 'lodash'; import React from 'react'; -import { SOURCE_OPENVERSE, PEXELS_EXAMPLE_QUERIES } from '../constants'; -import MediaBrowser from '../media-browser'; -import { MediaSource } from '../media-service/types'; -import { getExternalMediaApiUrl } from './api'; -import withMedia from './with-media'; +import { SOURCE_OPENVERSE, PEXELS_EXAMPLE_QUERIES } from '../../constants'; +import MediaBrowser from '../../media-browser'; +import { MediaSource } from '../../media-service/types'; +import { getExternalMediaApiUrl } from '../api'; +import withMedia from '../with-media'; +import './style.scss'; /** * OpenverseMedia component diff --git a/projects/packages/external-media/src/shared/sources/openverse/style.scss b/projects/packages/external-media/src/shared/sources/openverse/style.scss new file mode 100644 index 0000000000000..9557dfdf2107e --- /dev/null +++ b/projects/packages/external-media/src/shared/sources/openverse/style.scss @@ -0,0 +1,18 @@ +.jetpack-external-media-header__openverse { + display: flex; + margin-bottom: 48px; + + .components-base-control { + flex: 1; + margin-right: 12px; + } + + .components-base-control__field { + margin-bottom: 0; + } + + .components-base-control__field, + .components-text-control__input { + height: 100%; + } +} diff --git a/projects/packages/external-media/src/shared/sources/pexels.js b/projects/packages/external-media/src/shared/sources/pexels/index.js similarity index 91% rename from projects/packages/external-media/src/shared/sources/pexels.js rename to projects/packages/external-media/src/shared/sources/pexels/index.js index 5b6ad140105f6..ba64d727acff7 100644 --- a/projects/packages/external-media/src/shared/sources/pexels.js +++ b/projects/packages/external-media/src/shared/sources/pexels/index.js @@ -3,11 +3,12 @@ import { useRef, useCallback, useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { sample } from 'lodash'; import React from 'react'; -import { SOURCE_PEXELS, PEXELS_EXAMPLE_QUERIES } from '../constants'; -import MediaBrowser from '../media-browser'; -import { MediaSource } from '../media-service/types'; -import { getExternalMediaApiUrl } from './api'; -import withMedia from './with-media'; +import { SOURCE_PEXELS, PEXELS_EXAMPLE_QUERIES } from '../../constants'; +import MediaBrowser from '../../media-browser'; +import { MediaSource } from '../../media-service/types'; +import { getExternalMediaApiUrl } from '../api'; +import withMedia from '../with-media'; +import './style.scss'; /** * PexelsMedia component diff --git a/projects/packages/external-media/src/shared/sources/pexels/style.scss b/projects/packages/external-media/src/shared/sources/pexels/style.scss new file mode 100644 index 0000000000000..399e2f81c0e1a --- /dev/null +++ b/projects/packages/external-media/src/shared/sources/pexels/style.scss @@ -0,0 +1,18 @@ +.jetpack-external-media-header__pexels { + display: flex; + margin-bottom: 48px; + + .components-base-control { + flex: 1; + margin-right: 12px; + } + + .components-base-control__field { + margin-bottom: 0; + } + + .components-base-control__field, + .components-text-control__input { + height: 100%; + } +} diff --git a/projects/packages/external-media/webpack.config.js b/projects/packages/external-media/webpack.config.js index 77a3746b025f9..abfb18bdd1654 100644 --- a/projects/packages/external-media/webpack.config.js +++ b/projects/packages/external-media/webpack.config.js @@ -5,6 +5,7 @@ module.exports = [ { entry: { 'jetpack-external-media-editor': './src/features/editor/index.js', + 'jetpack-external-media-import-page': './src/features/admin/external-media-import.js', }, mode: jetpackWebpackConfig.mode, devtool: jetpackWebpackConfig.devtool, diff --git a/projects/packages/jetpack-mu-wpcom/changelog/feat-external-media-import-page b/projects/packages/jetpack-mu-wpcom/changelog/feat-external-media-import-page new file mode 100644 index 0000000000000..403c1bdc237d0 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/feat-external-media-import-page @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +External Media: Move the external media import page to jetpack-external-media diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index 131e524de9278..63b48578cc572 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -152,7 +152,6 @@ public static function load_wpcom_user_features() { require_once __DIR__ . '/features/wpcom-command-palette/wpcom-command-palette.php'; require_once __DIR__ . '/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php'; require_once __DIR__ . '/features/wpcom-locale/sync-locale-from-calypso-to-atomic.php'; - require_once __DIR__ . '/features/wpcom-media/wpcom-external-media-import.php'; require_once __DIR__ . '/features/wpcom-options-general/options-general.php'; require_once __DIR__ . '/features/wpcom-plugins/wpcom-plugins.php'; require_once __DIR__ . '/features/wpcom-profile-settings/profile-settings-link-to-wpcom.php'; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.js deleted file mode 100644 index 33af2ef7b8be1..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.js +++ /dev/null @@ -1 +0,0 @@ -console.log( 'Hello, Import Media Page' ); // eslint-disable-line no-console diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.php deleted file mode 100644 index 9cd499bf138bb..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.php +++ /dev/null @@ -1,98 +0,0 @@ - Import. - * - * @package automattic/jetpack-mu-wpcom - */ - -if ( empty( $_GET['wpcom_external_media_import_page'] ) ) { // phpcs:disable WordPress.Security.NonceVerification.Recommended - return; -} - -/** - * Register the WordPress.com-specific external media page to Media > Import. - */ -function add_wpcom_external_media_import_page() { - $wpcom_external_media_import_page_hook = add_submenu_page( - 'upload.php', - __( 'Import Media', 'jetpack-mu-wpcom' ), - __( 'Import Media', 'jetpack-mu-wpcom' ), - 'upload_files', - 'wpcom_external_media_import_page', - 'render_wpcom_external_media_import_page' - ); - - add_action( "load-$wpcom_external_media_import_page_hook", 'enqueue_wpcom_external_media_import_page' ); -} -add_action( 'admin_menu', 'add_wpcom_external_media_import_page' ); - -/** - * Enqueue the assets of the wpcom external media page. - */ -function enqueue_wpcom_external_media_import_page() { - jetpack_mu_wpcom_enqueue_assets( 'wpcom-external-media-import-page', array( 'js' ) ); -} - -/** - * Render the container of the wpcom external media page. - */ -function render_wpcom_external_media_import_page() { - $title = __( 'Import Media', 'jetpack-mu-wpcom' ); - $description = __( 'WordPress.com allows you to import media from various platforms directly into the Media Library. To begin, select a platform from the options below:', 'jetpack-mu-wpcom' ); - $external_media_sources = array( - array( - 'id' => 'google_photos', - 'name' => __( 'Google Photos', 'jetpack-mu-wpcom' ), - 'description' => __( 'Import media from your Google Photos account.', 'jetpack-mu-wpcom' ), - ), - array( - 'id' => 'pexels', - 'name' => __( 'Pexels free photos', 'jetpack-mu-wpcom' ), - 'description' => __( 'Free stock photos, royalty free images shared by creators.', 'jetpack-mu-wpcom' ), - ), - array( - 'id' => 'openverse', - 'name' => __( 'Openverse', 'jetpack-mu-wpcom' ), - 'description' => __( 'Explore more than 800 million creative works.', 'jetpack-mu-wpcom' ), - ), - ); - - ?> -
    -

    -

    - - %3$s', - esc_attr( $id ), - /* translators: %s: The name of the external media source. */ - esc_attr( sprintf( __( 'Import %s', 'jetpack-mu-wpcom' ), $name ) ), - __( 'Import now', 'jetpack-mu-wpcom' ) - ); - - ?> - - - - - -
    - - - - - - -
    -
    - Date: Wed, 5 Feb 2025 13:07:14 +0200 Subject: [PATCH 367/420] Jetpack Search: Fix infinite loading at purchase flow. (#41458) --- .../packages/search/changelog/fix-search-checkout-flow | 4 ++++ .../dashboard/components/pages/upsell-page/index.jsx | 10 ++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 projects/packages/search/changelog/fix-search-checkout-flow diff --git a/projects/packages/search/changelog/fix-search-checkout-flow b/projects/packages/search/changelog/fix-search-checkout-flow new file mode 100644 index 0000000000000..d95a7ef42d8cf --- /dev/null +++ b/projects/packages/search/changelog/fix-search-checkout-flow @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + + diff --git a/projects/packages/search/src/dashboard/components/pages/upsell-page/index.jsx b/projects/packages/search/src/dashboard/components/pages/upsell-page/index.jsx index a5dd5a05e27ee..51a1a16f86a83 100644 --- a/projects/packages/search/src/dashboard/components/pages/upsell-page/index.jsx +++ b/projects/packages/search/src/dashboard/components/pages/upsell-page/index.jsx @@ -1,3 +1,4 @@ +import restApi from '@automattic/jetpack-api'; import { AdminPage, Container, @@ -39,6 +40,7 @@ const JETPACK_SEARCH__LINK = 'https://jetpack.com/upgrade/search'; */ export default function UpsellPage( { isLoading = false } ) { // Introduce the gate for new pricing with URL parameter `new_pricing_202208=1` + const APINonce = useSelect( select => select( STORE_ID ).getAPINonce(), [] ); const isNewPricing = useSelect( select => select( STORE_ID ).isNewPricing202208(), [] ); useSelect( select => select( STORE_ID ).getSearchPricing(), [] ); const domain = useSelect( select => select( STORE_ID ).getCalypsoSlug(), [] ); @@ -47,10 +49,10 @@ export default function UpsellPage( { isLoading = false } ) { const isWpcom = useSelect( select => select( STORE_ID ).isWpcom(), [] ); const { fetchSearchPlanInfo } = useDispatch( STORE_ID ); - const checkSiteHasSearchProduct = useCallback( - () => fetchSearchPlanInfo().then( response => response?.supports_search ), - [ fetchSearchPlanInfo ] - ); + const checkSiteHasSearchProduct = useCallback( () => { + restApi.setApiNonce( APINonce ); + fetchSearchPlanInfo().then( response => response?.supports_search ); + }, [ APINonce, fetchSearchPlanInfo ] ); const { run: sendToCartPaid, hasCheckoutStarted: hasCheckoutStartedPaid } = useProductCheckoutWorkflow( { From 6a78ad15d603a16b50d8cbcfdea03091e34603cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20M=C3=A1rk=20Juh=C3=A1sz?= <36671565+gmjuhasz@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:11:41 +0100 Subject: [PATCH 368/420] Fix/social media section spacing (#41543) * Add more spacing between the media section and the message box * changelog --- .../changelog/fix-social-media-section-spacing | 5 +++++ .../src/components/form/share-post-form.tsx | 5 ++++- .../src/components/form/styles.module.scss | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 projects/js-packages/publicize-components/changelog/fix-social-media-section-spacing diff --git a/projects/js-packages/publicize-components/changelog/fix-social-media-section-spacing b/projects/js-packages/publicize-components/changelog/fix-social-media-section-spacing new file mode 100644 index 0000000000000..cf8bd883b04ed --- /dev/null +++ b/projects/js-packages/publicize-components/changelog/fix-social-media-section-spacing @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Minor UI fix + + diff --git a/projects/js-packages/publicize-components/src/components/form/share-post-form.tsx b/projects/js-packages/publicize-components/src/components/form/share-post-form.tsx index 11ecd5e45aa23..8f27e193a5fe4 100644 --- a/projects/js-packages/publicize-components/src/components/form/share-post-form.tsx +++ b/projects/js-packages/publicize-components/src/components/form/share-post-form.tsx @@ -3,6 +3,7 @@ import useSocialMediaMessage from '../../hooks/use-social-media-message'; import { features } from '../../utils/constants'; import MediaSection from '../media-section'; import MessageBoxControl from '../message-box-control'; +import styles from './styles.module.scss'; type SharePostFormProps = { analyticsData?: object; @@ -26,7 +27,9 @@ export const SharePostForm: React.FC< SharePostFormProps > = ( { analyticsData = analyticsData={ analyticsData } /> { siteHasFeature( features.ENHANCED_PUBLISHING ) && ( - +
    + +
    ) } ); diff --git a/projects/js-packages/publicize-components/src/components/form/styles.module.scss b/projects/js-packages/publicize-components/src/components/form/styles.module.scss index 85b6af7fc55a3..d378031478746 100644 --- a/projects/js-packages/publicize-components/src/components/form/styles.module.scss +++ b/projects/js-packages/publicize-components/src/components/form/styles.module.scss @@ -61,3 +61,7 @@ display: block; margin-bottom: 0.5rem; } + +.share-post-form__media-section { + margin-top: 1rem; +} From 4c73dcfb2764d3ddb98d14d298f156b7708e7775 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Wed, 5 Feb 2025 10:34:29 -0500 Subject: [PATCH 369/420] tools: More handling of no-mirror `packages/test-environment` (#41515) In `release-plugin.sh`, don't wait for the package to be published to Packagist since it won't be. In `version-packages.sh`, remove the package from `require-dev`. --- tools/release-plugin.sh | 2 +- tools/version-packages.sh | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/tools/release-plugin.sh b/tools/release-plugin.sh index b3ce49b1aac09..68832c336b877 100755 --- a/tools/release-plugin.sh +++ b/tools/release-plugin.sh @@ -264,7 +264,7 @@ function do_packagist_check { for PKGDIR in $(git -c core.quotepath=off diff --name-only "$GITBASE..HEAD" projects/packages/ | sed 's!^\(projects/packages/[^/]*\)/.*!\1!' | sort -u); do cd "$BASE/$PKGDIR" CHANGES_DIR=$(jq -r '.extra.changelogger["changes-dir"] // "changelog"' composer.json) - if [[ ! -d "$CHANGES_DIR" || -z "$(ls -- "$CHANGES_DIR")" ]]; then + if [[ ! -d "$CHANGES_DIR" || -z "$(ls -- "$CHANGES_DIR")" ]] && jq -e '.extra["mirror-repo"] // null' composer.json &>/dev/null; then POLL_ARGS+=( "$( jq -r .name composer.json )=$( changelogger version current )" ) fi done diff --git a/tools/version-packages.sh b/tools/version-packages.sh index c76ddec94cc93..d10bc4e87a491 100755 --- a/tools/version-packages.sh +++ b/tools/version-packages.sh @@ -83,6 +83,14 @@ for PKG in "$BASE"/projects/packages/*/composer.json; do PACKAGES=$(jq -c --arg k "$(jq -r .name "$PKG")" --arg v "$(cd "${PKG%/composer.json}" && changelogger version current --default-first-version)" '.[$k] |= $v' <<<"$PACKAGES") done +# Packages with no mirror repo to remove from require-dev. +RMPACKAGES='{}' +for PKG in "$BASE"/projects/packages/*/composer.json; do + if ! jq -e '.extra["mirror-repo"] // null' "$PKG" &>/dev/null; then + RMPACKAGES=$(jq -c --arg k "$(jq -r .name "$PKG")" '.[$k] |= true' <<<"$RMPACKAGES") + fi +done + # Update the versions in composer.json, without actually updating them yet. TO_UPDATE=() mapfile -t TO_UPDATE < <(jq -r --argjson packages "$PACKAGES" '.require // {} | to_entries[] | select( ( .value | test( "^@dev$|\\.x-dev$" ) ) and $packages[.key] ) | "\(.key)=^\($packages[.key])"' "$DIR/composer.json") @@ -91,6 +99,12 @@ if [[ ${#TO_UPDATE[@]} -gt 0 ]]; then composer require "${COMPOSER_ARGS[@]}" --no-update --working-dir="$DIR" -- "${TO_UPDATE[@]}" fi TO_UPDATE=() +mapfile -t TO_UPDATE < <(jq -r --argjson packages "$RMPACKAGES" '.["require-dev"] // {} | to_entries[] | select( ( .value | test( "^@dev$|\\.x-dev$" ) ) and $packages[.key] ) | .key' "$DIR/composer.json") +if [[ ${#TO_UPDATE[@]} -gt 0 ]]; then + info "Remove no-mirror dev packages: ${TO_UPDATE[*]}..." + composer remove "${COMPOSER_ARGS[@]}" --no-update --working-dir="$DIR" --dev -- "${TO_UPDATE[@]}" +fi +TO_UPDATE=() mapfile -t TO_UPDATE < <(jq -r --argjson packages "$PACKAGES" '.["require-dev"] // {} | to_entries[] | select( ( .value | test( "^@dev$|\\.x-dev$" ) ) and $packages[.key] ) | "\(.key)=^\($packages[.key])"' "$DIR/composer.json") if [[ ${#TO_UPDATE[@]} -gt 0 ]]; then info "Updating dev packages: ${TO_UPDATE[*]}..." From 973f963332eca5091f9142e266023032cb450a5a Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Wed, 5 Feb 2025 08:38:34 -0700 Subject: [PATCH 370/420] Jetpack: Blank out to-test.md in preparation for 14.4 (#41555) * Blank to-test.md * Add changelog --- .../fix-postrelease-blank_to-test.md_for_14.4 | 4 ++ projects/plugins/jetpack/to-test.md | 37 +------------------ 2 files changed, 6 insertions(+), 35 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-postrelease-blank_to-test.md_for_14.4 diff --git a/projects/plugins/jetpack/changelog/fix-postrelease-blank_to-test.md_for_14.4 b/projects/plugins/jetpack/changelog/fix-postrelease-blank_to-test.md_for_14.4 new file mode 100644 index 0000000000000..1175bfc5438f7 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-postrelease-blank_to-test.md_for_14.4 @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Reset to-test.md for Jetpack 14.4 release cycle. diff --git a/projects/plugins/jetpack/to-test.md b/projects/plugins/jetpack/to-test.md index 5171a6b044de1..b514d9d995904 100644 --- a/projects/plugins/jetpack/to-test.md +++ b/projects/plugins/jetpack/to-test.md @@ -1,4 +1,4 @@ -## Jetpack 14.3 +## Jetpack 14.4 ### Before you start: @@ -14,39 +14,6 @@ You can see a [full list of changes in this release here](https://github.com/Aut ## General testing -### Ensure Tiled Gallery images can be reordered and removed - -1. Install and activate the Gutenberg plugin (v19.9+). -2. Add a Tiled Gallery block to a post or page, and add multiple images. -3. Try rearranging and deleting individual images within the Tiled Gallery block. - -PR: https://github.com/Automattic/jetpack/pull/40779 - -### Allow HTML block within forms - -1. Add a Form block to a page. -2. Add an HTML block inside the Form block. -3. Verify that the editor and frontend both function as expected. - -PR: https://github.com/Automattic/jetpack/pull/41040 - -### Add a new default block when pressing enter on Form fields - -1. Add a Form block to a page. -2. Add one or all of the following fields: - * Text - * Name - * Email - * URL - * Telephone - * Date - * Single Checkbox - * Consent -3. While a field block listed above is selected, press Enter. -4. Verify a new default block is created. - -PRs: -* https://github.com/Automattic/jetpack/pull/41177 -* https://github.com/Automattic/jetpack/pull/41297 +Once ready for testing, you'll find instructions here. **Thank you for all your help!** From 9999f626527213653609238909e9ec686a14c042 Mon Sep 17 00:00:00 2001 From: Calypso Bot Date: Wed, 5 Feb 2025 18:03:07 +0200 Subject: [PATCH 371/420] phan: Update wpcom stubs (#41566) Co-authored-by: Phabricator Bot --- .phan/stubs/wpcom-stubs.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.phan/stubs/wpcom-stubs.php b/.phan/stubs/wpcom-stubs.php index ff462c0dc7da6..8c26ac0cdbb33 100644 --- a/.phan/stubs/wpcom-stubs.php +++ b/.phan/stubs/wpcom-stubs.php @@ -4,7 +4,7 @@ * `bin/teamcity-builds/jetpack-stubs/stub-defs.php` and regenerate the stubs * by triggering the Jetpack Staging → Update WPCOM Stubs job in TeamCity. * - * Stubs automatically generated from WordPress.com commit 58daa278d1c6807cf18400dee1d9f45815e24fae. + * Stubs automatically generated from WordPress.com commit 57b033879305add761d5f6f4ae7858580a986d8e. */ namespace { @@ -1070,7 +1070,7 @@ function show_subscription_checkbox($id = \false) { } /** - * @return bool + * @return int|bool */ function wpcom_subs_is_subscribed($args = array()) { From 113e0b82cc0141b1f0de2ca6d481a849fb05bcc6 Mon Sep 17 00:00:00 2001 From: Peter Petrov Date: Wed, 5 Feb 2025 19:01:46 +0200 Subject: [PATCH 372/420] Boost: Save concatenated JS/CSS in files on server (#41056) * Update URLs for concatenated assets * Add WIP code to handle new URL * add changelog * Fix URLs for concatenated assets pointing to outside wp-content files * Store concatenated output in files * Update file name to indicate that file is minified * Refactor serving and storing of concatenated files * Refactor file name building * Pass request uri instead of reaching in global array * Rely on existing code for allowed extensions instead of hard-coded list * Move handling static concatenation to a separate file * Enhance cache cleanup functionality. * Files are now purged based on last access time, one week. * A separate cleanup for static cache directories. * Files older than a week are removed regardless of access time. * Don't deviate too much from how optimize used to garbage collect. Instead of a week, go with twice the access time, which is 2 days. Longer than that, and we will need to rebuild the cached files in a cron job, and then we won't know how many cached minified files were really obsolete and shouldn't be updated any more * Load the minification engine that builds the minified file * Load the minification loader * Always load minification classes, for maintenance tasks * Allow new static cache file to go for a week The old files exist for only a day because they're not checked. I'll add a cron job that tries to maintain the new files. * loader.php has to be loaded from the template_redirect action * Add a maintenance function that deletes obsolete minified files This function compares the minified file with the dependencies. If they are newer, then the minified file is deleted, so it can be regenerated by the 404 handler. * /Users/donncha/dev/jetpack/vendor/sirbrillig/phpcs-Fixes for PHAN errors. projects/plugins/boost/app/lib/minify/functions-service-new.php:7 Error: Plugin PhanPluginNeverReturnFunction Function \jetpack_boost_handle_minify_request() never returns and has a return type of void, but phpdoc type never could be used instead projects/plugins/boost/app/lib/minify/functions-service-new.php:156 Error: Plugin PhanPluginUseReturnValueInternalKnown Expected to use the return value of the internal function/method \preg_replace_callback projects/plugins/boost/app/lib/minify/functions-service-new.php:213 Error: UndefError PhanPossiblyUndeclaredVariable Variable $mime_type is possibly undeclared projects/plugins/boost/app/lib/minify/functions-service-new.php:243 Error: TypeError PhanTypePossiblyInvalidDimOffset Possibly invalid offset 'extension' of $file_info of array type array{dirname:string,basename:string,extension?:string,filename:string} projects/plugins/boost/app/lib/minify/functions-service-new.php:254 Error: TypeError PhanTypePossiblyInvalidDimOffset Possibly invalid offset 'extension' of $file_info of array type array{dirname:string,basename:string,extension?:string,filename:string} * Always load minification include files to avoid problems uninstalling jetpack_boost_cache_maintenance() in functions-service-new.php is used by the helper script when uninstalling, but won't be loaded when uninstalling if it's loaded on template_redirect. * This file is loaded by app/lib/minify/loader.php now * If file_age is 0 then delete files. * No need to maintain obsolete static files. Just delete them. * Make sure to delete static files in boost-cache when file_age is 0 * No need to check filemtime or fileatime. Just delete. * Add comment to explain jetpack_boost_cache_maintenance() * Just in case WP is installed in a directory. Not always at "/" * Fix the maintenance script so it gets the cached list of files * Only check moved cache folder for legacy folder * Add is_404() tester to minification * Are we testing the is_404() handler? * Test the is_404() check when activating minification modules * Serve legacy minified files if new static files not supported * Fix the @charset bug in the old minified files too * Run the 404 tester at least once in wp-admin/ * Updated PHAN baseline * Updated PHAN baseline * Use str_contains instead of strpos Trying to force the e2e tests to run again * Store static minification bool in a site option On a multisite install, this will stop the plugin checking if is_404 works every time a new user logs in to /wp-admin/. * Add code to cleanup cached files of deactivated module It will delete the corresponding static files, css or js. * The static cache dir doesn't change, it's a string always We don't as yet allow the static cache dir to be changed so it's safe to remove the $use_cache checks. get_static_cache_dir_path() always returns a path to the directory. * Return early if $cache_dir is not defined. No need to go through other checks. It will log a proper error for this too. * Remove todo There's already an issue for that. * Improve readability of concat Config class * Rename helper method * Rename function * Fix incorrect return type * Rename files so they make more sense * Add proper check for file parts * Remove types * Update comments * Fix variable name * Update minify css/js to use activate/deactivate to run their setup * Fix fatal errors due to file renames * Fix incorrect json_decode usage * Fix static analysis complaining about possibly undefined variables * Fix incorrect comparison * Remove redundant check * Make phan happy * Update static analysis baseline * Improve path checking and add clarification * Make the glob pattern more precise * Fix the directory security check so static files can be created * Use str_contains() to look for the string It's checking for the existence of the string, not position. * Avoid checking again if the file is deleted. If the first check succeeded, the file will be deleted. No need to check the filemtime() on a deleted file and cause a warning. * Add a comment to describe what happens here. * Remove unnecessary activate trait from minification classes * Add function to schedule 404 tester cronjob --------- Co-authored-by: Donncha O Caoimh <5656673+donnchawp@users.noreply.github.com> Co-authored-by: Liam Sarsfield --- projects/plugins/boost/.phan/baseline.php | 16 +- .../plugins/boost/app/class-jetpack-boost.php | 1 - .../boost/app/lib/minify/Concatenate_CSS.php | 8 +- .../boost/app/lib/minify/Concatenate_JS.php | 8 +- .../plugins/boost/app/lib/minify/Config.php | 159 +++++-- .../app/lib/minify/functions-helpers.php | 59 ++- .../lib/minify/functions-service-fallback.php | 396 ++++++++++++++++++ .../app/lib/minify/functions-service.php | 328 ++++++--------- .../plugins/boost/app/lib/minify/loader.php | 32 ++ .../optimizations/minify/class-minify-css.php | 7 +- .../optimizations/minify/class-minify-js.php | 7 +- .../changelog/add-boost-store-concat-in-files | 4 + projects/plugins/boost/jetpack-boost.php | 2 + .../plugins/boost/serve-minified-content.php | 2 +- 14 files changed, 768 insertions(+), 261 deletions(-) create mode 100644 projects/plugins/boost/app/lib/minify/functions-service-fallback.php create mode 100644 projects/plugins/boost/app/lib/minify/loader.php create mode 100644 projects/plugins/boost/changelog/add-boost-store-concat-in-files diff --git a/projects/plugins/boost/.phan/baseline.php b/projects/plugins/boost/.phan/baseline.php index 1f84a5f5191f2..58a58ef99fecf 100644 --- a/projects/plugins/boost/.phan/baseline.php +++ b/projects/plugins/boost/.phan/baseline.php @@ -13,26 +13,24 @@ // PhanPluginDuplicateConditionalNullCoalescing : 10+ occurrences // PhanTypeArraySuspicious : 9 occurrences // PhanTypeMismatchArgument : 8 occurrences - // PhanPossiblyUndeclaredVariable : 5 occurrences // PhanTypeMismatchReturnProbablyReal : 5 occurrences // PhanUndeclaredConstant : 5 occurrences - // PhanTypeMismatchArgumentNullableInternal : 4 occurrences // PhanUndeclaredFunction : 4 occurrences - // PhanImpossibleTypeComparison : 3 occurrences - // PhanPluginUseReturnValueInternalKnown : 3 occurrences - // PhanTypeMismatchArgumentInternal : 3 occurrences + // PhanPossiblyUndeclaredVariable : 3 occurrences // PhanTypeMismatchPropertyDefault : 3 occurrences // PhanTypePossiblyInvalidDimOffset : 3 occurrences // PhanUndeclaredClassConstant : 3 occurrences // PhanNoopNew : 2 occurrences - // PhanTypeComparisonToArray : 2 occurrences - // PhanTypeMismatchReturnNullable : 2 occurrences + // PhanPluginUseReturnValueInternalKnown : 2 occurrences + // PhanTypeMismatchArgumentNullableInternal : 2 occurrences // PhanCoalescingNeverNull : 1 occurrence // PhanImpossibleTypeComparisonInGlobalScope : 1 occurrence // PhanParamTooMany : 1 occurrence // PhanRedefineFunction : 1 occurrence // PhanRedundantCondition : 1 occurrence + // PhanTypeComparisonToArray : 1 occurrence // PhanTypeInvalidUnaryOperandIncOrDec : 1 occurrence + // PhanTypeMismatchArgumentInternal : 1 occurrence // PhanTypeMismatchDefault : 1 occurrence // PhanTypeMismatchProperty : 1 occurrence // PhanTypeMissingReturn : 1 occurrence @@ -51,10 +49,8 @@ 'app/lib/critical-css/source-providers/providers/Provider.php' => ['PhanTypeMismatchArgumentInternal'], 'app/lib/minify/Concatenate_CSS.php' => ['PhanPluginUseReturnValueInternalKnown', 'PhanTypeMismatchArgument'], 'app/lib/minify/Concatenate_JS.php' => ['PhanPluginUseReturnValueInternalKnown', 'PhanPossiblyUndeclaredVariable', 'PhanTypeInvalidUnaryOperandIncOrDec', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypePossiblyInvalidDimOffset'], - 'app/lib/minify/Config.php' => ['PhanTypeMismatchReturnNullable'], 'app/lib/minify/Dependency_Path_Mapping.php' => ['PhanUndeclaredConstant'], - 'app/lib/minify/functions-helpers.php' => ['PhanImpossibleTypeComparison', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDefault', 'PhanUndeclaredClassMethod', 'PhanUndeclaredClassReference', 'PhanUndeclaredConstant'], - 'app/lib/minify/functions-service.php' => ['PhanImpossibleTypeComparison', 'PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginUseReturnValueInternalKnown', 'PhanPossiblyUndeclaredVariable', 'PhanTypeComparisonToArray', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal'], + 'app/lib/minify/functions-helpers.php' => ['PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDefault', 'PhanUndeclaredClassMethod', 'PhanUndeclaredClassReference', 'PhanUndeclaredConstant'], 'app/modules/Modules_Setup.php' => ['PhanTypeMismatchPropertyDefault'], 'app/modules/image-guide/Image_Guide_Proxy.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'app/modules/image-size-analysis/data-sync/Image_Size_Analysis_Action_Fix.php' => ['PhanPossiblyUndeclaredVariable', 'PhanRedundantCondition'], diff --git a/projects/plugins/boost/app/class-jetpack-boost.php b/projects/plugins/boost/app/class-jetpack-boost.php index 82923d28026a1..01f6003c380ef 100644 --- a/projects/plugins/boost/app/class-jetpack-boost.php +++ b/projects/plugins/boost/app/class-jetpack-boost.php @@ -181,7 +181,6 @@ public function deactivate() { do_action( 'jetpack_boost_deactivate' ); // Tell Minify JS/CSS to clean up. - require_once JETPACK_BOOST_DIR_PATH . '/app/lib/minify/functions-helpers.php'; jetpack_boost_page_optimize_deactivate(); Regenerate_Admin_Notice::dismiss(); diff --git a/projects/plugins/boost/app/lib/minify/Concatenate_CSS.php b/projects/plugins/boost/app/lib/minify/Concatenate_CSS.php index ea36c1f79f27a..6162cff6e6453 100644 --- a/projects/plugins/boost/app/lib/minify/Concatenate_CSS.php +++ b/projects/plugins/boost/app/lib/minify/Concatenate_CSS.php @@ -195,9 +195,13 @@ public function do_items( $handles = false, $group = false ) { } continue; } elseif ( count( $css ) > 1 ) { - $path_str = jetpack_boost_page_optimize_generate_concat_path( $css, $this->dependency_path_mapping ); + $file_name = jetpack_boost_page_optimize_generate_concat_path( $css, $this->dependency_path_mapping ); - $href = $siteurl . jetpack_boost_get_static_prefix() . '??' . $path_str; + if ( get_site_option( 'jetpack_boost_static_minification' ) ) { + $href = jetpack_boost_get_minify_url( $file_name . '.min.css', $siteurl ); + } else { + $href = $siteurl . jetpack_boost_get_static_prefix() . '??' . $file_name; + } } else { $href = jetpack_boost_page_optimize_cache_bust_mtime( current( $css ), $siteurl ); } diff --git a/projects/plugins/boost/app/lib/minify/Concatenate_JS.php b/projects/plugins/boost/app/lib/minify/Concatenate_JS.php index a6eedbb0f30b8..59ceff3bbf42a 100644 --- a/projects/plugins/boost/app/lib/minify/Concatenate_JS.php +++ b/projects/plugins/boost/app/lib/minify/Concatenate_JS.php @@ -254,9 +254,13 @@ public function do_items( $handles = false, $group = false ) { array_map( array( $this, 'print_extra_script' ), $js_array['handles'] ); if ( isset( $js_array['paths'] ) && count( $js_array['paths'] ) > 1 ) { - $path_str = jetpack_boost_page_optimize_generate_concat_path( $js_array['paths'], $this->dependency_path_mapping ); + $file_name = jetpack_boost_page_optimize_generate_concat_path( $js_array['paths'], $this->dependency_path_mapping ); - $href = $siteurl . jetpack_boost_get_static_prefix() . '??' . $path_str; + if ( get_site_option( 'jetpack_boost_static_minification' ) ) { + $href = jetpack_boost_get_minify_url( $file_name . '.min.js', $siteurl ); + } else { + $href = $siteurl . jetpack_boost_get_static_prefix() . '??' . $file_name; + } } elseif ( isset( $js_array['paths'] ) && is_array( $js_array['paths'] ) ) { $href = jetpack_boost_page_optimize_cache_bust_mtime( $js_array['paths'][0], $siteurl ); } diff --git a/projects/plugins/boost/app/lib/minify/Config.php b/projects/plugins/boost/app/lib/minify/Config.php index 7e75fe08f1e2e..67d44b570b37e 100644 --- a/projects/plugins/boost/app/lib/minify/Config.php +++ b/projects/plugins/boost/app/lib/minify/Config.php @@ -2,68 +2,145 @@ namespace Automattic\Jetpack_Boost\Lib\Minify; +/** + * Configuration management for the minification system. + */ class Config { + /** + * Get the directory path for storing static cache files. + */ + public static function get_static_cache_dir_path() { + return WP_CONTENT_DIR . '/boost-cache/static'; + } - public static function get_cache_dir_path(): string { + /** + * Get the directory path for storing cache files. + */ + public static function get_cache_dir_path() { if ( defined( 'PAGE_OPTIMIZE_CACHE_DIR' ) ) { if ( empty( \PAGE_OPTIMIZE_CACHE_DIR ) ) { - $path = false; - } else { - $path = \PAGE_OPTIMIZE_CACHE_DIR; + return false; } - } else { - $path = WP_CONTENT_DIR . '/cache/page_optimize'; + + return \PAGE_OPTIMIZE_CACHE_DIR; } - return $path; + return WP_CONTENT_DIR . '/cache/page_optimize'; + } + + /** + * Get WordPress ABSPATH, with support for custom configuration. + */ + public static function get_abspath() { + return defined( 'PAGE_OPTIMIZE_ABSPATH' ) ? \PAGE_OPTIMIZE_ABSPATH : \ABSPATH; } - public static function get_abspath(): string { - if ( defined( 'PAGE_OPTIMIZE_ABSPATH' ) ) { - $path = \PAGE_OPTIMIZE_ABSPATH; - } else { - $path = \ABSPATH; + /** + * Check if static cache can be used. + */ + public static function can_use_static_cache() { + $cache_dir = static::get_static_cache_dir_path(); + + if ( ! static::ensure_dir_exists( $cache_dir ) ) { + static::log_error( + sprintf( + /* translators: a filesystem path to a directory */ + __( "Disabling concatenate static cache. Unable to create cache directory '%s'.", 'jetpack-boost' ), + $cache_dir + ) + ); + return false; } - return $path; + if ( ! static::is_dir_writable( $cache_dir ) ) { + static::log_error( + sprintf( + /* translators: a filesystem path to a directory */ + __( "Disabling concatenate static cache. Unable to write to cache directory '%s'.", 'jetpack-boost' ), + $cache_dir + ) + ); + return false; + } + + return true; } + /** + * Check if cache can be used. + */ public static function can_use_cache() { $cache_dir = static::get_cache_dir_path(); - $use_cache = ! empty( $cache_dir ); - // Ensure the cache directory exists. + if ( empty( $cache_dir ) ) { + static::log_error( __( 'Disabling page-optimize cache. Cache directory not defined.', 'jetpack-boost' ) ); + return false; + } + + if ( ! static::ensure_dir_exists( $cache_dir ) ) { + static::log_error( + sprintf( + /* translators: a filesystem path to a directory */ + __( "Disabling page-optimize cache. Unable to create cache directory '%s'.", 'jetpack-boost' ), + $cache_dir + ) + ); + return false; + } + + if ( ! static::is_dir_writable( $cache_dir ) ) { + static::log_error( + sprintf( + /* translators: a filesystem path to a directory */ + __( "Disabling page-optimize cache. Unable to write to cache directory '%s'.", 'jetpack-boost' ), + $cache_dir + ) + ); + return false; + } + + return true; + } + + /** + * Ensure a directory exists. + * + * @param string $dir The directory to check. + * @return bool True if the directory exists, false otherwise. + */ + private static function ensure_dir_exists( $dir ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_mkdir - if ( $use_cache && ! is_dir( $cache_dir ) && ! mkdir( $cache_dir, 0775, true ) ) { - $use_cache = false; - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { - // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log - error_log( - sprintf( - /* translators: a filesystem path to a directory */ - __( "Disabling page-optimize cache. Unable to create cache directory '%s'.", 'jetpack-boost' ), - $cache_dir - ) - ); - } + if ( ! is_dir( $dir ) && ! mkdir( $dir, 0775, true ) ) { + return false; } - // Ensure the cache directory is writable. + return true; + } + + /** + * Ensure a directory is writable. + * + * @param string $dir The directory to check. + * @return bool True if the directory is writable, false otherwise. + */ + private static function is_dir_writable( $dir ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_is_writable - if ( $use_cache && ( ! is_dir( $cache_dir ) || ! is_writable( $cache_dir ) || ! is_executable( $cache_dir ) ) ) { - $use_cache = false; - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { - // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log - error_log( - sprintf( - /* translators: a filesystem path to a directory */ - __( "Disabling page-optimize cache. Unable to write to cache directory '%s'.", 'jetpack-boost' ), - $cache_dir - ) - ); - } + if ( ! is_dir( $dir ) || ! is_writable( $dir ) || ! is_executable( $dir ) ) { + return false; } - return $use_cache; + return true; + } + + /** + * Log an error message if WP_DEBUG is enabled. + * + * @param string $message The error message to log. + */ + private static function log_error( $message ) { + if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log + error_log( $message ); + } } } diff --git a/projects/plugins/boost/app/lib/minify/functions-helpers.php b/projects/plugins/boost/app/lib/minify/functions-helpers.php index fa14b8e6cbde0..91552b7baa3d2 100644 --- a/projects/plugins/boost/app/lib/minify/functions-helpers.php +++ b/projects/plugins/boost/app/lib/minify/functions-helpers.php @@ -13,12 +13,22 @@ function jetpack_boost_minify_cache_buster() { } /** - * Cleanup the given cache folder, removing all files older than $file_age seconds. + * Cleanup the given cache folder, removing all files that haven't been accessed in $file_age seconds. + * If a file is older than 2 * $file_age, it will be removed regardless of its access time. * * @param string $cache_folder The path to the cache folder to cleanup. * @param int $file_age The age of files to purge, in seconds. */ function jetpack_boost_page_optimize_cache_cleanup( $cache_folder = false, $file_age = DAY_IN_SECONDS ) { + + if ( $cache_folder !== Config::get_static_cache_dir_path() ) { + if ( $file_age !== 0 ) { + // Cleanup obsolete files in static cache folder + jetpack_boost_minify_remove_stale_static_files(); + } + jetpack_boost_page_optimize_cache_cleanup( Config::get_static_cache_dir_path(), $file_age !== 0 ? WEEK_IN_SECONDS : 0 ); + } + if ( ! is_dir( $cache_folder ) ) { return; } @@ -31,13 +41,16 @@ function jetpack_boost_page_optimize_cache_cleanup( $cache_folder = false, $file $file_age = 0; } - // If the cache folder changed since queueing, purge it - if ( $using_cache && $cache_folder !== $defined_cache_dir ) { - $file_age = 0; - } - // Grab all files in the cache directory - $cache_files = glob( $cache_folder . '/page-optimize-cache-*' ); + if ( $cache_folder === Config::get_static_cache_dir_path() ) { + $cache_files = glob( $cache_folder . '/*.min.*' ); + } else { + // If the cache folder changed since queueing, purge it + if ( $using_cache && $cache_folder !== $defined_cache_dir ) { + $file_age = 0; + } + $cache_files = glob( $cache_folder . '/page-optimize-cache-*' ); + } // Cleanup all files older than $file_age foreach ( $cache_files as $cache_file ) { @@ -45,7 +58,16 @@ function jetpack_boost_page_optimize_cache_cleanup( $cache_folder = false, $file continue; } - if ( ( time() - $file_age ) > filemtime( $cache_file ) ) { + if ( $file_age === 0 ) { + wp_delete_file( $cache_file ); + continue; + } + + // Delete files that haven't been accessed in $file_age seconds, + // or files that are older than 2 * $file_age regardless of access time + if ( ( time() - $file_age ) > fileatime( $cache_file ) ) { + wp_delete_file( $cache_file ); + } elseif ( ( time() - ( 2 * $file_age ) ) > filemtime( $cache_file ) ) { wp_delete_file( $cache_file ); } } @@ -145,6 +167,15 @@ function jetpack_boost_page_optimize_remove_concat_base_prefix( $original_fs_pat return '/page-optimize-resource-outside-base-path/' . basename( $original_fs_path ); } +/** + * Schedule a cronjob for the 404 tester, if one isn't already scheduled. + */ +function jetpack_boost_page_optimize_schedule_404_tester() { + if ( false === wp_next_scheduled( 'jetpack_boost_404_tester_cron' ) ) { + wp_schedule_event( time(), 'daily', 'jetpack_boost_404_tester_cron' ); + } +} + /** * Schedule a cronjob for cache cleanup, if one isn't already scheduled. */ @@ -223,7 +254,7 @@ function jetpack_boost_page_optimize_cache_bust_mtime( $path, $siteurl ) { $url = $siteurl . $path; - if ( strpos( $url, '?m=' ) ) { + if ( str_contains( $url, '?m=' ) ) { return $url; } @@ -260,7 +291,7 @@ function jetpack_boost_page_optimize_cache_bust_mtime( $path, $siteurl ) { } /** - * Get the URL prefix for static minify/concat resources. Defaults to /jb_static/, but can be + * Get the URL prefix for static minify/concat resources. Defaults to /_jb_static/, but can be * overridden by defining JETPACK_BOOST_STATIC_PREFIX. */ function jetpack_boost_get_static_prefix() { @@ -273,6 +304,10 @@ function jetpack_boost_get_static_prefix() { return trailingslashit( $prefix ); } +function jetpack_boost_get_minify_url( $file_name, $site_url ) { + return $site_url . '/wp-content/boost-cache/static/' . $file_name; +} + /** * Detects requests within the `/_jb_static/` directory, and serves minified content. * @@ -286,7 +321,7 @@ function jetpack_boost_minify_serve_concatenated() { $request_path = explode( '?', wp_unslash( $_SERVER['REQUEST_URI'] ) )[0]; $prefix = jetpack_boost_get_static_prefix(); if ( $prefix === substr( $request_path, -strlen( $prefix ), strlen( $prefix ) ) ) { - require_once __DIR__ . '/functions-service.php'; + require_once __DIR__ . '/functions-service-fallback.php'; jetpack_boost_page_optimize_service_request(); exit( 0 ); // @phan-suppress-current-line PhanPluginUnreachableCode -- Safer to include it even though jetpack_boost_page_optimize_service_request() itself never returns. } @@ -315,6 +350,8 @@ function jetpack_boost_minify_setup() { // Disable Jetpack Site Accelerator CDN for static JS/CSS, if we're minifying this page. add_filter( 'jetpack_force_disable_site_accelerator', '__return_true' ); } + + jetpack_boost_404_setup(); } function jetpack_boost_page_optimize_generate_concat_path( $url_paths, $dependency_path_mapping ) { diff --git a/projects/plugins/boost/app/lib/minify/functions-service-fallback.php b/projects/plugins/boost/app/lib/minify/functions-service-fallback.php new file mode 100644 index 0000000000000..b33d8f1710858 --- /dev/null +++ b/projects/plugins/boost/app/lib/minify/functions-service-fallback.php @@ -0,0 +1,396 @@ + 'text/css', + 'js' => 'application/javascript', + ); +} + +/** + * Handle serving a minified / concatenated file from the virtual _jb_static dir. + * + * @return never + */ +function jetpack_boost_page_optimize_service_request() { + $use_wp = defined( 'JETPACK_BOOST_CONCAT_USE_WP' ) && JETPACK_BOOST_CONCAT_USE_WP; + $utils = new Utils( $use_wp ); + + // We handle the cache here, tell other caches not to. + if ( ! defined( 'DONOTCACHEPAGE' ) ) { + define( 'DONOTCACHEPAGE', true ); + } + + $use_cache = Config::can_use_cache(); + $cache_file = ''; + $cache_file_meta = ''; + + if ( $use_cache ) { + $cache_dir = Config::get_cache_dir_path(); + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash + $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? $utils->unslash( $_SERVER['REQUEST_URI'] ) : ''; + $request_uri_hash = md5( $request_uri ); + $cache_file = $cache_dir . "/page-optimize-cache-$request_uri_hash"; + $cache_file_meta = $cache_dir . "/page-optimize-cache-meta-$request_uri_hash"; + + // Serve an existing file. + if ( file_exists( $cache_file ) ) { + if ( isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash + if ( strtotime( $utils->unslash( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) < filemtime( $cache_file ) ) { + header( 'HTTP/1.1 304 Not Modified' ); + exit( 0 ); + } + } + + if ( file_exists( $cache_file_meta ) ) { + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents + $meta = json_decode( file_get_contents( $cache_file_meta ), true ); + if ( ! empty( $meta ) && ! empty( $meta['headers'] ) ) { + foreach ( $meta['headers'] as $header ) { + header( $header ); + } + } + } + + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents + $etag = '"' . md5( file_get_contents( $cache_file ) ) . '"'; + + // Check if we're on Atomic and take advantage of the Atomic Edge Cache. + if ( defined( 'ATOMIC_CLIENT_ID' ) ) { + header( 'A8c-Edge-Cache: cache' ); + } + header( 'X-Page-Optimize: cached' ); + header( 'Cache-Control: max-age=' . 31536000 ); + header( 'ETag: ' . $etag ); + + echo file_get_contents( $cache_file ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- We need to trust this unfortunately. + die( 0 ); + } + } + + // Existing file not available; generate new content. + $output = jetpack_boost_page_optimize_build_output(); + $content = $output['content']; + $headers = $output['headers']; + + foreach ( $headers as $header ) { + header( $header ); + } + // Check if we're on Atomic and take advantage of the Atomic Edge Cache. + if ( defined( 'ATOMIC_CLIENT_ID' ) ) { + header( 'A8c-Edge-Cache: cache' ); + } + header( 'X-Page-Optimize: uncached' ); + header( 'Cache-Control: max-age=' . 31536000 ); + header( 'ETag: "' . md5( $content ) . '"' ); + + echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- We need to trust this unfortunately. + + // Cache the generated data, if available. + if ( $use_cache ) { + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents + file_put_contents( $cache_file, $content ); + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents + file_put_contents( $cache_file_meta, wp_json_encode( array( 'headers' => $headers ) ) ); + } + + die( 0 ); +} + +/** + * Strip matching parent paths off a string. Returns $path without $parent_path. + */ +function jetpack_boost_strip_parent_path( $parent_path, $path ) { + $trimmed_parent = ltrim( $parent_path, '/' ); + $trimmed_path = ltrim( $path, '/' ); + + if ( substr( $trimmed_path, 0, strlen( $trimmed_parent ) ) === $trimmed_parent ) { + $trimmed_path = substr( $trimmed_path, strlen( $trimmed_parent ) ); + } + + return str_starts_with( $trimmed_path, '/' ) ? $trimmed_path : '/' . $trimmed_path; +} + +/** + * Generate a combined and minified output for the current request. This is run regardless of the + * type of content being fetched; JavaScript or CSS, so it must handle either. + */ +function jetpack_boost_page_optimize_build_output() { + $use_wp = defined( 'JETPACK_BOOST_CONCAT_USE_WP' ) && JETPACK_BOOST_CONCAT_USE_WP; + $utils = new Utils( $use_wp ); + + $jetpack_boost_page_optimize_types = jetpack_boost_page_optimize_types(); + + // Config + $concat_max_files = 150; + $concat_unique = true; + + // Main + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash + $method = isset( $_SERVER['REQUEST_METHOD'] ) ? $utils->unslash( $_SERVER['REQUEST_METHOD'] ) : 'GET'; + if ( ! in_array( $method, array( 'GET', 'HEAD' ), true ) ) { + jetpack_boost_page_optimize_status_exit( 400 ); + } + + // Ensure the path follows one of these forms: + // /_jb_static/??/foo/bar.css,/foo1/bar/baz.css?m=293847g + // -- or -- + // /_jb_static/??-eJzTT8vP109KLNJLLi7W0QdyDEE8IK4CiVjn2hpZGluYmKcDABRMDPM= + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash + $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? $utils->unslash( $_SERVER['REQUEST_URI'] ) : ''; + $args = $utils->parse_url( $request_uri, PHP_URL_QUERY ); + if ( ! $args || ! str_contains( $args, '?' ) ) { + jetpack_boost_page_optimize_status_exit( 400 ); + } + + $args = substr( $args, strpos( $args, '?' ) + 1 ); + + $args = jetpack_boost_page_optimize_get_file_paths( $args ); + + // args contain something like array( '/foo/bar.css', '/foo1/bar/baz.css' ) + if ( 0 === count( $args ) || count( $args ) > $concat_max_files ) { + jetpack_boost_page_optimize_status_exit( 400 ); + } + + // If we're in a subdirectory context, use that as the root. + // We can't assume that the root serves the same content as the subdir. + $subdir_path_prefix = ''; + $request_path = $utils->parse_url( $request_uri, PHP_URL_PATH ); + $_static_index = strpos( $request_path, jetpack_boost_get_static_prefix() ); + if ( $_static_index > 0 ) { + $subdir_path_prefix = substr( $request_path, 0, $_static_index ); + } + unset( $request_path, $_static_index ); + + $last_modified = 0; + $pre_output = ''; + $output = ''; + + foreach ( $args as $uri ) { + $fullpath = jetpack_boost_page_optimize_get_path( $uri ); + + if ( ! file_exists( $fullpath ) ) { + jetpack_boost_page_optimize_status_exit( 404 ); + } + + $mime_type = jetpack_boost_page_optimize_get_mime_type( $fullpath ); + if ( ! in_array( $mime_type, $jetpack_boost_page_optimize_types, true ) ) { + jetpack_boost_page_optimize_status_exit( 400 ); + } + + if ( $concat_unique ) { + if ( ! isset( $last_mime_type ) ) { + $last_mime_type = $mime_type; + } + + if ( $last_mime_type !== $mime_type ) { + jetpack_boost_page_optimize_status_exit( 400 ); + } + } + + $stat = stat( $fullpath ); + if ( false === $stat ) { + jetpack_boost_page_optimize_status_exit( 500 ); + } + + if ( $stat['mtime'] > $last_modified ) { + $last_modified = $stat['mtime']; + } + + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents + $buf = file_get_contents( $fullpath ); + if ( false === $buf ) { + jetpack_boost_page_optimize_status_exit( 500 ); + } + + if ( 'text/css' === $mime_type ) { + $dirpath = jetpack_boost_strip_parent_path( $subdir_path_prefix, dirname( $uri ) ); + + // url(relative/path/to/file) -> url(/absolute/and/not/relative/path/to/file) + $buf = jetpack_boost_page_optimize_relative_path_replace( $buf, $dirpath ); + + // phpcs:ignore Squiz.PHP.CommentedOutCode.Found + // This regex changes things like AlphaImageLoader(...src='relative/path/to/file'...) to AlphaImageLoader(...src='/absolute/path/to/file'...) + $buf = preg_replace( + '/(Microsoft.AlphaImageLoader\s*\([^\)]*src=(?:\'|")?)([^\/\'"\s\)](?:(?@charset\s+[\'"][^\'"]+[\'"];)/i', + function ( $match ) use ( &$pre_output ) { + if ( str_starts_with( $pre_output, '@charset' ) ) { + return ''; + } + + $pre_output = $match[0] . "\n" . $pre_output; + + return ''; + }, + $buf + ); + } + + // Move the @import rules on top of the concatenated output. + // Only @charset rule are allowed before them. + if ( str_contains( $buf, '@import' ) ) { + $buf = preg_replace_callback( + '/(?P@import\s+(?:url\s*\()?[\'"\s]*)(?P[^\'"\s](?:https?:\/\/.+\/?)?.+?)(?P[\'"\s\)]*;)/i', + function ( $match ) use ( $dirpath, &$pre_output ) { + if ( ! str_starts_with( $match['path'], 'http' ) && '/' !== $match['path'][0] ) { + $pre_output .= $match['pre_path'] . ( $dirpath === '/' ? '/' : $dirpath . '/' ) . + $match['path'] . $match['post_path'] . "\n"; + } else { + $pre_output .= $match[0] . "\n"; + } + + return ''; + }, + $buf + ); + } + + // If filename indicates it's already minified, don't minify it again. + if ( ! preg_match( '/\.min\.css$/', $fullpath ) ) { + // Minify CSS. + $buf = Minify::css( $buf ); + } + $output .= "$buf"; + } else { + // If filename indicates it's already minified, don't minify it again. + if ( ! preg_match( '/\.min\.js$/', $fullpath ) ) { + // Minify JS + $buf = Minify::js( $buf ); + } + + $output .= "$buf;\n"; + } + } + + // Don't let trailing whitespace ruin everyone's day. Seems to get stripped by batcache + // resulting in ns_error_net_partial_transfer errors. + $output = rtrim( $output ); + + $headers = array( + 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s', $last_modified ) . ' GMT', + "Content-Type: $mime_type", + ); + + return array( + 'headers' => $headers, + 'content' => $pre_output . $output, + ); +} + +function jetpack_boost_page_optimize_get_file_paths( $args ) { + $paths = File_Paths::get( $args ); + if ( $paths ) { + $args = $paths->get_paths(); + } else { + // Kept for backward compatibility in case cached page is still referring to old formal asset URLs. + + // It's a base64 encoded list of file path. + // e.g.: /_jb_static/??-eJzTT8vP109KLNJLLi7W0QdyDEE8IK4CiVjn2hpZGluYmKcDABRMDPM= + if ( '-' === $args[0] ) { + + // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged,WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode + $args = @gzuncompress( base64_decode( substr( $args, 1 ) ) ); + } + + // It's an unencoded comma separated list of file paths. + // /foo/bar.css,/foo1/bar/baz.css?m=293847g + $version_string_pos = strpos( $args, '?' ); + if ( false !== $version_string_pos ) { + $args = substr( $args, 0, $version_string_pos ); + } + // /foo/bar.css,/foo1/bar/baz.css + $args = explode( ',', $args ); + } + + if ( ! is_array( $args ) ) { + // Invalid data, abort! + jetpack_boost_page_optimize_status_exit( 400 ); + } + + return $args; +} + +/** + * Exit with a given HTTP status code. + * + * @param int $status HTTP status code. + * + * @return never + */ +function jetpack_boost_page_optimize_status_exit( $status ) { + http_response_code( $status ); + exit( 0 ); // This is a workaround, until a bug in phan is fixed - https://github.com/phan/phan/issues/4888 +} + +function jetpack_boost_page_optimize_get_mime_type( $file ) { + $jetpack_boost_page_optimize_types = jetpack_boost_page_optimize_types(); + + $lastdot_pos = strrpos( $file, '.' ); + if ( false === $lastdot_pos ) { + return false; + } + + $ext = substr( $file, $lastdot_pos + 1 ); + if ( ! isset( $jetpack_boost_page_optimize_types[ $ext ] ) ) { + return false; + } + + return $jetpack_boost_page_optimize_types[ $ext ]; +} + +function jetpack_boost_page_optimize_relative_path_replace( $buf, $dirpath ) { + // url(relative/path/to/file) -> url(/absolute/and/not/relative/path/to/file) + $buf = preg_replace( + '/(:?\s*url\s*\()\s*(?:\'|")?\s*([^\/\'"\s\)](?:(?uri_path_to_fs_path( $uri ); + } + + if ( false === $path ) { + jetpack_boost_page_optimize_status_exit( 404 ); + } + + return $path; +} diff --git a/projects/plugins/boost/app/lib/minify/functions-service.php b/projects/plugins/boost/app/lib/minify/functions-service.php index 08b5cc4e5cd31..798e986d6fad0 100644 --- a/projects/plugins/boost/app/lib/minify/functions-service.php +++ b/projects/plugins/boost/app/lib/minify/functions-service.php @@ -2,158 +2,161 @@ use Automattic\Jetpack_Boost\Lib\Minify; use Automattic\Jetpack_Boost\Lib\Minify\Config; -use Automattic\Jetpack_Boost\Lib\Minify\Dependency_Path_Mapping; use Automattic\Jetpack_Boost\Lib\Minify\File_Paths; use Automattic\Jetpack_Boost\Lib\Minify\Utils; -function jetpack_boost_page_optimize_types() { - return array( - 'css' => 'text/css', - 'js' => 'application/javascript', - ); -} - -/** - * Handle serving a minified / concatenated file from the virtual _jb_static dir. - * - * @return never - */ -function jetpack_boost_page_optimize_service_request() { - $use_wp = defined( 'JETPACK_BOOST_CONCAT_USE_WP' ) && JETPACK_BOOST_CONCAT_USE_WP; - $utils = new Utils( $use_wp ); - +function jetpack_boost_handle_minify_request( $request_uri ) { // We handle the cache here, tell other caches not to. if ( ! defined( 'DONOTCACHEPAGE' ) ) { define( 'DONOTCACHEPAGE', true ); } - $use_cache = Config::can_use_cache(); - - if ( $use_cache ) { - $cache_dir = Config::get_cache_dir_path(); - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash - $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? $utils->unslash( $_SERVER['REQUEST_URI'] ) : ''; - $request_uri_hash = md5( $request_uri ); - $cache_file = $cache_dir . "/page-optimize-cache-$request_uri_hash"; - $cache_file_meta = $cache_dir . "/page-optimize-cache-meta-$request_uri_hash"; - - // Serve an existing file. - if ( file_exists( $cache_file ) ) { - if ( isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) { - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash - if ( strtotime( $utils->unslash( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) < filemtime( $cache_file ) ) { - header( 'HTTP/1.1 304 Not Modified' ); - exit( 0 ); - } - } - - if ( file_exists( $cache_file_meta ) ) { - // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents - $meta = json_decode( file_get_contents( $cache_file_meta ), ARRAY_A ); - if ( ! empty( $meta ) && ! empty( $meta['headers'] ) ) { - foreach ( $meta['headers'] as $header ) { - header( $header ); - } - } - } - - // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents - $etag = '"' . md5( file_get_contents( $cache_file ) ) . '"'; - - // Check if we're on Atomic and take advantage of the Atomic Edge Cache. - if ( defined( 'ATOMIC_CLIENT_ID' ) ) { - header( 'A8c-Edge-Cache: cache' ); - } - header( 'X-Page-Optimize: cached' ); - header( 'Cache-Control: max-age=' . 31536000 ); - header( 'ETag: ' . $etag ); - - echo file_get_contents( $cache_file ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- We need to trust this unfortunately. - die( 0 ); - } - } - - // Existing file not available; generate new content. - $output = jetpack_boost_page_optimize_build_output(); + $output = jetpack_boost_build_minify_output( $request_uri ); $content = $output['content']; $headers = $output['headers']; foreach ( $headers as $header ) { header( $header ); } + // Check if we're on Atomic and take advantage of the Atomic Edge Cache. if ( defined( 'ATOMIC_CLIENT_ID' ) ) { header( 'A8c-Edge-Cache: cache' ); } + header( 'X-Page-Optimize: uncached' ); header( 'Cache-Control: max-age=' . 31536000 ); header( 'ETag: "' . md5( $content ) . '"' ); echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- We need to trust this unfortunately. - // Cache the generated data, if available. + // Cache the generated data, if possible. + $use_cache = Config::can_use_static_cache(); if ( $use_cache ) { - // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents - file_put_contents( $cache_file, $content ); - // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents - file_put_contents( $cache_file_meta, wp_json_encode( array( 'headers' => $headers ) ) ); + $file_parts = jetpack_boost_minify_get_file_parts( $request_uri ); + if ( is_array( $file_parts ) && isset( $file_parts['file_name'] ) && isset( $file_parts['file_extension'] ) ) { + $cache_dir = Config::get_static_cache_dir_path(); + $cache_file_path = $cache_dir . '/' . $file_parts['file_name'] . '.min.' . $file_parts['file_extension']; + + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents + file_put_contents( $cache_file_path, $content ); + } } +} - die( 0 ); +/** + * Using a crafted request, we can check if is_404() is working in wp-content/ + */ +function jetpack_boost_check_404_handler( $request_uri ) { + if ( ! str_contains( strtolower( $request_uri ), 'wp-content/boost-cache/static/testing_404' ) ) { + return; + } + + if ( is_404() ) { + if ( ! is_dir( Config::get_static_cache_dir_path() ) ) { + mkdir( Config::get_static_cache_dir_path(), 0775, true ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_mkdir + } + file_put_contents( Config::get_static_cache_dir_path() . '/404', '1' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents + return true; + } else { + wp_delete_file( Config::get_static_cache_dir_path() . '/404' ); + return false; + } } /** - * Strip matching parent paths off a string. Returns $path without $parent_path. + * This function is used to test if is_404() is working in wp-content/ + * It sends a request to a non-existent URL, that will execute the 404 handler + * in jetpack_boost_check_404_handler(). + * + * This function is called when the Minify_CSS or Minify_JS module is activated. */ -function jetpack_boost_strip_parent_path( $parent_path, $path ) { - $trimmed_parent = ltrim( $parent_path, '/' ); - $trimmed_path = ltrim( $path, '/' ); +function jetpack_boost_404_tester() { + wp_remote_get( home_url( '/wp-content/boost-cache/static/testing_404' ) ); + if ( file_exists( Config::get_static_cache_dir_path() . '/404' ) ) { + wp_delete_file( Config::get_static_cache_dir_path() . '/404' ); + update_site_option( 'jetpack_boost_static_minification', 1 ); + } else { + update_site_option( 'jetpack_boost_static_minification', 0 ); + } +} +add_action( 'jetpack_boost_404_tester_cron', 'jetpack_boost_404_tester' ); - if ( substr( $trimmed_path, 0, strlen( $trimmed_parent ) === $trimmed_parent ) ) { - $trimmed_path = substr( $trimmed_path, strlen( $trimmed_parent ) ); +/** + * Setup the 404 tester. + * + * Schedule the 404 tester in three seconds if the concatenation modules + * haven't been toggled since this feature was released. + * Only run this in wp-admin to avoid excessive updates to the option. + */ +function jetpack_boost_404_setup() { + if ( is_admin() && get_site_option( 'jetpack_boost_static_minification', 'na' ) === 'na' ) { + update_site_option( 'jetpack_boost_static_minification', 0 ); // Add a default value if not set to avoid an extra SQL query. } + jetpack_boost_page_optimize_schedule_404_tester(); +} - return str_starts_with( $trimmed_path, '/' ) ? $trimmed_path : '/' . $trimmed_path; +/** + * This function is used to clean up the static cache folder. + * It removes files with the file extension passed in the $file_extension parameter. + * + * @param string $file_extension The file extension to clean up. + */ +function jetpack_boost_page_optimize_cleanup_cache( $file_extension ) { + $files = glob( Config::get_static_cache_dir_path() . "/*.min.{$file_extension}" ); + foreach ( $files as $file ) { + wp_delete_file( $file ); + } } /** - * Generate a combined and minified output for the current request. This is run regardless of the - * type of content being fetched; JavaScript or CSS, so it must handle either. + * This function is used to clean up the static cache folder. + * It removes files that are stale and no longer needed. + * A file is considered stale if it's older than the files it depends on. */ -function jetpack_boost_page_optimize_build_output() { - $use_wp = defined( 'JETPACK_BOOST_CONCAT_USE_WP' ) && JETPACK_BOOST_CONCAT_USE_WP; - $utils = new Utils( $use_wp ); +function jetpack_boost_minify_remove_stale_static_files() { + $files = glob( Config::get_static_cache_dir_path() . '/*.min.*' ); + foreach ( $files as $file ) { + if ( ! file_exists( $file ) ) { + continue; + } + + $file_mtime = filemtime( $file ); + $file_parts = pathinfo( $file ); + $hash = substr( $file_parts['basename'], 0, strpos( $file_parts['basename'], '.' ) ); + $paths = File_Paths::get( $hash ); + if ( $paths ) { + $args = $paths->get_paths(); + if ( ! is_array( $args ) ) { + continue; + } + + foreach ( $args as $filename ) { + if ( ! file_exists( ABSPATH . $filename ) || filemtime( ABSPATH . $filename ) > $file_mtime ) { + wp_delete_file( $file ); // remove the file from the cache because it's stale. + } + } + } + } +} +function jetpack_boost_build_minify_output( $request_uri ) { + $utils = new Utils(); $jetpack_boost_page_optimize_types = jetpack_boost_page_optimize_types(); // Config $concat_max_files = 150; $concat_unique = true; - // Main - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash - $method = isset( $_SERVER['REQUEST_METHOD'] ) ? $utils->unslash( $_SERVER['REQUEST_METHOD'] ) : 'GET'; - if ( ! in_array( $method, array( 'GET', 'HEAD' ), true ) ) { - jetpack_boost_page_optimize_status_exit( 400 ); - } - - // Ensure the path follows one of these forms: - // /_jb_static/??/foo/bar.css,/foo1/bar/baz.css?m=293847g - // -- or -- - // /_jb_static/??-eJzTT8vP109KLNJLLi7W0QdyDEE8IK4CiVjn2hpZGluYmKcDABRMDPM= - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash - $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? $utils->unslash( $_SERVER['REQUEST_URI'] ) : ''; - $args = $utils->parse_url( $request_uri, PHP_URL_QUERY ); - if ( ! $args || ! str_contains( $args, '?' ) ) { - jetpack_boost_page_optimize_status_exit( 400 ); + $file_parts = jetpack_boost_minify_get_file_parts( $request_uri ); + if ( ! $file_parts ) { + jetpack_boost_page_optimize_status_exit( 404 ); } - $args = substr( $args, strpos( $args, '?' ) + 1 ); + $file_paths = jetpack_boost_page_optimize_get_file_paths( $file_parts['file_name'] ); - $args = jetpack_boost_page_optimize_get_file_paths( $args ); - - // args contain something like array( '/foo/bar.css', '/foo1/bar/baz.css' ) - if ( 0 === count( $args ) || count( $args ) > $concat_max_files ) { + // file_paths contain something like array( '/foo/bar.css', '/foo1/bar/baz.css' ) + if ( count( $file_paths ) > $concat_max_files ) { jetpack_boost_page_optimize_status_exit( 400 ); } @@ -171,7 +174,9 @@ function jetpack_boost_page_optimize_build_output() { $pre_output = ''; $output = ''; - foreach ( $args as $uri ) { + $mime_type = ''; + + foreach ( $file_paths as $uri ) { $fullpath = jetpack_boost_page_optimize_get_path( $uri ); if ( ! file_exists( $fullpath ) ) { @@ -224,7 +229,7 @@ function jetpack_boost_page_optimize_build_output() { // The @charset rules must be on top of the output if ( str_starts_with( $buf, '@charset' ) ) { - preg_replace_callback( + $buf = preg_replace_callback( '/(?P@charset\s+[\'"][^\'"]+[\'"];)/i', function ( $match ) use ( &$pre_output ) { if ( str_starts_with( $pre_output, '@charset' ) ) { @@ -290,102 +295,43 @@ function ( $match ) use ( $dirpath, &$pre_output ) { ); } -function jetpack_boost_page_optimize_get_file_paths( $args ) { - $paths = File_Paths::get( $args ); - if ( $paths ) { - $args = $paths->get_paths(); - } else { - // Kept for backward compatibility in case cached page is still referring to old formal asset URLs. - - // It's a base64 encoded list of file path. - // e.g.: /_jb_static/??-eJzTT8vP109KLNJLLi7W0QdyDEE8IK4CiVjn2hpZGluYmKcDABRMDPM= - if ( '-' === $args[0] ) { - - // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged,WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode - $args = @gzuncompress( base64_decode( substr( $args, 1 ) ) ); - } - - // It's an unencoded comma separated list of file paths. - // /foo/bar.css,/foo1/bar/baz.css?m=293847g - $version_string_pos = strpos( $args, '?' ); - if ( false !== $version_string_pos ) { - $args = substr( $args, 0, $version_string_pos ); - } - // /foo/bar.css,/foo1/bar/baz.css - $args = explode( ',', $args ); - } - - if ( ! is_array( $args ) || false === $args ) { - // Invalid data, abort! - jetpack_boost_page_optimize_status_exit( 400 ); - } - - return $args; -} - /** - * Exit with a given HTTP status code. + * Get the file name and extension from the request URI. * - * @param int $status HTTP status code. - * - * @return never + * @param string $request_uri The request URI. + * @return array|false The file name and extension, or false if the request URI is invalid. */ -function jetpack_boost_page_optimize_status_exit( $status ) { - http_response_code( $status ); - exit( 0 ); // This is a workaround, until a bug in phan is fixed - https://github.com/phan/phan/issues/4888 -} - -function jetpack_boost_page_optimize_get_mime_type( $file ) { - $jetpack_boost_page_optimize_types = jetpack_boost_page_optimize_types(); +function jetpack_boost_minify_get_file_parts( $request_uri ) { + $utils = new Utils(); + $request_uri = $utils->unslash( $request_uri ); - $lastdot_pos = strrpos( $file, '.' ); - if ( false === $lastdot_pos ) { + $file_path = $utils->parse_url( $request_uri, PHP_URL_PATH ); + if ( $file_path === false ) { return false; } - $ext = substr( $file, $lastdot_pos + 1 ); + $file_info = pathinfo( $file_path ); + $real_path = realpath( ABSPATH . $file_info['dirname'] ); + $cache_dir = realpath( WP_CONTENT_DIR . '/boost-cache/static' ); - return isset( $jetpack_boost_page_optimize_types[ $ext ] ) ? $jetpack_boost_page_optimize_types[ $ext ] : false; -} - -function jetpack_boost_page_optimize_relative_path_replace( $buf, $dirpath ) { - // url(relative/path/to/file) -> url(/absolute/and/not/relative/path/to/file) - $buf = preg_replace( - '/(:?\s*url\s*\()\s*(?:\'|")?\s*([^\/\'"\s\)](?:(?uri_path_to_fs_path( $uri ); + $allowed_extensions = array_keys( jetpack_boost_page_optimize_types() ); + if ( ! isset( $file_info['extension'] ) || ! in_array( $file_info['extension'], $allowed_extensions, true ) ) { + return false; } - if ( false === $path ) { - jetpack_boost_page_optimize_status_exit( 404 ); - } + // The base name (without the extension) might contain ".min". + // Example - 777873a36e.min + $file_name_parts = explode( '.', $file_info['basename'] ); + $file_name = $file_name_parts[0]; - return $path; + return array( + 'file_name' => $file_name, + 'file_extension' => $file_info['extension'] ?? '', + ); } diff --git a/projects/plugins/boost/app/lib/minify/loader.php b/projects/plugins/boost/app/lib/minify/loader.php new file mode 100644 index 0000000000000..cb5b7151ab5d3 --- /dev/null +++ b/projects/plugins/boost/app/lib/minify/loader.php @@ -0,0 +1,32 @@ +allow_gzip_compression = true; // @todo - used constant ALLOW_GZIP_COMPRESSION = true if not defined. } + + public static function deactivate() { + jetpack_boost_page_optimize_cleanup_cache( 'css' ); + } } diff --git a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php index b1993c61c6199..0a9bfb319a011 100644 --- a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php +++ b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php @@ -3,11 +3,12 @@ namespace Automattic\Jetpack_Boost\Modules\Optimizations\Minify; use Automattic\Jetpack_Boost\Contracts\Changes_Page_Output; +use Automattic\Jetpack_Boost\Contracts\Has_Deactivate; use Automattic\Jetpack_Boost\Contracts\Optimization; use Automattic\Jetpack_Boost\Contracts\Pluggable; use Automattic\Jetpack_Boost\Lib\Minify\Concatenate_JS; -class Minify_JS implements Pluggable, Changes_Page_Output, Optimization { +class Minify_JS implements Pluggable, Changes_Page_Output, Optimization, Has_Deactivate { public static $default_excludes = array( 'jquery', 'jquery-core', 'underscore', 'backbone' ); @@ -47,4 +48,8 @@ public function init_minify() { $wp_scripts = new Concatenate_JS( $wp_scripts ); $wp_scripts->allow_gzip_compression = true; // @todo - used constant ALLOW_GZIP_COMPRESSION = true if not defined. } + + public static function deactivate() { + jetpack_boost_page_optimize_cleanup_cache( 'js' ); + } } diff --git a/projects/plugins/boost/changelog/add-boost-store-concat-in-files b/projects/plugins/boost/changelog/add-boost-store-concat-in-files new file mode 100644 index 0000000000000..41c3efa9e0a29 --- /dev/null +++ b/projects/plugins/boost/changelog/add-boost-store-concat-in-files @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Concatenate JS/CSS: Update concatenated assets to be stored on the server as files. diff --git a/projects/plugins/boost/jetpack-boost.php b/projects/plugins/boost/jetpack-boost.php index 3359ff670c769..50d5f3790f0d4 100644 --- a/projects/plugins/boost/jetpack-boost.php +++ b/projects/plugins/boost/jetpack-boost.php @@ -138,6 +138,8 @@ function jetpack_boost_admin_missing_files() { /** * Setup Minify service. */ +require_once JETPACK_BOOST_DIR_PATH . '/app/lib/minify/loader.php'; + // Potential improvement: Make concat URL dir configurable // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( isset( $_SERVER['REQUEST_URI'] ) ) { diff --git a/projects/plugins/boost/serve-minified-content.php b/projects/plugins/boost/serve-minified-content.php index 0fd83f7a655a9..7e58b12247937 100644 --- a/projects/plugins/boost/serve-minified-content.php +++ b/projects/plugins/boost/serve-minified-content.php @@ -18,6 +18,6 @@ require_once __DIR__ . '/app/lib/minify/Config.php'; require_once __DIR__ . '/app/lib/minify/Dependency_Path_Mapping.php'; require_once __DIR__ . '/app/lib/minify/functions-helpers.php'; -require_once __DIR__ . '/app/lib/minify/functions-service.php'; +require_once __DIR__ . '/app/lib/minify/functions-service-fallback.php'; jetpack_boost_page_optimize_service_request(); From 404c4c0a6b7190020a39df4491318cd08c902d25 Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Wed, 5 Feb 2025 15:03:20 -0300 Subject: [PATCH 373/420] Jetpack SEO: accumulate suggestions for meta description (#41557) * address selection border design * make meta step behave as titles, accumulate options * changelog * center title, fix actions width * use 2px outline, looks odd on non-retina screens --- .../fix-jetpack-seo-meta-step-accumulate-options | 4 ++++ .../components/seo-assistant/assistant-wizard.tsx | 10 ++++++---- .../components/seo-assistant/style.scss | 14 +++++++++----- .../seo-assistant/use-meta-description-step.tsx | 14 +++----------- 4 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-seo-meta-step-accumulate-options diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-seo-meta-step-accumulate-options b/projects/plugins/jetpack/changelog/fix-jetpack-seo-meta-step-accumulate-options new file mode 100644 index 0000000000000..efbdc6c0af32b --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-jetpack-seo-meta-step-accumulate-options @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack SEO: assistant option bubbles border design diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx index 8b47ef18db062..d7cc994da7a87 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx @@ -161,11 +161,13 @@ export default function AssistantWizard( { close } ) { return (
    - +
    + +

    { currentStepData?.title }

    -
    +
    - registerBlockType( jpPrefix + childBlock.name, childBlock.settings ) - ); + childBlocks.forEach( childBlock => { + // Skip experimental blocks unless experimental variation is enabled + if ( childBlock.settings?.isExperimental && ! isExperimental ) { + return; + } + registerBlockType( jpPrefix + childBlock.name, childBlock.settings ); + } ); return result; } diff --git a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php index 043fa04f940a3..dc493a171a08f 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php @@ -493,6 +493,19 @@ public static function gutenblock_render_field_consent( $atts, $content ) { return Contact_Form::parse_contact_field( $atts, $content ); } + /** + * Render the file upload field. + * + * @param array $atts - the block attributes. + * @param string $content - html content. + * + * @return string HTML for the file upload field. + */ + public static function gutenblock_render_field_file( $atts, $content ) { + $atts = self::block_attributes_to_shortcode_attributes( $atts, 'file' ); + return Contact_Form::parse_contact_field( $atts, $content ); + } + /** * Add the 'Form Responses' menu item as a submenu of Feedback. */ From 260afda9a5a0e343dc7734ea72cf781f7db61cf2 Mon Sep 17 00:00:00 2001 From: Miguel Lezama Date: Wed, 5 Feb 2025 20:08:23 -0300 Subject: [PATCH 381/420] Update adding-changelog.mdc (#41587) --- .cursor/rules/adding-changelog.mdc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.cursor/rules/adding-changelog.mdc b/.cursor/rules/adding-changelog.mdc index a35aa4c6e0d8e..8f41276714a6b 100644 --- a/.cursor/rules/adding-changelog.mdc +++ b/.cursor/rules/adding-changelog.mdc @@ -16,5 +16,6 @@ Block Editor: update all blocks to be fully compatible with WordPress 5.7. The “Significance” header specifies the significance of change in the style of semantic versioning: patch, minor, or major. The “Type” header categorizes the change in the changelog. In Jetpack, for example, our changelog divides changes into “Major Enhancements”, “Enhancements”, “Improved compatibility”, and “Bugfixes”. +Type must be "security", "added", "changed", "deprecated", "removed", or "fixed" -The body is separated from the headers by a blank line, and is the text that actually goes into the changelog. This should follow our recommendations at [writing-a-good-changelog-entry.md](mdc:jetpack/jetpack/jetpack/docs/writing-a-good-changelog-entry.md). \ No newline at end of file +The body is separated from the headers by a blank line, and is the text that actually goes into the changelog. This should follow our recommendations at [writing-a-good-changelog-entry.md](mdc:jetpack/jetpack/jetpack/docs/writing-a-good-changelog-entry.md). From ff6b4dd4aefb5c8d893b3b096ce7f4543db33c96 Mon Sep 17 00:00:00 2001 From: Miguel Lezama Date: Wed, 5 Feb 2025 20:27:30 -0300 Subject: [PATCH 382/420] Forms: Make file upload field block available in beta and refine its behavior (#41586) --- .../forms/changelog/refine-file-upload-field | 4 +++ .../src/blocks/contact-form/child-blocks.js | 8 ++--- .../contact-form/class-contact-form-block.php | 8 ++--- .../contact-form/components/jetpack-field.js | 31 +++++++++---------- .../util/register-jetpack-block.js | 6 ++-- 5 files changed, 28 insertions(+), 29 deletions(-) create mode 100644 projects/packages/forms/changelog/refine-file-upload-field diff --git a/projects/packages/forms/changelog/refine-file-upload-field b/projects/packages/forms/changelog/refine-file-upload-field new file mode 100644 index 0000000000000..991abfc1ba356 --- /dev/null +++ b/projects/packages/forms/changelog/refine-file-upload-field @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Forms: Refine file upload field block to use WordPress upload icon and follow consistent field patterns. Make the block available in beta. diff --git a/projects/packages/forms/src/blocks/contact-form/child-blocks.js b/projects/packages/forms/src/blocks/contact-form/child-blocks.js index cdda067475c1d..dab6adef6c4c4 100644 --- a/projects/packages/forms/src/blocks/contact-form/child-blocks.js +++ b/projects/packages/forms/src/blocks/contact-form/child-blocks.js @@ -2,7 +2,7 @@ import { InnerBlocks } from '@wordpress/block-editor'; import { createBlock } from '@wordpress/blocks'; import { Path, Icon } from '@wordpress/components'; import { __, _x } from '@wordpress/i18n'; -import { globe, envelope, mobile } from '@wordpress/icons'; +import { globe, envelope, mobile, upload } from '@wordpress/icons'; import { filter, isEmpty, map, startsWith, trim } from 'lodash'; import JetpackField from './components/jetpack-field'; import JetpackFieldCheckbox from './components/jetpack-field-checkbox'; @@ -521,9 +521,7 @@ export const childBlocks = [ description: __( 'Allow visitors to upload files through your form.', 'jetpack-forms' ), icon: { foreground: getIconColor(), - src: renderMaterialIcon( - - ), + src: , }, edit: editField( 'file' ), attributes: { @@ -538,7 +536,7 @@ export const childBlocks = [ default: '', }, }, - isExperimental: true, + isBeta: true, }, }, { diff --git a/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php b/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php index 30b9f135958ff..ad5f04d253202 100644 --- a/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php +++ b/projects/packages/forms/src/blocks/contact-form/class-contact-form-block.php @@ -162,15 +162,15 @@ public static function register_child_blocks() { ); $blocks_variation = apply_filters( 'jetpack_blocks_variation', \Automattic\Jetpack\Constants::get_constant( 'JETPACK_BLOCKS_VARIATION' ) ); - if ( 'experimental' === $blocks_variation ) { - self::register_experimental_blocks(); + if ( 'beta' === $blocks_variation ) { + self::register_beta_blocks(); } } /** - * Register experimental blocks + * Register beta blocks */ - private static function register_experimental_blocks() { + private static function register_beta_blocks() { Blocks::jetpack_register_block( 'jetpack/field-file', array( diff --git a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field.js b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field.js index 66f52ee0ded94..135005f63d0d6 100644 --- a/projects/packages/forms/src/blocks/contact-form/components/jetpack-field.js +++ b/projects/packages/forms/src/blocks/contact-form/components/jetpack-field.js @@ -47,23 +47,20 @@ const JetpackField = props => { setAttributes={ setAttributes } style={ formStyle } /> - { type === 'file' ? ( - - ) : ( - setAttributes( { placeholder: e.target.value } ) } - style={ fieldStyle } - type="text" - value={ placeholder } - onKeyDown={ event => { - if ( event.defaultPrevented || event.key !== 'Enter' ) { - return; - } - insertBlocksAfter( createBlock( getDefaultBlockName() ) ); - } } - /> - ) } + setAttributes( { placeholder: e.target.value } ) } + style={ fieldStyle } + type={ type } + value={ placeholder } + onClick={ event => type === 'file' && event.preventDefault() } + onKeyDown={ event => { + if ( event.defaultPrevented || event.key !== 'Enter' ) { + return; + } + insertBlocksAfter( createBlock( getDefaultBlockName() ) ); + } } + />
    { - // Skip experimental blocks unless experimental variation is enabled - if ( childBlock.settings?.isExperimental && ! isExperimental ) { + // Skip beta blocks unless beta variation is enabled + if ( childBlock.settings?.isBeta && ! isBeta ) { return; } registerBlockType( jpPrefix + childBlock.name, childBlock.settings ); From 292760c76a5cb5f76a3bc9c4d232d9458e1040ac Mon Sep 17 00:00:00 2001 From: tellthemachines Date: Thu, 6 Feb 2025 12:51:56 +1100 Subject: [PATCH 383/420] Make sure Viewers are searchable by username and email. (#41447) * Make sure Viewers are searchable by username and email. * changelog * Add display name to check. * Change `strpos` to `str_contains` --- .../plugins/jetpack/changelog/fix-search-viewers-by-email | 4 ++++ .../class.wpcom-json-api-list-users-endpoint.php | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-search-viewers-by-email diff --git a/projects/plugins/jetpack/changelog/fix-search-viewers-by-email b/projects/plugins/jetpack/changelog/fix-search-viewers-by-email new file mode 100644 index 0000000000000..5f8693fa4788a --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-search-viewers-by-email @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Ensure Viewers are searchable by username and email. diff --git a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php index 7265c6d02330a..86861753b9c27 100644 --- a/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php +++ b/projects/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php @@ -181,14 +181,16 @@ public function callback( $path = '', $blog_id = 0 ) { ) : array(); $viewers = array_map( array( $this, 'get_author' ), $viewers ); - // we restrict search field to name when include_viewers is true. + // When include_viewers is true, search by username or email. if ( $include_viewers && ! empty( $args['search'] ) ) { $viewers = array_filter( $viewers, function ( $viewer ) use ( $args ) { + // Convert to WP_User so expected fields are available. + $wp_viewer = new WP_User( $viewer->ID ); // remove special database search characters from search term $search_term = str_replace( '*', '', $args['search'] ); - return strpos( $viewer->name, $search_term ) !== false; + return ( str_contains( $wp_viewer->user_login, $search_term ) || str_contains( $wp_viewer->user_email, $search_term ) || str_contains( $wp_viewer->display_name, $search_term ) ); } ); } From 7f8563c4439696058c4d3b55e01a767b131b3aa3 Mon Sep 17 00:00:00 2001 From: Daniel Richards Date: Thu, 6 Feb 2025 09:52:05 +0800 Subject: [PATCH 384/420] Forms: Fix block style variations not appearing in the editor (#41457) * Fix form style variations not displaying in editor * changelog * Fix outlined style for single and multiple choice fields --- .../forms/changelog/fix-form-style-variations-in-editor | 4 ++++ .../packages/forms/src/blocks/contact-form/editor.scss | 8 ++++---- .../jetpack/changelog/fix-form-style-variations-in-editor | 4 ++++ 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-form-style-variations-in-editor create mode 100644 projects/plugins/jetpack/changelog/fix-form-style-variations-in-editor diff --git a/projects/packages/forms/changelog/fix-form-style-variations-in-editor b/projects/packages/forms/changelog/fix-form-style-variations-in-editor new file mode 100644 index 0000000000000..c418f606c6bb4 --- /dev/null +++ b/projects/packages/forms/changelog/fix-form-style-variations-in-editor @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Fix block style variations not showing in the editor. diff --git a/projects/packages/forms/src/blocks/contact-form/editor.scss b/projects/packages/forms/src/blocks/contact-form/editor.scss index 80deddb8c5246..d506b5bc8dc98 100644 --- a/projects/packages/forms/src/blocks/contact-form/editor.scss +++ b/projects/packages/forms/src/blocks/contact-form/editor.scss @@ -711,13 +711,13 @@ } } - &.is-style-outlined, &.is-style-animated { + .is-style-outlined &, .is-style-animated & { .jetpack-field { position: relative; } } - &.is-style-outlined { + .is-style-outlined & { .block-editor-block-list__block:not([contenteditable]):focus:after { top: -10px; left: -10px; @@ -728,7 +728,7 @@ .jetpack-field { --notch-width: max(var(--jetpack--contact-form--input-padding-left, 16px), var(--jetpack--contact-form--border-radius)); margin-top: 8px; - display: flex; + box-sizing: border-box; .notched-label { position: absolute; @@ -869,7 +869,7 @@ } } - &.is-style-animated { + .is-style-animated & { .jetpack-field { --left-offset: calc(var(--jetpack--contact-form--input-padding-left, 16px) + var(--jetpack--contact-form--border-size)); --label-left: max(var(--left-offset), var(--jetpack--contact-form--border-radius)); diff --git a/projects/plugins/jetpack/changelog/fix-form-style-variations-in-editor b/projects/plugins/jetpack/changelog/fix-form-style-variations-in-editor new file mode 100644 index 0000000000000..dc5b714d1d601 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-form-style-variations-in-editor @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Forms: Fix block style variations not showing in the editor. From d6f2cb4a198870419f7c47a6e6be8d1829200ea0 Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Thu, 6 Feb 2025 09:43:37 +0700 Subject: [PATCH 385/420] Media Library: Implement upload media from URL (#41089) --- .../changelog/wpcom-media-url-upload | 4 + .../src/class-jetpack-mu-wpcom.php | 1 + .../wpcom-media-url-upload-form/index.jsx | 118 ++++++++++++++++++ .../wpcom-media-url-upload-form/style.scss | 15 +++ .../wpcom-media/wpcom-media-url-upload.js | 23 ++++ .../wpcom-media/wpcom-media-url-upload.php | 82 ++++++++++++ .../jetpack-mu-wpcom/webpack.config.js | 1 + 7 files changed, 244 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/wpcom-media-url-upload create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/index.jsx create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/style.scss create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.js create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.php diff --git a/projects/packages/jetpack-mu-wpcom/changelog/wpcom-media-url-upload b/projects/packages/jetpack-mu-wpcom/changelog/wpcom-media-url-upload new file mode 100644 index 0000000000000..8a81a34ba686a --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/wpcom-media-url-upload @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Allows uploading media from URL in Media Library diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index 63b48578cc572..06e0615259745 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -152,6 +152,7 @@ public static function load_wpcom_user_features() { require_once __DIR__ . '/features/wpcom-command-palette/wpcom-command-palette.php'; require_once __DIR__ . '/features/wpcom-dashboard-widgets/wpcom-dashboard-widgets.php'; require_once __DIR__ . '/features/wpcom-locale/sync-locale-from-calypso-to-atomic.php'; + require_once __DIR__ . '/features/wpcom-media/wpcom-media-url-upload.php'; require_once __DIR__ . '/features/wpcom-options-general/options-general.php'; require_once __DIR__ . '/features/wpcom-plugins/wpcom-plugins.php'; require_once __DIR__ . '/features/wpcom-profile-settings/profile-settings-link-to-wpcom.php'; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/index.jsx b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/index.jsx new file mode 100644 index 0000000000000..ab965659d96e3 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/index.jsx @@ -0,0 +1,118 @@ +import { __ } from '@wordpress/i18n'; +import clsx from 'clsx'; +import { useState } from 'react'; + +import './style.scss'; + +const WpcomMediaUrlUploadForm = ( { ajaxUrl, action, nonce, isEditor } ) => { + const [ url, setUrl ] = useState( '' ); + + const [ show, setShow ] = useState( false ); + const [ isUploading, setIsUploading ] = useState( false ); + + const handleUrlChange = e => { + setUrl( e.target.value ); + }; + + const handleSubmit = async e => { + if ( isUploading ) { + return false; + } + try { + new URL( url ); // eslint-disable-line no-new + } catch { + return false; + } + e.preventDefault(); + + const formData = new FormData(); + formData.append( 'action', action ); + formData.append( 'url', url ); + formData.append( '_ajax_nonce', nonce ); + + setIsUploading( true ); + + const response = await fetch( ajaxUrl, { + method: 'POST', + body: formData, + } ); + + const { success, data } = await response.json(); + + if ( success ) { + window.wp.media.model.Attachment.get( data.attachment_id ).fetch( { + success: function ( attachment ) { + const addAttachment = attachmentToAdd => { + ( window.wp.media.frame.controller || window.wp.media.frame ).content + .get() + .collection.add( attachmentToAdd ); + }; + + if ( isEditor ) { + const mediaLibraryTab = window.wp.media.frame.state( 'library' ); + mediaLibraryTab.trigger( 'open' ); + + addAttachment( attachment ); + + const selection = mediaLibraryTab.get( 'selection' ); + selection.reset(); + selection.add( [ attachment ] ); + } else { + addAttachment( attachment ); + } + + setIsUploading( false ); + setUrl( '' ); + }, + } ); + } else { + setIsUploading( false ); + window.wp.Uploader.errors.add( { file: { name: url }, message: data[ 0 ].message } ); + } + + return false; + }; + + const renderLink = () => { + return ( + + ); + }; + + const renderForm = () => { + let buttonText = __( 'Upload', 'jetpack-mu-wpcom' ); + if ( isUploading ) { + buttonText = __( 'Uploading…', 'jetpack-mu-wpcom' ); + } + return ( +
    + + +
    + ); + }; + + return
    { show ? renderForm() : renderLink() }
    ; +}; + +export default WpcomMediaUrlUploadForm; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/style.scss new file mode 100644 index 0000000000000..22c80af3b799e --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/style.scss @@ -0,0 +1,15 @@ +.wpcom-media-url-upload-form { + margin-top: -15px; + margin-bottom: 15px; + height: 30px; + + button#{&}__pre-upload-button { + padding: 0 21px; + } + + input { + width: 100%; + max-width: 600px; + margin-right: 6px; + } +} diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.js new file mode 100644 index 0000000000000..9e02947f311f3 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.js @@ -0,0 +1,23 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import WpcomMediaUrlUploadForm from './wpcom-media-url-upload-form'; + +const props = typeof window === 'object' ? window.JETPACK_MU_WPCOM_MEDIA_URL_UPLOAD : {}; + +document.addEventListener( 'DOMContentLoaded', function () { + if ( window.wp?.media?.view?.UploaderInline ) { + const originalUploaderInline = window.wp.media.view.UploaderInline; + + window.wp.media.view.UploaderInline = originalUploaderInline.extend( { + ready: function () { + originalUploaderInline.prototype.ready.apply( this, arguments ); + + const container = document.getElementById( 'wpcom-media-url-upload' ); + if ( container ) { + const root = ReactDOM.createRoot( container ); + root.render( ); + } + }, + } ); + } +} ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.php new file mode 100644 index 0000000000000..82afc12ae90a3 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.php @@ -0,0 +1,82 @@ + +
    + admin_url( 'admin-ajax.php' ), + 'action' => 'wpcom_media_url_upload', + 'nonce' => wp_create_nonce( 'wpcom_media_url_upload' ), + 'isEditor' => $pagenow !== 'upload.php', + ) + ); + + wp_add_inline_script( + $handle, + "window.JETPACK_MU_WPCOM_MEDIA_URL_UPLOAD = $data;", + 'before' + ); +} + +/** + * AJAX handler for the wpcom media URL upload. + */ +function wpcom_handle_media_url_upload() { + check_ajax_referer( 'wpcom_media_url_upload' ); + + if ( ! isset( $_POST['url'] ) ) { + return; + } + + $url = esc_url_raw( wp_unslash( $_POST['url'] ) ); + + $tmp_file = download_url( $url ); + if ( is_wp_error( $tmp_file ) ) { + return wp_send_json_error( $tmp_file ); + } + + if ( is_multisite() ) { + add_filter( 'wp_handle_sideload_prefilter', 'check_upload_size' ); + } + + $attachment_id = media_handle_sideload( + array( + 'name' => basename( wp_parse_url( $url, PHP_URL_PATH ) ), + 'tmp_name' => $tmp_file, + ) + ); + + if ( file_exists( $tmp_file ) ) { + wp_delete_file( $tmp_file ); + } + + if ( is_wp_error( $attachment_id ) ) { + return wp_send_json_error( $attachment_id ); + } else { + return wp_send_json_success( array( 'attachment_id' => $attachment_id ) ); + } +} + +if ( current_user_can( 'upload_files' ) ) { + add_action( 'pre-upload-ui', 'wpcom_media_url_upload', 9 ); + add_action( 'wp_ajax_wpcom_media_url_upload', 'wpcom_handle_media_url_upload' ); +} diff --git a/projects/packages/jetpack-mu-wpcom/webpack.config.js b/projects/packages/jetpack-mu-wpcom/webpack.config.js index 59fbeedb0376a..65f50ed068156 100644 --- a/projects/packages/jetpack-mu-wpcom/webpack.config.js +++ b/projects/packages/jetpack-mu-wpcom/webpack.config.js @@ -45,6 +45,7 @@ module.exports = [ './src/features/wpcom-global-styles/wpcom-global-styles-view.js', 'wpcom-documentation-links': './src/features/wpcom-documentation-links/wpcom-documentation-links.ts', + 'wpcom-media-url-upload': './src/features/wpcom-media/wpcom-media-url-upload.js', 'wpcom-options-general': [ './src/features/wpcom-options-general/options-general.js', './src/features/wpcom-options-general/options-general.scss', From e96f6cb6159c66acd629c83af1e42a8ae64a533e Mon Sep 17 00:00:00 2001 From: Ilyas Foo Date: Thu, 6 Feb 2025 11:21:41 +0800 Subject: [PATCH 386/420] wpcomsh: Update wc-calypso-bridge to 2.8.3 (#41569) * Update wc-calypso-bridge to 2.8.3 * Changelog * Update composer.lock --- .../plugins/wpcomsh/changelog/update-bridge-to-2.8.3 | 4 ++++ projects/plugins/wpcomsh/composer.json | 2 +- projects/plugins/wpcomsh/composer.lock | 12 ++++++------ 3 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 projects/plugins/wpcomsh/changelog/update-bridge-to-2.8.3 diff --git a/projects/plugins/wpcomsh/changelog/update-bridge-to-2.8.3 b/projects/plugins/wpcomsh/changelog/update-bridge-to-2.8.3 new file mode 100644 index 0000000000000..e872e439a8003 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/update-bridge-to-2.8.3 @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Update wc-calypso-bridge dependency to 2.8.3 \ No newline at end of file diff --git a/projects/plugins/wpcomsh/composer.json b/projects/plugins/wpcomsh/composer.json index ddea4d32e181e..f446a085bf536 100644 --- a/projects/plugins/wpcomsh/composer.json +++ b/projects/plugins/wpcomsh/composer.json @@ -9,7 +9,7 @@ "automattic/custom-fonts": "^3.0", "automattic/custom-fonts-typekit": "^2.0", "automattic/text-media-widget-styles": "^2.0", - "automattic/wc-calypso-bridge": "2.8.2", + "automattic/wc-calypso-bridge": "2.8.3", "wordpress/classic-editor-plugin": "1.6.7", "automattic/jetpack-composer-plugin": "@dev", "automattic/jetpack-config": "@dev", diff --git a/projects/plugins/wpcomsh/composer.lock b/projects/plugins/wpcomsh/composer.lock index 46a60ea02c6ad..f823d7dcd129d 100644 --- a/projects/plugins/wpcomsh/composer.lock +++ b/projects/plugins/wpcomsh/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9f3ce7d5ead6179da04a6e8b9db4da67", + "content-hash": "7ecab5a74142874080feb1d962e2a159", "packages": [ { "name": "automattic/at-pressable-podcasting", @@ -1934,16 +1934,16 @@ }, { "name": "automattic/wc-calypso-bridge", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/Automattic/wc-calypso-bridge.git", - "reference": "7592a687a9a36afa49cd25557fac8f6a6d4e899c" + "reference": "db9790112a06fe6a0c57c07a37d1e3083199baf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Automattic/wc-calypso-bridge/zipball/7592a687a9a36afa49cd25557fac8f6a6d4e899c", - "reference": "7592a687a9a36afa49cd25557fac8f6a6d4e899c", + "url": "https://api.github.com/repos/Automattic/wc-calypso-bridge/zipball/db9790112a06fe6a0c57c07a37d1e3083199baf6", + "reference": "db9790112a06fe6a0c57c07a37d1e3083199baf6", "shasum": "" }, "require-dev": { @@ -1982,7 +1982,7 @@ "phpcbf -p" ] }, - "time": "2025-01-31T03:41:01+00:00" + "time": "2025-02-05T07:13:06+00:00" }, { "name": "scssphp/scssphp", From ef18d8604edb455d7478d9a36c4431a5716d7312 Mon Sep 17 00:00:00 2001 From: Mehmood Ahmad <31419912+mehmoodak@users.noreply.github.com> Date: Thu, 6 Feb 2025 11:24:11 +0500 Subject: [PATCH 387/420] UPDATE: Reader urls from /read to /reader (#41477) Updated all `/read/*` routes to `/reader/*` --- .../changelog/reader-update-url-from-read-to-reader | 4 ++++ .../src/features/wpcom-admin-bar/wpcom-admin-bar.php | 2 +- .../jetpack/changelog/reader-update-url-from-read-to-reader | 4 ++++ .../extensions/blocks/subscriber-login/subscriber-login.php | 2 +- .../jetpack/extensions/blocks/subscriptions/subscriptions.php | 2 +- 5 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/reader-update-url-from-read-to-reader create mode 100644 projects/plugins/jetpack/changelog/reader-update-url-from-read-to-reader diff --git a/projects/packages/jetpack-mu-wpcom/changelog/reader-update-url-from-read-to-reader b/projects/packages/jetpack-mu-wpcom/changelog/reader-update-url-from-read-to-reader new file mode 100644 index 0000000000000..e8a2cf434f2fa --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/reader-update-url-from-read-to-reader @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Reader: Update url from /read to /reader diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-bar/wpcom-admin-bar.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-bar/wpcom-admin-bar.php index 0725aa0be36f5..4e038032419a3 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-bar/wpcom-admin-bar.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-admin-bar/wpcom-admin-bar.php @@ -224,7 +224,7 @@ function wpcom_add_reader_menu( $wp_admin_bar ) { /* translators: Hidden accessibility text. */ __( 'Reader', 'jetpack-mu-wpcom' ) . '', - 'href' => maybe_add_origin_site_id_to_url( 'https://wordpress.com/read' ), + 'href' => maybe_add_origin_site_id_to_url( 'https://wordpress.com/reader' ), 'meta' => array( 'class' => 'wp-admin-bar-reader', ), diff --git a/projects/plugins/jetpack/changelog/reader-update-url-from-read-to-reader b/projects/plugins/jetpack/changelog/reader-update-url-from-read-to-reader new file mode 100644 index 0000000000000..89443419854a7 --- /dev/null +++ b/projects/plugins/jetpack/changelog/reader-update-url-from-read-to-reader @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Reader: Update url from /read to /reader diff --git a/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php b/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php index 5967d68284e21..e3fb29048d4d2 100644 --- a/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php +++ b/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php @@ -141,7 +141,7 @@ function render_block( $attributes ) { return sprintf( $block_template, get_block_wrapper_attributes(), - 'https://wordpress.com/read/site/subscription/' . Jetpack_Memberships::get_blog_id(), + 'https://wordpress.com/reader/site/subscription/' . Jetpack_Memberships::get_blog_id(), $manage_subscriptions_label ); } diff --git a/projects/plugins/jetpack/extensions/blocks/subscriptions/subscriptions.php b/projects/plugins/jetpack/extensions/blocks/subscriptions/subscriptions.php index 9a67b43588365..3484fe32baee4 100644 --- a/projects/plugins/jetpack/extensions/blocks/subscriptions/subscriptions.php +++ b/projects/plugins/jetpack/extensions/blocks/subscriptions/subscriptions.php @@ -765,7 +765,7 @@ function render_for_website( $data, $classes, $styles ) { > class="" From 2da3fe119c230a27b3a4c40b1dd3c93485b74026 Mon Sep 17 00:00:00 2001 From: Juanma Rodriguez Escriche Date: Thu, 6 Feb 2025 08:47:08 +0100 Subject: [PATCH 388/420] Full sync: Set chunk size of Woo modules dynamically (#41433) * Add woo modules dynamic * changelog * Typo from merge * Typos regarding MAX_META_LENGTH and phan issues * Bug fixingsince objects can actually be arrays :( * Added tests so that objects coming as arrays are also added in filter_objects_and_metadata_by_size. * Woocommerce module handles order items, let's make sure we use the proper term * Changes so that order items when expanded, are returned in desc order which is necessary for the chunk logic * Deprecate removed methods * Sanitize order in get_order_item_by_ids * Renamed function to build_full_sync_action_array * Update projects/packages/sync/src/modules/class-woocommerce.php Typo * Updated docblock --- .../changelog/update-full-sync-woo-dynamic | 4 + .../sync/src/modules/class-comments.php | 38 +-------- .../packages/sync/src/modules/class-meta.php | 2 +- .../sync/src/modules/class-module.php | 35 +++++++- .../packages/sync/src/modules/class-posts.php | 44 +--------- .../modules/class-woocommerce-hpos-orders.php | 64 ++++++++++++++- .../sync/src/modules/class-woocommerce.php | 80 ++++++++++++++++++- .../sync/tests/php/modules/test-module.php | 43 +++++++++- .../changelog/update-full-sync-woo-dynamic | 4 + .../sync/test_class.jetpack-sync-comments.php | 16 ++-- .../php/sync/test_class.jetpack-sync-meta.php | 10 +-- .../sync/test_class.jetpack-sync-posts.php | 16 ++-- 12 files changed, 244 insertions(+), 112 deletions(-) create mode 100644 projects/packages/sync/changelog/update-full-sync-woo-dynamic create mode 100644 projects/plugins/jetpack/changelog/update-full-sync-woo-dynamic diff --git a/projects/packages/sync/changelog/update-full-sync-woo-dynamic b/projects/packages/sync/changelog/update-full-sync-woo-dynamic new file mode 100644 index 0000000000000..caafc4668ded1 --- /dev/null +++ b/projects/packages/sync/changelog/update-full-sync-woo-dynamic @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Sync: Full-sync chunking logic dynamic for Woo modules diff --git a/projects/packages/sync/src/modules/class-comments.php b/projects/packages/sync/src/modules/class-comments.php index 7377761f2564a..9dc1d7590ffae 100644 --- a/projects/packages/sync/src/modules/class-comments.php +++ b/projects/packages/sync/src/modules/class-comments.php @@ -15,24 +15,6 @@ */ class Comments extends Module { - /** - * Max bytes allowed for full sync upload. - * Current Setting : 7MB. - * - * @access public - * - * @var int - */ - const MAX_SIZE_FULL_SYNC = 7000000; - /** - * Max bytes allowed for post meta_value => length. - * Current Setting : 2MB. - * - * @access public - * - * @var int - */ - const MAX_COMMENT_META_LENGTH = 2000000; /** * Sync module name. * @@ -599,7 +581,7 @@ public function get_next_chunk( $config, $status, $chunk_size ) { 'comment', $comments, $metadata, - self::MAX_COMMENT_META_LENGTH, // Replace with appropriate comment meta length constant. + self::MAX_META_LENGTH, // Replace with appropriate comment meta length constant. self::MAX_SIZE_FULL_SYNC ); @@ -609,22 +591,4 @@ public function get_next_chunk( $config, $status, $chunk_size ) { 'meta' => $filtered_comments_metadata, ); } - - /** - * Set the status of the full sync action based on the objects that were sent. - * - * @access public - * - * @param array $status This module Full Sync status. - * @param array $objects This module Full Sync objects. - * - * @return array The updated status. - */ - public function set_send_full_sync_actions_status( $status, $objects ) { - - $object_ids = $objects['object_ids']; - $status['last_sent'] = end( $object_ids ); - $status['sent'] += count( $object_ids ); - return $status; - } } diff --git a/projects/packages/sync/src/modules/class-meta.php b/projects/packages/sync/src/modules/class-meta.php index ed6674d5b3074..2360db3b53e7a 100644 --- a/projects/packages/sync/src/modules/class-meta.php +++ b/projects/packages/sync/src/modules/class-meta.php @@ -177,7 +177,7 @@ private function fetch_prepared_meta_from_db( $object_type, $where, $meta_object private function get_prepared_meta_object( $object_type, $meta_entry ) { $object_id_column = $object_type . '_id'; - if ( 'post' === $object_type && strlen( $meta_entry['meta_value'] ) >= Posts::MAX_POST_META_LENGTH ) { + if ( 'post' === $object_type && strlen( $meta_entry['meta_value'] ) >= Posts::MAX_META_LENGTH ) { $meta_entry['meta_value'] = ''; } diff --git a/projects/packages/sync/src/modules/class-module.php b/projects/packages/sync/src/modules/class-module.php index 305585862795b..2d92f3254abb4 100644 --- a/projects/packages/sync/src/modules/class-module.php +++ b/projects/packages/sync/src/modules/class-module.php @@ -38,6 +38,26 @@ abstract class Module { */ const MAX_DB_QUERY_LENGTH = 15 * 1024; + /** + * Max bytes allowed for full sync upload for the module. + * Default Setting : 7MB. + * + * @access public + * + * @var int + */ + const MAX_SIZE_FULL_SYNC = 7000000; + + /** + * Max bytes allowed for post meta_value => length. + * Default Setting : 2MB. + * + * @access public + * + * @var int + */ + const MAX_META_LENGTH = 2000000; + /** * Sync module name. * @@ -439,6 +459,9 @@ public function send_full_sync_actions( $config, $status, $send_until ) { /** * Set the status of the full sync action based on the objects that were sent. + * Used to update the status of the module after sending a chunk of objects. + * Since Full Sync logic chunking relies on order of items being processed in descending order, we need to sort + * due to some modules (e.g. WooCommerce) changing the order while getting the objects. * * @access protected * @@ -448,8 +471,10 @@ public function send_full_sync_actions( $config, $status, $send_until ) { * @return array The updated status. */ protected function set_send_full_sync_actions_status( $status, $objects ) { - $status['last_sent'] = end( $objects ); - $status['sent'] += count( $objects ); + + $object_ids = $objects['object_ids'] ?? $objects; + $status['last_sent'] = end( $object_ids ); + $status['sent'] += count( $object_ids ); return $status; } @@ -715,9 +740,11 @@ public function filter_objects_and_metadata_by_size( $type, $objects, $metadata, $object_size = strlen( maybe_serialize( $object ) ); $current_metadata = array(); $metadata_size = 0; + $id_field = $this->id_field(); + $object_id = (int) ( is_object( $object ) ? $object->{$id_field} : $object[ $id_field ] ); foreach ( $metadata as $key => $metadata_item ) { - if ( (int) $metadata_item->{$type . '_id'} === (int) $object->{$this->id_field()} ) { + if ( (int) $metadata_item->{$type . '_id'} === $object_id ) { $metadata_item_size = strlen( maybe_serialize( $metadata_item->meta_value ) ); if ( $metadata_item_size >= $max_meta_size ) { $metadata_item->meta_value = ''; // Trim metadata if too large. @@ -734,7 +761,7 @@ public function filter_objects_and_metadata_by_size( $type, $objects, $metadata, // Always allow the first object with metadata. if ( empty( $filtered_object_ids ) || ( $current_size + $object_size + $metadata_size ) <= $max_total_size ) { - $filtered_object_ids[] = strval( $object->{$this->id_field()} ); + $filtered_object_ids[] = strval( is_object( $object ) ? $object->{$id_field} : $object[ $id_field ] ); $filtered_objects[] = $object; $filtered_metadata = array_merge( $filtered_metadata, $current_metadata ); $current_size += $object_size + $metadata_size; diff --git a/projects/packages/sync/src/modules/class-posts.php b/projects/packages/sync/src/modules/class-posts.php index 0a3e7656c3a91..54c07996855ba 100644 --- a/projects/packages/sync/src/modules/class-posts.php +++ b/projects/packages/sync/src/modules/class-posts.php @@ -64,26 +64,6 @@ class Posts extends Module { */ const MAX_POST_CONTENT_LENGTH = 5000000; - /** - * Max bytes allowed for post meta_value => length. - * Current Setting : 2MB. - * - * @access public - * - * @var int - */ - const MAX_POST_META_LENGTH = 2000000; - - /** - * Max bytes allowed for full sync upload. - * Current Setting : 7MB. - * - * @access public - * - * @var int - */ - const MAX_SIZE_FULL_SYNC = 7000000; - /** * Default previous post state. * Used for default previous post status. @@ -321,7 +301,7 @@ public function get_full_sync_actions() { } /** - * Filter meta arguments so that we don't sync meta_values over MAX_POST_META_LENGTH. + * Filter meta arguments so that we don't sync meta_values over MAX_META_LENGTH. * * @param array $args action arguments. * @@ -332,7 +312,7 @@ public function trim_post_meta( $args ) { // Explicitly truncate meta_value when it exceeds limit. // Large content will cause OOM issues and break Sync. $serialized_value = maybe_serialize( $meta_value ); - if ( strlen( $serialized_value ) >= self::MAX_POST_META_LENGTH ) { + if ( strlen( $serialized_value ) >= self::MAX_META_LENGTH ) { $meta_value = ''; } return array( $meta_id, $object_id, $meta_key, $meta_value ); @@ -894,7 +874,7 @@ public function get_next_chunk( $config, $status, $chunk_size ) { 'post', $posts, $metadata, - self::MAX_POST_META_LENGTH, + self::MAX_META_LENGTH, self::MAX_SIZE_FULL_SYNC ); @@ -918,22 +898,4 @@ private function expand_posts( $post_ids ) { $posts = array_values( $posts ); // Reindex in case posts were deleted. return $posts; } - - /** - * Set the status of the full sync action based on the objects that were sent. - * - * @access public - * - * @param array $status This module Full Sync status. - * @param array $objects This module Full Sync objects. - * - * @return array The updated status. - */ - public function set_send_full_sync_actions_status( $status, $objects ) { - - $object_ids = $objects['object_ids']; - $status['last_sent'] = end( $object_ids ); - $status['sent'] += count( $object_ids ); - return $status; - } } diff --git a/projects/packages/sync/src/modules/class-woocommerce-hpos-orders.php b/projects/packages/sync/src/modules/class-woocommerce-hpos-orders.php index 55986105ea373..13a892dea24c2 100644 --- a/projects/packages/sync/src/modules/class-woocommerce-hpos-orders.php +++ b/projects/packages/sync/src/modules/class-woocommerce-hpos-orders.php @@ -145,7 +145,7 @@ public function init_full_sync_listeners( $callable ) { */ public function init_before_send() { // Full sync. - add_filter( 'jetpack_sync_before_send_jetpack_full_sync_woocommerce_hpos_orders', array( $this, 'expand_order_objects' ) ); + add_filter( 'jetpack_sync_before_send_jetpack_full_sync_woocommerce_hpos_orders', array( $this, 'build_full_sync_action_array' ) ); } /** @@ -228,8 +228,10 @@ public function get_objects_by_id( $object_type, $ids ) { * @param array $args List of order IDs. * * @return array + * @deprecated since $$next-version$$ */ public function expand_order_objects( $args ) { + _deprecated_function( __METHOD__, 'next-version' ); list( $order_ids, $previous_end ) = $args; return array( 'orders' => $this->get_objects_by_id( 'order', $order_ids ), @@ -237,6 +239,23 @@ public function expand_order_objects( $args ) { ); } + /** + * Build the full sync action object. + * + * @access public + * + * @param array $args An array with filtered objects and previous end. + * + * @return array An array with orders and previous end. + */ + public function build_full_sync_action_array( $args ) { + list( $filtered_orders, $previous_end ) = $args; + return array( + 'orders' => $filtered_orders['objects'], + 'previous_end' => $previous_end, + ); + } + /** * Retrieve order data by its ID. * @@ -503,4 +522,47 @@ public function get_where_sql( $config ) { $where_sql = $wpdb->prepare( "type IN ( $order_type_placeholder )", $order_types ); return "{$parent_where} AND {$where_sql}"; } + + /** + * Given the Module Configuration and Status return the next chunk of items to send. + * This function also expands the posts and metadata and filters them based on the maximum size constraints. + * + * @param array $config This module Full Sync configuration. + * @param array $status This module Full Sync status. + * @param int $chunk_size Chunk size. + * + * @return array + */ + public function get_next_chunk( $config, $status, $chunk_size ) { + + $order_ids = parent::get_next_chunk( $config, $status, $chunk_size ); + + if ( empty( $order_ids ) ) { + return array(); + } + + $orders = $this->get_objects_by_id( 'order', $order_ids ); + + // If no orders were fetched, make sure to return the expected structure so that status is updated correctly. + if ( empty( $orders ) ) { + return array( + 'object_ids' => $order_ids, + 'objects' => array(), + ); + } + + // Filter the orders based on the maximum size constraints. We don't need to filter metadata here since we don't sync it for hpos. + list( $filtered_order_ids, $filtered_orders, ) = $this->filter_objects_and_metadata_by_size( + 'order', + $orders, + array(), + 0, + self::MAX_SIZE_FULL_SYNC + ); + + return array( + 'object_ids' => $filtered_order_ids, + 'objects' => $filtered_orders, + ); + } } diff --git a/projects/packages/sync/src/modules/class-woocommerce.php b/projects/packages/sync/src/modules/class-woocommerce.php index 2833896dda638..03553d0c7779c 100644 --- a/projects/packages/sync/src/modules/class-woocommerce.php +++ b/projects/packages/sync/src/modules/class-woocommerce.php @@ -221,7 +221,7 @@ public function get_full_sync_actions() { */ public function init_before_send() { // Full sync. - add_filter( 'jetpack_sync_before_send_jetpack_full_sync_woocommerce_order_items', array( $this, 'expand_order_item_ids' ) ); + add_filter( 'jetpack_sync_before_send_jetpack_full_sync_woocommerce_order_items', array( $this, 'build_full_sync_action_array' ) ); } /** @@ -266,14 +266,17 @@ public function action_woocommerce_remove_order_items( WC_Order $order, $type ) * * @param array $args The hook arguments. * @return array $args Expanded order items with meta. + * @deprecated since $$next-version$$ */ public function expand_order_item_ids( $args ) { + _deprecated_function( __METHOD__, '$$next-version$$' ); $order_item_ids = $args[0]; global $wpdb; $order_item_ids_sql = implode( ', ', array_map( 'intval', $order_item_ids ) ); + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching $order_items = $wpdb->get_results( // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared "SELECT * FROM $this->order_item_table_name WHERE order_item_id IN ( $order_item_ids_sql )" @@ -284,7 +287,6 @@ public function expand_order_item_ids( $args ) { $this->get_metadata( $order_item_ids, 'order_item', static::$order_item_meta_whitelist ), ); } - /** * Extract the full order item from the database by its ID. * @@ -644,13 +646,14 @@ public function get_objects_by_id( $object_type, $ids ) { /** * Returns a list of order_item objects by their IDs. * - * @param array $ids List of order_item IDs to fetch. + * @param array $ids List of order_item IDs to fetch. + * @param string $order Either 'ASC' or 'DESC'. * * @access public * * @return array|object|null */ - public function get_order_item_by_ids( $ids ) { + public function get_order_item_by_ids( $ids, $order = '' ) { global $wpdb; if ( ! is_array( $ids ) ) { @@ -668,8 +671,77 @@ public function get_order_item_by_ids( $ids ) { $placeholders = implode( ',', array_fill( 0, count( $ids ), '%d' ) ); $query = "SELECT * FROM {$this->order_item_table_name} WHERE order_item_id IN ( $placeholders )"; + if ( ! empty( $order ) && in_array( $order, array( 'ASC', 'DESC' ), true ) ) { + $query .= " ORDER BY order_item_id $order"; + } // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared return $wpdb->get_results( $wpdb->prepare( $query, $ids ), ARRAY_A ); } + + /** + * Build the full sync action object for WooCommerce order items. + * + * @access public + * + * @param array $args An array with the order items and the previous end. + * + * @return array An array with the order items, order item meta and the previous end. + */ + public function build_full_sync_action_array( $args ) { + list( $filtered_order_items, $previous_end ) = $args; + return array( + 'order_items' => $filtered_order_items['objects'], + 'order_item_meta' => $filtered_order_items['meta'], + 'previous_end' => $previous_end, + ); + } + + /** + * Given the Module Configuration and Status return the next chunk of items to send. + * This function also expands the posts and metadata and filters them based on the maximum size constraints. + * + * @param array $config This module Full Sync configuration. + * @param array $status This module Full Sync status. + * @param int $chunk_size Chunk size. + * + * @return array + */ + public function get_next_chunk( $config, $status, $chunk_size ) { + + $order_item_ids = parent::get_next_chunk( $config, $status, $chunk_size ); + + if ( empty( $order_item_ids ) ) { + return array(); + } + // Fetch the order items in DESC order for the next chunk logic to work. + $order_items = $this->get_order_item_by_ids( $order_item_ids, 'DESC' ); + + // If no orders were fetched, make sure to return the expected structure so that status is updated correctly. + if ( empty( $order_items ) ) { + return array( + 'object_ids' => $order_item_ids, + 'objects' => array(), + ); + } + + // Get the order IDs from the orders that were fetched. + $fetched_order_item_ids = wp_list_pluck( $order_items, 'order_item_id' ); + $metadata = $this->get_metadata( $fetched_order_item_ids, 'order_item', static::$order_item_meta_whitelist ); + + // Filter the orders and metadata based on the maximum size constraints. + list( $filtered_order_item_ids, $filtered_order_items, $filtered_order_items_metadata ) = $this->filter_objects_and_metadata_by_size( + 'order_item', + $order_items, + $metadata, + self::MAX_META_LENGTH, + self::MAX_SIZE_FULL_SYNC + ); + + return array( + 'object_ids' => $filtered_order_item_ids, + 'objects' => $filtered_order_items, + 'meta' => $filtered_order_items_metadata, + ); + } } diff --git a/projects/packages/sync/tests/php/modules/test-module.php b/projects/packages/sync/tests/php/modules/test-module.php index 1692173c2dcb7..7126f59e18a8d 100644 --- a/projects/packages/sync/tests/php/modules/test-module.php +++ b/projects/packages/sync/tests/php/modules/test-module.php @@ -38,12 +38,16 @@ protected function setUp(): void { /** * Test filter_objects_and_metadata_by_size with no constraints of size */ - public function filter_objects_and_metadata_by_size_no_constraints() { + public function test_filter_objects_and_metadata_by_size_no_constraints() { $objects = array( (object) array( 'ID' => 1, 'module_title' => 'Post 1', ), + (object) array( + 'ID' => 2, + 'module_title' => 'Post 2', + ), ); $metadata = array( (object) array( @@ -54,9 +58,42 @@ public function filter_objects_and_metadata_by_size_no_constraints() { $result = $this->module_instance->filter_objects_and_metadata_by_size( 'module', $objects, $metadata, PHP_INT_MAX, PHP_INT_MAX ); - $this->assertCount( 1, $result[0] ); - $this->assertCount( 1, $result[1] ); + $this->assertCount( 2, $result[0] ); + $this->assertCount( 2, $result[1] ); + $this->assertCount( 1, $result[2] ); + $this->assertSame( array( '1', '2' ), $result[0] ); + $this->assertSame( $objects, $result[1] ); + $this->assertSame( $metadata, $result[2] ); + } + + /** + * Test filter_objects_and_metadata_by_size with no constraints of size objects being an array + */ + public function test_filter_objects_and_metadata_by_size_no_constraints_object_being_array() { + $objects = array( + array( + 'ID' => 1, + 'module_title' => 'Element 1', + ), + array( + 'ID' => 2, + 'module_title' => 'Element 2', + ), + ); + $metadata = array( + (object) array( + 'module_id' => 1, + 'meta_value' => 'meta1', + ), + ); + + $result = $this->module_instance->filter_objects_and_metadata_by_size( 'module', $objects, $metadata, PHP_INT_MAX, PHP_INT_MAX ); + $this->assertCount( 2, $result[0] ); + $this->assertCount( 2, $result[1] ); $this->assertCount( 1, $result[2] ); + $this->assertSame( array( '1', '2' ), $result[0] ); + $this->assertSame( $objects, $result[1] ); + $this->assertSame( $metadata, $result[2] ); } /** * Test filter_objects_and_metadata_by_size with constraints of size for metadata diff --git a/projects/plugins/jetpack/changelog/update-full-sync-woo-dynamic b/projects/plugins/jetpack/changelog/update-full-sync-woo-dynamic new file mode 100644 index 0000000000000..0ee14dc3b0e99 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-full-sync-woo-dynamic @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Sync: Full-sync chunking logic dynamic for Woo modules diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-comments.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-comments.php index 47f62316c5f7a..1048ad5c4f087 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-comments.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-comments.php @@ -634,7 +634,7 @@ public function test_post_comments_blacklisted_post_type() { } /** - * Verify metadata meta_value is limited based on MAX_COMMENT_META_LENGTH. + * Verify metadata meta_value is limited based on MAX_META_LENGTH. */ public function test_metadata_limit() { @@ -642,13 +642,13 @@ public function test_metadata_limit() { (object) array( 'comment_id' => $this->comment->comment_ID, 'meta_key' => 'test_key', - 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Comments::MAX_COMMENT_META_LENGTH - 1 ), + 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Comments::MAX_META_LENGTH - 1 ), 'meta_id' => 1, ), (object) array( 'comment_id' => $this->comment->comment_ID, 'meta_key' => 'test_key', - 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Comments::MAX_COMMENT_META_LENGTH ), + 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Comments::MAX_META_LENGTH ), 'meta_id' => 2, ), @@ -660,7 +660,7 @@ public function test_metadata_limit() { 'comment', array( $this->comment ), $metadata, - Automattic\Jetpack\Sync\Modules\Posts::MAX_POST_META_LENGTH, + Automattic\Jetpack\Sync\Modules\Posts::MAX_META_LENGTH, Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC ); @@ -723,7 +723,7 @@ public function test_filter_objects_and_metadata_by_size_returns_all_comments_an 'comment', $comments, $metadata, - Automattic\Jetpack\Sync\Modules\Comments::MAX_COMMENT_META_LENGTH, + Automattic\Jetpack\Sync\Modules\Comments::MAX_META_LENGTH, Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC ); @@ -745,13 +745,13 @@ public function test_filter_objects_and_metadata_by_size_returns_only_one_commen $comments = array( $comment_1, $comment_2 ); - $metadata_items_number = Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC / Automattic\Jetpack\Sync\Modules\Comments::MAX_COMMENT_META_LENGTH; + $metadata_items_number = Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC / Automattic\Jetpack\Sync\Modules\Comments::MAX_META_LENGTH; $comment_metadata_1 = array_map( function ( $x ) use ( $comment_id_1 ) { return (object) array( 'comment_id' => $comment_id_1, 'meta_key' => 'test_key', - 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Comments::MAX_COMMENT_META_LENGTH - 1 ), + 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Comments::MAX_META_LENGTH - 1 ), 'meta_id' => $x, ); }, @@ -775,7 +775,7 @@ function ( $x ) use ( $comment_id_1 ) { 'comment', $comments, $metadata, - Automattic\Jetpack\Sync\Modules\Comments::MAX_COMMENT_META_LENGTH, + Automattic\Jetpack\Sync\Modules\Comments::MAX_META_LENGTH, Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC ); diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-meta.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-meta.php index eaa68b6d052e6..a354a07cd4247 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-meta.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-meta.php @@ -34,7 +34,7 @@ public function set_up() { * Verify that meta_values below size limit are not tuncated. */ public function test_meta_adheres_size_limit_max() { - $meta_test_value = str_repeat( 'X', Posts::MAX_POST_META_LENGTH - 1 ); + $meta_test_value = str_repeat( 'X', Posts::MAX_META_LENGTH - 1 ); update_post_meta( $this->post_id, $this->whitelisted_post_meta, $meta_test_value ); $this->sender->do_sync(); @@ -47,7 +47,7 @@ public function test_meta_adheres_size_limit_max() { * Verify that meta_values above size limit are truncated. */ public function test_meta_adheres_size_limit_exceeded() { - $meta_test_value = str_repeat( 'X', Posts::MAX_POST_META_LENGTH ); + $meta_test_value = str_repeat( 'X', Posts::MAX_META_LENGTH ); update_post_meta( $this->post_id, $this->whitelisted_post_meta, $meta_test_value ); $this->sender->do_sync(); @@ -339,7 +339,7 @@ public function test_get_object_by_id_multiple_meta_same_object_id_and_key() { * Verify that meta_values above size limit are truncated in get_object_by_id */ public function test_get_object_by_id_size_limit_exceeded() { - $meta_test_value = str_repeat( 'X', Posts::MAX_POST_META_LENGTH ); + $meta_test_value = str_repeat( 'X', Posts::MAX_META_LENGTH ); update_post_meta( $this->post_id, $this->whitelisted_post_meta, $meta_test_value ); $module = Modules::get_module( 'meta' ); @@ -352,7 +352,7 @@ public function test_get_object_by_id_size_limit_exceeded() { * Verify that meta_values below size limit are not truncated in get_object_by_id */ public function test_get_object_by_id_size_limit_max() { - $meta_test_value = str_repeat( 'X', Posts::MAX_POST_META_LENGTH - 1 ); + $meta_test_value = str_repeat( 'X', Posts::MAX_META_LENGTH - 1 ); update_post_meta( $this->post_id, $this->whitelisted_post_meta, $meta_test_value ); $module = Modules::get_module( 'meta' ); @@ -400,7 +400,7 @@ public function test_get_objects_by_id() { * Verify that meta_values above size limit are truncated in get_objects_by_id. */ public function test_get_objects_by_id_size_limit_exceeded() { - $meta_test_value = str_repeat( 'X', Posts::MAX_POST_META_LENGTH ); + $meta_test_value = str_repeat( 'X', Posts::MAX_META_LENGTH ); update_post_meta( $this->post_id, $this->whitelisted_post_meta, $meta_test_value ); $module = Modules::get_module( 'meta' ); diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-posts.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-posts.php index 234ba16f251fc..5bed85260db04 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-posts.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-posts.php @@ -1519,7 +1519,7 @@ public function unregister_post_type() { } /** - * Verify metadata meta_value is limited based on MAX_POST_META_LENGTH. + * Verify metadata meta_value is limited based on MAX_META_LENGTH. */ public function test_metadata_limit() { @@ -1527,13 +1527,13 @@ public function test_metadata_limit() { (object) array( 'post_id' => $this->post_id, 'meta_key' => 'test_key', - 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Posts::MAX_POST_META_LENGTH - 1 ), + 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Posts::MAX_META_LENGTH - 1 ), 'meta_id' => 1, ), (object) array( 'post_id' => $this->post_id, 'meta_key' => 'test_key', - 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Posts::MAX_POST_META_LENGTH ), + 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Posts::MAX_META_LENGTH ), 'meta_id' => 2, ), @@ -1545,7 +1545,7 @@ public function test_metadata_limit() { 'post', array( $this->post ), $metadata, - Automattic\Jetpack\Sync\Modules\Posts::MAX_POST_META_LENGTH, + Automattic\Jetpack\Sync\Modules\Posts::MAX_META_LENGTH, Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC ); @@ -1609,7 +1609,7 @@ public function test_filter_objects_and_metadata_by_size_returns_all_posts_and_m 'post', $posts, $metadata, - Automattic\Jetpack\Sync\Modules\Posts::MAX_POST_META_LENGTH, + Automattic\Jetpack\Sync\Modules\Posts::MAX_META_LENGTH, Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC ); @@ -1631,13 +1631,13 @@ public function test_filter_objects_and_metadata_by_size_returns_only_one_post() $posts = array( $post_1, $post_2 ); - $metadata_items_number = Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC / Automattic\Jetpack\Sync\Modules\Posts::MAX_POST_META_LENGTH; + $metadata_items_number = Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC / Automattic\Jetpack\Sync\Modules\Posts::MAX_META_LENGTH; $post_metadata_1 = array_map( function ( $x ) use ( $post_id_1 ) { return (object) array( 'post_id' => $post_id_1, 'meta_key' => 'test_key', - 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Posts::MAX_POST_META_LENGTH - 1 ), + 'meta_value' => str_repeat( 'X', Automattic\Jetpack\Sync\Modules\Posts::MAX_META_LENGTH - 1 ), 'meta_id' => $x, ); }, @@ -1662,7 +1662,7 @@ function ( $x ) use ( $post_id_1 ) { 'post', $posts, $metadata, - Automattic\Jetpack\Sync\Modules\Posts::MAX_POST_META_LENGTH, + Automattic\Jetpack\Sync\Modules\Posts::MAX_META_LENGTH, Automattic\Jetpack\Sync\Modules\Posts::MAX_SIZE_FULL_SYNC ); From 736500ab3f6120152c06c4184b3f4ed29a812d11 Mon Sep 17 00:00:00 2001 From: Liam Sarsfield <43409125+LiamSarsfield@users.noreply.github.com> Date: Thu, 6 Feb 2025 09:15:49 +0000 Subject: [PATCH 389/420] DataSync: Cancel all previous mutations upon new mutation of same key (#41472) * Add React Query devtools * changelog * Remove unnecessary argument * Re-add line that was unnecessarily removed * Cancel all previous mutations upon new mutation of same key * Refine how abortControllers are fetched * changelog * Update handling of abortController state management * Don't use type casting --------- Co-authored-by: Peter Petrov --- ...ync-client-boost-settings-racing-condition | 4 ++ .../src/DataSyncHooks.ts | 43 ++++++++++++------- ...ync-client-boost-settings-racing-condition | 4 ++ 3 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 projects/js-packages/react-data-sync-client/changelog/fix-react-data-sync-client-boost-settings-racing-condition create mode 100644 projects/plugins/boost/changelog/fix-react-data-sync-client-boost-settings-racing-condition diff --git a/projects/js-packages/react-data-sync-client/changelog/fix-react-data-sync-client-boost-settings-racing-condition b/projects/js-packages/react-data-sync-client/changelog/fix-react-data-sync-client-boost-settings-racing-condition new file mode 100644 index 0000000000000..ebde050479cdb --- /dev/null +++ b/projects/js-packages/react-data-sync-client/changelog/fix-react-data-sync-client-boost-settings-racing-condition @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix potential race condition if multiple requests are triggered diff --git a/projects/js-packages/react-data-sync-client/src/DataSyncHooks.ts b/projects/js-packages/react-data-sync-client/src/DataSyncHooks.ts index dc82d51bbda79..c4ceab1147b44 100644 --- a/projects/js-packages/react-data-sync-client/src/DataSyncHooks.ts +++ b/projects/js-packages/react-data-sync-client/src/DataSyncHooks.ts @@ -9,7 +9,7 @@ import { QueryClientProvider, } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import React, { useRef, useEffect } from 'react'; +import React, { useEffect } from 'react'; import { z } from 'zod'; import { DataSync } from './DataSync'; import { DataSyncError } from './DataSyncError'; @@ -92,10 +92,6 @@ export function useDataSync< config: DataSyncConfig< Schema, Value > = {}, params: Record< string, string | number > = {} ): DataSyncHook< Schema, Value > { - // AbortController is used to track rapid value mutations - // and will cancel in-flight requests and prevent - // the optimistic value from being reverted. - const abortController = useRef< AbortController | null >( null ); const datasync = new DataSync( namespace, key, schema ); const queryKey = buildQueryKey( key, params ); @@ -126,6 +122,23 @@ export function useDataSync< }, }; + // AbortController is used to track rapid value mutations + // and will cancel in-flight requests and prevent + // the optimistic value from being reverted. + const getAbortController = () => { + const defaults = queryClient.getMutationDefaults( queryKey ); + return defaults?.meta?.abortController instanceof AbortController + ? defaults.meta.abortController + : undefined; + }; + + const setAbortController = ( abortController: AbortController ) => { + queryClient.setMutationDefaults( queryKey, { + meta: { + abortController, + }, + } ); + }; /** * Defaults for `useMutation`: * - `mutationKey` is the key of the value that's being synced. @@ -137,19 +150,19 @@ export function useDataSync< * @see https://tanstack.com/query/v5/docs/react/guides/optimistic-updates */ const mutationConfigDefaults = { - mutationKey: queryKey, - + meta: { + abortController: null, + }, // Mutation function that's called when the mutation is triggered - mutationFn: value => datasync.SET( value, params, abortController.current.signal ), - + mutationFn: value => datasync.SET( value, params, getAbortController()?.signal ), // Mutation actions that occur before the mutationFn is called onMutate: async data => { - // If there's an existing mutation in progress, cancel it - if ( abortController.current ) { - abortController.current.abort(); + // If there's any existing mutations in progress with the same key, cancel them. + const existingAbortController = getAbortController(); + if ( existingAbortController ) { + existingAbortController.abort(); } - // Create a new AbortController for the upcoming request - abortController.current = new AbortController(); + setAbortController( new AbortController() ); const value = schema.parse( data ); @@ -182,7 +195,7 @@ export function useDataSync< onSettled: ( _, error ) => { // Clear the abortController on either success or failure that is not an abort if ( ! error || ( error instanceof DataSyncError && ! error.isAborted() ) ) { - abortController.current = null; + setAbortController( null ); } }, }; diff --git a/projects/plugins/boost/changelog/fix-react-data-sync-client-boost-settings-racing-condition b/projects/plugins/boost/changelog/fix-react-data-sync-client-boost-settings-racing-condition new file mode 100644 index 0000000000000..55565a8e4bab2 --- /dev/null +++ b/projects/plugins/boost/changelog/fix-react-data-sync-client-boost-settings-racing-condition @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +UI: Fix UI discrepancy in Boost settings page upon toggling multiple Modules at same time. From b9aaa226a47fb402ded0f5edf66eef970e4cd70c Mon Sep 17 00:00:00 2001 From: Adnan Haque <3737780+haqadn@users.noreply.github.com> Date: Thu, 6 Feb 2025 04:16:16 -0500 Subject: [PATCH 390/420] Boost: Add a redirect for plugin rating (#41556) --- .../features/speed-score/pop-out/pop-out.tsx | 20 ++++++++++++++----- .../boost/changelog/add-review-click-tracking | 4 ++++ 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 projects/plugins/boost/changelog/add-review-click-tracking diff --git a/projects/plugins/boost/app/assets/src/js/features/speed-score/pop-out/pop-out.tsx b/projects/plugins/boost/app/assets/src/js/features/speed-score/pop-out/pop-out.tsx index 715b2d3e17318..0b81481bceac3 100644 --- a/projects/plugins/boost/app/assets/src/js/features/speed-score/pop-out/pop-out.tsx +++ b/projects/plugins/boost/app/assets/src/js/features/speed-score/pop-out/pop-out.tsx @@ -28,7 +28,7 @@ const fasterMessage: ScoreChangeMessage = { title: __( 'Your site got faster', 'jetpack-boost' ), body:

    { __( `That's great! If you’re happy, why not rate Boost?`, 'jetpack-boost' ) }

    , cta: __( 'Rate the Plugin', 'jetpack-boost' ), - ctaLink: 'https://wordpress.org/support/plugin/jetpack-boost/reviews/#new-post', + ctaLink: getRedirectUrl( 'boost-rate-plugin' ), }; const slowerMessage: ScoreChangeMessage = { @@ -77,13 +77,23 @@ function PopOut( { scoreChange }: Props ) { const hideAlert = () => setClose( true ); + const scoreDirection = scoreChange && scoreChange > 0 ? 'up' : 'down'; + useEffect( () => { if ( hasScoreChanged && ! isDismissed && ! isClosed ) { recordBoostEvent( 'speed_score_alert_shown', { - score_direction: scoreChange > 0 ? 'up' : 'down', + score_direction: scoreDirection, } ); } - }, [ hasScoreChanged, scoreChange, isDismissed, isClosed ] ); + }, [ hasScoreChanged, isDismissed, isClosed, scoreDirection ] ); + + const handleCtaClick = () => { + recordBoostEvent( 'speed_score_alert_cta_clicked', { + score_direction: scoreDirection, + } ); + + dismissAlert(); + }; const animationStyles = useSpring( { from: { @@ -113,7 +123,7 @@ function PopOut( { scoreChange }: Props ) { href={ message?.ctaLink } target="_blank" rel="noreferrer" - onClick={ dismissAlert } + onClick={ handleCtaClick } > { message.cta }
    @@ -122,7 +132,7 @@ function PopOut( { scoreChange }: Props ) { variant="link" size="small" className={ styles[ 'dismiss-button' ] } - onClick={ dismissAlert } + onClick={ handleCtaClick } > { __( 'Do not show me again', 'jetpack-boost' ) } diff --git a/projects/plugins/boost/changelog/add-review-click-tracking b/projects/plugins/boost/changelog/add-review-click-tracking new file mode 100644 index 0000000000000..d5e8377fde011 --- /dev/null +++ b/projects/plugins/boost/changelog/add-review-click-tracking @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Speed Scores: add tracking for speed score pop-out CTA. From 2b9524908b4a2cb7f91fac9a3c2b12fec67b0a00 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 6 Feb 2025 11:02:46 +0100 Subject: [PATCH 391/420] Coming Soon Page: Design update (#41499) --- .../changelog/update-coming-soon-design | 4 + .../coming-soon/fallback-coming-soon-page.php | 122 +++++++++--------- 2 files changed, 66 insertions(+), 60 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-coming-soon-design diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-coming-soon-design b/projects/packages/jetpack-mu-wpcom/changelog/update-coming-soon-design new file mode 100644 index 0000000000000..1f371c6b015b3 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-coming-soon-design @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Updates the design of the coming soon page. diff --git a/projects/packages/jetpack-mu-wpcom/src/features/coming-soon/fallback-coming-soon-page.php b/projects/packages/jetpack-mu-wpcom/src/features/coming-soon/fallback-coming-soon-page.php index 0027402e81304..07f59cfc52e9e 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/coming-soon/fallback-coming-soon-page.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/coming-soon/fallback-coming-soon-page.php @@ -94,45 +94,31 @@ function get_onboarding_url() { html { /* No admin bar nor marketing bar on this page */ margin-top: 0 !important; + height: 100%; } .wpcom-coming-soon-body { background: #3858e9; color: #fff; + font-family: inter-variable-web,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; height: 100%; + display: flex; + flex-direction: column; + } + .wpcom-coming-soon-outer { display: grid; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", sans-serif; grid-gap: 24px; -ms-grid-columns: (1fr)[1]; grid-template-columns: repeat(1, 1fr); - padding-right: 24px; - padding-left: 24px; + flex-grow: 1; } .wpcom-coming-soon-inner { - align-items: flex-end; display: flex; - flex-wrap: wrap; + align-items: center; -ms-grid-column: 1; grid-column-start: 1; -ms-grid-column-span: 1; grid-column-end: span 1; - height: 100vh; - justify-content: space-between; - } - @supports (height: 100dvh) { - .wpcom-coming-soon-inner { - height: 100dvh; - } - } - .wpcom-coming-soon-main, - .wpcom-coming-soon-marketing { - flex: 0 0 100%; - } - .wpcom-coming-soon-name { - color: #fff; - font-size: 19px; - line-height: 1.3; - margin-bottom: 8px; - padding: 0; - text-align: left; + padding-right: 24px; + padding-left: 24px; } .wpcom-coming-soon-description { color: #fff; @@ -141,12 +127,19 @@ function get_onboarding_url() { padding: 0; text-align: left; } - .wpcom-coming-soon-description, - .wpcom-coming-soon-marketing-copy-text { + .wpcom-coming-soon-description { font-family: Georgia, "Times New Roman", Times, serif; } + .wpcom-coming-soon-description span { + display: block; + } + .wpcom-coming-soon-description span:last-child { + padding-left: 60px; + } .wpcom-coming-soon-marketing { padding-bottom: 8px; + padding-right: 24px; + padding-left: 24px; } .wpcom-coming-soon-marketing-copy { display: flex; @@ -166,13 +159,13 @@ function get_onboarding_url() { } .wpcom-coming-soon-marketing-buttons .button { background: #fff; - border-radius: 2px; + border-radius: 4px; border: 1px solid #fff; box-sizing: border-box; - color: #117ac9; + color: #3858e9; display: block; font-size: 16px; - font-weight: 700; + font-weight: 500; line-height: 21px; padding: 13px; text-align: center; @@ -196,8 +189,7 @@ function get_onboarding_url() { margin: 1em 0; } @media screen and ( min-width: 660px ) { - .wpcom-coming-soon-description, - .wpcom-coming-soon-marketing-copy-text { + .wpcom-coming-soon-description { font-family: Recoleta, Georgia, "Times New Roman", Times, serif; } .wpcom-coming-soon-name { @@ -223,11 +215,9 @@ function get_onboarding_url() { margin: 0; } .wpcom-coming-soon-marketing-buttons p:nth-child(2) { - margin-left: 8px; + margin-left: 16px; } .wpcom-coming-soon-marketing-buttons .button { - font-size: 13px; - padding: 7px 13px; min-width: 145px; } } @@ -250,7 +240,7 @@ function get_onboarding_url() { } } @media screen and ( min-width: 1040px ) { - .wpcom-coming-soon-body { + .wpcom-coming-soon-outer { -ms-grid-columns: (1fr)[12]; grid-template-columns: repeat(12, 1fr); } @@ -262,39 +252,51 @@ function get_onboarding_url() { } .wpcom-coming-soon-marketing { padding-bottom: 32px; + padding-left: 32px; + padding-right: 32px; } } -
    -
    -
    -
    +
    +
    +
    +
    + A bright idea, coming soon', 'jetpack-mu-wpcom' ), + array( + 'span' => array(), + ) + ); + ?> +
    +
    - From c43ad6ba8c0504da8dd207a103a93b21c93b910c Mon Sep 17 00:00:00 2001 From: Xavier Lozano Carreras <8511199+xavier-lc@users.noreply.github.com> Date: Thu, 6 Feb 2025 11:32:42 +0100 Subject: [PATCH 392/420] Post editor: Deprecate welcome guide in favor of the core one (#41258) --- ...ate-welcome-guide-in-favor-of-the-core-one | 4 + .../src/block-editor-nux.js | 85 ---- .../src/disable-core-welcome-guide.js | 38 +- .../src/draft-post-modal/index.js | 50 --- .../src/draft-post-modal/style.scss | 17 - .../src/welcome-modal/style.scss | 208 --------- .../src/welcome-modal/wpcom-nux.js | 155 ------- .../src/welcome-tour/get-editor-type.ts | 41 -- .../src/welcome-tour/style-tour.scss | 51 --- .../src/welcome-tour/test/tour-steps.test.ts | 110 ----- .../src/welcome-tour/tour-launch.jsx | 246 ----------- .../src/welcome-tour/use-tour-steps.tsx | 393 ------------------ ...ate-welcome-guide-in-favor-of-the-core-one | 4 + ...ate-welcome-guide-in-favor-of-the-core-one | 4 + 14 files changed, 20 insertions(+), 1386 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/draft-post-modal/index.js delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/draft-post-modal/style.scss delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-modal/style.scss delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-modal/wpcom-nux.js delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/get-editor-type.ts delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/style-tour.scss delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/test/tour-steps.test.ts delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/tour-launch.jsx delete mode 100644 projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/use-tour-steps.tsx create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one create mode 100644 projects/plugins/wpcomsh/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one diff --git a/projects/packages/jetpack-mu-wpcom/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one b/projects/packages/jetpack-mu-wpcom/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one new file mode 100644 index 0000000000000..e16bfa30dd5c7 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one @@ -0,0 +1,4 @@ +Significance: minor +Type: removed + +Stop using the custom welcome tour when the user creates a post for the first time, showing the core welcome guide instead diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/block-editor-nux.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/block-editor-nux.js index 1dd45c58ac09a..707e6570802d4 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/block-editor-nux.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/block-editor-nux.js @@ -1,105 +1,20 @@ -import { LocaleProvider } from '@automattic/i18n-utils'; -import { Guide, GuidePage } from '@wordpress/components'; -import { useDispatch, useSelect } from '@wordpress/data'; -import { useEffect, useState } from '@wordpress/element'; -import { applyFilters } from '@wordpress/hooks'; import { registerPlugin } from '@wordpress/plugins'; -import { getQueryArg } from '@wordpress/url'; -import { useCanvasMode } from '../../../common/hooks'; import { HasSeenSellerCelebrationModalProvider, HasSeenVideoCelebrationModalProvider, ShouldShowFirstPostPublishedModalProvider, } from '../../../common/tour-kit'; -import DraftPostModal from './draft-post-modal'; import FirstPostPublishedModal from './first-post-published-modal'; import PurchaseNotice from './purchase-notice'; import RecommendedTagsModal from './recommended-tags-modal'; import SellerCelebrationModal from './seller-celebration-modal'; -import { DEFAULT_VARIANT, BLANK_CANVAS_VARIANT } from './store'; import VideoPressCelebrationModal from './video-celebration-modal'; -import WpcomNux from './welcome-modal/wpcom-nux'; -import LaunchWpcomWelcomeTour from './welcome-tour/tour-launch'; - -/** - * The WelcomeTour component - * @return {JSX.Element|null} The WelcomeTour component or null. - */ -function WelcomeTour() { - const [ showDraftPostModal ] = useState( - getQueryArg( window.location.href, 'showDraftPostModal' ) - ); - - const { show, isLoaded, variant, isManuallyOpened, isNewPageLayoutModalOpen } = useSelect( - select => { - const welcomeGuideStoreSelect = select( 'automattic/wpcom-welcome-guide' ); - const starterPageLayoutsStoreSelect = select( 'automattic/starter-page-layouts' ); - - return { - show: welcomeGuideStoreSelect.isWelcomeGuideShown(), - isLoaded: welcomeGuideStoreSelect.isWelcomeGuideStatusLoaded(), - variant: welcomeGuideStoreSelect.getWelcomeGuideVariant(), - isManuallyOpened: welcomeGuideStoreSelect.isWelcomeGuideManuallyOpened(), - isNewPageLayoutModalOpen: starterPageLayoutsStoreSelect?.isOpen(), // Handle the case where SPT is not initalized. - }; - }, - [] - ); - - const siteEditorCanvasMode = useCanvasMode(); - - const setOpenState = useDispatch( 'automattic/starter-page-layouts' )?.setOpenState; - - const { fetchWelcomeGuideStatus } = useDispatch( 'automattic/wpcom-welcome-guide' ); - - // On mount check if the WPCOM welcome guide status exists in state (from local storage), otherwise fetch it from the API. - useEffect( () => { - if ( ! isLoaded ) { - fetchWelcomeGuideStatus(); - } - }, [ fetchWelcomeGuideStatus, isLoaded ] ); - - const filteredShow = applyFilters( 'a8c.WpcomBlockEditorWelcomeTour.show', show ); - - if ( ! filteredShow || isNewPageLayoutModalOpen ) { - return null; - } - - // Hide the Welcome Tour when not in the edit mode. Note that canvas mode is available only in the site editor - if ( siteEditorCanvasMode && siteEditorCanvasMode !== 'edit' ) { - return null; - } - - // Open patterns panel before Welcome Tour if necessary (e.g. when using Blank Canvas theme) - // Do this only when Welcome Tour is not manually opened. - // NOTE: at the moment, 'starter-page-templates' assets are not loaded on /site-editor/ page so 'setOpenState' may be undefined - if ( variant === BLANK_CANVAS_VARIANT && ! isManuallyOpened && setOpenState ) { - setOpenState( 'OPEN_FOR_BLANK_CANVAS' ); - return null; - } - - if ( variant === DEFAULT_VARIANT ) { - return ( - - { showDraftPostModal ? : } - - ); - } - - // This case is redundant now and it will be cleaned up in a follow-up PR - if ( variant === 'modal' && Guide && GuidePage ) { - return ; - } - - return null; -} registerPlugin( 'wpcom-block-editor-nux', { render: () => ( - diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-welcome-guide.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-welcome-guide.js index ea3881b6f95ca..95cbdcfab8e09 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-welcome-guide.js +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/disable-core-welcome-guide.js @@ -1,35 +1,13 @@ import { select, dispatch, subscribe } from '@wordpress/data'; -// Disable welcome guide features from core. -const unsubscribe = subscribe( () => { - if ( select( 'core/edit-post' )?.isFeatureActive( 'welcomeGuide' ) ) { - dispatch( 'core/edit-post' ).toggleFeature( 'welcomeGuide' ); - unsubscribe(); - } - if ( select( 'core/edit-site' )?.isFeatureActive( 'welcomeGuide' ) ) { - dispatch( 'core/edit-site' ).toggleFeature( 'welcomeGuide' ); - unsubscribe(); - } -} ); +const unsubscribeShowWelcomeGuide = subscribe( () => { + // On mounting, the welcomeGuide feature is turned on by default. This opens the welcome guide despite `welcomeGuideStatus` value. + // This check ensures that we only listen to `welcomeGuide` changes if the welcomeGuideStatus value is loaded and respected + if ( select( 'automattic/wpcom-welcome-guide' ).isWelcomeGuideStatusLoaded() ) { + dispatch( 'automattic/wpcom-welcome-guide' ).setShowWelcomeGuide( true, { + openedManually: true, + } ); -// Listen for these features being triggered to call dotcom welcome guide instead. -subscribe( () => { - if ( select( 'core/edit-post' )?.isFeatureActive( 'welcomeGuide' ) ) { - dispatch( 'core/edit-post' ).toggleFeature( 'welcomeGuide' ); - // On mounting, the welcomeGuide feature is turned on by default. This opens the welcome guide despite `welcomeGuideStatus` value. - // This check ensures that we only listen to `welcomeGuide` changes if the welcomeGuideStatus value is loaded and respected - if ( select( 'automattic/wpcom-welcome-guide' ).isWelcomeGuideStatusLoaded() ) { - dispatch( 'automattic/wpcom-welcome-guide' ).setShowWelcomeGuide( true, { - openedManually: true, - } ); - } - } - if ( select( 'core/edit-site' )?.isFeatureActive( 'welcomeGuide' ) ) { - dispatch( 'core/edit-site' ).toggleFeature( 'welcomeGuide' ); - if ( select( 'automattic/wpcom-welcome-guide' ).isWelcomeGuideStatusLoaded() ) { - dispatch( 'automattic/wpcom-welcome-guide' ).setShowWelcomeGuide( true, { - openedManually: true, - } ); - } + unsubscribeShowWelcomeGuide(); } } ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/draft-post-modal/index.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/draft-post-modal/index.js deleted file mode 100644 index 62bade2379698..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/draft-post-modal/index.js +++ /dev/null @@ -1,50 +0,0 @@ -import { Button } from '@wordpress/components'; -import { useState } from '@wordpress/element'; -import { doAction, hasAction } from '@wordpress/hooks'; -import { __ } from '@wordpress/i18n'; -import draftPostImage from '../../../../assets/images/draft-post.svg'; -import { wpcomTrackEvent } from '../../../../common/tracks'; -import NuxModal from '../nux-modal'; -import './style.scss'; - -const CLOSE_EDITOR_ACTION = 'a8c.wpcom-block-editor.closeEditor'; - -const DraftPostModal = () => { - const homeUrl = `/home/${ window.location.hostname }`; - const [ isOpen, setIsOpen ] = useState( true ); - const closeModal = () => setIsOpen( false ); - const closeEditor = () => { - if ( hasAction( CLOSE_EDITOR_ACTION ) ) { - doAction( CLOSE_EDITOR_ACTION, homeUrl ); - } else { - window.location.href = `https://wordpress.com${ homeUrl }`; - } - }; - - return ( - - - - - } - onRequestClose={ closeModal } - onOpen={ () => wpcomTrackEvent( 'calypso_editor_wpcom_draft_post_modal_show' ) } - /> - ); -}; - -export default DraftPostModal; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/draft-post-modal/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/draft-post-modal/style.scss deleted file mode 100644 index 2317634ed12b7..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/draft-post-modal/style.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import "@wordpress/base-styles/breakpoints"; -@import "@wordpress/base-styles/mixins"; - -.wpcom-block-editor-draft-post-modal { - .components-modal__content { - @include break-small { - padding: 48px 128px; - } - } - - .wpcom-block-editor-nux-modal__image-container { - img { - width: 209px; - height: 95px; - } - } -} diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-modal/style.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-modal/style.scss deleted file mode 100644 index 5d16245ab222f..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-modal/style.scss +++ /dev/null @@ -1,208 +0,0 @@ -@import "@automattic/typography/styles/fonts"; - -$wpcom-modal-breakpoint: 660px; - -$wpcom-modal-padding-v: 40px; -$wpcom-modal-padding-h: 50px; -$wpcom-modal-content-min-height: 350px; -$wpcom-modal-footer-padding-v: 20px; -$wpcom-modal-footer-height: 30px + ( $wpcom-modal-footer-padding-v * 2 ); - -// Core modal style overrides -.wpcom-block-editor-nux { - &.components-modal__frame { - overflow: visible; - height: 65vh; - top: calc(17.5vh - #{$wpcom-modal-footer-height * 0.5}); - - @media (max-width: $wpcom-modal-breakpoint) { - width: 90vw; - min-width: 90vw; - left: 5vw; - right: 5vw; - } - - @media (min-width: $wpcom-modal-breakpoint) { - width: 720px; - height: $wpcom-modal-content-min-height; - top: calc(50% - #{$wpcom-modal-footer-height * 0.5}); - } - } - - .components-modal__header { - position: absolute; - max-width: 90%; - left: 5%; - @media (min-width: $wpcom-modal-breakpoint) { - display: none; - } - } - - .components-guide__container { - margin-top: 0; - } - - .components-guide__footer { - position: absolute; - width: 100%; - height: $wpcom-modal-footer-height; - bottom: $wpcom-modal-footer-height * -1; - left: 0; - padding: $wpcom-modal-footer-padding-v 0; - margin: 0; - display: flex; - justify-content: center; - background: var(--studio-white); - border-top: 1px solid #dcdcde; - - @media (min-width: $wpcom-modal-breakpoint) { - border-top: none; - } - } - - .components-guide__page { - position: absolute; - width: 100%; - max-width: 90vw; - height: 100%; - justify-content: start; - - @media (min-width: $wpcom-modal-breakpoint) { - max-width: 100%; - } - } - - .components-guide__page-control { - position: relative; - height: 0; - top: 100%; - overflow: visible; - margin: 0 auto; - z-index: 2; - - &::before { - display: inline-block; - content: ""; - height: $wpcom-modal-footer-height; - vertical-align: middle; - } - - li { - vertical-align: middle; - margin-bottom: 0; - } - - // Temporarily disable dots on mobile as alignment is wonky. - display: none; - @media (min-width: $wpcom-modal-breakpoint) { - display: block; - } - } -} - -.wpcom-block-editor-nux__page { - display: flex; - flex-direction: column-reverse; - justify-content: flex-end; - background: var(--studio-white); - width: 100%; - height: 90%; - max-width: 90vw; - - @media (min-width: $wpcom-modal-breakpoint) { - flex-direction: row; - justify-content: flex-start; - position: absolute; - max-width: 100%; - min-height: $wpcom-modal-content-min-height; - bottom: 0; - } -} - -.wpcom-block-editor-nux__text, -.wpcom-block-editor-nux__visual { - @media (min-width: $wpcom-modal-breakpoint) { - flex: 1 0 50%; - min-width: 290px; - } -} - -.wpcom-block-editor-nux__text { - padding: 0 25px 25px; - height: 60%; - - @media (min-width: $wpcom-modal-breakpoint) { - height: auto; - padding: $wpcom-modal-padding-v $wpcom-modal-padding-h; - } -} -.wpcom-block-editor-nux__visual { - height: 40%; - background: #1381d8; - text-align: center; - - @media (min-width: $wpcom-modal-breakpoint) { - height: auto; - } -} - -.wpcom-block-editor-nux__heading { - /* Gray / Gray 90 */ - color: #1d2327; - - font-family: $brand-serif; - font-weight: 400; - /* stylelint-disable-next-line declaration-property-unit-allowed-list */ - font-size: 32px; - line-height: 1.19; - letter-spacing: -0.4px; - - @media (min-width: $wpcom-modal-breakpoint) { - /* stylelint-disable-next-line declaration-property-unit-allowed-list */ - font-size: 42px; - } - - // TODO: remove this hack once the welcome editor deals better with - // overflowing text - body.locale-de & { - /* stylelint-disable-next-line declaration-property-unit-allowed-list */ - font-size: 24px; - - @media (min-width: $wpcom-modal-breakpoint) { - /* stylelint-disable-next-line declaration-property-unit-allowed-list */ - font-size: 28px; - } - } -} - -.wpcom-block-editor-nux__description { - /* stylelint-disable-next-line declaration-property-unit-allowed-list */ - font-size: 15px; - line-height: 22px; - - /* Gray / Gray 60 */ - color: #50575e; - - @media (min-width: $wpcom-modal-breakpoint) { - /* stylelint-disable-next-line declaration-property-unit-allowed-list */ - font-size: 17px; - line-height: 26px; - } -} - -.wpcom-block-editor-nux__image { - max-width: 100%; - height: auto; - flex: 1; - align-self: center; - - &.align-bottom { - align-self: flex-end; - } - - max-height: 100%; - - @media (min-width: $wpcom-modal-breakpoint) { - max-height: none; - } -} diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-modal/wpcom-nux.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-modal/wpcom-nux.js deleted file mode 100644 index 828df3697d86a..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-modal/wpcom-nux.js +++ /dev/null @@ -1,155 +0,0 @@ -import { Guide, GuidePage } from '@wordpress/components'; -import { useDispatch, useSelect } from '@wordpress/data'; -import { useEffect } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; -import blockPickerImage from '../../../../assets/images/block-picker.svg'; -import editorImage from '../../../../assets/images/editor.svg'; -import previewImage from '../../../../assets/images/preview.svg'; -import privateImage from '../../../../assets/images/private.svg'; -import { wpcomTrackEvent } from '../../../../common/tracks'; - -import './style.scss'; - -/** - * The nux component. - * @return {JSX.Element} The WpcomNux component or null. - */ -function WpcomNux() { - const { show, isNewPageLayoutModalOpen, isManuallyOpened } = useSelect( select => ( { - show: select( 'automattic/wpcom-welcome-guide' ).isWelcomeGuideShown(), - isNewPageLayoutModalOpen: - select( 'automattic/starter-page-layouts' ) && // Handle the case where SPT is not initalized. - select( 'automattic/starter-page-layouts' ).isOpen(), - isManuallyOpened: select( 'automattic/wpcom-welcome-guide' ).isWelcomeGuideManuallyOpened(), - } ) ); - - const { setShowWelcomeGuide } = useDispatch( 'automattic/wpcom-welcome-guide' ); - - // Track opening of the welcome guide - useEffect( () => { - if ( show && ! isNewPageLayoutModalOpen ) { - wpcomTrackEvent( 'calypso_editor_wpcom_nux_open', { - is_gutenboarding: window.calypsoifyGutenberg?.isGutenboarding, - is_manually_opened: isManuallyOpened, - } ); - } - }, [ isManuallyOpened, isNewPageLayoutModalOpen, show ] ); - - if ( ! show || isNewPageLayoutModalOpen ) { - return null; - } - - const dismissWpcomNux = () => { - wpcomTrackEvent( 'calypso_editor_wpcom_nux_dismiss', { - is_gutenboarding: window.calypsoifyGutenberg?.isGutenboarding, - } ); - setShowWelcomeGuide( false, { openedManually: false } ); - }; - - const nuxPages = getWpcomNuxPages(); - - return ( - - { nuxPages.map( ( nuxPage, index ) => ( - - ) ) } - - ); -} - -/** - * This function returns a collection of NUX slide data - * @return { Array } a collection of props - */ -function getWpcomNuxPages() { - return [ - { - heading: __( 'Welcome to your website', 'jetpack-mu-wpcom' ), - description: __( - 'Edit your homepage, add the pages you need, and change your site’s look and feel.', - 'jetpack-mu-wpcom' - ), - imgSrc: editorImage, - alignBottom: true, - }, - { - heading: __( 'Add or edit your content', 'jetpack-mu-wpcom' ), - description: __( - 'Edit the placeholder content we’ve started you off with, or click the plus sign to add more content.', - 'jetpack-mu-wpcom' - ), - imgSrc: blockPickerImage, - }, - { - heading: __( 'Preview your site as you go', 'jetpack-mu-wpcom' ), - description: __( - 'As you edit your site content, click “Preview” to see your site the way your visitors will.', - 'jetpack-mu-wpcom' - ), - imgSrc: previewImage, - alignBottom: true, - }, - { - heading: __( 'Hidden until you’re ready', 'jetpack-mu-wpcom' ), - description: __( - 'Your site will remain hidden until launched. Click “Launch” in the toolbar to share it with the world.', - 'jetpack-mu-wpcom' - ), - imgSrc: privateImage, - alignBottom: true, - }, - ]; -} - -/** - * Display the Nux page - * - * @param {object} props - The props of the component. - * @param {number} props.pageNumber - The number of page. - * @param {boolean} props.isLastPage - Whether the current page is the last one. - * @param {boolean} [props.alignBottom=false] - Whether to align bottom. - * @param {string} props.heading - The text of heading. - * @param {string} props.description - The text of description. - * @param {string} props.imgSrc - The src of image. - * @return {JSX.Element} The NuxPage component. - */ -function NuxPage( { pageNumber, isLastPage, alignBottom = false, heading, description, imgSrc } ) { - useEffect( () => { - wpcomTrackEvent( 'calypso_editor_wpcom_nux_slide_view', { - slide_number: pageNumber, - is_last_slide: isLastPage, - is_gutenboarding: window.calypsoifyGutenberg?.isGutenboarding, - } ); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [] ); - return ( - -
    -

    { heading }

    -
    { description }
    -
    -
    - -
    -
    - ); -} - -export default WpcomNux; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/get-editor-type.ts b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/get-editor-type.ts deleted file mode 100644 index 876bd2e34a5d3..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/get-editor-type.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { select } from '@wordpress/data'; - -/** - * Post (Post Type: ‘post’) - * Page (Post Type: ‘page’) - * Attachment (Post Type: ‘attachment’) - * Revision (Post Type: ‘revision’) - * Navigation menu (Post Type: ‘nav_menu_item’) - * Block templates (Post Type: ‘wp_template’) - * Template parts (Post Type: ‘wp_template_part’) - * @see https://developer.wordpress.org/themes/basics/post-types/#default-post-types - */ - -type PostType = - | 'post' - | 'page' - | 'attachment' - | 'revision' - | 'nav_menu_item' - | 'wp_template' - | 'wp_template_part' - | null; - -type EditorType = 'site' | PostType; - -export const getEditorType = (): EditorType | undefined => { - /** - * Beware when using this method to figure out if we are in the site editor. - * @see https://github.com/WordPress/gutenberg/issues/46616#issuecomment-1355301090 - * @see https://github.com/Automattic/jetpack/blob/2e56d0d/projects/plugins/jetpack/extensions/shared/get-editor-type.js - */ - if ( select( 'core/edit-site' ) ) { - return 'site'; - } - - if ( select( 'core/editor' ) ) { - return select( 'core/editor' ).getCurrentPostType() as PostType; - } - - return undefined; -}; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/style-tour.scss b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/style-tour.scss deleted file mode 100644 index 51a9eaaf2407f..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/style-tour.scss +++ /dev/null @@ -1,51 +0,0 @@ -@use "sass:math"; -@import "@wordpress/base-styles/colors"; -@import "@wordpress/base-styles/mixins"; -@import "@wordpress/base-styles/variables"; -@import "@wordpress/base-styles/z-index"; - -$welcome-tour-card-media-extra-padding: 14%; // temporary value, to match the padding of the desktop instructional graphics - -.wpcom-editor-welcome-tour { - .wpcom-editor-welcome-tour__step { - &.is-with-extra-padding { - .components-card__media { - background-color: #e7eaeb; // the color of the background used in desktop graphics - - img { - left: $welcome-tour-card-media-extra-padding; - top: $welcome-tour-card-media-extra-padding; - width: 100% - $welcome-tour-card-media-extra-padding; - } - } - } - } - - .wpcom-tour-kit-step-card-overlay-controls { - position: absolute; - } -} - -// @todo clk - it this used? -.wpcom-editor-welcome-tour-card-frame { - position: relative; - - .components-guide__page-control { - bottom: 0; - left: $grid-unit-20; - margin: 0; - position: absolute; - - li { - margin-bottom: 0; - } - } -} - -// Adding it to hide the WelcomeTour when the W-icon is pressed on mobile -#wpwrap.wp-responsive-open { - - .tour-kit.wpcom-tour-kit { - display: none; - } -} diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/test/tour-steps.test.ts b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/test/tour-steps.test.ts deleted file mode 100644 index fac4d7e1547a1..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/test/tour-steps.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -import '../get-editor-type'; -import getTourSteps from '../tour-steps'; - -jest.mock( '../get-editor-type', () => { - return { getEditorType: () => 'post' }; -} ); - -describe( 'Welcome Tour', () => { - describe( 'Tour Steps', () => { - it( 'should retrieve the "Welcome to WordPress!" slide', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Welcome to WordPress!' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "Everything is a block" slide', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Everything is a block' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "Adding a new block" slide', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Adding a new block' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "Click a block to change it" slide', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Click a block to change it' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "More Options" slide', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'More Options' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "Find your way" slide', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Find your way' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "Undo any mistake" slide', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Undo any mistake' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "Drag & drop" slide', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Undo any mistake' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "Edit your site" slide, when in site editor', () => { - expect( getTourSteps( 'en', true, true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Edit your site' } ), - } ), - ] ) - ); - } ); - it( 'should not retrieve the "Edit your site" slide, when not in site editor', () => { - expect( getTourSteps( 'en', true, false ) ).not.toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Edit your site' } ), - } ), - ] ) - ); - } ); - it( 'should retrieve the "Congratulations!" slide, with correct url', () => { - expect( getTourSteps( 'en', true ) ).toEqual( - expect.arrayContaining( [ - expect.objectContaining( { - meta: expect.objectContaining( { heading: 'Congratulations!' } ), - } ), - ] ) - ); - } ); - } ); -} ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/tour-launch.jsx b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/tour-launch.jsx deleted file mode 100644 index a9e6270f24123..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/tour-launch.jsx +++ /dev/null @@ -1,246 +0,0 @@ -import { useLocale } from '@automattic/i18n-utils'; -import { useDispatch, useSelect, dispatch } from '@wordpress/data'; -import { useEffect, useMemo } from '@wordpress/element'; -import { - WpcomTourKit, - usePrefetchTourAssets, - START_WRITING_FLOW, - DESIGN_FIRST_FLOW, - useSiteIntent, - useSitePlan, -} from '../../../../common/tour-kit'; -import { wpcomTrackEvent } from '../../../../common/tracks'; -import { getEditorType } from './get-editor-type'; -import useTourSteps from './use-tour-steps'; -import './style-tour.scss'; - -/** - * The Welcome Tour of the Launch. - * - * @return {JSX.Element|null} The welcome tour component or null. - */ -function LaunchWpcomWelcomeTour() { - const { show, isNewPageLayoutModalOpen, isManuallyOpened } = useSelect( - select => ( { - show: select( 'automattic/wpcom-welcome-guide' ).isWelcomeGuideShown(), - // Handle the case where the new page pattern modal is initialized and open - isNewPageLayoutModalOpen: - select( 'automattic/starter-page-layouts' ) && - select( 'automattic/starter-page-layouts' ).isOpen(), - isManuallyOpened: select( 'automattic/wpcom-welcome-guide' ).isWelcomeGuideManuallyOpened(), - } ), - [] - ); - const { siteIntent, siteIntentFetched } = useSiteIntent(); - const localeSlug = useLocale(); - const editorType = getEditorType(); - const { siteIntent: intent } = useSiteIntent(); - // We check the URL param along with site intent because the param loads faster and prevents element flashing. - const isBlogOnboardingFlow = intent === START_WRITING_FLOW || intent === DESIGN_FIRST_FLOW; - - const tourSteps = useTourSteps( localeSlug, false, false, null, siteIntent ); - - // Preload first card image (others preloaded after open state confirmed) - usePrefetchTourAssets( [ tourSteps[ 0 ] ] ); - - useEffect( () => { - if ( isBlogOnboardingFlow ) { - return; - } - if ( ! show && ! isNewPageLayoutModalOpen ) { - return; - } - - if ( ! siteIntentFetched ) { - return; - } - - // Track opening of the Welcome Guide - wpcomTrackEvent( 'calypso_editor_wpcom_tour_open', { - is_gutenboarding: window.calypsoifyGutenberg?.isGutenboarding, - is_manually_opened: isManuallyOpened, - intent: siteIntent, - editor_type: editorType, - } ); - }, [ - isNewPageLayoutModalOpen, - isManuallyOpened, - show, - siteIntent, - siteIntentFetched, - editorType, - isBlogOnboardingFlow, - ] ); - - if ( ! show || isNewPageLayoutModalOpen || isBlogOnboardingFlow ) { - return null; - } - - return ; -} - -/** - * Display the welcome tour. - * - * @param {object} props - The props of the component. - * @param {string} props.siteIntent - The intent of the site. - * @return {JSX.Element|null} The WelcomeTour component if a theme name is found, otherwise null. - */ -function WelcomeTour( { siteIntent } ) { - const sitePlan = useSitePlan( window._currentSiteId ); - const localeSlug = useLocale(); - const { setShowWelcomeGuide } = useDispatch( 'automattic/wpcom-welcome-guide' ); - const isGutenboarding = window.calypsoifyGutenberg?.isGutenboarding; - const isWelcomeTourNext = () => { - return new URLSearchParams( document.location.search ).has( 'welcome-tour-next' ); - }; - const isSiteEditor = useSelect( select => !! select( 'core/edit-site' ), [] ); - const currentTheme = useSelect( select => select( 'core' ).getCurrentTheme() ); - const themeName = currentTheme?.name?.raw?.toLowerCase() ?? null; - - const tourSteps = useTourSteps( - localeSlug, - isWelcomeTourNext(), - isSiteEditor, - themeName, - siteIntent - ); - - // Only keep Payment block step if user comes from seller simple flow - if ( ! ( 'sell' === siteIntent && sitePlan && 'ecommerce-bundle' !== sitePlan.product_slug ) ) { - const paymentBlockIndex = tourSteps.findIndex( step => step.slug === 'payment-block' ); - tourSteps.splice( paymentBlockIndex, 1 ); - } - const { isInserterOpened, isSidebarOpened, isSettingsOpened } = useSelect( - select => ( { - isInserterOpened: select( 'core/editor' ).isInserterOpened(), - isSidebarOpened: select( 'automattic/block-editor-nav-sidebar' )?.isSidebarOpened() ?? false, // The sidebar store may not always be loaded. - isSettingsOpened: - select( 'core/interface' ).getActiveComplementaryArea( 'core/edit-post' ) === - 'edit-post/document', - } ), - [] - ); - - const isTourMinimized = - isSidebarOpened || - ( window.matchMedia( `(max-width: 782px)` ).matches && - ( isInserterOpened || isSettingsOpened ) ); - - const editorType = getEditorType(); - - const tourConfig = { - steps: tourSteps, - closeHandler: ( _steps, currentStepIndex, source ) => { - wpcomTrackEvent( 'calypso_editor_wpcom_tour_dismiss', { - is_gutenboarding: isGutenboarding, - slide_number: currentStepIndex + 1, - action: source, - intent: siteIntent, - editor_type: editorType, - } ); - setShowWelcomeGuide( false, { openedManually: false } ); - }, - isMinimized: isTourMinimized, - options: { - tourRating: { - enabled: true, - useTourRating: () => { - return useSelect( - select => select( 'automattic/wpcom-welcome-guide' ).getTourRating(), - [] - ); - }, - onTourRate: rating => { - dispatch( 'automattic/wpcom-welcome-guide' ).setTourRating( rating ); - wpcomTrackEvent( 'calypso_editor_wpcom_tour_rate', { - thumbs_up: rating === 'thumbs-up', - is_gutenboarding: false, - intent: siteIntent, - editor_type: editorType, - } ); - }, - }, - callbacks: { - onMinimize: currentStepIndex => { - wpcomTrackEvent( 'calypso_editor_wpcom_tour_minimize', { - is_gutenboarding: isGutenboarding, - slide_number: currentStepIndex + 1, - intent: siteIntent, - editor_type: editorType, - } ); - }, - onMaximize: currentStepIndex => { - wpcomTrackEvent( 'calypso_editor_wpcom_tour_maximize', { - is_gutenboarding: isGutenboarding, - slide_number: currentStepIndex + 1, - intent: siteIntent, - editor_type: editorType, - } ); - }, - onStepViewOnce: currentStepIndex => { - const lastStepIndex = tourSteps.length - 1; - const { heading } = tourSteps[ currentStepIndex ].meta; - - wpcomTrackEvent( 'calypso_editor_wpcom_tour_slide_view', { - slide_number: currentStepIndex + 1, - is_last_slide: currentStepIndex === lastStepIndex, - slide_heading: heading, - is_gutenboarding: isGutenboarding, - intent: siteIntent, - editor_type: editorType, - } ); - }, - }, - effects: { - spotlight: isWelcomeTourNext() - ? { - styles: { - minWidth: '50px', - minHeight: '50px', - borderRadius: '2px', - }, - } - : undefined, - arrowIndicator: false, - }, - popperModifiers: [ - useMemo( - () => ( { - name: 'offset', - options: { - offset: ( { placement, reference } ) => { - if ( placement === 'bottom' ) { - const boundary = document.querySelector( '.edit-post-header' ); - - if ( ! boundary ) { - return; - } - - const boundaryRect = boundary.getBoundingClientRect(); - const boundaryBottomY = boundaryRect.height + boundaryRect.y; - const referenceBottomY = reference.height + reference.y; - - return [ 0, boundaryBottomY - referenceBottomY + 16 ]; - } - return [ 0, 0 ]; - }, - }, - } ), - [] - ), - ], - classNames: 'wpcom-editor-welcome-tour', - portalParentElement: document.getElementById( 'wpwrap' ), - }, - }; - - // Theme isn't immediately available, so we prevent rendering so the content doesn't switch after it is presented, since some content is based on theme - if ( null === themeName ) { - return null; - } - - return ; -} - -export default LaunchWpcomWelcomeTour; diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/use-tour-steps.tsx b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/use-tour-steps.tsx deleted file mode 100644 index c9b77845c51b2..0000000000000 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-block-editor-nux/src/welcome-tour/use-tour-steps.tsx +++ /dev/null @@ -1,393 +0,0 @@ -import { localizeUrl } from '@automattic/i18n-utils'; -import { isComingSoon } from '@automattic/jetpack-shared-extension-utils'; -import { ExternalLink } from '@wordpress/components'; -import { useViewportMatch } from '@wordpress/compose'; -import { createInterpolateElement } from '@wordpress/element'; -import { __, _x } from '@wordpress/i18n'; -import { getQueryArg } from '@wordpress/url'; -import { wpcomTrackEvent } from '../../../../common/tracks'; -import { getEditorType } from './get-editor-type'; -import type { WpcomStep } from '../../../../common/tour-kit'; - -interface TourAsset { - desktop?: { src: string; type: string }; - mobile?: { src: string; type: string }; -} - -/** - * Get the tour asset by the key. - * - * @param key - The key of the tour asset. - * @return {TourAsset | undefined} The requested tour asset, or undefined if not found. - */ -function getTourAssets( key: string ): TourAsset | undefined { - const CDN_PREFIX = 'https://s0.wp.com/i/editor-welcome-tour'; - const tourAssets = { - addBlock: { - desktop: { src: `${ CDN_PREFIX }/slide-add-block.gif`, type: 'image/gif' }, - mobile: { src: `${ CDN_PREFIX }/slide-add-block_mobile.gif`, type: 'image/gif' }, - }, - allBlocks: { desktop: { src: `${ CDN_PREFIX }/slide-all-blocks.gif`, type: 'image/gif' } }, - finish: { desktop: { src: `${ CDN_PREFIX }/slide-finish.png`, type: 'image/gif' } }, - makeBold: { desktop: { src: `${ CDN_PREFIX }/slide-make-bold.gif`, type: 'image/gif' } }, - moreOptions: { - desktop: { src: `${ CDN_PREFIX }/slide-more-options.gif`, type: 'image/gif' }, - mobile: { src: `${ CDN_PREFIX }/slide-more-options_mobile.gif`, type: 'image/gif' }, - }, - moveBlock: { - desktop: { src: `${ CDN_PREFIX }/slide-move-block.gif`, type: 'image/gif' }, - mobile: { src: `${ CDN_PREFIX }/slide-move-block_mobile.gif`, type: 'image/gif' }, - }, - findYourWay: { - desktop: { src: `${ CDN_PREFIX }/slide-find-your-way.gif`, type: 'image/gif' }, - }, - undo: { desktop: { src: `${ CDN_PREFIX }/slide-undo.gif`, type: 'image/gif' } }, - welcome: { - desktop: { src: `${ CDN_PREFIX }/slide-welcome.png`, type: 'image/png' }, - mobile: { src: `${ CDN_PREFIX }/slide-welcome_mobile.jpg`, type: 'image/jpeg' }, - }, - editYourSite: { - desktop: { - src: `https://s.w.org/images/block-editor/edit-your-site.gif?1`, - type: 'image/gif', - }, - mobile: { - src: `https://s.w.org/images/block-editor/edit-your-site.gif?1`, - type: 'image/gif', - }, - }, - videomakerWelcome: { - desktop: { src: `${ CDN_PREFIX }/slide-videomaker-welcome.png`, type: 'image/png' }, - }, - videomakerEdit: { - desktop: { src: `${ CDN_PREFIX }/slide-videomaker-edit.png`, type: 'image/png' }, - }, - } as { [ key: string ]: TourAsset }; - - return tourAssets[ key ]; -} - -/** - * Get the steps of the tour - * - * @param localeSlug - The slug of the locale. - * @param referencePositioning - The reference positioning. - * @param isSiteEditor - Whether is the site editor. - * @param themeName - The name of the theme. - * @param siteIntent - The intent of the current site. - * @return {WpcomStep[]} The steps of the tour. - */ -function useTourSteps( - localeSlug: string, - referencePositioning = false, - isSiteEditor = false, - themeName: string | null = null, - siteIntent: string | undefined = undefined -): WpcomStep[] { - const isVideoMaker = 'videomaker' === ( themeName ?? '' ); - const isPatternAssembler = !! getQueryArg( window.location.href, 'assembler' ); - const isMobile = useViewportMatch( 'mobile', '<' ); - const siteEditorCourseUrl = `https://wordpress.com/home/${ window.location.hostname }?courseSlug=site-editor-quick-start`; - const editorType = getEditorType(); - const onSiteEditorCourseLinkClick = () => { - wpcomTrackEvent( 'calypso_editor_wpcom_tour_site_editor_course_link_click', { - is_pattern_assembler: isPatternAssembler, - intent: siteIntent, - editor_type: editorType, - } ); - }; - - return [ - { - slug: 'welcome', - meta: { - heading: isPatternAssembler - ? __( 'Nice job! Your new page is set up.', 'jetpack-mu-wpcom' ) - : _x( 'Welcome to WordPress!', 'workaround', 'jetpack-mu-wpcom' ), - descriptions: { - desktop: ( () => { - if ( isPatternAssembler ) { - return createInterpolateElement( - __( - 'This is the Site Editor, where you can change everything about your site, including adding content to your homepage. Watch these short videos and take this tour to get started.', - 'jetpack-mu-wpcom' - ), - { - link_to_site_editor_course: ( - - ), - } - ); - } - - return isSiteEditor - ? __( - 'Take this short, interactive tour to learn the fundamentals of the WordPress Site Editor.', - 'jetpack-mu-wpcom' - ) - : _x( - 'Take this short, interactive tour to learn the fundamentals of the WordPress editor.', - 'workaround', - 'jetpack-mu-wpcom' - ); - } )(), - mobile: null, - }, - imgSrc: getTourAssets( isVideoMaker ? 'videomakerWelcome' : 'welcome' ), - imgLink: isPatternAssembler - ? { - href: siteEditorCourseUrl, - playable: true, - onClick: onSiteEditorCourseLinkClick, - } - : undefined, - }, - options: { - classNames: { - desktop: 'wpcom-editor-welcome-tour__step', - mobile: [ 'is-with-extra-padding', 'calypso_editor_wpcom_draft_post_modal_show' ], - }, - }, - }, - { - slug: 'everything-is-a-block', - meta: { - heading: __( 'Everything is a block', 'jetpack-mu-wpcom' ), - descriptions: { - desktop: __( - 'In the WordPress Editor, paragraphs, images, and videos are all blocks.', - 'jetpack-mu-wpcom' - ), - mobile: null, - }, - imgSrc: getTourAssets( 'allBlocks' ), - }, - options: { - classNames: { - desktop: 'wpcom-editor-welcome-tour__step', - mobile: 'wpcom-editor-welcome-tour__step', - }, - }, - }, - { - slug: 'add-block', - ...( referencePositioning && { - referenceElements: { - mobile: - '.edit-post-header .edit-post-header__toolbar .components-button.edit-post-header-toolbar__inserter-toggle', - desktop: - '.edit-post-header .edit-post-header__toolbar .components-button.edit-post-header-toolbar__inserter-toggle', - }, - } ), - meta: { - heading: __( 'Adding a new block', 'jetpack-mu-wpcom' ), - descriptions: { - desktop: __( - 'Click + to open the inserter. Then click the block you want to add.', - 'jetpack-mu-wpcom' - ), - mobile: __( - 'Tap + to open the inserter. Then tap the block you want to add.', - 'jetpack-mu-wpcom' - ), - }, - imgSrc: getTourAssets( 'addBlock' ), - }, - options: { - classNames: { - desktop: 'wpcom-editor-welcome-tour__step', - mobile: [ 'is-with-extra-padding', 'wpcom-editor-welcome-tour__step' ], - }, - }, - }, - { - slug: 'settings', - ...( referencePositioning && { - referenceElements: { - mobile: - '.edit-post-header .edit-post-header__settings .interface-pinned-items > button:nth-child(1)', - desktop: - '.edit-post-header .edit-post-header__settings .interface-pinned-items > button:nth-child(1)', - }, - } ), - meta: { - heading: __( 'More Options', 'jetpack-mu-wpcom' ), - descriptions: { - desktop: __( 'Click the settings icon to see even more options.', 'jetpack-mu-wpcom' ), - mobile: __( 'Tap the settings icon to see even more options.', 'jetpack-mu-wpcom' ), - }, - imgSrc: getTourAssets( 'moreOptions' ), - }, - options: { - classNames: { - desktop: 'wpcom-editor-welcome-tour__step', - mobile: [ 'is-with-extra-padding', 'wpcom-editor-welcome-tour__step' ], - }, - }, - }, - ...( ! isMobile - ? [ - { - slug: 'find-your-way', - meta: { - heading: __( 'Find your way', 'jetpack-mu-wpcom' ), - descriptions: { - desktop: __( - "Use List View to see all the blocks you've added. Click and drag any block to move it around.", - 'jetpack-mu-wpcom' - ), - mobile: null, - }, - imgSrc: getTourAssets( 'findYourWay' ), - }, - options: { - classNames: { - desktop: [ 'is-with-extra-padding', 'wpcom-editor-welcome-tour__step' ], - mobile: 'wpcom-editor-welcome-tour__step', - }, - }, - }, - ] - : [] ), - { - slug: 'payment-block', - meta: { - heading: __( 'The Payments block', 'jetpack-mu-wpcom' ), - descriptions: { - desktop: ( - <> - { __( - 'The Payments block allows you to accept payments for one-time, monthly recurring, or annual payments on your website', - 'jetpack-mu-wpcom' - ) } -
    - - { __( 'Learn more', 'jetpack-mu-wpcom' ) } - - - ), - mobile: null, - }, - imgSrc: getTourAssets( 'welcome' ), - }, - options: { - classNames: { - desktop: 'wpcom-editor-welcome-tour__step', - mobile: 'wpcom-editor-welcome-tour__step', - }, - }, - }, - ...( isSiteEditor - ? [ - { - slug: 'edit-your-site', - meta: { - heading: __( 'Edit your site', 'jetpack-mu-wpcom' ), - descriptions: { - desktop: createInterpolateElement( - __( - 'Design everything on your site - from the header right down to the footer - in the Site Editor. Learn more', - 'jetpack-mu-wpcom' - ), - { - link_to_fse_docs: ( - - ), - } - ), - mobile: __( - 'Design everything on your site - from the header right down to the footer - in the Site Editor.', - 'jetpack-mu-wpcom' - ), - }, - imgSrc: getTourAssets( 'editYourSite' ), - }, - options: { - classNames: { - desktop: 'wpcom-editor-welcome-tour__step', - mobile: [ 'is-with-extra-padding', 'wpcom-editor-welcome-tour__step' ], - }, - }, - }, - ] - : [] ), - { - slug: 'congratulations', - meta: { - heading: __( 'Congratulations!', 'jetpack-mu-wpcom' ), - descriptions: { - desktop: isComingSoon() - ? createInterpolateElement( - __( - "You've learned the basics. Remember, your site is private until you decide to launch. View the block editing docs to learn more.", - 'jetpack-mu-wpcom' - ), - { - link_to_launch_site_docs: ( - - ), - link_to_editor_docs: ( - - ), - } - ) - : createInterpolateElement( - __( - "You've learned the basics. View the block editing docs to learn more.", - 'jetpack-mu-wpcom' - ), - { - link_to_editor_docs: ( - - ), - } - ), - mobile: null, - }, - imgSrc: getTourAssets( 'finish' ), - }, - options: { - classNames: { - desktop: 'wpcom-editor-welcome-tour__step', - mobile: 'wpcom-editor-welcome-tour__step', - }, - }, - }, - ]; -} - -export default useTourSteps; diff --git a/projects/plugins/mu-wpcom-plugin/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one b/projects/plugins/mu-wpcom-plugin/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one new file mode 100644 index 0000000000000..e16bfa30dd5c7 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one @@ -0,0 +1,4 @@ +Significance: minor +Type: removed + +Stop using the custom welcome tour when the user creates a post for the first time, showing the core welcome guide instead diff --git a/projects/plugins/wpcomsh/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one b/projects/plugins/wpcomsh/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one new file mode 100644 index 0000000000000..e16bfa30dd5c7 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/update-deprecate-welcome-guide-in-favor-of-the-core-one @@ -0,0 +1,4 @@ +Significance: minor +Type: removed + +Stop using the custom welcome tour when the user creates a post for the first time, showing the core welcome guide instead From 7a5a08e30515221e92e3a608a8bd8e86b56c18bd Mon Sep 17 00:00:00 2001 From: arthur791004 Date: Thu, 6 Feb 2025 18:57:13 +0800 Subject: [PATCH 393/420] External Media: Update styles of the external media modal (#41303) * External Media Customize the copy of external media modal * External Media: Update styles of the media item on the modal * External Media: Update the size of modal to fill * Remove styles of the size limitation * Use Spinner instead of Placeholder * Update importing styles * Update selection styles * Allow to dismiss notice * Improve loading styles * Replace the search with wordpress's one * changelog * Update styles of the media toolbar * Update styles of google photos picker * Update copy * Change to use grid layout * Reset the border color of the checkbox * Replace the LoadMore button with infinite scroll * Use Composite for the keyboard navigation * Update copy * Support untangling-media flag as well * Check whether the current user is connected to WordPress.com * Update the modal size * Update the styles of the jetpack app media modal * changelog * Add margin to the loading spinner --- .../feat-external-media-import-modal-styles | 4 + .../src/class-external-media.php | 4 +- .../features/admin/external-media-import.js | 81 ++++--- .../features/admin/external-media-import.php | 26 ++- .../src/features/editor/editor.scss | 197 +++++----------- .../external-media/src/shared/index.js | 1 - .../src/shared/media-browser/index.js | 218 ++++++------------ .../src/shared/media-browser/media-item.js | 109 +++++---- .../src/shared/media-browser/placeholder.js | 21 -- .../src/shared/media-browser/style.scss | 200 +++++++--------- .../src/shared/media-button/index.js | 11 +- .../src/shared/media-search/index.js | 26 +++ .../google-photos/google-photos-loading.js | 12 + .../google-photos/google-photos-media.js | 10 +- .../google-photos-picker-button.js | 5 +- .../src/shared/sources/google-photos/index.js | 6 +- .../shared/sources/google-photos/style.scss | 19 +- .../index.js} | 27 ++- .../sources/jetpack-app-media/style.scss | 56 +++++ .../src/shared/sources/openverse/index.js | 109 +++------ .../src/shared/sources/openverse/style.scss | 1 - .../src/shared/sources/pexels/index.js | 112 +++------ .../src/shared/sources/pexels/style.scss | 1 - .../src/shared/sources/with-media.js | 106 +++++++-- .../src/shared/sources/with-media.scss | 49 ++++ .../feat-external-media-import-modal-styles | 4 + .../modules/external-media/external-media.php | 4 +- 27 files changed, 720 insertions(+), 699 deletions(-) create mode 100644 projects/packages/external-media/changelog/feat-external-media-import-modal-styles delete mode 100644 projects/packages/external-media/src/shared/media-browser/placeholder.js create mode 100644 projects/packages/external-media/src/shared/media-search/index.js create mode 100644 projects/packages/external-media/src/shared/sources/google-photos/google-photos-loading.js rename projects/packages/external-media/src/shared/sources/{jetpack-app-media.js => jetpack-app-media/index.js} (87%) create mode 100644 projects/packages/external-media/src/shared/sources/jetpack-app-media/style.scss create mode 100644 projects/packages/external-media/src/shared/sources/with-media.scss create mode 100644 projects/plugins/jetpack/changelog/feat-external-media-import-modal-styles diff --git a/projects/packages/external-media/changelog/feat-external-media-import-modal-styles b/projects/packages/external-media/changelog/feat-external-media-import-modal-styles new file mode 100644 index 0000000000000..20039b380b49e --- /dev/null +++ b/projects/packages/external-media/changelog/feat-external-media-import-modal-styles @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +External Media: Update styles of the external media modal diff --git a/projects/packages/external-media/src/class-external-media.php b/projects/packages/external-media/src/class-external-media.php index b6c4ac088d012..87c32d5e1d70b 100644 --- a/projects/packages/external-media/src/class-external-media.php +++ b/projects/packages/external-media/src/class-external-media.php @@ -5,9 +5,11 @@ * @package automattic/jetpack-external-media */ -namespace Automattic\Jetpack; +namespace Automattic\Jetpack\External_Media; +use Automattic\Jetpack\Assets; use Automattic\Jetpack\Connection\Initial_State as Connection_Initial_State; +use Automattic\Jetpack\Constants; use Automattic\Jetpack\Status\Host; use Jetpack_Options; diff --git a/projects/packages/external-media/src/features/admin/external-media-import.js b/projects/packages/external-media/src/features/admin/external-media-import.js index ce0463f8f8456..d6feba02f7716 100644 --- a/projects/packages/external-media/src/features/admin/external-media-import.js +++ b/projects/packages/external-media/src/features/admin/external-media-import.js @@ -1,27 +1,45 @@ -import { sprintf, _n } from '@wordpress/i18n'; +import { sprintf, __ } from '@wordpress/i18n'; import { useState, useEffect } from 'react'; +import { createPortal } from 'react-dom'; import ReactDOM from 'react-dom/client'; -import { getExternalLibrary } from '../../shared'; +import { getExternalLibrary, getExternalSource } from '../../shared'; const JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_CONTAINER = 'jetpack-external-media-import'; const JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_MODAL = 'jetpack-external-media-import-modal'; +const JETPACK_EXTERNAL_MEDIA_IMPORT_NOTICE = 'jetpack-external-media-import-notice'; + +const Notice = ( { message, onDismiss } ) => ( +
    +

    { message }

    + +
    +); const JetpackExternalMediaImport = () => { const [ selectedSource, setSelectedSource ] = useState( null ); + const [ noticeMessage, setNoticeMessage ] = useState( '' ); const ExternalLibrary = getExternalLibrary( selectedSource ); - const showNotice = message => { - const notice = document.createElement( 'div' ); - notice.className = 'notice notice-success'; - notice.innerHTML = `

    ${ message }

    `; - - // Add the success notice after the page title - const heading = document.querySelector( - `#${ JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_CONTAINER } > h1` - ); - if ( heading ) { - heading.parentNode.insertBefore( notice, heading.nextSibling ); + const selectButtonText = ( selectedImages, isCopying ) => { + if ( isCopying ) { + return sprintf( + /* translators: %1$d is the number of media that were selected. */ + __( 'Importing %1$d media…', 'jetpack-external-media' ), + selectedImages + ); } + + return selectedImages + ? sprintf( + /* translators: %1$d is the number of media that were selected. */ + __( 'Import %1$d media', 'jetpack-external-media' ), + selectedImages + ) + : __( 'Import media', 'jetpack-external-media' ); }; const handleSelect = media => { @@ -29,20 +47,17 @@ const JetpackExternalMediaImport = () => { return; } - showNotice( + setNoticeMessage( sprintf( - /* translators: %d is the number of the media file */ - _n( - '%d media file imported successfully.', - '%d media files imported successfully.', - media.length, - 'jetpack-external-media' - ), + /* translators: %d is the number of the media */ + __( '%d media imported successfully.', 'jetpack-external-media' ), media.length ) ); }; + const handleDismissNotice = () => setNoticeMessage( '' ); + const closeLibrary = event => { if ( event ) { event.stopPropagation(); @@ -76,11 +91,25 @@ const JetpackExternalMediaImport = () => { }; }, [] ); - if ( ! ExternalLibrary ) { - return null; - } - - return ; + return ( + <> + { ExternalLibrary && ( + + ) } + { noticeMessage && + createPortal( + , + document.getElementById( JETPACK_EXTERNAL_MEDIA_IMPORT_NOTICE ) + ) } + + ); }; const container = document.getElementById( JETPACK_EXTERNAL_MEDIA_IMPORT_PAGE_MODAL ); diff --git a/projects/packages/external-media/src/features/admin/external-media-import.php b/projects/packages/external-media/src/features/admin/external-media-import.php index 355e7a30646e4..c5a43769b7f09 100644 --- a/projects/packages/external-media/src/features/admin/external-media-import.php +++ b/projects/packages/external-media/src/features/admin/external-media-import.php @@ -7,13 +7,34 @@ * @package automattic/jetpack-external-media */ -namespace Automattic\Jetpack; +namespace Automattic\Jetpack\External_Media; + +use Automattic\Jetpack\Assets; +use Automattic\Jetpack\Connection\Manager as Connection_Manager; + +/** + * Whether the current user is connected to WordPress.com. + */ +function is_current_user_connected() { + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { + return true; + } + + return ( new Connection_Manager( 'jetpack' ) )->is_user_connected(); +} /** * Register the Jetpack external media page to Media > Import. */ function add_jetpack_external_media_import_page() { - if ( empty( $_GET['jetpack_external_media_import_page'] ) ) { // phpcs:disable WordPress.Security.NonceVerification.Recommended + if ( empty( $_GET['jetpack_external_media_import_page'] ) && empty( $_GET['untangling-media'] ) ) { // phpcs:disable WordPress.Security.NonceVerification.Recommended + return; + } + + /** + * The feature is enabled only when the current user is connected to WordPress.com. + */ + if ( ! is_current_user_connected() ) { return; } @@ -77,6 +98,7 @@ function render_jetpack_external_media_import_page() { ?>

    +

    svg { - display: none; - } - } - } - - // Override DropDown component styles when warpping the "Set featured image" button. - .editor-post-featured-image .components-dropdown { - display: initial; - } - - .block-editor-inserter__media-panel .components-search-control input[type=search].components-search-control__input[placeholder~="Google"] { - display: none; - & + .components-search-control__icon { - display: none; - } - } - \ No newline at end of file +@keyframes animate-drop { + 0% { + opacity: 0; + transform: translateY(-100%); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +/** +* Media button menu +*/ + +/** +* Hide the menu when the modal is open. Hacky, but necessary to allow the focus +* to return to selected option when modal is closed. This is how it's currenly +* also implemented in Gutenberg's MediaReplaceFlow. +*/ +.modal-open .jetpack-external-media-button-menu__options { + display: none; +} + +.jetpack-external-media-button-menu__dropdown { + display: flex; + + .jetpack-external-media-button-menu { + width: 100%; + flex-direction: row; + padding-left: 12px; + padding-right: 12px; + } +} + +.jetpack-external-media-button-wrapper { + display: contents; +} + +// Reset placeholder button margin. +.components-placeholder__fieldset, +.editor-post-featured-image { + .components-dropdown .jetpack-external-media-button-menu { + > svg { + display: none; + } + } +} + +// Override DropDown component styles when warpping the "Set featured image" button. +.editor-post-featured-image .components-dropdown { + display: initial; +} + +.block-editor-inserter__media-panel .components-search-control input[type=search].components-search-control__input[placeholder~="Google"] { + display: none; + & + .components-search-control__icon { + display: none; + } +} diff --git a/projects/packages/external-media/src/shared/index.js b/projects/packages/external-media/src/shared/index.js index 799d6945e156f..c7b6c9258c27d 100644 --- a/projects/packages/external-media/src/shared/index.js +++ b/projects/packages/external-media/src/shared/index.js @@ -1,6 +1,5 @@ export * from './constants'; export { default as MediaBrowser } from './media-browser'; -export { default as MediaPlaceholder } from './media-browser/placeholder'; export { default as MediaButton } from './media-button'; export * from './media-service'; export * from './media-service/types'; diff --git a/projects/packages/external-media/src/shared/media-browser/index.js b/projects/packages/external-media/src/shared/media-browser/index.js index 3cc0aa32b2f3e..e9bd6bd4551aa 100644 --- a/projects/packages/external-media/src/shared/media-browser/index.js +++ b/projects/packages/external-media/src/shared/media-browser/index.js @@ -1,47 +1,46 @@ -import { Button } from '@wordpress/components'; -import { memo, useCallback, useState, useRef, useEffect } from '@wordpress/element'; +import { Button, Spinner, Composite } from '@wordpress/components'; +import { useCallback, useState, useRef, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import { UP, DOWN, LEFT, RIGHT, SPACE, ENTER } from '@wordpress/keycodes'; import clsx from 'clsx'; -import { debounce } from 'lodash'; import React from 'react'; import MediaItem from './media-item'; -import MediaPlaceholder from './placeholder'; import './style.scss'; const MAX_SELECTED = 10; -const EmptyResults = memo( () => ( -
    -

    { __( 'Sorry, but nothing matched your search criteria.', 'jetpack-external-media' ) }

    -
    -) ); - /** * MediaBrowser component * - * @param {object} props - The component props + * @param {object} props - The component props + * @param {object[]} props.media - The list of media + * @param {boolean} props.isCopying - Whether the media browser is copying the media + * @param {boolean} props.isLoading - Whether the media browser is loading + * @param {boolean} props.imageOnly - Whether to skip non-media items + * @param {number} props.pageHandle - The current page + * @param {string} props.className - The class name + * @param {boolean} props.multiple - Whether to allow multiple selection + * @param {Function} props.setPath - To set the path for the folder item + * @param {Function} props.nextPage - To get the next path + * @param {Function} props.onCopy - To handle the copy + * @param {string} props.selectButtonText - The text of the selection button + * @param {boolean} props.shouldProxyImg - Whether to use the proxy for the media URL * @return {React.ReactElement} - JSX element */ -function MediaBrowser( props ) { - const { - media, - isCopying, - isLoading, - imageOnly, - pageHandle, - className, - multiple, - setPath, - nextPage, - onCopy, - selectButtonText, - shouldProxyImg, - } = props; +function MediaBrowser( { + media, + isCopying, + isLoading, + imageOnly, + pageHandle, + className, + multiple, + setPath, + nextPage, + onCopy, + selectButtonText, + shouldProxyImg, +} ) { const [ selected, setSelected ] = useState( [] ); - const [ focused, setFocused ] = useState( -1 ); - - const columns = useRef( -1 ); const gridEl = useRef( null ); const select = useCallback( @@ -79,106 +78,19 @@ function MediaBrowser( props ) { [ className ]: true, } ); - const onLoadMoreClick = () => { - if ( media.length ) { - setFocused( media.length ); - } - nextPage(); - }; - - const navigate = ( keyCode, index ) => { - switch ( keyCode ) { - case LEFT: - if ( index >= 1 ) { - setFocused( index - 1 ); - } - break; - case RIGHT: - if ( index < media.length ) { - setFocused( index + 1 ); - } - break; - case UP: - if ( index >= columns.current ) { - setFocused( index - columns.current ); - } - break; - case DOWN: - if ( index < media.length - columns.current ) { - setFocused( index + columns.current ); - } - break; - } - }; - - /** - * Counts how many items are in a row by checking how many of the grid's child - * items have a matching offsetTop. - */ - const checkColumns = () => { - let perRow = 1; - - const items = gridEl.current.children; - - if ( items.length > 0 ) { - const firstOffset = items[ 0 ].offsetTop; - - /** - * Check how many items have a matching offsetTop. This will give us the - * total number of items in a row. - */ - while ( perRow < items.length && items[ perRow ].offsetTop === firstOffset ) { - ++perRow; - } - } - - columns.current = perRow; - }; - - const checkColumnsDebounced = debounce( checkColumns, 400 ); - - useEffect( () => { - // Re-set columns on window resize: - window.addEventListener( 'resize', checkColumnsDebounced ); - return () => { - window.removeEventListener( 'resize', checkColumnsDebounced ); - }; - }, [] ); // eslint-disable-line react-hooks/exhaustive-deps - - useEffect( () => { - // Set columns value once when media are loaded. - if ( media.length && columns.current === -1 ) { - checkColumns(); - } - }, [ media ] ); - // Using _event to avoid eslint errors. Can change to event if it's in use again. const handleMediaItemClick = ( _event, { item } ) => { select( item ); }; - const handleMediaItemKeyDown = ( event, { item, index } ) => { - if ( [ LEFT, RIGHT, UP, DOWN ].includes( event.keyCode ) ) { - navigate( event.keyCode, index ); - } else if ( SPACE === event.keyCode ) { - select( item ); - event.preventDefault(); // Prevent space from scrolling the page down. - } else if ( ENTER === event.keyCode ) { - select( item ); - } - - if ( [ LEFT, RIGHT, UP, DOWN, SPACE, ENTER ].includes( event.keyCode ) ) { - event.stopPropagation(); - } - }; - const SelectButton = selectProps => { const disabled = selected.length === 0 || isCopying; - const defaultLabel = selectProps?.labelText - ? selectProps?.labelText( selected.length ) + const defaultLabel = isCopying + ? __( 'Inserting…', 'jetpack-external-media' ) : __( 'Select', 'jetpack-external-media', /* dummy arg to avoid bad minification */ 0 ); - - const label = isCopying ? __( 'Inserting…', 'jetpack-external-media' ) : defaultLabel; + const label = selectProps?.labelText + ? selectProps?.labelText( selected.length, isCopying ) + : defaultLabel; return (
    @@ -194,38 +106,60 @@ function MediaBrowser( props ) { ); }; + // Infinite scroll + useEffect( () => { + const target = gridEl.current?.lastElementChild; + let observer; + if ( pageHandle && ! isLoading && target ) { + observer = new window.IntersectionObserver( entries => { + if ( entries[ 0 ].isIntersecting ) { + nextPage(); + } + } ); + + observer.observe( target ); + } + + return () => { + observer?.unobserve( target ); + }; + }, [ pageHandle, isLoading, gridEl ] ); // eslint-disable-line react-hooks/exhaustive-deps + return (
    -
      - { media.map( ( item, index ) => ( + } + > + { media.map( item => ( toFind.ID === item.ID ) } isCopying={ isCopying } shouldProxyImg={ shouldProxyImg } /> ) ) } - - { media.length === 0 && ! isLoading && } - { isLoading && } - - { pageHandle && ! isLoading && ( - - ) } -
    + + + { media.length === 0 && ! isLoading && ( +
    +

    + { __( 'Sorry, but nothing matched your search criteria.', 'jetpack-external-media' ) } +

    +
    + ) } + + { isLoading && ( +
    + +
    + ) } { hasMediaItems && }
    diff --git a/projects/packages/external-media/src/shared/media-browser/media-item.js b/projects/packages/external-media/src/shared/media-browser/media-item.js index d72a2d6d2c5b3..d648aa2880af1 100644 --- a/projects/packages/external-media/src/shared/media-browser/media-item.js +++ b/projects/packages/external-media/src/shared/media-browser/media-item.js @@ -1,37 +1,57 @@ import apiFetch from '@wordpress/api-fetch'; -import { Spinner } from '@wordpress/components'; -import { useRef, useEffect, useState } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; +import { CheckboxControl, Composite } from '@wordpress/components'; +import { useEffect, useState } from '@wordpress/element'; +import { __, sprintf } from '@wordpress/i18n'; import clsx from 'clsx'; import React from 'react'; /** * MediaItem component * - * @param {object} props - The component props + * @param {object} props - The component props + * @param {object} props.item - The media item + * @param {boolean} props.imageOnly - Whether to skip non-media items + * @param {boolean} props.isSelected - Whether the media item is selected + * @param {boolean} props.isCopying - Whether the media browser is copying the media + * @param {boolean} props.shouldProxyImg - Whether to use the proxy for the media URL + * @param {Function} props.onClick - To handle the selection * @return {React.ReactElement} - JSX element */ -function MediaItem( props ) { - const onClick = event => { - const { item, index, imageOnly } = props; +function MediaItem( { item, imageOnly, isSelected, isCopying = false, shouldProxyImg, onClick } ) { + const { thumbnails, caption, name, title, type, children = 0 } = item; + const { medium = null, fmt_hd = null, thumbnail = null } = thumbnails; + const alt = title || caption || name || ''; + const [ imageUrl, setImageUrl ] = useState( null ); + const classes = clsx( { + 'jetpack-external-media-browser__media__item': true, + 'jetpack-external-media-browser__media__item__selected': isSelected, + 'jetpack-external-media-browser__media__folder': type === 'folder', + 'is-transient': isCopying, + } ); + + const selectionLabel = isSelected + ? sprintf( + /* translators: %s: item title. */ + __( 'Deselect item: %s', 'jetpack-external-media' ), + alt + ) + : sprintf( + /* translators: %s: item title. */ + __( 'Select item: %s', 'jetpack-external-media' ), + alt + ); + + const handleClick = event => { + if ( isCopying ) { + return; + } // Skip non-image items if imageOnly flag is set. if ( item.type !== 'image' && imageOnly ) { return; } - if ( props.onClick ) { - props.onClick( event, { item, index } ); - } - }; - - // Catch space and enter key presses. - const onKeyDown = event => { - const { item, index } = props; - - if ( props.onKeyDown ) { - props.onKeyDown( event, { item, index } ); - } + onClick?.( event, { item } ); }; const getProxyImageUrl = async url => { @@ -60,13 +80,6 @@ function MediaItem( props ) { } }; - const { item, focus, isSelected, isCopying = false, shouldProxyImg } = props; - const { thumbnails, caption, name, title, type, children = 0 } = item; - const { medium = null, fmt_hd = null, thumbnail = null } = thumbnails; - const alt = title || caption || name; - - const [ imageUrl, setImageUrl ] = useState( null ); - useEffect( () => { const _imageUrl = medium || fmt_hd || thumbnail; @@ -77,41 +90,15 @@ function MediaItem( props ) { } }, [ shouldProxyImg, imageUrl, medium, fmt_hd, thumbnail ] ); - const classes = clsx( { - 'jetpack-external-media-browser__media__item': true, - 'jetpack-external-media-browser__media__item__selected': isSelected, - 'jetpack-external-media-browser__media__folder': type === 'folder', - 'is-transient': isCopying, - } ); - - const itemEl = useRef( null ); - - useEffect( () => { - if ( focus ) { - itemEl.current.focus(); - } - }, [ focus ] ); - - /* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */ return ( -
  • } > - { isSelected && isCopying && ( -
    - -
    - { __( 'Inserting Image…', 'jetpack-external-media' ) } -
    -
    - ) } { imageUrl && { } { type === 'folder' && (
    @@ -119,7 +106,15 @@ function MediaItem( props ) {
    { children }
    ) } -
  • + handleClick() } + /> + ); } diff --git a/projects/packages/external-media/src/shared/media-browser/placeholder.js b/projects/packages/external-media/src/shared/media-browser/placeholder.js deleted file mode 100644 index 804710b8f18bd..0000000000000 --- a/projects/packages/external-media/src/shared/media-browser/placeholder.js +++ /dev/null @@ -1,21 +0,0 @@ -import { memo } from '@wordpress/element'; -import React from 'react'; - -/** - * MediaPlaceholder component - * - * @return {React.ReactElement} - JSX element - */ -function MediaPlaceholder() { - const className = - 'jetpack-external-media-browser__media__item jetpack-external-media-browser__media__placeholder'; - return ( - <> -
    -
    -
    - - ); -} - -export default memo( MediaPlaceholder ); diff --git a/projects/packages/external-media/src/shared/media-browser/style.scss b/projects/packages/external-media/src/shared/media-browser/style.scss index 703b1524e4225..456b1361ba894 100644 --- a/projects/packages/external-media/src/shared/media-browser/style.scss +++ b/projects/packages/external-media/src/shared/media-browser/style.scss @@ -1,114 +1,103 @@ @import '@automattic/jetpack-base-styles/gutenberg-base-styles'; $grid-size: 8px; - -@keyframes jetpack-external-media-loading-fade { - 0% { - opacity: 0.5; - } - 50% { - opacity: 1; - } - 100% { - opacity: 0.5; - } -} - -.jetpack-external-media-browser--visually-hidden { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect( 1px, 1px, 1px, 1px ); - white-space: nowrap; /* added line */ -} - -/** -* Media item container -*/ -.jetpack-external-media-browser { - .is-error { - margin-bottom: 1em; - margin-left: 0; - margin-right: 0; - } - - .components-placeholder { - background-color: transparent; - } - - .components-modal__content { - overflow: auto; - padding-bottom: 0; - width: 100%; - - @media ( min-width: 600px ) { - width: 90vw; - height: 90vh; - } - } -} - -.jetpack-external-media-browser--is-copying { - pointer-events: none; -} .jetpack-external-media-browser { background: white; display: flex; flex-direction: column; align-items: flex-start; + flex: 1; + position: relative; + padding-bottom: 76px; .jetpack-external-media-browser__media { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-auto-rows: 1fr; + gap: 16px; width: 100%; } // Individual Thumbnails .jetpack-external-media-browser__media__item { height: 0; - width: 50%; - padding-top: 50%; + width: 100%; + padding-top: 100%; + margin: 0; display: inline-flex; position: relative; + cursor: pointer; // Unset button appearance. border: 0; - background: transparent; + border-radius: 4px; + background-color: $gray-400; img { display: block; position: absolute; - top: $grid-size; - left: $grid-size; - width: calc( 100% - #{$grid-size * 2} ); - height: calc( 100% - #{$grid-size * 2} ); - object-fit: contain; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; + border: 1px solid rgba(0,0,0,0.1); + border-radius: 4px; + user-select: none; } - &.is-transient img { - opacity: 0.3; + &::after { + display: block; + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; } - } - .jetpack-external-media-browser__media__copying_indicator { - display: flex; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - flex-direction: column; - justify-content: center; - align-items: center; - text-align: center; + &:hover img { + border-color: rgba(0,0,0,0.2); + } - .components-spinner { - margin-bottom: $grid-size; + &:focus img { + border-color: var(--wp-admin-theme-color); + outline: 0.5px solid var(--wp-admin-theme-color); + } + + &:focus-visible { + outline-color: var(--wp-admin-theme-color); + } + + &__selected { + img { + border-color: var(--wp-admin-theme-color); + } + + &::after { + background: var(--wp-admin-theme-color); + opacity: 0.2; + } + } + + &.is-transient { + img { + border-color: rgba(0, 0, 0, 0.1); + } + + &::after { + background: white; + opacity: 0.8; + } } } - .jetpack-external-media-browser__media__copying_indicator__label { - font-size: 12px; + .jetpack-external-media-browser__media__checkbox { + position: absolute; + left: $grid-size; + top: $grid-size; } .jetpack-external-media-browser__media__folder { @@ -137,64 +126,37 @@ $grid-size: 8px; margin-bottom: auto; } - // Resting, focus and selected. - $border-width: 8px; - - .jetpack-external-media-browser__media__item { - border: $border-width solid transparent; - - &:focus { - outline: none; - box-shadow: inset 0 0 0 2px var(--wp-admin-theme-color); - border-radius: 2px + $border-width; // Add the 4px from the transparent. - } - - &__selected { - box-shadow: inset 0 0 0 6px var(--wp-admin-theme-color); - border-radius: 2px + $border-width; // Add the 4px from the transparent. - } - - &__selected:focus { - box-shadow: inset 0 0 0 2px var(--wp-admin-theme-color), inset 0 0 0 3px white, - inset 0 0 0 6px var(--wp-admin-theme-color); - } - } - - // Transient placeholder when media are loading. - .jetpack-external-media-browser__media__placeholder { - width: 100px; - height: 100px; - margin: $grid-size * 2; - animation: jetpack-external-media-loading-fade 1.6s ease-in-out infinite; - background-color: $gray-400; - border: 0; - } - // Toolbar for "insert" and pagination button. .jetpack-external-media-browser__media__toolbar { position: fixed; - position: sticky; bottom: 0; left: 0; + right: 0; width: 100%; + height: 76px; + padding: 0 32px; background: white; - padding: 20px 0; display: flex; + align-items: center; justify-content: flex-end; } - .jetpack-external-media-browser__loadmore { - clear: both; - display: block; - margin: 24px auto 48px auto; + .jetpack-external-media-browser__loading { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + width: 100%; + margin: 24px 0; } } // Show more thumbs beyond mobile. @media only screen and ( min-width: 600px ) { - .jetpack-external-media-browser .jetpack-external-media-browser__media__item { - width: 20%; - padding-top: 20%; + .jetpack-external-media-browser { + .jetpack-external-media-browser__media { + grid-template-columns: repeat(5, 1fr); + } } } diff --git a/projects/packages/external-media/src/shared/media-button/index.js b/projects/packages/external-media/src/shared/media-button/index.js index ac16b3282fa7d..e978c82fa1e5e 100644 --- a/projects/packages/external-media/src/shared/media-button/index.js +++ b/projects/packages/external-media/src/shared/media-button/index.js @@ -1,7 +1,7 @@ import { useBlockEditContext } from '@wordpress/block-editor'; import { useState } from '@wordpress/element'; import React from 'react'; -import { getExternalLibrary } from '../sources'; +import { getExternalLibrary, getExternalSource } from '../sources'; import { isGeneralPurposeImageGeneratorBetaEnabled } from '../utils/is-general-purpose-image-generator-beta-enabled'; import MediaAiButton from './media-ai-button'; import MediaButtonMenu from './media-menu'; @@ -23,6 +23,7 @@ function MediaButton( props ) { const { mediaProps } = props; const [ selectedSource, setSelectedSource ] = useState( null ); const ExternalLibrary = getExternalLibrary( selectedSource ); + const externalSource = getExternalSource( selectedSource ); const isFeatured = isFeaturedImage( mediaProps ); const hasAiButtonSupport = blocksWithAiButtonSupport.includes( name ); @@ -58,7 +59,13 @@ function MediaButton( props ) { ) } - { ExternalLibrary && } + { ExternalLibrary && ( + + ) }
    ); } diff --git a/projects/packages/external-media/src/shared/media-search/index.js b/projects/packages/external-media/src/shared/media-search/index.js new file mode 100644 index 0000000000000..f7ca2573fcad3 --- /dev/null +++ b/projects/packages/external-media/src/shared/media-search/index.js @@ -0,0 +1,26 @@ +import { SearchControl } from '@wordpress/components'; +import { useDebouncedInput } from '@wordpress/compose'; +import { __ } from '@wordpress/i18n'; +import { useEffect } from 'react'; + +const MediaSearch = ( { defaultValue, onSearch } ) => { + const [ search, setSearch, debouncedSearch ] = useDebouncedInput( defaultValue ); + const searchLabel = __( 'Search', 'jetpack-external-media' ); + + useEffect( () => { + onSearch( debouncedSearch ); + }, [ debouncedSearch, onSearch ] ); + + return ( + + ); +}; + +export default MediaSearch; diff --git a/projects/packages/external-media/src/shared/sources/google-photos/google-photos-loading.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-loading.js new file mode 100644 index 0000000000000..22d8ed5158cf5 --- /dev/null +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-loading.js @@ -0,0 +1,12 @@ +import { Spinner } from '@wordpress/components'; +import clsx from 'clsx'; + +const GooglePhotosLoading = ( { className } ) => { + return ( +
    + +
    + ); +}; + +export default GooglePhotosLoading; diff --git a/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js index f9eecaabf366b..e334c03a156e7 100644 --- a/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js @@ -1,6 +1,7 @@ import { Button, SelectControl } from '@wordpress/components'; import { useRef, useState, useCallback, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; +import clsx from 'clsx'; import React from 'react'; import { SOURCE_GOOGLE_PHOTOS, @@ -27,6 +28,7 @@ const isImageOnly = allowed => allowed && allowed.length === 1 && allowed[ 0 ] = */ function GooglePhotosMedia( props ) { const { + className, account, allowedTypes, copyMedia, @@ -35,6 +37,7 @@ function GooglePhotosMedia( props ) { isLoading, media, multiple, + selectButtonText, onChangePath, pageHandle, path, @@ -72,7 +75,7 @@ function GooglePhotosMedia( props ) { const listUrl = getExternalMediaApiUrl( 'list', SOURCE_GOOGLE_PHOTOS, params ); const getNextPage = useCallback( - ( event, reset = false ) => { + ( query, reset = false ) => { getMedia( listUrl, reset ); }, [ getMedia, listUrl ] @@ -112,12 +115,12 @@ function GooglePhotosMedia( props ) { useEffect( () => { if ( lastQuery !== listUrl ) { lastQuery.current = listUrl; - getNextPage( {}, path !== lastPath.current ); + getNextPage( '', path !== lastPath.current ); } }, [ lastQuery, listUrl, getNextPage, path ] ); return ( -
    +
    { ! pickerFeatureEnabled && ( <> @@ -187,6 +190,7 @@ function GooglePhotosMedia( props ) { onCopy={ onCopy } pageHandle={ pageHandle } multiple={ multiple } + selectButtonText={ selectButtonText } setPath={ setPath } shouldProxyImg={ pickerFeatureEnabled } /> diff --git a/projects/packages/external-media/src/shared/sources/google-photos/google-photos-picker-button.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-picker-button.js index cf2f31b9e124c..b3227aea03717 100644 --- a/projects/packages/external-media/src/shared/sources/google-photos/google-photos-picker-button.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-picker-button.js @@ -2,6 +2,7 @@ import { GooglePhotosMediaIcon } from '@automattic/jetpack-shared-extension-util import { Button } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { Icon, external } from '@wordpress/icons'; +import clsx from 'clsx'; import React, { useEffect } from 'react'; import GooglePhotosAccount from './google-photos-account'; @@ -12,7 +13,7 @@ import GooglePhotosAccount from './google-photos-account'; * @return {React.ReactElement} - JSX Element */ export default function GooglePhotosPickerButton( props ) { - const { pickerSession, fetchPickerSession, setAuthenticated, account } = props; + const { className, pickerSession, fetchPickerSession, setAuthenticated, account } = props; const isButtonBusy = ! pickerSession; const openPicker = () => { @@ -27,7 +28,7 @@ export default function GooglePhotosPickerButton( props ) { }, [ fetchPickerSession, pickerSession?.id ] ); return ( -
    +

    { __( 'Google Photos', 'jetpack-external-media' ) }

    diff --git a/projects/packages/external-media/src/shared/sources/google-photos/index.js b/projects/packages/external-media/src/shared/sources/google-photos/index.js index 8e4e641b1fa3d..cdf4258bc308a 100644 --- a/projects/packages/external-media/src/shared/sources/google-photos/index.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/index.js @@ -1,11 +1,11 @@ import moment from 'moment'; import React, { useEffect, useState } from 'react'; -import MediaLoadingPlaceholder from '../../media-browser/placeholder'; import { getGooglePhotosPickerCachedSessionId } from '../../media-service'; import { MediaSource } from '../../media-service/types'; import withMedia from '../with-media'; import GooglePhotosAuth from './google-photos-auth'; import GooglePhotosAuthUpgrade from './google-photos-auth-upgrade'; +import GooglePhotosLoading from './google-photos-loading'; import GooglePhotosMedia from './google-photos-media'; import GooglePhotosPickerButton from './google-photos-picker-button'; import './style.scss'; @@ -99,7 +99,7 @@ function GooglePhotos( props ) { ] ); if ( isLoadingState ) { - return ; + return ; } if ( ! isAuthenticated ) { @@ -117,4 +117,4 @@ function GooglePhotos( props ) { return ; } -export default withMedia( MediaSource.GooglePhotos )( GooglePhotos ); +export default withMedia( MediaSource.GooglePhotos, { modalSize: 'fill' } )( GooglePhotos ); diff --git a/projects/packages/external-media/src/shared/sources/google-photos/style.scss b/projects/packages/external-media/src/shared/sources/google-photos/style.scss index 7af1657f15360..58be6172bf4aa 100644 --- a/projects/packages/external-media/src/shared/sources/google-photos/style.scss +++ b/projects/packages/external-media/src/shared/sources/google-photos/style.scss @@ -6,7 +6,6 @@ $grid-size: 8px; display: flex; align-items: flex-start; justify-content: flex-start; - margin-bottom: 48px; flex-direction: column; @media only screen and ( min-width: 600px ) { @@ -133,8 +132,11 @@ $grid-size: 8px; } .jetpack-external-media__google-photos-picker { - text-align: center; - margin-bottom: 48px; + display: flex; + align-items: center; + justify-content: center; + gap: 0; + margin-bottom: -72px 0 48px; h1 { font-weight: 400; @@ -168,3 +170,14 @@ $grid-size: 8px; margin: 0 0 2em 0; } } + +.jetpack-external-media__google-photos-loading { + display: flex; + justify-content: center; + align-items: center; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} diff --git a/projects/packages/external-media/src/shared/sources/jetpack-app-media.js b/projects/packages/external-media/src/shared/sources/jetpack-app-media/index.js similarity index 87% rename from projects/packages/external-media/src/shared/sources/jetpack-app-media.js rename to projects/packages/external-media/src/shared/sources/jetpack-app-media/index.js index 441f00f9d2723..a4a2cd0643639 100644 --- a/projects/packages/external-media/src/shared/sources/jetpack-app-media.js +++ b/projects/packages/external-media/src/shared/sources/jetpack-app-media/index.js @@ -4,10 +4,12 @@ import { JetpackAppIcon } from '@automattic/jetpack-shared-extension-utils/icons import { useSelect } from '@wordpress/data'; import { useCallback, useEffect, useState } from '@wordpress/element'; import { __, sprintf, _n } from '@wordpress/i18n'; +import clsx from 'clsx'; import React from 'react'; -import MediaBrowser from '../media-browser'; -import { MediaSource } from '../media-service/types'; -import withMedia from './with-media'; +import MediaBrowser from '../../media-browser'; +import { MediaSource } from '../../media-service/types'; +import withMedia from '../with-media'; +import './style.scss'; const getWpcomBlogId = () => window?.Jetpack_Editor_Initial_State?.wpcomBlogId || @@ -31,7 +33,7 @@ const getImagePath = () => { * @return {React.ReactElement} The `JetpackAppMedia` component. */ function JetpackAppMedia( props ) { - const { media, insertMedia, isCopying, multiple, getMedia } = props; + const { className, media, insertMedia, isCopying, multiple, getMedia } = props; const wpcomBlogId = getWpcomBlogId(); const imagePath = getImagePath(); @@ -72,6 +74,19 @@ function JetpackAppMedia( props ) { : 'jetpack-external-media-wrapper__jetpack_app_media-wrapper has-no-image-uploaded'; const selectButtonText = selectedImages => { + if ( isCopying ) { + return sprintf( + /* translators: %1$d is the number of images that were selected. */ + _n( + 'Inserting %1$d image…', + 'Inserting %1$d images…', + selectedImages, + 'jetpack-external-media' + ), + selectedImages + ); + } + return selectedImages ? sprintf( /* translators: %1$d is the number of images that were selected. */ @@ -81,7 +96,7 @@ function JetpackAppMedia( props ) { : __( 'Add images', 'jetpack-external-media' ); }; return ( -

    +

    { hasImageUploaded && __( 'Select images to be added', 'jetpack-external-media' ) } @@ -134,4 +149,4 @@ function JetpackAppMedia( props ) { ); } -export default withMedia( MediaSource.JetpackAppMedia )( JetpackAppMedia ); +export default withMedia( MediaSource.JetpackAppMedia, { modalSize: 'large' } )( JetpackAppMedia ); diff --git a/projects/packages/external-media/src/shared/sources/jetpack-app-media/style.scss b/projects/packages/external-media/src/shared/sources/jetpack-app-media/style.scss new file mode 100644 index 0000000000000..fe3565a0db3c6 --- /dev/null +++ b/projects/packages/external-media/src/shared/sources/jetpack-app-media/style.scss @@ -0,0 +1,56 @@ +.jetpack-external-media-wrapper__jetpack_app_media-title { + font-family: Recoleta, "Noto Serif", Georgia, "Times New Roman", Times, serif; + font-size: 24px; + font-weight: 400; + line-height: 1.67; + letter-spacing: -0.32px; + margin: 0 0 14px 0; + color:var( --jp-gray-100 ); + +} +.jetpack-external-media-wrapper__jetpack_app_media-description { + font-size: 14px; + font-weight: 400; + line-height: 1.43; + color: var( --jp-gray-60 ); + margin: 0; +} + +.jetpack-external-media-wrapper__jetpack_app_media-wrapper.has-no-image-uploaded { + .jetpack-external-media-wrapper__jetpack_app_media-title, + .jetpack-external-media-wrapper__jetpack_app_media-description { + max-width: 100%; + + @media only screen and ( min-width: 600px ) { + max-width: calc( 100% - 300px ); + } + } +} + +.jetpack-external-media-wrapper__jetpack_app_media-qr-code canvas { + width: 100px; + height: 100px; + margin-top: 24px; +} +.jetpack-external-media-wrapper__jetpack_app_media-instructions img { + position: absolute; + right: 56px; + bottom: 0; + display: none; + + @media only screen and ( min-width: 600px ) { + display: inline; + } +} + +.jetpack-external-media-wrapper__jetpack_app_media-qr-code-wrapper { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + flex-grow: 1; +} + +.jetpack-external-media-wrapper__jetpack_app_media .jetpack-external-media-browser__empty { + display: none; +} diff --git a/projects/packages/external-media/src/shared/sources/openverse/index.js b/projects/packages/external-media/src/shared/sources/openverse/index.js index 6a1b0f3ec998e..331c648b817e3 100644 --- a/projects/packages/external-media/src/shared/sources/openverse/index.js +++ b/projects/packages/external-media/src/shared/sources/openverse/index.js @@ -1,10 +1,11 @@ -import { TextControl, Button } from '@wordpress/components'; -import { useRef, useCallback, useState, useEffect } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; +import { usePrevious } from '@wordpress/compose'; +import { useCallback, useState, useEffect } from '@wordpress/element'; +import clsx from 'clsx'; import { sample } from 'lodash'; import React from 'react'; import { SOURCE_OPENVERSE, PEXELS_EXAMPLE_QUERIES } from '../../constants'; import MediaBrowser from '../../media-browser'; +import MediaSearch from '../../media-search'; import { MediaSource } from '../../media-service/types'; import { getExternalMediaApiUrl } from '../api'; import withMedia from '../with-media'; @@ -17,10 +18,20 @@ import './style.scss'; * @return {React.ReactElement} - JSX element */ function OpenverseMedia( props ) { - const { media, isCopying, isLoading, pageHandle, multiple, copyMedia, getMedia } = props; + const { + className, + media, + isCopying, + isLoading, + pageHandle, + multiple, + selectButtonText, + copyMedia, + getMedia, + } = props; const [ searchQuery, setSearchQuery ] = useState( sample( PEXELS_EXAMPLE_QUERIES ) ); - const [ lastSearchQuery, setLastSearchQuery ] = useState( '' ); + const previousSearchQuery = usePrevious( searchQuery ); const onCopy = useCallback( items => { @@ -30,92 +41,42 @@ function OpenverseMedia( props ) { ); const getNextPage = useCallback( - ( event, reset = false ) => { - if ( searchQuery ) { - getMedia( - getExternalMediaApiUrl( 'list', SOURCE_OPENVERSE, { - number: 20, - search: searchQuery, - } ), - reset - ); + ( query, reset = false ) => { + if ( ! query ) { + return; } - }, - [ getMedia, searchQuery ] - ); - const previousSearchQueryValue = useRef( undefined ); - const onSearch = useCallback( - event => { - event.preventDefault(); - setLastSearchQuery( searchQuery ); - getNextPage( event, true ); - previousSearchQueryValue.current = searchQuery; + getMedia( + getExternalMediaApiUrl( 'list', SOURCE_OPENVERSE, { + number: 20, + search: query, + } ), + reset + ); }, - [ getNextPage, searchQuery ] + [ getMedia ] ); - // Load initial results for the random example query. Only do it once. - useEffect( getNextPage, [] ); // eslint-disable-line react-hooks/exhaustive-deps - - const searchFormEl = useRef( null ); - - const focusSearchInput = () => { - if ( ! searchFormEl?.current ) { - return; - } - - // TextControl does not support ref forwarding, so we need to find the input: - const searchInputEl = searchFormEl.current.querySelector( "input[type='search']" ); - - if ( searchInputEl ) { - searchInputEl.focus(); - searchInputEl.select(); - } - }; - - useEffect( focusSearchInput, [] ); + useEffect( () => { + getNextPage( searchQuery, searchQuery !== previousSearchQuery ); + }, [ searchQuery ] ); // eslint-disable-line react-hooks/exhaustive-deps return ( -
    -
    - - - - +
    + getNextPage( searchQuery ) } onCopy={ onCopy } pageHandle={ pageHandle } multiple={ multiple } + selectButtonText={ selectButtonText } />
    ); } -export default withMedia( MediaSource.Openverse )( OpenverseMedia ); +export default withMedia( MediaSource.Openverse, { modalSize: 'fill' } )( OpenverseMedia ); diff --git a/projects/packages/external-media/src/shared/sources/openverse/style.scss b/projects/packages/external-media/src/shared/sources/openverse/style.scss index 9557dfdf2107e..58fe916c6959c 100644 --- a/projects/packages/external-media/src/shared/sources/openverse/style.scss +++ b/projects/packages/external-media/src/shared/sources/openverse/style.scss @@ -1,6 +1,5 @@ .jetpack-external-media-header__openverse { display: flex; - margin-bottom: 48px; .components-base-control { flex: 1; diff --git a/projects/packages/external-media/src/shared/sources/pexels/index.js b/projects/packages/external-media/src/shared/sources/pexels/index.js index ba64d727acff7..83b142ed04fcf 100644 --- a/projects/packages/external-media/src/shared/sources/pexels/index.js +++ b/projects/packages/external-media/src/shared/sources/pexels/index.js @@ -1,10 +1,11 @@ -import { TextControl, Button } from '@wordpress/components'; -import { useRef, useCallback, useState, useEffect } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; +import { usePrevious } from '@wordpress/compose'; +import { useCallback, useState, useEffect } from '@wordpress/element'; +import clsx from 'clsx'; import { sample } from 'lodash'; import React from 'react'; import { SOURCE_PEXELS, PEXELS_EXAMPLE_QUERIES } from '../../constants'; import MediaBrowser from '../../media-browser'; +import MediaSearch from '../../media-search'; import { MediaSource } from '../../media-service/types'; import { getExternalMediaApiUrl } from '../api'; import withMedia from '../with-media'; @@ -17,10 +18,20 @@ import './style.scss'; * @return {React.ReactElement} - JSX element */ function PexelsMedia( props ) { - const { media, isCopying, isLoading, pageHandle, multiple, copyMedia, getMedia } = props; + const { + className, + media, + isCopying, + isLoading, + pageHandle, + multiple, + selectButtonText, + copyMedia, + getMedia, + } = props; const [ searchQuery, setSearchQuery ] = useState( sample( PEXELS_EXAMPLE_QUERIES ) ); - const [ lastSearchQuery, setLastSearchQuery ] = useState( '' ); + const previousSearchQuery = usePrevious( searchQuery ); const onCopy = useCallback( items => { @@ -30,94 +41,43 @@ function PexelsMedia( props ) { ); const getNextPage = useCallback( - ( event, reset = false ) => { - if ( searchQuery ) { - getMedia( - getExternalMediaApiUrl( 'list', SOURCE_PEXELS, { - number: 20, - path: 'recent', - search: searchQuery, - } ), - reset - ); + ( query, reset = false ) => { + if ( ! query ) { + return; } - }, - [ getMedia, searchQuery ] - ); - const previousSearchQueryValue = useRef( undefined ); - const onSearch = useCallback( - event => { - event.preventDefault(); - setLastSearchQuery( searchQuery ); - getNextPage( event, true ); - previousSearchQueryValue.current = searchQuery; + getMedia( + getExternalMediaApiUrl( 'list', SOURCE_PEXELS, { + number: 20, + path: 'recent', + search: query, + } ), + reset + ); }, - [ getNextPage, searchQuery ] + [ getMedia ] ); - // Load initial results for the random example query. Only do it once. - useEffect( getNextPage, [] ); // eslint-disable-line react-hooks/exhaustive-deps - - const searchFormEl = useRef( null ); - - const focusSearchInput = () => { - if ( ! searchFormEl.current ) { - return; - } - - const formElements = Array.from( searchFormEl.current.elements ); - // TextControl does not support ref forwarding, so we need to find the input: - const searchInputEl = formElements.find( element => element.type === 'search' ); - - if ( searchInputEl ) { - searchInputEl.focus(); - searchInputEl.select(); - } - }; - - useEffect( focusSearchInput, [] ); + useEffect( () => { + getNextPage( searchQuery, searchQuery !== previousSearchQuery ); + }, [ searchQuery ] ); // eslint-disable-line react-hooks/exhaustive-deps return ( -
    -
    - - - - +
    + getNextPage( searchQuery ) } onCopy={ onCopy } pageHandle={ pageHandle } multiple={ multiple } + selectButtonText={ selectButtonText } />
    ); } -export default withMedia( MediaSource.Pexels )( PexelsMedia ); +export default withMedia( MediaSource.Pexels, { modalSize: 'fill' } )( PexelsMedia ); diff --git a/projects/packages/external-media/src/shared/sources/pexels/style.scss b/projects/packages/external-media/src/shared/sources/pexels/style.scss index 399e2f81c0e1a..f7811574ff12b 100644 --- a/projects/packages/external-media/src/shared/sources/pexels/style.scss +++ b/projects/packages/external-media/src/shared/sources/pexels/style.scss @@ -1,6 +1,5 @@ .jetpack-external-media-header__pexels { display: flex; - margin-bottom: 48px; .components-base-control { flex: 1; diff --git a/projects/packages/external-media/src/shared/sources/with-media.js b/projects/packages/external-media/src/shared/sources/with-media.js index 9cc24e050641c..d1f607199cd83 100644 --- a/projects/packages/external-media/src/shared/sources/with-media.js +++ b/projects/packages/external-media/src/shared/sources/with-media.js @@ -3,7 +3,7 @@ import { withNotices, Modal } from '@wordpress/components'; import { createHigherOrderComponent } from '@wordpress/compose'; import { withSelect } from '@wordpress/data'; import { Component } from '@wordpress/element'; -import { __ } from '@wordpress/i18n'; +import { __, sprintf } from '@wordpress/i18n'; import { UP, DOWN, LEFT, RIGHT } from '@wordpress/keycodes'; import clsx from 'clsx'; import { uniqBy } from 'lodash'; @@ -14,14 +14,16 @@ import { setGooglePhotosPickerSession, } from '../media-service'; import { MediaSource } from '../media-service/types'; +import './with-media.scss'; /** * withMedia * - * @param {MediaSource} mediaSource - External media sources. + * @param {MediaSource} mediaSource - External media sources. + * @param {object} mediaOptions - The options of the media. * @return {Function} - The function to create higher order component. */ -export default function withMedia( mediaSource = MediaSource.Unknown ) { +export default function withMedia( mediaSource = MediaSource.Unknown, mediaOptions = {} ) { return createHigherOrderComponent( OriginalComponent => { // Legacy class as it was ported from an older codebase. class WithMediaComponent extends Component { @@ -106,8 +108,8 @@ export default function withMedia( mediaSource = MediaSource.Unknown ) { } getMedia = ( url, resetMedia = false, isLoading = true ) => { - if ( this.state.isLoading ) { - return; + if ( this.abortController ) { + this.abortController.abort(); } if ( resetMedia ) { @@ -126,6 +128,11 @@ export default function withMedia( mediaSource = MediaSource.Unknown ) { }; handleApiError = error => { + if ( error.name === 'AbortError' ) { + // We don't want to log aborted requests. + return; + } + if ( error.code === 'authorization_required' ) { this.setAuthenticated( false ); this.setState( { isLoading: false, isCopying: false } ); @@ -169,10 +176,14 @@ export default function withMedia( mediaSource = MediaSource.Unknown ) { const path = this.getRequestUrl( url ); const method = 'GET'; + this.abortController = + typeof window.AbortController === 'undefined' ? undefined : new window.AbortController(); + apiFetch( { path, method, parse: window.wpcomFetch === undefined, + signal: this.abortController?.signal, } ) .then( result => { // If we don't have media available, we should show an error instead of crashing the editor. @@ -186,6 +197,7 @@ export default function withMedia( mediaSource = MediaSource.Unknown ) { isLoading: false, } ); this.setAuthenticated( true ); + this.abortController = null; } ) .catch( this.handleApiError ); }; @@ -338,31 +350,73 @@ export default function withMedia( mediaSource = MediaSource.Unknown ) { this.setState( { path }, cb ); }; - render() { - const { account, isAuthenticated, isCopying, isLoading, media, nextHandle, path } = - this.state; - const { allowedTypes, multiple = false, noticeUI, onClose } = this.props; - + getTitle = () => { + const { getTitle } = this.props; + const { isCopying } = this.state; const defaultTitle = mediaSource !== 'jetpack_app_media' ? __( 'Select media', 'jetpack-external-media' ) : ''; const title = isCopying ? __( 'Inserting media', 'jetpack-external-media' ) : defaultTitle; + if ( getTitle ) { + return getTitle( { title, isCopying } ); + } + + return title; + }; + + getTexts = () => { + const { externalSource, isImport } = this.props; + const { isCopying } = this.state; + + if ( isImport ) { + return { + title: sprintf( + /* translators: %s is the name of the external media */ + __( 'Import from %s', 'jetpack-external-media' ), + externalSource.label + ), + description: sprintf( + /* translators: %s is the name of the external media */ + __( 'Import media from %s into the Media Library.', 'jetpack-external-media' ), + externalSource.label + ), + }; + } + + const defaultTitle = + mediaSource !== 'jetpack_app_media' + ? sprintf( + /* translators: %s is the name of the external media */ + __( 'Select media from %s', 'jetpack-external-media' ), + externalSource.label + ) + : ''; + return { + title: isCopying ? __( 'Inserting media', 'jetpack-external-media' ) : defaultTitle, + description: isCopying + ? __( + 'When the media is finished copying and inserting, you will be returned to the editor.', + 'jetpack-external-media' + ) + : __( + 'Select the media you would like to insert into the editor.', + 'jetpack-external-media', + /* dummy arg to avoid bad minification */ 0 + ), + }; + }; + + render() { + const { account, isAuthenticated, isCopying, isLoading, media, nextHandle, path } = + this.state; + const { allowedTypes, multiple = false, selectButtonText, noticeUI, onClose } = this.props; - const description = isCopying - ? __( - 'When the media is finished copying and inserting, you will be returned to the editor.', - 'jetpack-external-media' - ) - : __( - 'Select the media you would like to insert into the editor.', - 'jetpack-external-media', - /* dummy arg to avoid bad minification */ 0 - ); + const { title, description } = this.getTexts(); const describedby = 'jetpack-external-media-browser__description'; const classes = clsx( { - 'jetpack-external-media-browser': true, - 'jetpack-external-media-browser--is-copying': isCopying, + 'jetpack-external-media-browser__modal': true, + 'jetpack-external-media-browser__modal--is-copying': isCopying, 'is-jetpack-app-media': mediaSource === 'jetpack_app_media', } ); @@ -372,15 +426,20 @@ export default function withMedia( mediaSource = MediaSource.Unknown ) { title={ title } aria={ { describedby } } className={ classes } + size={ mediaOptions.modalSize } >
    { noticeUI } -

    +

    { description }

    Date: Thu, 6 Feb 2025 14:44:09 +0300 Subject: [PATCH 394/420] Added parsing of PHPDoc blocks based on nikic/php-parser and PHPDoc parser by phpstan. (#41306) * Initial commit. * Added arguments to description, fixed bugs. * Explain types to Phan. * Removed unneeded phpcs ignore. * Fixed more bugs. * Added since tags. * Added a couple of prop types, expanded the flattening routine. * Moved to nikic/php-parser instead of AST to simplify flattening of nodes. * Fixed tags, added pretty printing, multiple other fixes. * Updated the CLI command and removed markdown generation. * Added actions too. * Removed the Markdown parser library for now. * Explain things to Phan. * I was confused about nikic types as well. * Suppressed one Phan warning. * Simplified the runner file. * Simplified the generator, fixed the ignore, fixed the class constant failure. * Fixed param type. * Added logic for invalid phpdoc tags recovery. * Removed a generated JSON file that I accidentally committed. * Explain things to Phan. * Added comment purging to purify hook names. * Update tools/cli/commands/docs.js Co-authored-by: tbradsha <32492176+tbradsha@users.noreply.github.com> * Update tools/cli/helpers/doc-parser/src/class-doc-parser.php Co-authored-by: Brad Jorsch * Update tools/cli/helpers/doc-parser/src/class-doc-parser.php Co-authored-by: Brad Jorsch * Added path defaults, added output destination parameter. * Fixed the definition. * Renamed the method to better reflect its purpose. * Using UnexpectedValueException. * Removed unnecessary ignores. * Added parser-powered docblock extraction. * Removed old unused format switch. * Added a suppression on the line instead of in the function. * Added more esoteric filter and action calls. --------- Co-authored-by: tbradsha <32492176+tbradsha@users.noreply.github.com> Co-authored-by: Brad Jorsch --- composer.lock | 10 +- tools/cli/commands/docs.js | 38 +- tools/cli/helpers/doc-parser/composer.json | 4 +- tools/cli/helpers/doc-parser/runner.php | 140 +----- .../doc-parser/src/class-doc-parser.php | 442 ++++++++++++++++-- 5 files changed, 426 insertions(+), 208 deletions(-) diff --git a/composer.lock b/composer.lock index 3f3d79326e014..5994979fa0751 100644 --- a/composer.lock +++ b/composer.lock @@ -1368,16 +1368,16 @@ }, { "name": "phpcompatibility/phpcompatibility-wp", - "version": "2.1.5", + "version": "2.1.6", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", - "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082" + "reference": "80ccb1a7640995edf1b87a4409fa584cd5869469" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/01c1ff2704a58e46f0cb1ca9d06aee07b3589082", - "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/80ccb1a7640995edf1b87a4409fa584cd5869469", + "reference": "80ccb1a7640995edf1b87a4409fa584cd5869469", "shasum": "" }, "require": { @@ -1434,7 +1434,7 @@ "type": "open_collective" } ], - "time": "2024-04-24T21:37:59+00:00" + "time": "2025-01-16T22:34:19+00:00" }, { "name": "phpcsstandards/phpcsextra", diff --git a/tools/cli/commands/docs.js b/tools/cli/commands/docs.js index 00f5a45c6125f..479c22d02d37a 100644 --- a/tools/cli/commands/docs.js +++ b/tools/cli/commands/docs.js @@ -9,17 +9,20 @@ import path from 'path'; */ export function docsDefine( yargs ) { yargs.command( - 'docs [project]', - 'Parses documentation from a project and outputs them into a JSON file.', + 'docs [path] [dest]', + 'Parses PHPDoc documentation from a project and outputs it into a JSON file.', yarg => { - yarg.positional( 'project', { - describe: - 'Project in the form of type/name, e.g. plugins/jetpack, ' + - 'or type, e.g. plugins, or "all". Note that "all" means' + - 'the Jetpack plugin plus all packages.', - type: 'string', - default: 'all', - } ); + yarg + .positional( 'path', { + describe: 'e.g. path to a jetpack-production folder', + type: 'string', + default: '.', + } ) + .positional( 'dest', { + describe: 'path to where the generated file should be saved', + type: 'string', + default: '.', + } ); }, async argv => { await docsCli( argv ); @@ -38,16 +41,11 @@ export function docsDefine( yargs ) { * @param {argv} argv - the arguments passed. */ export async function docsCli( argv ) { - let paths; - if ( 'all' === argv.project ) { - // "All" is a keyword for Jetpack plus packages. - - paths = [ path.resolve( './projects/plugins/jetpack' ), path.resolve( './projects/packages' ) ]; - } else { - paths = [ path.resolve( `./projects/plugins/${ argv.project }` ) ]; - } - - const parser_options = [ path.resolve( './tools/cli/helpers/doc-parser/runner.php' ), ...paths ]; + const parser_options = [ + path.resolve( './tools/cli/helpers/doc-parser/runner.php' ), + argv.path, + argv.dest, + ]; let data = child_process.spawnSync( 'php', parser_options, { cwd: path.resolve( './' ), diff --git a/tools/cli/helpers/doc-parser/composer.json b/tools/cli/helpers/doc-parser/composer.json index afe5213e81ef2..a5606ea93c7e3 100644 --- a/tools/cli/helpers/doc-parser/composer.json +++ b/tools/cli/helpers/doc-parser/composer.json @@ -5,8 +5,8 @@ "license": "GPL-2.0-or-later", "require": { "php": ">=8.2", - "wordpress/phpdoc-parser": "dev-master", - "michelf/php-markdown": "^2.0" + "nikic/php-parser": "^5.4.0", + "phpstan/phpdoc-parser": "^2.0" }, "autoload": { "classmap": [ diff --git a/tools/cli/helpers/doc-parser/runner.php b/tools/cli/helpers/doc-parser/runner.php index 96ec7ab0cd061..a210c3fd547d0 100644 --- a/tools/cli/helpers/doc-parser/runner.php +++ b/tools/cli/helpers/doc-parser/runner.php @@ -5,147 +5,9 @@ * @package automattic/jetpack-doc-parser */ -use Michelf\Markdown; - /** * Loading the autoloader and starting the process. */ require __DIR__ . '/vendor/autoload.php'; -$args = array_slice( $argv, 1 ); -$parser = new \Automattic\Jetpack\Doc_Parser(); -$parser->generate( array( $args, 'phpdoc.json' ) ); - -$docs_json = json_decode( file_get_contents( __DIR__ . '/docs.json' ), true ); -'@phan-var array{parents:array} $docs_json'; - -$processed_docs = array(); -$result = array(); - -// Each parent file has to be present in the import. -foreach ( $docs_json['parents'] as $parent => $child_docs ) { - if ( ! in_array( $parent, $processed_docs, true ) ) { - printf( 'Extracting Markdown from %1$s.' . PHP_EOL, $parent ); - $result[] = get_html_from_markdown( $parent ); - $processed_docs[] = $parent; - } - - foreach ( $child_docs as $doc ) { - if ( in_array( $doc, $processed_docs, true ) ) { - continue; - } - - printf( 'Extracting Markdown from %1$s.' . PHP_EOL, $doc ); - $data = get_html_from_markdown( $doc ); - $data['parent'] = $parent; - $processed_docs[] = $doc; - - $result[] = $data; - } -} - -file_put_contents( './markdown.json', json_encode( $result ) ); -print( 'Data exported to markdown.json' . PHP_EOL ); - -/** - * Retrieves Markdown content from a specified file in HTML format. - * - * @param string $file_path the string containing the path to the file relative to Monorepo root. - * @return array [ content => the HTML content, title => document title ] - * @throws Exception $e if the file cannot be read. - */ -function get_html_from_markdown( $file_path ) { - - // We're assuming files are in the Monorepo root. - $parser = new Markdown(); - $markdown = file_get_contents( - dirname( __DIR__, 4 ) . DIRECTORY_SEPARATOR . $file_path - ); - - if ( false === $markdown ) { - throw new Exception( 'Could not read Markdown from ' . $file_path ); - } - - $contents = $parser->defaultTransform( $markdown ); - - $document = new DOMDocument(); - $document->loadHTML( - '' - . $contents - ); - - $doc_title = $file_path; - $anchors = $document->getElementsByTagName( 'a' ); - foreach ( $anchors as $anchor ) { - $link = parse_url( $anchor->getAttribute( 'href' ) ); - if ( ! $link || isset( $link['host'] ) || ! isset( $link['path'] ) ) { - continue; - } - - // Replace any relative links with absolute links to the GitHub repo. If it's deeper than 2 levels, it's a link to a file in the repo. - if ( str_starts_with( $link['path'], '../' ) || - str_starts_with( $link['path'], '/projects/' ) || - ( substr_count( $link['path'], '/' ) > 2 ) ) { - $link['path'] = preg_replace( '~^(\./|../)~', '', $link['path'], 1 ); // Remove leading ./ or ../ - $link['path'] = 'https://github.com/Automattic/jetpack/blob/trunk' . - ( ! str_starts_with( $link['path'], '/' ) ? '/' : '' ) . - $link['path']; - } - - // Handle docs that just live in github, ending in anything other than .md. - $extension = pathinfo( $link['path'], PATHINFO_EXTENSION ); - if ( ( $extension !== 'md' || $extension === '' ) && - ! str_starts_with( $link['path'], 'http' ) ) { - $link['path'] = preg_replace( '~^(\./|/)~', '', $link['path'], 1 ); // Remove leading ./ or / - $link['path'] = 'https://github.com/Automattic/jetpack/blob/trunk/' . - ( str_contains( $link['path'], 'examples/' ) ? 'docs/' : '' ) . - $link['path']; - } - - // If the Path starts with ./docs/ and contains 2 slashes, it's a relative link to another doc. - if ( ( str_starts_with( $link['path'], './docs' ) || - str_starts_with( $link['path'], '/docs/' ) || - str_starts_with( $file_path, 'docs/' ) ) && - substr_count( $link['path'], '/' ) <= 2 ) { - $link['path'] = str_replace( array( './docs/', '/docs/', './' ), '', $link['path'] ); - $link['path'] = '/docs-' . $link['path']; - } - - // Replace any non-github path endings with -md to link to the correct document page. - if ( ! str_starts_with( $link['path'], 'http' ) ) { - $link['path'] = str_replace( '.md', '-md', $link['path'] ); - } - - // Set the parsed attribute. - $anchor->setAttribute( 'href', $link['path'] . ( isset( $link['fragment'] ) ? '#' . $link['fragment'] : '' ) ); - - } - - $headers = $document->getElementsByTagName( 'h1' ); - if ( count( $headers ) ) { - $header = $headers->item( 0 ); - '@phan-var DOMElement $header'; - $doc_title = $header->textContent; - $header->remove(); - } - - // Add IDs to all headers. - $headers_ids = array(); - for ( $i = 1; $i <= 6; $i++ ) { - $elements = $document->getElementsByTagName( 'h' . $i ); - foreach ( $elements as $element ) { - $headers_ids[] = $element; - } - } - foreach ( $headers_ids as $header ) { - $header_id = strtolower( str_replace( ' ', '-', $header->textContent ) ); - $header_id = preg_replace( '/[^A-Za-z0-9\-]/', '', $header_id ); - $header->setAttribute( 'id', $header_id ); - } - - return array( - 'path' => $file_path, - 'title' => $doc_title, - 'content' => $document->saveHTML(), - ); -} +( new \Automattic\Jetpack\Doc_Parser() )->generate( $argv[1], $argv[2], 'phpdoc.json' ); diff --git a/tools/cli/helpers/doc-parser/src/class-doc-parser.php b/tools/cli/helpers/doc-parser/src/class-doc-parser.php index 52e344f9926be..f4014d0cdff8c 100644 --- a/tools/cli/helpers/doc-parser/src/class-doc-parser.php +++ b/tools/cli/helpers/doc-parser/src/class-doc-parser.php @@ -7,6 +7,26 @@ namespace Automattic\Jetpack; +use PhpParser\Node; +use PhpParser\Node\Expr\FuncCall; +use PhpParser\NodeFinder; +use PhpParser\NodeTraverser; +use PhpParser\NodeVisitor\ParentConnectingVisitor; +use PhpParser\ParserFactory; +use PhpParser\PrettyPrinter\Standard as PrettyPrinter; +use PHPStan\PhpDocParser\Ast\PhpDoc\InvalidTagValueNode; +use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; +use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode; +use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTextNode; +use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; +use PHPStan\PhpDocParser\Lexer\Lexer; +use PHPStan\PhpDocParser\Parser\ConstExprParser; +use PHPStan\PhpDocParser\Parser\ParserException; +use PHPStan\PhpDocParser\Parser\PhpDocParser; +use PHPStan\PhpDocParser\Parser\TokenIterator; +use PHPStan\PhpDocParser\Parser\TypeParser; +use PHPStan\PhpDocParser\ParserConfig; + /** * Converts PHPDoc markup into a template ready for import to a WordPress blog. */ @@ -14,31 +34,78 @@ class Doc_Parser { const PACKAGE_VERSION = '0.1.0-alpha'; + /** + * The PhpDocParser library lexer object for processing comment blocks. + * + * @var Lexer + * */ + public $lexer; + + /** + * The parser object to be used for parsing PHPDoc comments. + * + * @var PhpDocParser + * */ + public $pdparser; + + /** + * The PHP parser object to be used for parsing code. + * + * @var \PhpParser\ParserAbstract + */ + public $parser; + + /** + * The PrettyPrinter object. + * + * @var PrettyPrinter + */ + public $printer; + + /** + * Constructor for the Doc_Parser class. + */ + public function __construct() { + $config = new ParserConfig( array() ); + $this->lexer = new Lexer( $config ); + $constExprParser = new ConstExprParser( $config ); + $typeParser = new TypeParser( $config, $constExprParser ); + $this->pdparser = new PhpDocParser( $config, $typeParser, $constExprParser ); + $this->parser = ( new ParserFactory() )->createForHostVersion(); + $this->printer = new PrettyPrinter(); + } + /** * Generate a JSON file containing the PHPDoc markup, and save to filesystem. * - * @param Array $args this function takes a path as its argument, - * as well as optionally an output file name. + * @param String $path a path to look for files in. + * @param String $dest a path to place the result in. + * @param String $output_file the name to use for the output file, optional. */ - public function generate( $args ) { - list( $directories, $output_file ) = $args; + public function generate( $path, $dest, $output_file = 'phpdoc.json' ) { - if ( empty( $output_file ) ) { - $output_file = 'phpdoc.json'; - } + $directory = realpath( $path ); + $destination = realpath( $dest ); - $json = array(); - foreach ( $directories as $directory ) { - $directory = realpath( $directory ); - echo PHP_EOL; + if ( false === $directory ) { + echo "Can't find source directory at: " . $path . PHP_EOL; + exit( 1 ); + } - // Get data from the PHPDoc - $json[] = $this->get_phpdoc_data( $directory, 'raw' ); + if ( false === $destination ) { + echo "Can't find destination directory at: " . $dest . PHP_EOL; + exit( 1 ); } + $destination_path = $destination . DIRECTORY_SEPARATOR . $output_file; + + // Get data from the PHPDoc. + $json = $this->get_phpdoc_data( $directory ); + $output = json_encode( $json ); - // Write to $output_file - $error = ! file_put_contents( $output_file, $output ); + + // Write to $output_file. + $error = ! file_put_contents( $destination_path, $output ); if ( $error ) { printf( @@ -49,18 +116,16 @@ public function generate( $args ) { exit( 1 ); } - printf( 'Data exported to %1$s' . PHP_EOL, $output_file ); + printf( 'Data exported to %1$s' . PHP_EOL, $destination_path ); } /** * Generate the data from the PHPDoc markup. * * @param string $path Directory to scan for PHPDoc. - * @param string $format Optional. What format the data is returned in: [json*|array]. - * @return string + * @return string|array */ - protected function get_phpdoc_data( $path, $format = 'json' ) { - printf( 'Extracting PHPDoc from %1$s.' . PHP_EOL, $path ); + protected function get_phpdoc_data( $path ) { // Find the files to get the PHPDoc data from. $path can either be a folder or an absolute ref to a file. if ( is_file( $path ) ) { @@ -68,26 +133,12 @@ protected function get_phpdoc_data( $path, $format = 'json' ) { $path = dirname( $path ); } else { - ob_start(); - $files = \WP_Parser\get_wp_files( $path ); - $error = ob_get_clean(); - - if ( $error ) { - printf( 'Problem with %1$s: %2$s' . PHP_EOL, $path, $error ); - exit( 1 ); - } + $files = $this->get_wp_files( $path ); } // Maybe we should automatically import definitions from .gitignore. $ignore = array( - '/.sass-cache/', - '/node_modules', - 'vendor/', - 'jetpack_vendor/', - '/.nova/', - '/.vscode/', - '/logs', - '/allure-results/', + '/vendor/', 'tests/', 'wordpress/', ); @@ -104,15 +155,322 @@ function ( $item ) use ( $ignore ) { } ); + $nodeFinder = new NodeFinder(); + // Extract PHPDoc. - ob_start(); - $output = \WP_Parser\parse_files( $files, $path ); - ob_end_clean(); + $blocks = array(); + + foreach ( $files as $file ) { + printf( 'Extracting PHPDoc from %1$s.' . PHP_EOL, $file ); + + $stmts = $this->parser->parse( file_get_contents( $file ) ); + if ( empty( $stmts ) ) { + continue; + } + + // Attaching parent node references to each node. + $traverser = new NodeTraverser( new ParentConnectingVisitor() ); + $stmts = $traverser->traverse( $stmts ); + + // Find all calls to apply_filters or do_action. + $hookCalls = $nodeFinder->find( + $stmts, + function ( Node $node ) { + + if ( ! $node instanceof FuncCall ) { + return false; + } + + return $node->name->name === 'apply_filters' + || $node->name->name === 'do_action' + || $node->name->name === 'apply_filters_ref_array' + || $node->name->name === 'do_action_ref_array' + || $node->name->name === 'apply_filters_deprecated' + || $node->name->name === 'do_action_deprecated'; + } + ); + + $file_blocks = $this->get_hook_calls( $hookCalls ); + + $splfile = new \SplFileObject( $file ); + foreach ( $file_blocks as &$block ) { + + if ( null === $block['doc'] ) { + $docblock = array(); + + // Lines are zero indexed. + $start = $block['line'] - 2; + + $first = true; + while ( ! $splfile->eof() && $start >= 0 ) { + $splfile->seek( $start-- ); + $line = $splfile->current(); + + if ( $first && false === strpos( $line, '*/' ) ) { + + break; + } else { + $first = false; + } + + array_unshift( $docblock, $line ); + if ( false !== strpos( $line, '/*' ) ) { + break; + } + } + + $docblock = implode( '', $docblock ); + } else { + $docblock = $block['doc']->getText(); + } + + $block['doc'] = array(); + $block['doc']['description'] = ''; + $block['doc']['long_description'] = ''; + $block['doc']['tags'] = array(); + + try { + $tokens = new TokenIterator( $this->lexer->tokenize( $docblock ) ); + $phpDocNode = $this->pdparser->parse( $tokens ); + } catch ( ParserException $e ) { + continue; + } + + foreach ( $phpDocNode->children as $entry ) { + if ( ! $entry instanceof PhpDocTextNode ) { + continue; + } + + if ( ! empty( $entry->text ) ) { + $block['doc']['description'] .= + '

    ' + . str_replace( array( "\r\n", "\n", "\r" ), '

    ', $entry->text ) + . '

    '; + } + } + + $paramTags = $this->get_param_tag_nodes( $phpDocNode ); + $parameters = array(); + + foreach ( $paramTags as $paramTag ) { + $block['doc']['tags'][] = array( + 'name' => 'param', + 'content' => $paramTag->description, + 'types' => array( + (string) $paramTag->type, + ), + 'variable' => $paramTag->parameterName, + ); + + $parameters[] = (string) $paramTag . PHP_EOL; + } + + foreach ( + array( + '@since', + '@module', + '@deprecated', + '@see', + '@uses', + '@link', + '@type', + ) as $tagType + ) { + $sinceTags = $phpDocNode->getTagsByName( $tagType ); + foreach ( $sinceTags as $sinceTag ) { + $block['doc']['tags'][] = array( + 'name' => substr( $tagType, 1 ), + 'content' => (string) $sinceTag->value, + ); + } + } + } + + $filepath = ltrim( substr( $file, strlen( $path ) ), DIRECTORY_SEPARATOR ); + $blocks[] = array( + 'path' => $filepath, + 'root' => $path, + 'classes' => array( + array( + 'methods' => array( + array( + 'hooks' => $file_blocks, + ), + ), + ), + ), + ); + } + + return $blocks; + } + + /** + * Returns all param tag nodes. Tries to recover any parsing errors because of invalid markup. + * + * @param PhpDocNode $phpdocnode the parsed PHPDoc node. + * @return array an array of PhpDocTagNode objects. + */ + public function get_param_tag_nodes( PhpDocNode $phpdocnode ): array { + $tags = $phpdocnode->getParamTagValues(); + + // Looking for invalid param tags. + foreach ( $phpdocnode->getTags() as $tag ) { + '@phan-var \PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode $tag'; + + if ( $tag->name === '@param' && $tag->value instanceof InvalidTagValueNode ) { + $tag_value = $tag->value; + '@phan-var InvalidTagvalueNode $tag_value'; + + $pieces = explode( ' ', $tag_value->value ); + $type = new IdentifierTypeNode( $pieces[0] ); + $name = $pieces[1] ?? 'argument'; + $description = implode( ' ', array_slice( $pieces, 2 ) ); + $tags[] = new ParamTagValueNode( $type, true, $name, $description, false ); + } + } + + return $tags; + } + + /** + * Returns a list of PHP files in a folder, recursing into subfolders. Heavily inspired by + * the WordPress PHPDoc parser. + * + * @see https://github.com/WordPress/phpdoc-parser/blob/7fc2227d2d4fb73f9f0b6e233413f3f9f9840e80/lib/runner.php#L17 + * + * @param string $directory the folder to look in. + * + * @return array an array of filenames. + * @throws \Exception $e If unable to traverse the filesystem. + */ + public function get_wp_files( $directory ) { + $iterableFiles = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator( $directory ) + ); + $files = array(); + + foreach ( $iterableFiles as $file ) { + if ( 'php' !== $file->getExtension() ) { + continue; + } + + $files[] = $file->getPathname(); + } + + return $files; + } + + /** + * Returns an array of docblock annotations for apply_filter function calls, with keys being names of filters + * used. + * + * @param array $nodes Parser node objects for hook calls. + * @return array docblock annotations. + */ + public function get_hook_calls( $nodes ): array { + + $blocks = array(); + + foreach ( $nodes as $node ) { + + $arguments = $node->getArgs(); + $hook_name = array_shift( $arguments ); + $name_string = $this->pretty_print_hook_name( $hook_name ); + + if ( false === $name_string ) { + continue; + } + + // Purging any comments that could have been attributed to this argument. + $hook_name->setAttribute( 'comments', null ); + + // Traversing up the parent tree to get a comment block related to this call. + $n = $node; + $docComment = $n->getDocComment(); + while ( ! $docComment && $n && ! $n instanceof \PhpParser\Node\Stmt ) { + $n = $n->getAttribute( 'parent' ); + $docComment = $n->getDocComment(); + } + + $new_block = array( + 'type' => $node->name->name === 'apply_filters' ? 'filter' : 'action', + 'line' => $node->getLine(), + 'end_line' => $node->getEndLine() > 0 ? $node->getEndLine() : $node->getLine(), + 'name' => $this->pretty_print_hook_name( $hook_name ), + 'arguments' => array(), + 'doc' => $docComment, + ); + + foreach ( $arguments as $argument ) { + $new_block['arguments'][] = $this->printer->prettyPrint( array( $argument ) ); + } + $blocks[] = $new_block; + } + + return $blocks; + } + + /** + * Pretty prints the name for the hook, taking an argument object as input. + * + * @param Node\Arg $argument the first argument to the apply_filter or do_action call. + * @return false|String pretty printed argument name, or false in case this call has to be skipped. + * @throws \UnexpectedValueException On an unexpected argument component. + */ + public function pretty_print_hook_name( Node\Arg $argument ): false|string { + + if ( + $argument->value instanceof Node\Scalar\String_ + || $argument->value instanceof Node\Expr\ConstFetch + || $argument->value instanceof Node\Expr\ClassConstFetch + ) { + return trim( $this->printer->prettyPrint( array( $argument ) ), '\'' ); + + } elseif ( $argument->value instanceof Node\Scalar\InterpolatedString ) { + + $value = $argument->value; + '@phan-var Node\Scalar\InterpolatedString $value'; + + $result = ''; + + $parts = $value->parts; + '@phan-var (Node\Expr|Node\InterpolatedStringPart)[] $parts'; + + foreach ( $parts as $part ) { + if ( $part instanceof Node\InterpolatedStringPart ) { + $result .= $part->value; + } elseif ( $part instanceof Node\Expr ) { + $result .= '{' . $this->printer->prettyPrint( array( $part ) ) . '}'; + } else { + throw new \UnexpectedValueException( 'Unexpected interpolated string component of type ' . get_class( $part ) ); + } + } + return $result; + + } elseif ( $argument->value instanceof Node\Expr\BinaryOp\Concat ) { + + $value = $argument->value; + '@phan-var Node\Expr\BinaryOp\Concat $value'; + + $result = ''; + foreach ( array( 'left', 'right' ) as $property ) { + $part = $value->{$property}; + if ( $part instanceof Node\Scalar\String_ ) { + $result .= $part->value; + } elseif ( $part instanceof Node\Expr ) { // @phan-suppress-current-line PhanRedundantConditionInLoop + $result .= '{' . $this->printer->prettyPrint( array( $part ) ) . '}'; + } else { + throw new \UnexpectedValueException( 'Unexpected concatenated string component of type ' . get_class( $part ) ); + } + } + return $result; + } elseif ( $argument->value instanceof Node\Expr\Variable ) { - if ( 'json' === $format ) { - $output = json_encode( $output, JSON_PRETTY_PRINT ); + // We don't care about variable names, we can't really document them. + return false; } - return $output; + throw new \UnexpectedValueException( 'Unexpected function call argument of type ' . get_class( $argument->value ) ); } } From c02cec518bbb66bd5de5149f8aaf3b9ad6077e8e Mon Sep 17 00:00:00 2001 From: tbradsha <32492176+tbradsha@users.noreply.github.com> Date: Thu, 6 Feb 2025 07:05:59 -0700 Subject: [PATCH 395/420] Map block: Prevent PHP fatal when content is empty (#41583) * Return early if content is empty * Add comment * Add changelog --- projects/plugins/jetpack/changelog/fix-map_block_fatal | 4 ++++ projects/plugins/jetpack/extensions/blocks/map/map.php | 5 +++++ 2 files changed, 9 insertions(+) create mode 100644 projects/plugins/jetpack/changelog/fix-map_block_fatal diff --git a/projects/plugins/jetpack/changelog/fix-map_block_fatal b/projects/plugins/jetpack/changelog/fix-map_block_fatal new file mode 100644 index 0000000000000..8bbe1827941b0 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-map_block_fatal @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Map block: Catch error if content is empty. diff --git a/projects/plugins/jetpack/extensions/blocks/map/map.php b/projects/plugins/jetpack/extensions/blocks/map/map.php index c349388e9c578..df4513207082a 100644 --- a/projects/plugins/jetpack/extensions/blocks/map/map.php +++ b/projects/plugins/jetpack/extensions/blocks/map/map.php @@ -154,6 +154,11 @@ function render_single_block_page() { /** This filter is already documented in core/wp-includes/post-template.php */ $content = apply_filters( 'the_content', $post->post_content ); + // Return early if empty to prevent DOMDocument::loadHTML fatal. + if ( empty( $content ) ) { + return; + } + /* Suppress warnings */ libxml_use_internal_errors( true ); @$post_html->loadHTML( $content ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged From 7c65315e488cfe721792741d75674b12b6c64d53 Mon Sep 17 00:00:00 2001 From: Igor Zinovyev Date: Thu, 6 Feb 2025 17:10:05 +0300 Subject: [PATCH 396/420] Update broken PHPDoc blocks. (#41595) * Updated PHPDoc blocks to be properly parsed by the docs CLI command. * Changelog. --- .../changelog/update-broken-phpdoc | 5 +++++ .../classic-theme-helper/src/social-menu.php | 22 +++++++++---------- .../lib/class.core-rest-api-endpoints.php | 3 ++- .../jetpack/changelog/update-broken-phpdoc | 5 +++++ .../jetpack/modules/shortcodes/youtube.php | 3 ++- .../modules/theme-tools/social-menu.php | 22 +++++++++---------- 6 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 projects/packages/classic-theme-helper/changelog/update-broken-phpdoc create mode 100644 projects/plugins/jetpack/changelog/update-broken-phpdoc diff --git a/projects/packages/classic-theme-helper/changelog/update-broken-phpdoc b/projects/packages/classic-theme-helper/changelog/update-broken-phpdoc new file mode 100644 index 0000000000000..6ebf00a6f6c08 --- /dev/null +++ b/projects/packages/classic-theme-helper/changelog/update-broken-phpdoc @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Updated a comment, not changing any logic. + + diff --git a/projects/packages/classic-theme-helper/src/social-menu.php b/projects/packages/classic-theme-helper/src/social-menu.php index be89a1c68c36a..2c3e6660ad7da 100644 --- a/projects/packages/classic-theme-helper/src/social-menu.php +++ b/projects/packages/classic-theme-helper/src/social-menu.php @@ -23,17 +23,17 @@ function jetpack_social_menu_init() { return; } - /* - * Social Menu description. - * - * Rename the social menu description. - * - * @module theme-tools - * - * @since 3.9.0 - * - * @param string $social_menu_description Social Menu description - */ + /** + * Social Menu description. + * + * Rename the social menu description. + * + * @module theme-tools + * + * @since 3.9.0 + * + * @param string $social_menu_description Social Menu description + */ $social_menu_description = apply_filters( 'jetpack_social_menu_description', __( 'Social Menu', 'jetpack-classic-theme-helper' ) ); // Register a new menu location diff --git a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php index 73dcd2b2882ef..874d5110e7206 100644 --- a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php @@ -1204,6 +1204,7 @@ public static function is_site_verified_and_token( $request ) { || ( Jetpack::is_plugin_active( 'under-construction-page/under-construction.php' ) && isset( $ucp_options['status'] ) && 1 == $ucp_options['status'] ) // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual || ( Jetpack::is_plugin_active( 'ultimate-under-construction/ultimate-under-construction.php' ) && isset( $uuc_settings['enable'] ) && 1 == $uuc_settings['enable'] ) // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual || ( Jetpack::is_plugin_active( 'coming-soon/coming-soon.php' ) && isset( $csp4['status'] ) && ( 1 == $csp4['status'] || 2 == $csp4['status'] ) ) // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual + || /** * Allow plugins to mark a site as "under construction". * @@ -1211,7 +1212,7 @@ public static function is_site_verified_and_token( $request ) { * * @param false bool Is the site under construction? Default to false. */ - || true === apply_filters( 'jetpack_is_under_construction_plugin', false ) + true === apply_filters( 'jetpack_is_under_construction_plugin', false ) ) { return new WP_Error( 'forbidden', __( 'Site is under construction and cannot be verified', 'jetpack' ) ); } diff --git a/projects/plugins/jetpack/changelog/update-broken-phpdoc b/projects/plugins/jetpack/changelog/update-broken-phpdoc new file mode 100644 index 0000000000000..cbd775e892e5d --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-broken-phpdoc @@ -0,0 +1,5 @@ +Significance: patch +Type: other +Comment: Updated a comment, not changing any logic. + + diff --git a/projects/plugins/jetpack/modules/shortcodes/youtube.php b/projects/plugins/jetpack/modules/shortcodes/youtube.php index bf0cb546ceeb3..d97eb29b42f87 100644 --- a/projects/plugins/jetpack/modules/shortcodes/youtube.php +++ b/projects/plugins/jetpack/modules/shortcodes/youtube.php @@ -623,6 +623,7 @@ function wpcom_youtube_oembed_fetch_url( $provider, $url ) { if ( ! is_admin() + && /** * Allow oEmbeds in Jetpack's Comment form. * @@ -632,7 +633,7 @@ function wpcom_youtube_oembed_fetch_url( $provider, $url ) { * * @param int $allow_oembed Option to automatically embed all plain text URLs. */ - && apply_filters( 'jetpack_comments_allow_oembed', true ) + apply_filters( 'jetpack_comments_allow_oembed', true ) // No need for this on WordPress.com, this is done for multiple shortcodes at a time there. && ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) ) { diff --git a/projects/plugins/jetpack/modules/theme-tools/social-menu.php b/projects/plugins/jetpack/modules/theme-tools/social-menu.php index c4feb6bacdec0..c639085071c53 100644 --- a/projects/plugins/jetpack/modules/theme-tools/social-menu.php +++ b/projects/plugins/jetpack/modules/theme-tools/social-menu.php @@ -25,17 +25,17 @@ function jetpack_social_menu_init() { return; } - /* - * Social Menu description. - * - * Rename the social menu description. - * - * @module theme-tools - * - * @since 3.9.0 - * - * @param string $social_menu_description Social Menu description - */ + /** + * Social Menu description. + * + * Rename the social menu description. + * + * @module theme-tools + * + * @since 3.9.0 + * + * @param string $social_menu_description Social Menu description + */ $social_menu_description = apply_filters( 'jetpack_social_menu_description', __( 'Social Menu', 'jetpack' ) ); // Register a new menu location From 7991e1b9f29db74d8020fb6f41b4d13d180bb710 Mon Sep 17 00:00:00 2001 From: Calypso Bot Date: Thu, 6 Feb 2025 16:48:31 +0200 Subject: [PATCH 397/420] phan: Update custom stubs (#41588) Co-authored-by: matticbot --- .phan/stubs/akismet-stubs.php | 2 +- .phan/stubs/gutenberg-stubs.php | 2 +- .phan/stubs/woocommerce-internal-stubs.php | 2 +- .phan/stubs/woocommerce-payments-stubs.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.phan/stubs/akismet-stubs.php b/.phan/stubs/akismet-stubs.php index 74b8062fe05be..0ce1519bcf851 100644 --- a/.phan/stubs/akismet-stubs.php +++ b/.phan/stubs/akismet-stubs.php @@ -1,6 +1,6 @@ Date: Thu, 6 Feb 2025 10:08:26 -0500 Subject: [PATCH 398/420] actions: Request Garage as reviewer for Phan stubs PRs (#41603) --- .github/workflows/update-phan-stubs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-phan-stubs.yml b/.github/workflows/update-phan-stubs.yml index 46c2230c4ce2b..944b9e14f9523 100644 --- a/.github/workflows/update-phan-stubs.yml +++ b/.github/workflows/update-phan-stubs.yml @@ -63,7 +63,7 @@ jobs: git checkout -b update/phan-custom-stubs git commit -am 'phan: Update custom stubs' git push origin HEAD - gh pr create --title 'phan: Update custom stubs' --body 'This is an automatic update generated by a GitHub Action. If closed it will be recreated the next time the action runs.' --label '[Pri] Normal' --label '[Type] Janitorial' --label '[Status] Needs Review' + gh pr create --title 'phan: Update custom stubs' --body 'This is an automatic update generated by a GitHub Action. If closed it will be recreated the next time the action runs.' --label '[Pri] Normal' --label '[Type] Janitorial' --label '[Status] Needs Review' --reviewer Automattic/jetpack-garage - name: Update existing branch if: steps.changes.outputs.needed == 'true' && steps.changes.outputs.has-branch == 'true' From 13ea3bc21445521e1ba441e60f64fa5c6cfa23f1 Mon Sep 17 00:00:00 2001 From: Cris Busquets Date: Thu, 6 Feb 2025 17:47:31 +0100 Subject: [PATCH 399/420] Newsletter: Fix Dotcom account connection copy (#39882) * Improved copy * changelog --------- Co-authored-by: Brandon Kraft --- .../jetpack/_inc/client/components/settings-card/index.jsx | 5 ++++- .../changelog/fix-dotcom-account-connection-newsletter | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/fix-dotcom-account-connection-newsletter diff --git a/projects/plugins/jetpack/_inc/client/components/settings-card/index.jsx b/projects/plugins/jetpack/_inc/client/components/settings-card/index.jsx index 8cb3d077921bd..8a7f201613c1a 100644 --- a/projects/plugins/jetpack/_inc/client/components/settings-card/index.jsx +++ b/projects/plugins/jetpack/_inc/client/components/settings-card/index.jsx @@ -447,7 +447,10 @@ export const SettingsCard = inprops => { return ( Date: Thu, 6 Feb 2025 11:55:25 -0500 Subject: [PATCH 400/420] Add comment to vaultpress.php to ensure SAST false positives are easier to flag (#37326) Add comment to save others time trying to write a PoC for a non-exploitable issue --- projects/plugins/vaultpress/changelog/patch-37326 | 5 +++++ projects/plugins/vaultpress/vaultpress.php | 4 ++++ 2 files changed, 9 insertions(+) create mode 100644 projects/plugins/vaultpress/changelog/patch-37326 diff --git a/projects/plugins/vaultpress/changelog/patch-37326 b/projects/plugins/vaultpress/changelog/patch-37326 new file mode 100644 index 0000000000000..e1b629fb1bdd8 --- /dev/null +++ b/projects/plugins/vaultpress/changelog/patch-37326 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Only adding inline documentation. No code changes. + + diff --git a/projects/plugins/vaultpress/vaultpress.php b/projects/plugins/vaultpress/vaultpress.php index 75b35de25834b..d0928cee2cfa4 100644 --- a/projects/plugins/vaultpress/vaultpress.php +++ b/projects/plugins/vaultpress/vaultpress.php @@ -1819,6 +1819,10 @@ function parse_request( $wp ) { die( 0 ); break; case 'exec': + /* + * Despite appearances, this code is not an arbitrary code execution vulnerability due to the + * $this->validate_api_signature() check above. Static analysis tools will probably flag this. + */ $code = $_POST['code']; if ( !$code ) $this->response( "No Code Found" ); From 854e36c413c7866c276521aaad24ee7543ed5bd0 Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Thu, 6 Feb 2025 14:46:26 -0300 Subject: [PATCH 401/420] Jetpack SEO: process assistant results summary (#41585) * address primary buttons styles * lower delay to 1500 on all steps * update onStart signature and add includeResults on steps * add results collection and summary process, remove unnecessary props on hooks, add includeResults where needed along with label * changelog --- .../fix-jetpack-seo-assistant-results-summary | 4 + .../seo-assistant/assistant-wizard.tsx | 44 +++++++---- .../components/seo-assistant/style.scss | 22 +++--- .../components/seo-assistant/types.tsx | 13 +++- .../seo-assistant/use-completion-step.tsx | 78 +++++++++++++------ .../use-meta-description-step.tsx | 10 +-- .../seo-assistant/use-title-step.tsx | 10 +-- .../seo-assistant/use-welcome-step.tsx | 2 +- 8 files changed, 115 insertions(+), 68 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-results-summary diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-results-summary b/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-results-summary new file mode 100644 index 0000000000000..3973a3d558e0c --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-results-summary @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack SEO: add completion summary step diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx index d7cc994da7a87..49e6369ede00e 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/assistant-wizard.tsx @@ -22,7 +22,7 @@ export default function AssistantWizard( { close } ) { stepsEndRef.current?.scrollIntoView( { behavior: 'smooth' } ); }; const keywordsInputRef = useRef( null ); - const [ , setResults ] = useState( {} ); + const [ results, setResults ] = useState( {} ); const [ lastStepValue, setLastStepValue ] = useState( '' ); useEffect( () => { @@ -52,9 +52,10 @@ export default function AssistantWizard( { close } ) { await currentStepData?.onStart( { fromSkip: ! lastStepValue, stepValue: lastStepValue, + results, } ); setIsBusy( false ); - }, [ currentStepData, lastStepValue ] ); + }, [ currentStepData, lastStepValue, results ] ); const handleNext = useCallback( () => { debug( 'handleNext, stepsCount', stepsCount ); @@ -97,22 +98,25 @@ export default function AssistantWizard( { close } ) { setIsBusy( true ); const stepValue = await steps[ currentStep ]?.onSubmit?.(); debug( 'stepValue', stepValue ); - const newResults = { - [ steps[ currentStep ].id ]: { - value: steps[ currentStep ].value.trim(), - type: steps[ currentStep ].type, - label: steps[ currentStep ].label, - }, - }; - debug( 'newResults', newResults ); - setResults( prev => ( { ...prev, ...newResults } ) ); + if ( steps[ currentStep ].includeInResults ) { + const newResults = { + [ steps[ currentStep ].id ]: { + value: stepValue?.trim?.(), + type: steps[ currentStep ].type, + label: steps[ currentStep ].label, + }, + }; + debug( 'newResults', newResults ); + setResults( prev => ( { ...prev, ...newResults } ) ); + } debug( 'set last step value', stepValue ); - setLastStepValue( stepValue.trim() ); + setLastStepValue( stepValue?.trim?.() ); if ( steps[ currentStep ]?.type === 'completion' ) { + debug( 'completion step, closing wizard' ); handleDone(); } else { - // always give half a second before moving forward + debug( 'step type', steps[ currentStep ]?.type ); handleNext(); } }, [ currentStep, handleDone, handleNext, steps ] ); @@ -139,6 +143,7 @@ export default function AssistantWizard( { close } ) { const handleBack = () => { if ( currentStep > 1 ) { + setIsBusy( true ); debug( 'moving back to ' + ( currentStep - 1 ) ); setCurrentStep( currentStep - 1 ); setCurrentStepData( steps[ currentStep - 1 ] ); @@ -148,8 +153,19 @@ export default function AssistantWizard( { close } ) { const handleSkip = useCallback( async () => { setIsBusy( true ); await steps[ currentStep ]?.onSkip?.(); + const step = steps[ currentStep ]; + if ( ! results[ step.id ] && step.includeInResults ) { + setResults( prev => ( { + ...prev, + [ step.id ]: { + value: '', + type: step.type, + label: step.label, + }, + } ) ); + } handleNext(); - }, [ currentStep, steps, handleNext ] ); + }, [ currentStep, steps, handleNext, results ] ); const handleRetry = useCallback( async () => { debug( 'handleRetry' ); diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss index bd808045c8931..0acaea3025d52 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -17,6 +17,15 @@ width: unset; } + .components-button.is-primary { + background-color: #3858E9; + } + + .components-button.is-secondary { + box-shadow: inset 0 0 0 1px #3858e9, 0 0 0 currentColor; + color: #3858e9; + } + &__header { flex: 0 0 auto; display: flex; @@ -154,10 +163,6 @@ box-shadow: none; outline: 0; } - - .components-button.is-primary { - background-color: #3858E9; - } } // submit and retry buttons @@ -204,15 +209,6 @@ align-items: center; gap: 16px; animation: assistantInputAppear 0.3s ease-out; - - .components-button.is-primary { - background-color: #3858E9; - } - - .components-button.is-secondary { - box-shadow: inset 0 0 0 1px #3858e9, 0 0 0 currentColor; - color: #3858e9; - } } &__completion { diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx index cca9bcebce3e3..4556ec26f338e 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/types.tsx @@ -11,22 +11,29 @@ export interface Message { export type OptionMessage = Pick< Message, 'id' | 'content' >; +export interface Results { + [ key: string ]: { + value: string; + type: string; + label: string; + }; +} + export interface Step { id: string; title: string; label?: string; messages: Message[]; type: StepType; - onStart?: ( options?: { fromSkip: boolean; stepValue: string } ) => void; + onStart?: ( options?: { fromSkip: boolean; stepValue: string; results: Results } ) => void; onSubmit?: () => Promise< string >; onSkip?: () => void; value?: string; setValue?: | React.Dispatch< React.SetStateAction< string > > | React.Dispatch< React.SetStateAction< Array< string > > >; - setCompleted?: React.Dispatch< React.SetStateAction< boolean > >; - completed?: boolean; autoAdvance?: number; + includeInResults?: boolean; // Input step properties placeholder?: string; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx index 221b3a01b1751..50ad239eeb007 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-completion-step.tsx @@ -1,16 +1,16 @@ import { createInterpolateElement, useCallback, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { useMessages } from './wizard-messages'; -import type { Step } from './types'; +import type { Step, Results } from './types'; export const useCompletionStep = (): Step => { - const [ keywords, setKeywords ] = useState( '' ); - const [ completed, setCompleted ] = useState( false ); + const [ value, setValue ] = useState( '' ); const { messages, setMessages, addMessage } = useMessages(); const startHandler = useCallback( - async ( { fromSkip } ) => { + async ( { fromSkip, results } ) => { const firstMessages = []; + if ( fromSkip ) { firstMessages.push( { content: __( 'Skipped!', 'jetpack' ), @@ -19,32 +19,62 @@ export const useCompletionStep = (): Step => { } ); } setMessages( firstMessages ); - await new Promise( resolve => setTimeout( resolve, 2000 ) ); + + await new Promise( resolve => setTimeout( resolve, 1500 ) ); + + const resultsString = Object.values( results ) + .map( ( result: Results[ string ] ) => `${ result.value ? '✅' : '❌' } ${ result.label }` ) + .join( '
    ' ); + addMessage( { content: createInterpolateElement( - "Here's your updated checklist:
    ✅ Title
    ✅ Meta description

    ", + `Here's your updated checklist:
    ${ resultsString }

    `, { br:
    , } ), id: '1', } ); - addMessage( { - content: createInterpolateElement( - __( - 'SEO optimization complete! 🎉
    Your blog post is now search-engine friendly.', - 'jetpack' + + const incomplete: { total: number; completed: number } = Object.values( results ).reduce( + ( acc: { total: number; completed: number }, result: Results[ string ] ) => { + const total = acc.total + 1; + const completed = acc.completed + ( result.value ? 1 : 0 ); + return { total, completed }; + }, + { total: 0, completed: 0 } + ) as { total: number; completed: number }; + + const incompleteString = + incomplete.completed === incomplete.total + ? '' + : `${ incomplete.completed } out of ${ incomplete.total }`; + + if ( incompleteString ) { + addMessage( { + content: createInterpolateElement( + `You've optimized ${ incompleteString } items! 🎉
    Your post is looking great! Come back anytime to complete the rest.`, + { + strong: , + br:
    , + } ), - { br:
    , strong: } - ), - showIcon: false, - id: '3', - } ); - addMessage( { - content: __( 'Happy blogging! 😊', 'jetpack' ), - showIcon: false, - id: '4', - } ); + id: '2', + } ); + } else { + addMessage( { + content: createInterpolateElement( + __( + 'SEO optimization complete! 🎉
    Your blog post is now search-engine friendly.
    Happy blogging! 😊', + 'jetpack' + ), + { br:
    , strong: } + ), + showIcon: false, + id: '3', + } ); + } + return 'completion'; }, [ setMessages, addMessage ] @@ -58,9 +88,7 @@ export const useCompletionStep = (): Step => { type: 'completion', onStart: startHandler, submitCtaLabel: __( 'Done!', 'jetpack' ), - completed, - setCompleted, - value: keywords, - setValue: setKeywords, + value, + setValue, }; }; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx index ad37940d48b7d..4a37081440edb 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-meta-description-step.tsx @@ -9,7 +9,6 @@ export const useMetaDescriptionStep = (): Step => { const [ metaDescriptionOptions, setMetaDescriptionOptions ] = useState< OptionMessage[] >( [] ); const { messages, setMessages, addMessage, editLastMessage, setSelectedMessage } = useMessages(); const { editPost } = useDispatch( 'core/editor' ); - const [ completed, setCompleted ] = useState( false ); const handleMetaDescriptionSelect = useCallback( ( option: OptionMessage ) => { @@ -22,7 +21,6 @@ export const useMetaDescriptionStep = (): Step => { const handleMetaDescriptionSubmit = useCallback( async () => { await editPost( { meta: { advanced_seo_description: selectedMetaDescription } } ); addMessage( { content: __( 'Meta description updated! ✅', 'jetpack' ) } ); - setCompleted( true ); return selectedMetaDescription; }, [ selectedMetaDescription, addMessage, editPost ] ); @@ -54,7 +52,7 @@ export const useMetaDescriptionStep = (): Step => { 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', }, ] ), - 3000 + 1500 ) ); } @@ -90,7 +88,7 @@ export const useMetaDescriptionStep = (): Step => { 'Explore breathtaking flower and plant photography in our Flora Guide, featuring tips and inspiration for gardening and plant enthusiasts to enhance their outdoor spaces.', }, ] ), - 3000 + 1500 ) ); @@ -101,6 +99,7 @@ export const useMetaDescriptionStep = (): Step => { return { id: 'meta', title: __( 'Add meta description', 'jetpack' ), + label: __( 'Meta description', 'jetpack' ), messages: messages, type: 'options', options: metaDescriptionOptions, @@ -112,7 +111,6 @@ export const useMetaDescriptionStep = (): Step => { onStart: handleMetaDescriptionGenerate, value: selectedMetaDescription, setValue: setSelectedMetaDescription, - completed, - setCompleted, + includeInResults: true, }; }; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx index 87f2764b82385..51d6b8171d3c6 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-title-step.tsx @@ -9,7 +9,6 @@ export const useTitleStep = (): Step => { const [ titleOptions, setTitleOptions ] = useState< OptionMessage[] >( [] ); const { editPost } = useDispatch( 'core/editor' ); const { messages, setMessages, addMessage, editLastMessage, setSelectedMessage } = useMessages(); - const [ completed, setCompleted ] = useState( false ); const [ prevStepValue, setPrevStepValue ] = useState(); const handleTitleSelect = useCallback( @@ -57,7 +56,7 @@ export const useTitleStep = (): Step => { 'Flora Guide: Beautiful Photos of Flowers and Plants for Gardening Enthusiasts', }, ] ), - 3000 + 1500 ) ); } @@ -107,7 +106,7 @@ export const useTitleStep = (): Step => { 'Flora Guide: Beautiful Photos of Flowers and Plants for Gardening Enthusiasts', }, ] ), - 2000 + 1500 ) ); setTitleOptions( [ ...titleOptions, ...newTitles ] ); @@ -117,13 +116,13 @@ export const useTitleStep = (): Step => { const handleTitleSubmit = useCallback( async () => { await editPost( { title: selectedTitle, meta: { jetpack_seo_html_title: selectedTitle } } ); addMessage( { content: __( 'Title updated! ✅', 'jetpack' ) } ); - setCompleted( true ); return selectedTitle; }, [ selectedTitle, addMessage, editPost ] ); return { id: 'title', title: __( 'Optimise Title', 'jetpack' ), + label: __( 'Title', 'jetpack' ), messages, type: 'options', options: titleOptions, @@ -135,7 +134,6 @@ export const useTitleStep = (): Step => { onStart: handleTitleGenerate, value: selectedTitle, setValue: setSelectedTitle, - completed, - setCompleted, + includeInResults: true, }; }; diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-welcome-step.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-welcome-step.tsx index 5163f890b8dc0..6b0d1eb7f24b7 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-welcome-step.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/use-welcome-step.tsx @@ -26,6 +26,6 @@ export const useWelcomeStep = (): Step => { id: '2', }, ], - autoAdvance: 2000, + autoAdvance: 1500, }; }; From 347017a1ebd95d7fb8ba7a1d27c6a894bb832a82 Mon Sep 17 00:00:00 2001 From: Erick Danzer Date: Thu, 6 Feb 2025 12:52:03 -0700 Subject: [PATCH 402/420] Forms: fix invalid field ids (#41564) --- .../forms/changelog/fix-invalid-field-ids | 4 +++ .../contact-form/class-contact-form-field.php | 26 ++++++++++++++++--- .../jetpack/changelog/fix-invalid-field-ids | 4 +++ 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-invalid-field-ids create mode 100644 projects/plugins/jetpack/changelog/fix-invalid-field-ids diff --git a/projects/packages/forms/changelog/fix-invalid-field-ids b/projects/packages/forms/changelog/fix-invalid-field-ids new file mode 100644 index 0000000000000..ced045f8f6a66 --- /dev/null +++ b/projects/packages/forms/changelog/fix-invalid-field-ids @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: Fix invalid html IDs. diff --git a/projects/packages/forms/src/contact-form/class-contact-form-field.php b/projects/packages/forms/src/contact-form/class-contact-form-field.php index 52e5f6385e6e6..85b78314041eb 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-field.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-field.php @@ -655,7 +655,7 @@ public function render_textarea_field( $id, $label, $value, $class, $required, $ /** * Return the HTML for the radio field. * - * @param int $id - the ID. + * @param string $id - the ID (starts with 'g' - see constructor). * @param string $label - the label. * @param string $value - the value of the field. * @param string $class - the field class. @@ -670,11 +670,20 @@ public function render_radio_field( $id, $label, $value, $class, $required, $req $field_style = 'style="' . $this->option_styles . '"'; + $used_html_ids = array(); + foreach ( (array) $this->get_attribute( 'options' ) as $option_index => $option ) { $option = Contact_Form_Plugin::strip_tags( $option ); if ( is_string( $option ) && $option !== '' ) { $radio_value = $this->get_option_value( $this->get_attribute( 'values' ), $option_index, $option ); - $radio_id = "$id-$radio_value"; + $radio_id = $id . '-' . sanitize_html_class( $radio_value ); + + // If exact id was already used in this radio group, append option index. + // Multiple 'blue' options would give id-blue, id-blue-1, id-blue-2, etc. + if ( isset( $used_html_ids[ $radio_id ] ) ) { + $radio_id .= '-' . $option_index; + } + $used_html_ids[ $radio_id ] = true; $field .= "

    "; $field .= "option_styles . '"'; + $used_html_ids = array(); + foreach ( (array) $this->get_attribute( 'options' ) as $option_index => $option ) { $option = Contact_Form_Plugin::strip_tags( $option ); if ( is_string( $option ) && $option !== '' ) { $checkbox_value = $this->get_option_value( $this->get_attribute( 'values' ), $option_index, $option ); - $checkbox_id = "$id-$checkbox_value"; + $checkbox_id = $id . '-' . sanitize_html_class( $checkbox_value ); + + // If exact id was already used in this checkbox group, append option index. + // Multiple 'blue' options would give id-blue, id-blue-1, id-blue-2, etc. + if ( isset( $used_html_ids[ $checkbox_id ] ) ) { + $checkbox_id .= '-' . $option_index; + } + $used_html_ids[ $checkbox_id ] = true; $field .= "

    "; $field .= " Date: Thu, 6 Feb 2025 12:00:51 -0800 Subject: [PATCH 403/420] Forms: Fix form submissions across pages that have pagination applied (#41407) * Forms: Add new page support for forms This Pr adds support for form processing across multiple pages * changelog * sanitize with absint instead of sanitize_text_field * guard against invalid $postdata * Store entry_page and use in in there permalink * Consoludate all the non printable fields --- .../changelog/fix-form-submit-miulti-page | 4 ++ ...class-wpcom-rest-api-v2-endpoint-forms.php | 8 +--- .../forms/src/contact-form/class-admin.php | 15 ++++--- .../class-contact-form-plugin.php | 26 ++++++++++++- .../src/contact-form/class-contact-form.php | 39 +++++++++++++++---- .../changelog/fix-form-submit-miulti-page | 4 ++ 6 files changed, 72 insertions(+), 24 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-form-submit-miulti-page create mode 100644 projects/plugins/jetpack/changelog/fix-form-submit-miulti-page diff --git a/projects/packages/forms/changelog/fix-form-submit-miulti-page b/projects/packages/forms/changelog/fix-form-submit-miulti-page new file mode 100644 index 0000000000000..bf6cbe84766ef --- /dev/null +++ b/projects/packages/forms/changelog/fix-form-submit-miulti-page @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Forms: Add support for having multiple forms accross paginated pages diff --git a/projects/packages/forms/src/class-wpcom-rest-api-v2-endpoint-forms.php b/projects/packages/forms/src/class-wpcom-rest-api-v2-endpoint-forms.php index ad29686fb12f2..0e9b8295363dd 100644 --- a/projects/packages/forms/src/class-wpcom-rest-api-v2-endpoint-forms.php +++ b/projects/packages/forms/src/class-wpcom-rest-api-v2-endpoint-forms.php @@ -159,13 +159,7 @@ public function get_responses( $request ) { array_diff_key( $filter_args, array( 'post_parent' => '' ) ) ); - $base_fields = array( - 'email_marketing_consent' => '', - 'entry_title' => '', - 'entry_permalink' => '', - 'feedback_id' => '', - ); - + $base_fields = Contact_Form_Plugin::NON_PRINTABLE_FIELDS; $data_defaults = array( '_feedback_author' => '', '_feedback_author_email' => '', diff --git a/projects/packages/forms/src/contact-form/class-admin.php b/projects/packages/forms/src/contact-form/class-admin.php index 0f2ec1379352c..77bb034a45c59 100644 --- a/projects/packages/forms/src/contact-form/class-admin.php +++ b/projects/packages/forms/src/contact-form/class-admin.php @@ -702,12 +702,6 @@ public function grunion_manage_post_column_from( $post ) { * @return void */ public function grunion_manage_post_column_response( $post ) { - $non_printable_keys = array( - 'email_marketing_consent', - 'entry_title', - 'entry_permalink', - 'feedback_id', - ); $post_content = get_post_field( 'post_content', $post->ID ); $content = explode( '', $post_content ); @@ -750,7 +744,12 @@ public function grunion_manage_post_column_response( $post ) { } } - $response_fields = array_diff_key( $response_fields, array_flip( $non_printable_keys ) ); + $url = get_permalink( $post->post_parent ); + if ( isset( $response_fields['entry_page'] ) ) { + $url = add_query_arg( 'page', $response_fields['entry_page'], $url ); + } + + $response_fields = array_diff_key( $response_fields, array_flip( array_keys( Contact_Form_Plugin::NON_PRINTABLE_FIELDS ) ) ); echo '

    '; echo ''; } diff --git a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php index dc493a171a08f..b022a52e2a67c 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-plugin.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-plugin.php @@ -52,6 +52,20 @@ class Contact_Form_Plugin { */ private $pde_email_address = ''; + /* + * Field keys that might be present in the entry json but we don't want to show to the admin + * since they not something that the visitor entered into the form. + * + * @var array + */ + const NON_PRINTABLE_FIELDS = array( + 'entry_title' => '', + 'email_marketing_consent' => '', + 'entry_permalink' => '', + 'entry_page' => '', + 'feedback_id' => '', + ); + /** * Initializing function. */ @@ -712,8 +726,16 @@ public function process_form_submission() { // Process the content to populate Contact_Form::$last if ( $post ) { + if ( str_contains( $post->post_content, '' ) ) { + $postdata = generate_postdata( $post ); + $page = isset( $_POST['page'] ) ? absint( wp_unslash( $_POST['page'] ) ) : null; // phpcs:Ignore WordPress.Security.NonceVerification.Missing + $paged = isset( $page ) ? $page : 1; + $content = isset( $postdata['pages'][ $paged - 1 ] ) ? $postdata['pages'][ $paged - 1 ] : $post->post_content; + } else { + $content = $post->post_content; + } /** This filter is already documented in core. wp-includes/post-template.php */ - apply_filters( 'the_content', $post->post_content ); + apply_filters( 'the_content', $content ); } } @@ -1148,7 +1170,7 @@ public function get_post_meta_for_csv_export( $post_id, $has_json_data = false ) $content_fields = self::parse_fields_from_content( $post_id ); $all_fields = isset( $content_fields['_feedback_all_fields'] ) ? $content_fields['_feedback_all_fields'] : array(); $md = $has_json_data - ? array_diff_key( $all_fields, array_flip( array( 'entry_title', 'email_marketing_consent', 'entry_permalink', 'feedback_id' ) ) ) + ? array_diff_key( $all_fields, array_flip( array_keys( self::NON_PRINTABLE_FIELDS ) ) ) : (array) get_post_meta( $post_id, '_feedback_extra_fields', true ); $md['-3_response_date'] = get_the_date( 'Y-m-d H:i:s', $post_id ); diff --git a/projects/packages/forms/src/contact-form/class-contact-form.php b/projects/packages/forms/src/contact-form/class-contact-form.php index 96bea7549ca73..764c7d52240de 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form.php +++ b/projects/packages/forms/src/contact-form/class-contact-form.php @@ -82,7 +82,7 @@ class Contact_Form extends Contact_Form_Shortcode { * @param string $content - the content. */ public function __construct( $attributes, $content = null ) { - global $post; + global $post, $page; // Set up the default subject and recipient for this form. $default_to = ''; @@ -123,7 +123,7 @@ public function __construct( $attributes, $content = null ) { if ( ! isset( $attributes['id'] ) ) { $attributes['id'] = ''; } - $attributes['id'] = $attributes['id'] . '-' . ( count( self::$forms ) + 1 ); + $attributes['id'] = $attributes['id'] . '-' . ( count( self::$forms ) + 1 ) . '-' . $page; } $this->hash = sha1( wp_json_encode( $attributes ) ); @@ -249,8 +249,7 @@ public static function style_on() { * @return string HTML for the concat form. */ public static function parse( $attributes, $content ) { - global $post; - + global $post, $page; // $page is used in the contact-form submission redirect if ( Settings::is_syncing() ) { return ''; } @@ -347,6 +346,9 @@ public static function parse( $attributes, $content ) { } else { // Submit form to the post permalink $url = get_permalink(); + if ( $page ) { + $url = add_query_arg( 'page', $page, $url ); + } } // For SSL/TLS page. See RFC 3986 Section 4.2 @@ -364,7 +366,7 @@ public static function parse( $attributes, $content ) { * @param $post $GLOBALS['post'] Post global variable. * @param int $id Contact Form ID. */ - $url = apply_filters( 'grunion_contact_form_form_action', "{$url}#contact-form-{$id}", $GLOBALS['post'], $id ); + $url = apply_filters( 'grunion_contact_form_form_action', "{$url}#contact-form-{$id}", $GLOBALS['post'], $id, $page ); $has_submit_button_block = str_contains( $content, 'wp-block-jetpack-button' ); $form_classes = 'contact-form commentsblock'; $post_title = $post->post_title ?? ''; @@ -434,6 +436,10 @@ public static function parse( $attributes, $content ) { $r .= "\t\t\n"; $r .= "\t\t\n"; + if ( $page && $page > 1 ) { + $r .= "\t\t\n"; + } + if ( ! $has_submit_button_block ) { $r .= "\t

    \n"; } @@ -1323,10 +1329,14 @@ public function process_submission() { $entry_values = array( 'entry_title' => the_title_attribute( 'echo=0' ), - 'entry_permalink' => esc_url( get_permalink( get_the_ID() ) ), + 'entry_permalink' => esc_url( self::get_permalink( get_the_ID() ) ), 'feedback_id' => $feedback_id, ); + if ( isset( $_POST['page'] ) ) { // phpcs:Ignore WordPress.Security.NonceVerification.Missing + $entry_values['entry_page'] = absint( wp_unslash( $_POST['page'] ) ); // phpcs:Ignore WordPress.Security.NonceVerification.Missing + } + $all_values = array_merge( $all_values, $entry_values ); /** This filter is already documented in \Automattic\Jetpack\Forms\ContactForm\Admin */ @@ -1338,7 +1348,7 @@ public function process_submission() { if ( $block_template || $block_template_part || $widget ) { $url = home_url( '/' ); } else { - $url = get_permalink( $post->ID ); + $url = self::get_permalink( $post->ID ); } // translators: the time of the form submission. @@ -1645,6 +1655,21 @@ public function process_submission() { wp_redirect( $redirect ); exit( 0 ); } + /** + * Get the permalink for the post ID that include the page query parameter if it was set. + * + * @param int $post_id The post ID. + * + * return string The permalink for the post ID. + */ + public static function get_permalink( $post_id ) { + $url = get_permalink( $post_id ); + $page = isset( $_POST['page'] ) ? absint( wp_unslash( $_POST['page'] ) ) : null; // phpcs:Ignore WordPress.Security.NonceVerification.Missing + if ( $page ) { + return add_query_arg( 'page', $page, $url ); + } + return $url; + } /** * Wrapper for wp_mail() that enables HTML messages with text alternatives diff --git a/projects/plugins/jetpack/changelog/fix-form-submit-miulti-page b/projects/plugins/jetpack/changelog/fix-form-submit-miulti-page new file mode 100644 index 0000000000000..444f11caf4071 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-form-submit-miulti-page @@ -0,0 +1,4 @@ +Significance: patch +Type: enhancement + + Forms: Add support for having multiple forms accross paginated pages. From da84905ffde1b168a46afce4f53d298a7d03cb34 Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Thu, 6 Feb 2025 12:01:16 -0800 Subject: [PATCH 404/420] Forms: fix seperators not aligning consistently (#40967) * Fix: seperator block styling in the form block * changelog * Make the seperator earier to overwrite * Fix the different styles to have the desired width. * Remove any vertical margin * Update projects/packages/forms/changelog/fix-25025-form-seperator Co-authored-by: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com> * Update projects/plugins/jetpack/changelog/fix-25025-form-seperator Co-authored-by: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com> * Remove the is-style-default class * update to code to be more together. * Update to use 100px vs 150px since that is the most common default saparator * Also inherit the styles in the editor * bug fix --------- Co-authored-by: Miguel Lezama Co-authored-by: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com> --- .../packages/forms/changelog/fix-25025-form-seperator | 4 ++++ .../forms/src/blocks/contact-form/editor.scss | 11 +++++++++++ .../packages/forms/src/contact-form/css/grunion.css | 10 ++++++++++ .../jetpack/changelog/fix-25025-form-seperator | 4 ++++ 4 files changed, 29 insertions(+) create mode 100644 projects/packages/forms/changelog/fix-25025-form-seperator create mode 100644 projects/plugins/jetpack/changelog/fix-25025-form-seperator diff --git a/projects/packages/forms/changelog/fix-25025-form-seperator b/projects/packages/forms/changelog/fix-25025-form-seperator new file mode 100644 index 0000000000000..6c872c241915f --- /dev/null +++ b/projects/packages/forms/changelog/fix-25025-form-seperator @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Improves the styling options of the separator block when placed inside the form block diff --git a/projects/packages/forms/src/blocks/contact-form/editor.scss b/projects/packages/forms/src/blocks/contact-form/editor.scss index d506b5bc8dc98..15b4e982be665 100644 --- a/projects/packages/forms/src/blocks/contact-form/editor.scss +++ b/projects/packages/forms/src/blocks/contact-form/editor.scss @@ -93,6 +93,17 @@ &[data-type='jetpack/field-consent'] { align-self: center; } + + &:where( .wp-block-jetpack-contact-form .wp-block-separator ){ + max-width: var( --wp--preset--spacing--80, 100px ); + margin-left: auto; + margin-right: auto; + } + &:where( .wp-block-jetpack-contact-form .wp-block-separator.is-style-wide ), + &:where( .wp-block-jetpack-contact-form .wp-block-separator.is-style-dots ) { + max-width: inherit; + } + } } diff --git a/projects/packages/forms/src/contact-form/css/grunion.css b/projects/packages/forms/src/contact-form/css/grunion.css index d189111812244..30f83ecd6565c 100644 --- a/projects/packages/forms/src/contact-form/css/grunion.css +++ b/projects/packages/forms/src/contact-form/css/grunion.css @@ -235,6 +235,16 @@ box-sizing: border-box; } +:where( .wp-block-jetpack-contact-form .wp-block-separator ) { + max-width: var( --wp--preset--spacing--80, 100px ); + margin-top: 0; + margin-bottom: 0; +} +:where( .wp-block-jetpack-contact-form .wp-block-separator.is-style-wide ), +:where( .wp-block-jetpack-contact-form .wp-block-separator.is-style-dots ) { + max-width: inherit; +} + /* Added circa Nov 2022: container class assigned to topmost block div */ .wp-block-jetpack-contact-form-container.alignfull .wp-block-jetpack-contact-form { padding-right: 0; diff --git a/projects/plugins/jetpack/changelog/fix-25025-form-seperator b/projects/plugins/jetpack/changelog/fix-25025-form-seperator new file mode 100644 index 0000000000000..9814b5a45b694 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-25025-form-seperator @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Forms: Improve the styling of the separator block when placed inside the form block From 4b4b4e32aea893b5847f1a4cc71d274dd493631a Mon Sep 17 00:00:00 2001 From: Enej Bajgoric Date: Thu, 6 Feb 2025 12:01:39 -0800 Subject: [PATCH 405/420] Forms: Fixes date validation bug (#41611) * Forms: Fix the formatting if we use multiple date pickers on the page. * Forms: No need to enqueue the localize jquery ui since it gets loaded anyways. * changelog --- .../forms/changelog/fix-date-validation-bug | 4 ++++ .../contact-form/class-contact-form-field.php | 2 -- .../src/contact-form/js/grunion-frontend.js | 20 ++++++++++--------- 3 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 projects/packages/forms/changelog/fix-date-validation-bug diff --git a/projects/packages/forms/changelog/fix-date-validation-bug b/projects/packages/forms/changelog/fix-date-validation-bug new file mode 100644 index 0000000000000..b812fbbf2ae5f --- /dev/null +++ b/projects/packages/forms/changelog/fix-date-validation-bug @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Forms: fixes the date format input if multiple date pickers are used with different date formats. diff --git a/projects/packages/forms/src/contact-form/class-contact-form-field.php b/projects/packages/forms/src/contact-form/class-contact-form-field.php index 85b78314041eb..4cd4819420d45 100644 --- a/projects/packages/forms/src/contact-form/class-contact-form-field.php +++ b/projects/packages/forms/src/contact-form/class-contact-form-field.php @@ -907,8 +907,6 @@ public function render_date_field( $id, $label, $value, $class, $required, $requ wp_enqueue_style( 'jp-jquery-ui-datepicker', plugins_url( '../../dist/contact-form/css/jquery-ui-datepicker.css', __FILE__ ), array( 'dashicons' ), '1.0' ); - // Using Core's built-in datepicker localization routine - wp_localize_jquery_ui_datepicker(); return $field; } diff --git a/projects/packages/forms/src/contact-form/js/grunion-frontend.js b/projects/packages/forms/src/contact-form/js/grunion-frontend.js index c10e153fc19e6..b615836bb8a18 100644 --- a/projects/packages/forms/src/contact-form/js/grunion-frontend.js +++ b/projects/packages/forms/src/contact-form/js/grunion-frontend.js @@ -1,13 +1,15 @@ jQuery( function ( $ ) { const $input = $( '.contact-form input.jp-contact-form-date' ); - const dateFormat = $input.attr( 'data-format' ) || 'yy-mm-dd'; - - $input.datepicker( { - dateFormat, - constrainInput: false, - showOptions: { direction: 'down' }, - onSelect: function () { - $( this ).focus(); - }, + $input.each( function () { + const el = $( this ); + const dateFormat = el.attr( 'data-format' ) || 'yy-mm-dd'; + el.datepicker( { + dateFormat, + constrainInput: false, + showOptions: { direction: 'down' }, + onSelect: function () { + $( this ).focus(); + }, + } ); } ); } ); From a8e7c90ab112e7278941e765fd2880a5e86c8745 Mon Sep 17 00:00:00 2001 From: Dylan Munson <65001528+CodeyGuyDylan@users.noreply.github.com> Date: Thu, 6 Feb 2025 13:05:57 -0700 Subject: [PATCH 406/420] Fix my jetpack protect card shield inconsistency (#41560) * Show Protect WAF as disabled when firewall is disabled * changelog * Ensure variable is defined --- .../protect-card/auto-firewall-status.tsx | 5 +++-- .../protect-card/use-protect-tooltip-copy.ts | 3 ++- .../fix-my-jetpack-protect-card-shield-inconsistency | 4 ++++ projects/packages/my-jetpack/global.d.ts | 1 + .../packages/my-jetpack/src/class-initializer.php | 11 +++++++---- 5 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 projects/packages/my-jetpack/changelog/fix-my-jetpack-protect-card-shield-inconsistency diff --git a/projects/packages/my-jetpack/_inc/components/product-cards-section/protect-card/auto-firewall-status.tsx b/projects/packages/my-jetpack/_inc/components/product-cards-section/protect-card/auto-firewall-status.tsx index 9b1d94839270e..9b12175cf32c1 100644 --- a/projects/packages/my-jetpack/_inc/components/product-cards-section/protect-card/auto-firewall-status.tsx +++ b/projects/packages/my-jetpack/_inc/components/product-cards-section/protect-card/auto-firewall-status.tsx @@ -19,10 +19,11 @@ export const AutoFirewallStatus = () => { const { protect: { wafConfig: wafData }, } = getMyJetpackWindowInitialState(); - const { jetpack_waf_automatic_rules: isAutoFirewallEnabled } = wafData || {}; + const { jetpack_waf_automatic_rules: isAutoFirewallEnabled, waf_enabled: isWafEnabled } = + wafData || {}; if ( isPluginActive && isSiteConnected ) { - if ( isAutoFirewallEnabled ) { + if ( isAutoFirewallEnabled && isWafEnabled ) { return ; } diff --git a/projects/packages/my-jetpack/_inc/components/product-cards-section/protect-card/use-protect-tooltip-copy.ts b/projects/packages/my-jetpack/_inc/components/product-cards-section/protect-card/use-protect-tooltip-copy.ts index 45f7f150190f9..662b37aff79ec 100644 --- a/projects/packages/my-jetpack/_inc/components/product-cards-section/protect-card/use-protect-tooltip-copy.ts +++ b/projects/packages/my-jetpack/_inc/components/product-cards-section/protect-card/use-protect-tooltip-copy.ts @@ -50,6 +50,7 @@ export function useProtectTooltipCopy(): TooltipContent { blocked_logins: blockedLoginsCount, brute_force_protection: hasBruteForceProtection, waf_supported: wafSupported, + waf_enabled: isWafEnabled, } = wafData || {}; const pluginsCount = fromScanPlugins.length || Object.keys( plugins ).length; @@ -247,7 +248,7 @@ export function useProtectTooltipCopy(): TooltipContent { ), }, autoFirewallTooltip: - ( hasProtectPaidPlan && ! isAutoFirewallEnabled ) || ! wafSupported + ( hasProtectPaidPlan && ( ! isAutoFirewallEnabled || ! isWafEnabled ) ) || ! wafSupported ? { title: __( 'Auto-Firewall: Inactive', 'jetpack-my-jetpack' ), text: wafSupported diff --git a/projects/packages/my-jetpack/changelog/fix-my-jetpack-protect-card-shield-inconsistency b/projects/packages/my-jetpack/changelog/fix-my-jetpack-protect-card-shield-inconsistency new file mode 100644 index 0000000000000..48b9490da9170 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/fix-my-jetpack-protect-card-shield-inconsistency @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix bug where firewall was displayed as active if automatic rules were enabled but firewall was off diff --git a/projects/packages/my-jetpack/global.d.ts b/projects/packages/my-jetpack/global.d.ts index 117857b70ec97..eb8fc175024ce 100644 --- a/projects/packages/my-jetpack/global.d.ts +++ b/projects/packages/my-jetpack/global.d.ts @@ -288,6 +288,7 @@ interface Window { jetpack_waf_share_debug_data: boolean; standalone_mode: boolean; waf_supported: boolean; + waf_enabled: boolean; }; }; videopress: { diff --git a/projects/packages/my-jetpack/src/class-initializer.php b/projects/packages/my-jetpack/src/class-initializer.php index ec2a40c7af88b..b8ee063b144f4 100644 --- a/projects/packages/my-jetpack/src/class-initializer.php +++ b/projects/packages/my-jetpack/src/class-initializer.php @@ -237,8 +237,9 @@ public static function enqueue_scripts() { $scan_data = Products\Protect::get_protect_data(); self::update_historically_active_jetpack_modules(); - $waf_config = array(); - $waf_supported = false; + $waf_config = array(); + $waf_supported = false; + $is_waf_enabled = false; $sandboxed_domain = ''; $is_dev_version = false; @@ -248,8 +249,9 @@ public static function enqueue_scripts() { } if ( class_exists( 'Automattic\Jetpack\Waf\Waf_Runner' ) ) { - $waf_config = Waf_Runner::get_config(); - $waf_supported = Waf_Runner::is_supported_environment(); + $waf_config = Waf_Runner::get_config(); + $is_waf_enabled = Waf_Runner::is_enabled(); + $waf_supported = Waf_Runner::is_supported_environment(); } wp_localize_script( @@ -313,6 +315,7 @@ public static function enqueue_scripts() { $waf_config, array( 'waf_supported' => $waf_supported, + 'waf_enabled' => $is_waf_enabled, ), array( 'blocked_logins' => (int) get_site_option( 'jetpack_protect_blocked_attempts', 0 ) ) ), From 6ba505ac680148f67d0c5022d28f3b790ff65d18 Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Thu, 6 Feb 2025 18:20:15 -0300 Subject: [PATCH 407/420] Jetpack SEO: fix assistant chat options (#41616) * fix and compensate spacings/gaps on step messages * changelog --- .../fix-jetpack-seo-assistant-chat-spacings | 4 +++ .../components/seo-assistant/style.scss | 27 +++++++++++++++++-- .../seo-assistant/wizard-messages.tsx | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-chat-spacings diff --git a/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-chat-spacings b/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-chat-spacings new file mode 100644 index 0000000000000..c0b75e32269f6 --- /dev/null +++ b/projects/plugins/jetpack/changelog/fix-jetpack-seo-assistant-chat-spacings @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Jetpack SEO: fix gap/spacing between chat bubbles and options diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss index 0acaea3025d52..8b1b0d1c86dab 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/style.scss @@ -63,6 +63,7 @@ &__content { flex: 1 1 auto; + gap: 8px; display: flex; flex-direction: column; height: 100%; @@ -78,11 +79,24 @@ flex: 1 1 auto; display: flex; flex-direction: column; - gap: 16px; - padding: 8px 8px 8px 0; + gap: 8px; + padding: 0 8px; overflow-y: auto; scroll-behavior: smooth; align-items: flex-start; + + // weirdly placed here, this makes the first option have a top margin + & > .assistant-wizard__message.is-option { + margin-top: 8px; + } + + & > .assistant-wizard__message.is-option ~ .assistant-wizard__message.is-option { + margin-top: 0px; + } + + & > .assistant-wizard__message.is-option:last-of-type { + margin-bottom: 8px; + } } &__message { @@ -94,6 +108,11 @@ align-items: center; max-width: 255px; + &:not( .is-option ) { + margin-top: 8px; + margin-bottom: 8px; + } + .assistant-wizard__message-icon { flex-shrink: 0; align-self: baseline; @@ -122,6 +141,10 @@ display: none; } } + + &.is-option { + align-self: flex-start; + } } &__input-container { diff --git a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx index cbfbdd0f2e91d..a8f205478a7c4 100644 --- a/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx +++ b/projects/plugins/jetpack/extensions/plugins/ai-assistant-plugin/components/seo-assistant/wizard-messages.tsx @@ -69,6 +69,7 @@ export const MessageBubble = ( { message, onSelect = ( m: Message ) => m } ) =>
    From 4f69df25b286d8198486c803c42a03a76d8c78d5 Mon Sep 17 00:00:00 2001 From: Luis Felipe Zaguini <26530524+zaguiini@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:45:15 -0300 Subject: [PATCH 408/420] Post actions: Rename "Copy" to "Duplicate" (#34844) * Post actions: rename Copy action to Duplicate * Add CHANGELOG entry * Fix syntax issue added during merge conflict resolution --------- Co-authored-by: Brandon Kraft --- .../jetpack/changelog/enhance-rename-copy-post-duplicate | 4 ++++ projects/plugins/jetpack/modules/copy-post.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/enhance-rename-copy-post-duplicate diff --git a/projects/plugins/jetpack/changelog/enhance-rename-copy-post-duplicate b/projects/plugins/jetpack/changelog/enhance-rename-copy-post-duplicate new file mode 100644 index 0000000000000..bdf2dcf1ee879 --- /dev/null +++ b/projects/plugins/jetpack/changelog/enhance-rename-copy-post-duplicate @@ -0,0 +1,4 @@ +Significance: patch +Type: enhancement + +Post actions: rename Copy action to Duplicate, which is clearer diff --git a/projects/plugins/jetpack/modules/copy-post.php b/projects/plugins/jetpack/modules/copy-post.php index 38afc654a5a24..88f3e9c26f9a9 100644 --- a/projects/plugins/jetpack/modules/copy-post.php +++ b/projects/plugins/jetpack/modules/copy-post.php @@ -344,8 +344,8 @@ public function add_row_action( $actions, $post ) { 'jetpack-copy' => sprintf( '%3$s %4$s', esc_url( $edit_url ), - esc_attr__( 'Copy this post with Jetpack', 'jetpack' ), - esc_html__( 'Copy', 'jetpack' ), + esc_attr__( 'Duplicate this post with Jetpack.', 'jetpack' ), + esc_html__( 'Duplicate', 'jetpack' ), $jetpack_logo->get_jp_emblem() ), ); From 0d94cb4d28b583c57e3be2660c50e2aee5ddb4cd Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Fri, 7 Feb 2025 09:12:04 +0700 Subject: [PATCH 409/420] External Media: Add Import button in Media Library (#41544) --- .../feat-external-media-import-button | 4 +++ .../admin/external-media-import-button.js | 23 +++++++++++++++ .../admin/external-media-import-button.scss | 12 ++++++++ .../features/admin/external-media-import.php | 29 +++++++++++++++++++ .../packages/external-media/webpack.config.js | 4 +++ 5 files changed, 72 insertions(+) create mode 100644 projects/packages/external-media/changelog/feat-external-media-import-button create mode 100644 projects/packages/external-media/src/features/admin/external-media-import-button.js create mode 100644 projects/packages/external-media/src/features/admin/external-media-import-button.scss diff --git a/projects/packages/external-media/changelog/feat-external-media-import-button b/projects/packages/external-media/changelog/feat-external-media-import-button new file mode 100644 index 0000000000000..628b477a5f482 --- /dev/null +++ b/projects/packages/external-media/changelog/feat-external-media-import-button @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +External Media: Add Import button in Media Library diff --git a/projects/packages/external-media/src/features/admin/external-media-import-button.js b/projects/packages/external-media/src/features/admin/external-media-import-button.js new file mode 100644 index 0000000000000..c852b3c9ea88c --- /dev/null +++ b/projects/packages/external-media/src/features/admin/external-media-import-button.js @@ -0,0 +1,23 @@ +import { __ } from '@wordpress/i18n'; + +document.addEventListener( 'DOMContentLoaded', function () { + const addNewButton = document.querySelector( 'a.page-title-action' ); + if ( addNewButton ) { + const buttonContainer = document.createElement( 'div' ); + buttonContainer.className = 'wpcom-media-library-action-buttons'; + + const importButton = document.createElement( 'a' ); + importButton.className = 'button'; + importButton.role = 'button'; + importButton.innerHTML = __( 'Import Media', 'jetpack-external-media' ); + importButton.href = window.JETPACK_EXTERNAL_MEDIA_IMPORT_BUTTON?.href; + + const parentNode = addNewButton.parentNode; + const nextSibling = addNewButton.nextSibling; + + buttonContainer.appendChild( addNewButton ); + buttonContainer.appendChild( importButton ); + + parentNode.insertBefore( buttonContainer, nextSibling ); + } +} ); diff --git a/projects/packages/external-media/src/features/admin/external-media-import-button.scss b/projects/packages/external-media/src/features/admin/external-media-import-button.scss new file mode 100644 index 0000000000000..df9db337f0ab9 --- /dev/null +++ b/projects/packages/external-media/src/features/admin/external-media-import-button.scss @@ -0,0 +1,12 @@ +.wpcom-media-library-action-buttons { + display: inline-flex; + flex-wrap: wrap; + gap: 4px; + + > a { + position: relative; + top: -3px; + margin-left: 0; + vertical-align: baseline; + } +} diff --git a/projects/packages/external-media/src/features/admin/external-media-import.php b/projects/packages/external-media/src/features/admin/external-media-import.php index c5a43769b7f09..972f8b7b9c764 100644 --- a/projects/packages/external-media/src/features/admin/external-media-import.php +++ b/projects/packages/external-media/src/features/admin/external-media-import.php @@ -47,10 +47,39 @@ function add_jetpack_external_media_import_page() { __NAMESPACE__ . '\render_jetpack_external_media_import_page' ); + add_action( 'load-upload.php', __NAMESPACE__ . '\enqueue_jetpack_external_media_import_button' ); add_action( "load-$external_media_import_page_hook", __NAMESPACE__ . '\enqueue_jetpack_external_media_import_page' ); } add_action( 'admin_menu', __NAMESPACE__ . '\add_jetpack_external_media_import_page' ); +/** + * Enqueue the assets of the Jetpack external media import button. + */ +function enqueue_jetpack_external_media_import_button() { + $assets_base_path = 'build/'; + $asset_name = 'jetpack-external-media-import-button'; + + Assets::register_script( + $asset_name, + $assets_base_path . "$asset_name/$asset_name.js", + External_Media::BASE_FILE, + array( + 'in_footer' => true, + 'textdomain' => 'jetpack-external-media', + 'css_path' => $assets_base_path . "$asset_name/$asset_name.css", + ) + ); + + Assets::enqueue_script( $asset_name ); + wp_localize_script( + $asset_name, + 'JETPACK_EXTERNAL_MEDIA_IMPORT_BUTTON', + array( + 'href' => admin_url( 'upload.php?page=jetpack_external_media_import_page&untangling-media=true' ), + ) + ); +} + /** * Enqueue the assets of the Jetpack external media page. */ diff --git a/projects/packages/external-media/webpack.config.js b/projects/packages/external-media/webpack.config.js index abfb18bdd1654..992136af6494e 100644 --- a/projects/packages/external-media/webpack.config.js +++ b/projects/packages/external-media/webpack.config.js @@ -5,6 +5,10 @@ module.exports = [ { entry: { 'jetpack-external-media-editor': './src/features/editor/index.js', + 'jetpack-external-media-import-button': [ + './src/features/admin/external-media-import-button.js', + './src/features/admin/external-media-import-button.scss', + ], 'jetpack-external-media-import-page': './src/features/admin/external-media-import.js', }, mode: jetpackWebpackConfig.mode, From 048f9fb4379db1b33c22f2dc79bf1eab01f9be73 Mon Sep 17 00:00:00 2001 From: arthur791004 Date: Fri, 7 Feb 2025 10:46:46 +0800 Subject: [PATCH 410/420] External Media: Add track events to the Import page and modal (#41592) * External Media: Add track event to Import now button * External Media: Add track event to Import media button * changelog --- .../feat-external-media-track-events | 4 + .../features/admin/external-media-import.js | 7 +- .../src/shared/media-browser/index.js | 80 ++++++++++--------- .../media-browser-select-button.js | 24 ++++++ .../shared/media-browser/use-page-source.js | 18 +++++ .../google-photos/google-photos-media.js | 2 + .../shared/sources/jetpack-app-media/index.js | 1 + .../src/shared/sources/openverse/index.js | 1 + .../src/shared/sources/pexels/index.js | 1 + 9 files changed, 100 insertions(+), 38 deletions(-) create mode 100644 projects/packages/external-media/changelog/feat-external-media-track-events create mode 100644 projects/packages/external-media/src/shared/media-browser/media-browser-select-button.js create mode 100644 projects/packages/external-media/src/shared/media-browser/use-page-source.js diff --git a/projects/packages/external-media/changelog/feat-external-media-track-events b/projects/packages/external-media/changelog/feat-external-media-track-events new file mode 100644 index 0000000000000..9c86bd2e0a665 --- /dev/null +++ b/projects/packages/external-media/changelog/feat-external-media-track-events @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +External Media: Add track events to the Import page and modal diff --git a/projects/packages/external-media/src/features/admin/external-media-import.js b/projects/packages/external-media/src/features/admin/external-media-import.js index d6feba02f7716..f1abfe45f3722 100644 --- a/projects/packages/external-media/src/features/admin/external-media-import.js +++ b/projects/packages/external-media/src/features/admin/external-media-import.js @@ -1,3 +1,4 @@ +import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import { sprintf, __ } from '@wordpress/i18n'; import { useState, useEffect } from 'react'; import { createPortal } from 'react-dom'; @@ -22,6 +23,7 @@ const Notice = ( { message, onDismiss } ) => ( const JetpackExternalMediaImport = () => { const [ selectedSource, setSelectedSource ] = useState( null ); const [ noticeMessage, setNoticeMessage ] = useState( '' ); + const { tracks } = useAnalytics(); const ExternalLibrary = getExternalLibrary( selectedSource ); const selectButtonText = ( selectedImages, isCopying ) => { @@ -77,6 +79,9 @@ const JetpackExternalMediaImport = () => { const slug = event.target.dataset.slug; if ( slug ) { setSelectedSource( slug ); + tracks.recordEvent( 'jetpack_external_media_import_media_page_import_click', { + media_source: slug, + } ); } }; @@ -89,7 +94,7 @@ const JetpackExternalMediaImport = () => { element.removeEventListener( 'click', handleClick ); } }; - }, [] ); + }, [ tracks ] ); return ( <> diff --git a/projects/packages/external-media/src/shared/media-browser/index.js b/projects/packages/external-media/src/shared/media-browser/index.js index e9bd6bd4551aa..3365e500f6a1c 100644 --- a/projects/packages/external-media/src/shared/media-browser/index.js +++ b/projects/packages/external-media/src/shared/media-browser/index.js @@ -1,9 +1,12 @@ -import { Button, Spinner, Composite } from '@wordpress/components'; +import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; +import { Spinner, Composite } from '@wordpress/components'; import { useCallback, useState, useRef, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; import React from 'react'; +import MediaBrowserSelectButton from './media-browser-select-button'; import MediaItem from './media-item'; +import usePageSource from './use-page-source'; import './style.scss'; const MAX_SELECTED = 10; @@ -13,6 +16,7 @@ const MAX_SELECTED = 10; * * @param {object} props - The component props * @param {object[]} props.media - The list of media + * @param {string} props.mediaSource - The source of media * @param {boolean} props.isCopying - Whether the media browser is copying the media * @param {boolean} props.isLoading - Whether the media browser is loading * @param {boolean} props.imageOnly - Whether to skip non-media items @@ -22,12 +26,13 @@ const MAX_SELECTED = 10; * @param {Function} props.setPath - To set the path for the folder item * @param {Function} props.nextPage - To get the next path * @param {Function} props.onCopy - To handle the copy - * @param {string} props.selectButtonText - The text of the selection button + * @param {Function} props.selectButtonText - To get the select button text * @param {boolean} props.shouldProxyImg - Whether to use the proxy for the media URL * @return {React.ReactElement} - JSX element */ function MediaBrowser( { media, + mediaSource, isCopying, isLoading, imageOnly, @@ -42,6 +47,8 @@ function MediaBrowser( { } ) { const [ selected, setSelected ] = useState( [] ); const gridEl = useRef( null ); + const { tracks } = useAnalytics(); + const pageSource = usePageSource(); const select = useCallback( newlySelected => { @@ -65,45 +72,29 @@ function MediaBrowser( { ); const onCopyAndInsert = useCallback( () => { + tracks.recordEvent( 'jetpack_external_media_modal_cta_click', { + page_source: pageSource, + media_source: mediaSource, + media_count: selected.length, + multiple: !! multiple, + } ); + onCopy( selected ); - }, [ selected, onCopy ] ); + }, [ tracks, pageSource, mediaSource, selected, multiple, onCopy ] ); const hasMediaItems = media.filter( item => item.type !== 'folder' ).length > 0; - const classes = clsx( { - 'jetpack-external-media-browser__media': true, - 'jetpack-external-media-browser__media__loading': isLoading, - } ); - const wrapper = clsx( { - 'jetpack-external-media-browser': true, - [ className ]: true, - } ); - - // Using _event to avoid eslint errors. Can change to event if it's in use again. - const handleMediaItemClick = ( _event, { item } ) => { - select( item ); - }; - const SelectButton = selectProps => { - const disabled = selected.length === 0 || isCopying; + const getSelectButtonLabel = () => { const defaultLabel = isCopying ? __( 'Inserting…', 'jetpack-external-media' ) : __( 'Select', 'jetpack-external-media', /* dummy arg to avoid bad minification */ 0 ); - const label = selectProps?.labelText - ? selectProps?.labelText( selected.length, isCopying ) - : defaultLabel; - - return ( -
    - -
    - ); + + return selectButtonText ? selectButtonText( selected.length, isCopying ) : defaultLabel; + }; + + // Using _event to avoid eslint errors. Can change to event if it's in use again. + const handleMediaItemClick = ( _event, { item } ) => { + select( item ); }; // Infinite scroll @@ -126,11 +117,19 @@ function MediaBrowser( { }, [ pageHandle, isLoading, gridEl ] ); // eslint-disable-line react-hooks/exhaustive-deps return ( -
    +
    } > @@ -161,7 +160,14 @@ function MediaBrowser( {
    ) } - { hasMediaItems && } + { hasMediaItems && ( + + ) }
    ); } diff --git a/projects/packages/external-media/src/shared/media-browser/media-browser-select-button.js b/projects/packages/external-media/src/shared/media-browser/media-browser-select-button.js new file mode 100644 index 0000000000000..a612a7daef41a --- /dev/null +++ b/projects/packages/external-media/src/shared/media-browser/media-browser-select-button.js @@ -0,0 +1,24 @@ +import { Button } from '@wordpress/components'; +import React from 'react'; + +/** + * MediaBrowserSelectButton component + * + * @param {object} props - The component props + * @param {string} props.label - The label of the button + * @param {boolean} props.isLoading - Whether the button is loading + * @param {boolean} props.disabled - Whether the button is disabled + * @param {Function} props.onClick - To handle the click + * @return {React.ReactElement} - JSX element + */ +const MediaBrowserSelectButton = ( { label, isLoading, disabled, onClick } ) => { + return ( +
    + +
    + ); +}; + +export default MediaBrowserSelectButton; diff --git a/projects/packages/external-media/src/shared/media-browser/use-page-source.js b/projects/packages/external-media/src/shared/media-browser/use-page-source.js new file mode 100644 index 0000000000000..465bf48293ee4 --- /dev/null +++ b/projects/packages/external-media/src/shared/media-browser/use-page-source.js @@ -0,0 +1,18 @@ +import { useSelect } from '@wordpress/data'; + +const usePageSource = () => { + const isSiteEditor = useSelect( select => !! select( 'core/edit-site' ), [] ); + const postType = useSelect( select => select( 'core/editor' )?.getCurrentPostType(), [] ); + + if ( ! postType ) { + return 'jetpack-external-media-import-page'; + } + + if ( isSiteEditor ) { + return 'site-editor'; + } + + return postType === 'page' ? 'page-editor' : 'post-editor'; +}; + +export default usePageSource; diff --git a/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js index e334c03a156e7..5fcb598812966 100644 --- a/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js +++ b/projects/packages/external-media/src/shared/sources/google-photos/google-photos-media.js @@ -11,6 +11,7 @@ import { DATE_RANGE_ANY, } from '../../constants'; import MediaBrowser from '../../media-browser'; +import { MediaSource } from '../../media-service/types'; import { getExternalMediaApiUrl } from '../api'; import Breadcrumbs from './breadcrumbs'; import GoogleFilterOption from './filter-option'; @@ -183,6 +184,7 @@ function GooglePhotosMedia( props ) { className="jetpack-external-media-browser__google" key={ listUrl } media={ media } + mediaSource={ MediaSource.GooglePhotos } imageOnly={ imageOnly } isCopying={ isCopying } isLoading={ isLoading } diff --git a/projects/packages/external-media/src/shared/sources/jetpack-app-media/index.js b/projects/packages/external-media/src/shared/sources/jetpack-app-media/index.js index a4a2cd0643639..640b38de3781b 100644 --- a/projects/packages/external-media/src/shared/sources/jetpack-app-media/index.js +++ b/projects/packages/external-media/src/shared/sources/jetpack-app-media/index.js @@ -136,6 +136,7 @@ function JetpackAppMedia( props ) { key={ 'jetpack-app-media' } className="jetpack-external-media-browser__jetpack_app_media_browser" media={ media } + mediaSource={ MediaSource.JetpackAppMedia } isCopying={ isCopying } isLoading={ false } nextPage={ getNextPage } diff --git a/projects/packages/external-media/src/shared/sources/openverse/index.js b/projects/packages/external-media/src/shared/sources/openverse/index.js index 331c648b817e3..86675f7cc59b0 100644 --- a/projects/packages/external-media/src/shared/sources/openverse/index.js +++ b/projects/packages/external-media/src/shared/sources/openverse/index.js @@ -67,6 +67,7 @@ function OpenverseMedia( props ) { getNextPage( searchQuery ) } diff --git a/projects/packages/external-media/src/shared/sources/pexels/index.js b/projects/packages/external-media/src/shared/sources/pexels/index.js index 83b142ed04fcf..23c162874afe5 100644 --- a/projects/packages/external-media/src/shared/sources/pexels/index.js +++ b/projects/packages/external-media/src/shared/sources/pexels/index.js @@ -68,6 +68,7 @@ function PexelsMedia( props ) { getNextPage( searchQuery ) } From 0831a4208eb5ff7279fa105ce1edec7f4ad8f165 Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Fri, 7 Feb 2025 13:32:59 +0700 Subject: [PATCH 411/420] Media Library: add track events for upload from URL feature (#41620) --- .../packages/external-media/changelog/media-tracks | 4 ++++ .../src/shared/media-browser/index.js | 4 ++-- .../src/shared/media-browser/use-page-source.js | 14 ++++---------- .../jetpack-mu-wpcom/changelog/media-tracks | 4 ++++ .../wpcom-media-url-upload-form/index.jsx | 9 +++++++-- .../wpcom-media/wpcom-media-url-upload.php | 8 ++++---- 6 files changed, 25 insertions(+), 18 deletions(-) create mode 100644 projects/packages/external-media/changelog/media-tracks create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/media-tracks diff --git a/projects/packages/external-media/changelog/media-tracks b/projects/packages/external-media/changelog/media-tracks new file mode 100644 index 0000000000000..48205a668b670 --- /dev/null +++ b/projects/packages/external-media/changelog/media-tracks @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Media Library: add track events for upload from URL feature diff --git a/projects/packages/external-media/src/shared/media-browser/index.js b/projects/packages/external-media/src/shared/media-browser/index.js index 3365e500f6a1c..7ba3619044401 100644 --- a/projects/packages/external-media/src/shared/media-browser/index.js +++ b/projects/packages/external-media/src/shared/media-browser/index.js @@ -72,8 +72,8 @@ function MediaBrowser( { ); const onCopyAndInsert = useCallback( () => { - tracks.recordEvent( 'jetpack_external_media_modal_cta_click', { - page_source: pageSource, + tracks.recordEvent( 'jetpack_external_media_modal_submit', { + page: pageSource, media_source: mediaSource, media_count: selected.length, multiple: !! multiple, diff --git a/projects/packages/external-media/src/shared/media-browser/use-page-source.js b/projects/packages/external-media/src/shared/media-browser/use-page-source.js index 465bf48293ee4..70cfa13b6e7e6 100644 --- a/projects/packages/external-media/src/shared/media-browser/use-page-source.js +++ b/projects/packages/external-media/src/shared/media-browser/use-page-source.js @@ -1,18 +1,12 @@ import { useSelect } from '@wordpress/data'; const usePageSource = () => { - const isSiteEditor = useSelect( select => !! select( 'core/edit-site' ), [] ); - const postType = useSelect( select => select( 'core/editor' )?.getCurrentPostType(), [] ); + const isEditor = useSelect( select => !! select( 'core/editor' ), [] ); - if ( ! postType ) { - return 'jetpack-external-media-import-page'; + if ( isEditor ) { + return 'editor'; } - - if ( isSiteEditor ) { - return 'site-editor'; - } - - return postType === 'page' ? 'page-editor' : 'post-editor'; + return 'media-library'; }; export default usePageSource; diff --git a/projects/packages/jetpack-mu-wpcom/changelog/media-tracks b/projects/packages/jetpack-mu-wpcom/changelog/media-tracks new file mode 100644 index 0000000000000..48205a668b670 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/media-tracks @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Media Library: add track events for upload from URL feature diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/index.jsx b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/index.jsx index ab965659d96e3..bc6d37c441b79 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/index.jsx +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload-form/index.jsx @@ -1,10 +1,11 @@ import { __ } from '@wordpress/i18n'; import clsx from 'clsx'; import { useState } from 'react'; +import { wpcomTrackEvent } from '../../../common/tracks'; import './style.scss'; -const WpcomMediaUrlUploadForm = ( { ajaxUrl, action, nonce, isEditor } ) => { +const WpcomMediaUrlUploadForm = ( { ajaxUrl, action, nonce, page } ) => { const [ url, setUrl ] = useState( '' ); const [ show, setShow ] = useState( false ); @@ -25,6 +26,10 @@ const WpcomMediaUrlUploadForm = ( { ajaxUrl, action, nonce, isEditor } ) => { } e.preventDefault(); + wpcomTrackEvent( 'wpcom_media_upload_from_url_submit', { + page, + } ); + const formData = new FormData(); formData.append( 'action', action ); formData.append( 'url', url ); @@ -48,7 +53,7 @@ const WpcomMediaUrlUploadForm = ( { ajaxUrl, action, nonce, isEditor } ) => { .collection.add( attachmentToAdd ); }; - if ( isEditor ) { + if ( page === 'editor' ) { const mediaLibraryTab = window.wp.media.frame.state( 'library' ); mediaLibraryTab.trigger( 'open' ); diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.php b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.php index 82afc12ae90a3..930151c080d2e 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-media-url-upload.php @@ -23,10 +23,10 @@ function wpcom_media_url_upload() { $data = wp_json_encode( array( - 'ajaxUrl' => admin_url( 'admin-ajax.php' ), - 'action' => 'wpcom_media_url_upload', - 'nonce' => wp_create_nonce( 'wpcom_media_url_upload' ), - 'isEditor' => $pagenow !== 'upload.php', + 'ajaxUrl' => admin_url( 'admin-ajax.php' ), + 'action' => 'wpcom_media_url_upload', + 'nonce' => wp_create_nonce( 'wpcom_media_url_upload' ), + 'page' => $pagenow === 'upload.php' ? 'media-library' : 'editor', ) ); From 60e22d6b826a4c80f81f2afcde94d013cec92e8d Mon Sep 17 00:00:00 2001 From: Juanma Rodriguez Escriche Date: Fri, 7 Feb 2025 09:00:15 +0100 Subject: [PATCH 412/420] Update/dont sync set object terms action for blacklisted taxonomies (#41597) * Don't send term relationships for full sync posts actions since they are not being processed * changelog * Fixed next-version typo * Remove test no longer valid * changelog --- ...ct-terms-action-for-blacklisted-taxonomies | 4 ++++ .../packages/sync/src/modules/class-posts.php | 23 ++++++++++++++++++- .../modules/class-woocommerce-hpos-orders.php | 2 +- ...ct-terms-action-for-blacklisted-taxonomies | 4 ++++ ...st_class.jetpack-sync-full-immediately.php | 18 --------------- 5 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 projects/packages/sync/changelog/update-dont-sync-set-object-terms-action-for-blacklisted-taxonomies create mode 100644 projects/plugins/jetpack/changelog/update-dont-sync-set-object-terms-action-for-blacklisted-taxonomies diff --git a/projects/packages/sync/changelog/update-dont-sync-set-object-terms-action-for-blacklisted-taxonomies b/projects/packages/sync/changelog/update-dont-sync-set-object-terms-action-for-blacklisted-taxonomies new file mode 100644 index 0000000000000..2b074cde382a9 --- /dev/null +++ b/projects/packages/sync/changelog/update-dont-sync-set-object-terms-action-for-blacklisted-taxonomies @@ -0,0 +1,4 @@ +Significance: minor +Type: deprecated + +Sync: Full sync for posts not sending term relationships diff --git a/projects/packages/sync/src/modules/class-posts.php b/projects/packages/sync/src/modules/class-posts.php index 54c07996855ba..6d20fafe732fa 100644 --- a/projects/packages/sync/src/modules/class-posts.php +++ b/projects/packages/sync/src/modules/class-posts.php @@ -228,7 +228,7 @@ public function init_before_send() { // Full sync. $sync_module = Modules::get_module( 'full-sync' ); if ( $sync_module instanceof Full_Sync_Immediately ) { - add_filter( 'jetpack_sync_before_send_jetpack_full_sync_posts', array( $this, 'add_term_relationships' ) ); + add_filter( 'jetpack_sync_before_send_jetpack_full_sync_posts', array( $this, 'build_full_sync_action_array' ) ); } else { add_filter( 'jetpack_sync_before_send_jetpack_full_sync_posts', array( $this, 'expand_posts_with_metadata_and_terms' ) ); } @@ -779,6 +779,25 @@ public function send_published( $post_ID, $post ) { } } + /** + * Build the full sync action object for Posts. + * + * @access public + * + * @param array $args An array with the posts and the previous end. + * + * @return array An array with the posts, postmeta and the previous end. + */ + public function build_full_sync_action_array( $args ) { + list( $filtered_posts, $previous_end ) = $args; + return array( + $filtered_posts['objects'], + $filtered_posts['meta'], + array(), // WPCOM does not process term relationships in full sync posts actions for a while now, let's skip them. + $previous_end, + ); + } + /** * Add term relationships to post objects within a hook before they are serialized and sent to the server. * This is used in Full Sync Immediately @@ -787,8 +806,10 @@ public function send_published( $post_ID, $post ) { * * @param array $args The hook parameters. * @return array $args The expanded hook parameters. + * @deprecated since $$next-version$$ */ public function add_term_relationships( $args ) { + _deprecated_function( __METHOD__, '$$next-version$$' ); list( $filtered_posts, $previous_interval_end ) = $args; return array( diff --git a/projects/packages/sync/src/modules/class-woocommerce-hpos-orders.php b/projects/packages/sync/src/modules/class-woocommerce-hpos-orders.php index 13a892dea24c2..2bc63511b98fa 100644 --- a/projects/packages/sync/src/modules/class-woocommerce-hpos-orders.php +++ b/projects/packages/sync/src/modules/class-woocommerce-hpos-orders.php @@ -231,7 +231,7 @@ public function get_objects_by_id( $object_type, $ids ) { * @deprecated since $$next-version$$ */ public function expand_order_objects( $args ) { - _deprecated_function( __METHOD__, 'next-version' ); + _deprecated_function( __METHOD__, '$$next-version$$' ); list( $order_ids, $previous_end ) = $args; return array( 'orders' => $this->get_objects_by_id( 'order', $order_ids ), diff --git a/projects/plugins/jetpack/changelog/update-dont-sync-set-object-terms-action-for-blacklisted-taxonomies b/projects/plugins/jetpack/changelog/update-dont-sync-set-object-terms-action-for-blacklisted-taxonomies new file mode 100644 index 0000000000000..76e66c9980175 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-dont-sync-set-object-terms-action-for-blacklisted-taxonomies @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Sync: Full sync for posts not sending term relationships diff --git a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full-immediately.php b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full-immediately.php index 4a83a9127a939..93adbe246721a 100644 --- a/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full-immediately.php +++ b/projects/plugins/jetpack/tests/php/sync/test_class.jetpack-sync-full-immediately.php @@ -679,24 +679,6 @@ public function test_full_sync_doesnt_sends_forbiden_private_or_public_post_meta $this->assertEquals( 'foo5', $this->server_replica_storage->get_metadata( 'post', $post_id, 'a_public_meta', true ) ); } - public function test_full_sync_sends_all_post_terms() { - $post_id = self::factory()->post->create(); - wp_set_object_terms( $post_id, 'tag', 'post_tag' ); - - $this->sender->do_sync(); - $terms = get_the_terms( $post_id, 'post_tag' ); - - $this->assertEqualsObject( $terms, $this->server_replica_storage->get_the_terms( $post_id, 'post_tag' ), 'Initial sync doesn\'t work' ); - // reset the storage, check value, and do full sync - storage should be set! - $this->server_replica_storage->reset(); - - $this->assertFalse( $this->server_replica_storage->get_the_terms( $post_id, 'post_tag' ), 'Not empty' ); - $this->full_sync->start(); - $this->sender->do_full_sync(); - - $this->assertEqualsObject( $terms, $this->server_replica_storage->get_the_terms( $post_id, 'post_tag' ), 'Full sync doesn\'t work' ); - } - public function test_full_sync_sends_all_comment_meta() { $post_id = self::factory()->post->create(); $comment_ids = self::factory()->comment->create_post_comments( $post_id ); From 71ea4c66fa785ad140dafbfbdf4c4492df7a3e15 Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Fri, 7 Feb 2025 16:18:12 +0700 Subject: [PATCH 413/420] Media Library: don't show storage info on Atomic upload.php's uploader (#41625) --- .../plugins/wpcomsh/changelog/wpcomsh-update-media-notice | 4 ++++ projects/plugins/wpcomsh/notices/storage-notices.php | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/wpcomsh/changelog/wpcomsh-update-media-notice diff --git a/projects/plugins/wpcomsh/changelog/wpcomsh-update-media-notice b/projects/plugins/wpcomsh/changelog/wpcomsh-update-media-notice new file mode 100644 index 0000000000000..69cc7c5cb8c32 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/wpcomsh-update-media-notice @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Media Library: don't show storage info on Atomic upload.php's uploader diff --git a/projects/plugins/wpcomsh/notices/storage-notices.php b/projects/plugins/wpcomsh/notices/storage-notices.php index 8ceeb3297c3b3..09ee42a365989 100644 --- a/projects/plugins/wpcomsh/notices/storage-notices.php +++ b/projects/plugins/wpcomsh/notices/storage-notices.php @@ -59,9 +59,15 @@ function wpcomsh_storage_notices() { add_action( 'admin_notices', 'wpcomsh_storage_notices' ); /** - * Display disk space usage on /wp-admin/upload.php + * Display disk space usage on the uploader */ function wpcomsh_display_disk_space_usage() { + global $pagenow; + + if ( $pagenow === 'upload.php' ) { + return; + } + $site_info = wpcomsh_get_at_site_info(); if ( empty( $site_info['space_used'] ) || empty( $site_info['space_quota'] ) ) { From 00c4981cef6d782a3e9b67d124966ade92318827 Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Fri, 7 Feb 2025 16:36:14 +0700 Subject: [PATCH 414/420] Media Library: add track event to the Import Media button (#41626) --- .../external-media/changelog/media-library-tracks-2 | 4 ++++ .../src/features/admin/external-media-import-button.js | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 projects/packages/external-media/changelog/media-library-tracks-2 diff --git a/projects/packages/external-media/changelog/media-library-tracks-2 b/projects/packages/external-media/changelog/media-library-tracks-2 new file mode 100644 index 0000000000000..5c6cbae94d559 --- /dev/null +++ b/projects/packages/external-media/changelog/media-library-tracks-2 @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Media Library: add track event to the Import Media button diff --git a/projects/packages/external-media/src/features/admin/external-media-import-button.js b/projects/packages/external-media/src/features/admin/external-media-import-button.js index c852b3c9ea88c..22145691a40f7 100644 --- a/projects/packages/external-media/src/features/admin/external-media-import-button.js +++ b/projects/packages/external-media/src/features/admin/external-media-import-button.js @@ -1,3 +1,4 @@ +import jetpackAnalytics from '@automattic/jetpack-analytics'; import { __ } from '@wordpress/i18n'; document.addEventListener( 'DOMContentLoaded', function () { @@ -11,6 +12,11 @@ document.addEventListener( 'DOMContentLoaded', function () { importButton.role = 'button'; importButton.innerHTML = __( 'Import Media', 'jetpack-external-media' ); importButton.href = window.JETPACK_EXTERNAL_MEDIA_IMPORT_BUTTON?.href; + importButton.onclick = function () { + jetpackAnalytics.tracks.recordEvent( 'jetpack_external_media_import_media_button_click', { + page: 'media-library', + } ); + }; const parentNode = addNewButton.parentNode; const nextSibling = addNewButton.nextSibling; From c7e6c1f572c83f1fad74e299a3cbeb9712df4c90 Mon Sep 17 00:00:00 2001 From: Kolja Zuelsdorf Date: Fri, 7 Feb 2025 11:43:05 +0100 Subject: [PATCH 415/420] Added a debug tool to send API requests to WPcom via the Jetpack connection. (#41154) * Added a debug tool to send API requests to WPcom via the Jetpack connection. This is to help with testing singular API requests that are in development and supposed to be called by Jetpack over the connection. * Added changelog. * Ensured that the connection classes actually exist (so that a helper can be set up) before using this helper. Moved module initialization to static method, so we don't have an empty object to construct. * Update phan baseline. * Update phan baseline. * Don't add extra IP for public API. * Extended request faker to allow different HTTP methods other than GET. --- .../plugins/debug-helper/.phan/baseline.php | 1 + .../debug-add-wpcom-api-request-faker | 4 + .../class-wpcom-api-request-faker-module.php | 185 ++++++++++++++++++ projects/plugins/debug-helper/plugin.php | 5 + 4 files changed, 195 insertions(+) create mode 100644 projects/plugins/debug-helper/changelog/debug-add-wpcom-api-request-faker create mode 100644 projects/plugins/debug-helper/modules/class-wpcom-api-request-faker-module.php diff --git a/projects/plugins/debug-helper/.phan/baseline.php b/projects/plugins/debug-helper/.phan/baseline.php index b7c093aa21e3b..724eaf018ac4c 100644 --- a/projects/plugins/debug-helper/.phan/baseline.php +++ b/projects/plugins/debug-helper/.phan/baseline.php @@ -45,6 +45,7 @@ 'modules/class-scan-helper.php' => ['PhanNoopNew', 'PhanSuspiciousValueComparison', 'PhanTypeConversionFromArray', 'PhanTypeMismatchReturnProbablyReal'], 'modules/class-sync-data-settings-tester.php' => ['PhanNoopNew', 'PhanTypePossiblyInvalidDimOffset', 'PhanUndeclaredClass'], 'modules/class-waf-helper.php' => ['PhanNoopNew', 'PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredClassConstant', 'PhanUndeclaredClassMethod'], + 'modules/class-wpcom-api-request-faker-module.php' => ['PhanUndeclaredClassMethod'], 'modules/class-wpcom-api-request-tracker-module.php' => ['PhanNoopNew', 'PhanTypeMismatchArgument'], 'modules/class-xmlrpc-blocker.php' => ['PhanNoopNew'], 'modules/class-xmlrpc-logger.php' => ['PhanNoopNew', 'PhanUndeclaredFunction'], diff --git a/projects/plugins/debug-helper/changelog/debug-add-wpcom-api-request-faker b/projects/plugins/debug-helper/changelog/debug-add-wpcom-api-request-faker new file mode 100644 index 0000000000000..6b85711b72655 --- /dev/null +++ b/projects/plugins/debug-helper/changelog/debug-add-wpcom-api-request-faker @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Debug Helper: Added WPcom API request sending functionality to help testing specific requests manually. diff --git a/projects/plugins/debug-helper/modules/class-wpcom-api-request-faker-module.php b/projects/plugins/debug-helper/modules/class-wpcom-api-request-faker-module.php new file mode 100644 index 0000000000000..b50bdf0e6d16f --- /dev/null +++ b/projects/plugins/debug-helper/modules/class-wpcom-api-request-faker-module.php @@ -0,0 +1,185 @@ +Error: This helper requires a jetpack connection to work. Please ensure that you have set one up before using.

    '; + return; + } + + // Handle the form submit + if ( ! empty( $_POST ) ) { + if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ?? '' ) ), 'wpcom-api-request-faker' ) ) { + echo '

    Wrong nonce, aborting.

    '; + return; + } + + $is_connected = ( new Connection_Manager() )->is_connected(); + if ( ! $is_connected ) { + echo '

    Site is not connected, please establish a jetpack connection first

    '; + return; + } + + $api_url = '/' . sanitize_text_field( wp_unslash( $_POST['url'] ?? '' ) ); + $version = sanitize_text_field( wp_unslash( $_POST['version'] ?? '2' ) ); + $method = sanitize_text_field( wp_unslash( $_POST['method'] ?? 'get' ) ); + + $body = null; + if ( 'post' === $_POST['method'] || 'put' === $_POST['method'] ) { + $body = json_decode( sanitize_text_field( wp_unslash( $_POST['body'] ?? '' ) ), true ); + } + + $response = Client::wpcom_json_api_request_as_blog( + $api_url, + $version, + array( 'method' => sanitize_text_field( wp_unslash( $_POST['method'] ?? '2' ) ) ), + $body, + 'wpcom' + ); + + $response_code = wp_remote_retrieve_response_code( $response ); + + // Display error or response + if ( is_wp_error( $response ) || 200 !== $response_code || empty( $response['body'] ) ) { + ?> +

    Something went wrong, here is the error (http code )

    + +
    + +

    Response for

    + ' . esc_html( var_export( $looks_like_json ? json_decode( $body, true ) : $body, true ) ) . ''; + } + } + + ?> +
    + +

    WPcom API Request Faker

    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + / + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + + +
    + +
    + +
    +
    + 'WPCOM API Request Tracker', 'description' => 'Displays the number of requests to WPCOM API endpoints for the current page request.', ), + 'wpcom-api-request-faker' => array( + 'file' => 'class-wpcom-api-request-faker-module.php', + 'name' => 'WPCOM API Request Faker', + 'description' => 'Send custom requests to the WPcom API, authorized via your Jetpack connection.', + ), 'xmlrpc-logger' => array( 'file' => 'class-xmlrpc-logger.php', 'name' => 'XMLRPC Logger', From 3c6ee841f63609aa260915ee3e496b0429cff2aa Mon Sep 17 00:00:00 2001 From: Jorge Costa Date: Fri, 7 Feb 2025 11:30:10 +0000 Subject: [PATCH 416/420] Fix: Warnings on any theme using customizer colors. (#41136) * Fix: Warnings on any theme using customizer colors. * changelog --- .../fix-warnings-on-any-theme-using-customizer-colors | 4 ++++ projects/plugins/wpcomsh/custom-colors/colors.php | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/wpcomsh/changelog/fix-warnings-on-any-theme-using-customizer-colors diff --git a/projects/plugins/wpcomsh/changelog/fix-warnings-on-any-theme-using-customizer-colors b/projects/plugins/wpcomsh/changelog/fix-warnings-on-any-theme-using-customizer-colors new file mode 100644 index 0000000000000..da207bfd8be38 --- /dev/null +++ b/projects/plugins/wpcomsh/changelog/fix-warnings-on-any-theme-using-customizer-colors @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix: Undefined array key warnings on any customizer theme with colors. diff --git a/projects/plugins/wpcomsh/custom-colors/colors.php b/projects/plugins/wpcomsh/custom-colors/colors.php index b2a4405482e8d..15f56c8ee244c 100644 --- a/projects/plugins/wpcomsh/custom-colors/colors.php +++ b/projects/plugins/wpcomsh/custom-colors/colors.php @@ -1421,8 +1421,12 @@ public static function override_themecolors() { $colors = $opts['colors']; - $colors['border'] = $colors['fg1']; - $colors['url'] = $colors['link']; + if ( isset( $colors['fg1'] ) ) { + $colors['border'] = $colors['fg1']; + } + if ( isset( $colors['link'] ) ) { + $colors['url'] = $colors['link']; + } if ( isset( $colors['txt'] ) ) { $colors['text'] = $colors['txt']; } From 5fee730852dca90864477a58d1d6435ffd82813c Mon Sep 17 00:00:00 2001 From: Peter Petrov Date: Fri, 7 Feb 2025 14:33:34 +0200 Subject: [PATCH 417/420] Boost: Add compatibility with Depay Payments for WooCommerce (#41571) --- .../boost/changelog/fix-boost-compatibility-depay-woocommerce | 4 ++++ projects/plugins/boost/compatibility/js-concatenate.php | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 projects/plugins/boost/changelog/fix-boost-compatibility-depay-woocommerce diff --git a/projects/plugins/boost/changelog/fix-boost-compatibility-depay-woocommerce b/projects/plugins/boost/changelog/fix-boost-compatibility-depay-woocommerce new file mode 100644 index 0000000000000..6044234689c32 --- /dev/null +++ b/projects/plugins/boost/changelog/fix-boost-compatibility-depay-woocommerce @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Concatenate JS: Add compatibility with "Depay Payments for WooCommerce". diff --git a/projects/plugins/boost/compatibility/js-concatenate.php b/projects/plugins/boost/compatibility/js-concatenate.php index b4aca14772b45..0e3157c94860c 100644 --- a/projects/plugins/boost/compatibility/js-concatenate.php +++ b/projects/plugins/boost/compatibility/js-concatenate.php @@ -12,6 +12,8 @@ function maybe_do_not_concat( $do_concat, $handle ) { 'tribe-tickets-provider', // Plugin: `woocommerce-shipping` 'woocommerce-shipping-checkout-address-validation', + // Plugin: `depay-payments-for-woocommerce` + 'DEPAY_WC_WIDGETS', ); if ( in_array( $handle, $excluded_handles, true ) ) { From 276eb079afd00c26b544ad4be416fa5cb87341e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donncha=20=C3=93=20Caoimh?= <5656673+donnchawp@users.noreply.github.com> Date: Fri, 7 Feb 2025 13:06:50 +0000 Subject: [PATCH 418/420] Boost: Run the 404 tester when concatenate modules are enabled (#41593) --- .../app/lib/minify/functions-service.php | 15 ++- .../optimizations/minify/class-minify-css.php | 7 +- .../optimizations/minify/class-minify-js.php | 7 +- .../changelog/update-boost-404-test-activate | 5 + .../php/lib/minify/test-functions-service.php | 99 +++++++++++++++++++ 5 files changed, 128 insertions(+), 5 deletions(-) create mode 100644 projects/plugins/boost/changelog/update-boost-404-test-activate create mode 100644 projects/plugins/boost/tests/php/lib/minify/test-functions-service.php diff --git a/projects/plugins/boost/app/lib/minify/functions-service.php b/projects/plugins/boost/app/lib/minify/functions-service.php index 798e986d6fad0..ccdf9e8513a06 100644 --- a/projects/plugins/boost/app/lib/minify/functions-service.php +++ b/projects/plugins/boost/app/lib/minify/functions-service.php @@ -68,17 +68,26 @@ function jetpack_boost_check_404_handler( $request_uri ) { * This function is used to test if is_404() is working in wp-content/ * It sends a request to a non-existent URL, that will execute the 404 handler * in jetpack_boost_check_404_handler(). + * Define the constant JETPACK_BOOST_DISABLE_404_TESTER to disable this. * - * This function is called when the Minify_CSS or Minify_JS module is activated. + * This function is called when the Minify_CSS or Minify_JS module is activated, and once per day. */ function jetpack_boost_404_tester() { + if ( defined( 'JETPACK_BOOST_DISABLE_404_TESTER' ) && JETPACK_BOOST_DISABLE_404_TESTER ) { + return; + } + + $minification_enabled = ''; wp_remote_get( home_url( '/wp-content/boost-cache/static/testing_404' ) ); if ( file_exists( Config::get_static_cache_dir_path() . '/404' ) ) { wp_delete_file( Config::get_static_cache_dir_path() . '/404' ); - update_site_option( 'jetpack_boost_static_minification', 1 ); + $minification_enabled = 1; } else { - update_site_option( 'jetpack_boost_static_minification', 0 ); + $minification_enabled = 0; } + update_site_option( 'jetpack_boost_static_minification', $minification_enabled ); + + return $minification_enabled; } add_action( 'jetpack_boost_404_tester_cron', 'jetpack_boost_404_tester' ); diff --git a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-css.php b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-css.php index 2144a5072c269..efeec1c0ac79f 100644 --- a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-css.php +++ b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-css.php @@ -3,12 +3,13 @@ namespace Automattic\Jetpack_Boost\Modules\Optimizations\Minify; use Automattic\Jetpack_Boost\Contracts\Changes_Page_Output; +use Automattic\Jetpack_Boost\Contracts\Has_Activate; use Automattic\Jetpack_Boost\Contracts\Has_Deactivate; use Automattic\Jetpack_Boost\Contracts\Optimization; use Automattic\Jetpack_Boost\Contracts\Pluggable; use Automattic\Jetpack_Boost\Lib\Minify\Concatenate_CSS; -class Minify_CSS implements Pluggable, Changes_Page_Output, Optimization, Has_Deactivate { +class Minify_CSS implements Pluggable, Changes_Page_Output, Optimization, Has_Activate, Has_Deactivate { public static $default_excludes = array( 'admin-bar', 'dashicons', 'elementor-app' ); @@ -49,6 +50,10 @@ public function init_minify() { $wp_styles->allow_gzip_compression = true; // @todo - used constant ALLOW_GZIP_COMPRESSION = true if not defined. } + public static function activate() { + jetpack_boost_404_tester(); + } + public static function deactivate() { jetpack_boost_page_optimize_cleanup_cache( 'css' ); } diff --git a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php index 0a9bfb319a011..76998a6c4e824 100644 --- a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php +++ b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php @@ -3,12 +3,13 @@ namespace Automattic\Jetpack_Boost\Modules\Optimizations\Minify; use Automattic\Jetpack_Boost\Contracts\Changes_Page_Output; +use Automattic\Jetpack_Boost\Contracts\Has_Activate; use Automattic\Jetpack_Boost\Contracts\Has_Deactivate; use Automattic\Jetpack_Boost\Contracts\Optimization; use Automattic\Jetpack_Boost\Contracts\Pluggable; use Automattic\Jetpack_Boost\Lib\Minify\Concatenate_JS; -class Minify_JS implements Pluggable, Changes_Page_Output, Optimization, Has_Deactivate { +class Minify_JS implements Pluggable, Changes_Page_Output, Optimization, Has_Activate, Has_Deactivate { public static $default_excludes = array( 'jquery', 'jquery-core', 'underscore', 'backbone' ); @@ -49,6 +50,10 @@ public function init_minify() { $wp_scripts->allow_gzip_compression = true; // @todo - used constant ALLOW_GZIP_COMPRESSION = true if not defined. } + public static function activate() { + jetpack_boost_404_tester(); + } + public static function deactivate() { jetpack_boost_page_optimize_cleanup_cache( 'js' ); } diff --git a/projects/plugins/boost/changelog/update-boost-404-test-activate b/projects/plugins/boost/changelog/update-boost-404-test-activate new file mode 100644 index 0000000000000..535387eb3008f --- /dev/null +++ b/projects/plugins/boost/changelog/update-boost-404-test-activate @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Minification: run the 404 tester when activating either of the minification/concatenation modules. + + diff --git a/projects/plugins/boost/tests/php/lib/minify/test-functions-service.php b/projects/plugins/boost/tests/php/lib/minify/test-functions-service.php new file mode 100644 index 0000000000000..2cf2d253b4f5b --- /dev/null +++ b/projects/plugins/boost/tests/php/lib/minify/test-functions-service.php @@ -0,0 +1,99 @@ +andReturn( true ); + + // Clean up any test files before each test + if ( file_exists( Config::get_static_cache_dir_path() . '/404' ) ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_read_file_exists + unlink( Config::get_static_cache_dir_path() . '/404' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.unlink_unlink + } + require_once __DIR__ . '/../../../../app/lib/minify/loader.php'; + } + + public function test_404_tester_when_404_file_exists() { + // Create mock 404 file + $cache_dir = Config::get_static_cache_dir_path(); + if ( ! is_dir( $cache_dir ) ) { + mkdir( $cache_dir, 0775, true ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_mkdir + } + file_put_contents( $cache_dir . '/404', '1' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents + + Functions\expect( 'home_url' ) + ->once() + ->with( '/wp-content/boost-cache/static/testing_404' ) + ->andReturn( 'http://example.com/wp-content/boost-cache/static/testing_404' ); + + Functions\expect( 'wp_remote_get' ) + ->once() + ->with( 'http://example.com/wp-content/boost-cache/static/testing_404' ); + + Functions\expect( 'wp_delete_file' ) + ->once() + ->with( $cache_dir . '/404' ); + + Functions\expect( 'update_site_option' ) + ->once() + ->with( 'jetpack_boost_static_minification', 1 ); + + $this->assertEquals( 1, jetpack_boost_404_tester() ); + } + + public function test_404_tester_when_404_file_does_not_exist() { + Functions\expect( 'home_url' ) + ->once() + ->with( '/wp-content/boost-cache/static/testing_404' ) + ->andReturn( 'http://example.com/wp-content/boost-cache/static/testing_404' ); + + Functions\expect( 'wp_remote_get' ) + ->once() + ->with( 'http://example.com/wp-content/boost-cache/static/testing_404' ); + + Functions\expect( 'update_site_option' ) + ->once() + ->with( 'jetpack_boost_static_minification', 0 ); + + $this->assertEquals( 0, jetpack_boost_404_tester() ); + } + + public function test_404_tester_disabled_by_constant() { + if ( ! defined( 'JETPACK_BOOST_DISABLE_404_TESTER' ) ) { + define( 'JETPACK_BOOST_DISABLE_404_TESTER', true ); + } + + Functions\expect( 'wp_remote_get' )->never(); + Functions\expect( 'update_site_option' )->never(); + + $this->assertEquals( '', jetpack_boost_404_tester() ); + } + + protected function tear_down() { + parent::tear_down(); + + // Clean up any test files after each test + if ( file_exists( Config::get_static_cache_dir_path() . '/404' ) ) { + unlink( Config::get_static_cache_dir_path() . '/404' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.unlink_unlink + } + + $path = '/tmp/wordpress/wp-content/boost-cache/static/'; + while ( $path !== '/tmp' ) { + if ( is_dir( $path ) ) { + rmdir( $path ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_rmdir + } + $path = dirname( $path ); + } + } +} From e33f0ecea8268c1f19c47e5db57fc5e2d41b71ad Mon Sep 17 00:00:00 2001 From: Igor Zinovyev Date: Fri, 7 Feb 2025 16:38:10 +0300 Subject: [PATCH 419/420] Removed p tags and added whitespace instead. (#41633) --- tools/cli/helpers/doc-parser/src/class-doc-parser.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/cli/helpers/doc-parser/src/class-doc-parser.php b/tools/cli/helpers/doc-parser/src/class-doc-parser.php index f4014d0cdff8c..83d7002d6b79d 100644 --- a/tools/cli/helpers/doc-parser/src/class-doc-parser.php +++ b/tools/cli/helpers/doc-parser/src/class-doc-parser.php @@ -243,9 +243,7 @@ function ( Node $node ) { if ( ! empty( $entry->text ) ) { $block['doc']['description'] .= - '

    ' - . str_replace( array( "\r\n", "\n", "\r" ), '

    ', $entry->text ) - . '

    '; + str_replace( array( "\r\n", "\n", "\r" ), ' ', $entry->text ); } } From f2c86e0a0dd77dcda03dc2e75bf7b5b0aab81af0 Mon Sep 17 00:00:00 2001 From: Igor Zinovyev Date: Fri, 7 Feb 2025 16:46:03 +0300 Subject: [PATCH 420/420] Add a safeguard for Sharing post filter results. (#41600) * Added a safeguard for the post object in Sharing. * changelog * Moved the check upwards and changed it to instance detection, h/t @jeherve. * Removed accidental duplication. --- projects/plugins/jetpack/changelog/add-sharing-safeguard-post | 4 ++++ .../plugins/jetpack/modules/sharedaddy/sharing-service.php | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 projects/plugins/jetpack/changelog/add-sharing-safeguard-post diff --git a/projects/plugins/jetpack/changelog/add-sharing-safeguard-post b/projects/plugins/jetpack/changelog/add-sharing-safeguard-post new file mode 100644 index 0000000000000..c8ba163b65325 --- /dev/null +++ b/projects/plugins/jetpack/changelog/add-sharing-safeguard-post @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Sharing: Fix possible warnings related to plugin compatibility. diff --git a/projects/plugins/jetpack/modules/sharedaddy/sharing-service.php b/projects/plugins/jetpack/modules/sharedaddy/sharing-service.php index db9a37dac1216..d726ec387adc3 100644 --- a/projects/plugins/jetpack/modules/sharedaddy/sharing-service.php +++ b/projects/plugins/jetpack/modules/sharedaddy/sharing-service.php @@ -960,7 +960,8 @@ function sharing_display( $text = '', $echo = false ) { return $text; } - if ( empty( $post ) ) { + // We require the post to not be empty and be an actual WordPress post object. If it's not - we just return. + if ( empty( $post ) || ! $post instanceof \WP_Post ) { return $text; }