diff --git a/composer.json b/composer.json index fc01e7401..21f118948 100644 --- a/composer.json +++ b/composer.json @@ -42,6 +42,7 @@ "psr/container": "^1.0", "stellarwp/container-contract": "^1.1", "stellarwp/db": "^1.1", + "stellarwp/harbor": "^1.0", "stellarwp/prophecy-image-downloader": "^3.0", "stellarwp/prophecy-storage": "^3.0", "stellarwp/schema": "^2.0", @@ -83,16 +84,18 @@ "vendor/bin/stellar-uplink domain=kadence-blocks" ], "strauss-install": [ - "test -f ./bin/strauss.phar || curl -o bin/strauss.phar -L -C - https://github.com/BrianHenryIE/strauss/releases/download/0.19.1/strauss.phar" + "test -f ./bin/strauss.phar || curl -o bin/strauss.phar -L -C - https://github.com/BrianHenryIE/strauss/releases/download/0.27.0/strauss.phar" ], "strauss": [ "@strauss-install", "@php bin/strauss.phar", + "@php vendor/stellarwp/harbor/bin/stellar-harbor domain=kadence-blocks", "@composer dump-autoload" ], "strauss-release": [ "@strauss-install", "@php bin/strauss.phar --deleteVendorPackages=true", + "@php vendor/stellarwp/harbor/bin/stellar-harbor domain=kadence-blocks", "@composer dump-autoload" ], "strauss-clean": [ diff --git a/composer.lock b/composer.lock index 77382173e..33b462171 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7a823630fd7197034de879f12f7ac260", + "content-hash": "ef40efbc1186ec35f29e6dbcee9e36f3", "packages": [ { "name": "adbario/php-dot-notation", - "version": "3.3.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/adbario/php-dot-notation.git", - "reference": "a94ce4493d19ea430baa8d7d210a2c9bd7129fc2" + "reference": "aa09db5a7a365a8d2d8dd7edfa3cd501d1a8acb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/adbario/php-dot-notation/zipball/a94ce4493d19ea430baa8d7d210a2c9bd7129fc2", - "reference": "a94ce4493d19ea430baa8d7d210a2c9bd7129fc2", + "url": "https://api.github.com/repos/adbario/php-dot-notation/zipball/aa09db5a7a365a8d2d8dd7edfa3cd501d1a8acb0", + "reference": "aa09db5a7a365a8d2d8dd7edfa3cd501d1a8acb0", "shasum": "" }, "require": { @@ -25,7 +25,7 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.8", + "phpstan/phpstan": "^2.1", "phpunit/phpunit": "^9.5", "squizlabs/php_codesniffer": "^3.7" }, @@ -56,9 +56,9 @@ ], "support": { "issues": "https://github.com/adbario/php-dot-notation/issues", - "source": "https://github.com/adbario/php-dot-notation/tree/3.3.0" + "source": "https://github.com/adbario/php-dot-notation/tree/3.5.0" }, - "time": "2023-02-24T20:27:50+00:00" + "time": "2026-04-04T04:29:49+00:00" }, { "name": "composer/installers", @@ -460,6 +460,84 @@ ], "time": "2026-01-01T13:05:00+00:00" }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.5", @@ -583,6 +661,166 @@ }, "time": "2021-11-05T16:50:12+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+00:00" + }, { "name": "psr/log", "version": "1.1.4", @@ -635,16 +873,16 @@ }, { "name": "stellarwp/arrays", - "version": "1.3.1", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/stellarwp/arrays.git", - "reference": "315a9b2018ac6f2475a346c89b1d7120ae07c218" + "reference": "e994abcdb5d76fb5fdea7f2e1549d0603c13f91e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stellarwp/arrays/zipball/315a9b2018ac6f2475a346c89b1d7120ae07c218", - "reference": "315a9b2018ac6f2475a346c89b1d7120ae07c218", + "url": "https://api.github.com/repos/stellarwp/arrays/zipball/e994abcdb5d76fb5fdea7f2e1549d0603c13f91e", + "reference": "e994abcdb5d76fb5fdea7f2e1549d0603c13f91e", "shasum": "" }, "require-dev": { @@ -676,10 +914,9 @@ ], "description": "A library for array manipulation.", "support": { - "issues": "https://github.com/stellarwp/arrays/issues", - "source": "https://github.com/stellarwp/arrays/tree/1.3.1" + "source": "https://github.com/stellarwp/arrays/tree/1.3.2" }, - "time": "2025-02-07T18:23:13+00:00" + "time": "2026-02-12T19:58:13+00:00" }, { "name": "stellarwp/container-contract", @@ -730,16 +967,16 @@ }, { "name": "stellarwp/db", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/stellarwp/db.git", - "reference": "f92d6ae0bcd74a3f526b023bb2d6ecd13227ef96" + "reference": "34d6c66adf323f4839c2199d6e1119c79fc87a4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stellarwp/db/zipball/f92d6ae0bcd74a3f526b023bb2d6ecd13227ef96", - "reference": "f92d6ae0bcd74a3f526b023bb2d6ecd13227ef96", + "url": "https://api.github.com/repos/stellarwp/db/zipball/34d6c66adf323f4839c2199d6e1119c79fc87a4f", + "reference": "34d6c66adf323f4839c2199d6e1119c79fc87a4f", "shasum": "" }, "require-dev": { @@ -780,9 +1017,161 @@ "description": "A WPDB wrapper and query builder library.", "support": { "issues": "https://github.com/stellarwp/db/issues", - "source": "https://github.com/stellarwp/db/tree/1.2.0" + "source": "https://github.com/stellarwp/db/tree/1.3.0" + }, + "time": "2026-02-25T17:01:46+00:00" + }, + { + "name": "stellarwp/harbor", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/stellarwp/harbor.git", + "reference": "11ad277d7a1eda1b90ba01eb13aa7d48f0da7553" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stellarwp/harbor/zipball/11ad277d7a1eda1b90ba01eb13aa7d48f0da7553", + "reference": "11ad277d7a1eda1b90ba01eb13aa7d48f0da7553", + "shasum": "" + }, + "require": { + "ext-json": "*", + "nyholm/psr7": "^1.0", + "php": ">=7.4", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1", + "stellarwp/container-contract": "^1.0", + "stellarwp/licensing-api-client-wordpress": "^2.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1", + "dpanta94/phpstan-containers": "^0", + "exussum12/coverage-checker": "^1.1", + "lucatume/codeception-snapshot-assertions": "*", + "lucatume/di52": "^3", + "lucatume/wp-browser": "*", + "php-stubs/wp-cli-stubs": "^2", + "phpcompatibility/phpcompatibility-wp": "^2", + "phpspec/prophecy": "*", + "phpspec/prophecy-phpunit": "*", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "*", + "stellarwp/coding-standards": "^2", + "szepeviktor/phpstan-wordpress": ">=1.0", + "wp-cli/wp-cli": "^2" + }, + "bin": [ + "bin/stellar-harbor" + ], + "type": "library", + "autoload": { + "psr-4": { + "LiquidWeb\\Harbor\\": "src/Harbor/", + "LiquidWeb\\Harbor\\Views\\": "src/views/", + "LiquidWeb\\Harbor\\Build_Dir\\": "build/", + "LiquidWeb\\Harbor\\Build_Dev_Dir\\": "build-dev/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Liquid Web", + "homepage": "https://liquidweb.com" + } + ], + "description": "A library that integrates a WordPress product with the Liquid Web licensing system.", + "support": { + "issues": "https://github.com/stellarwp/harbor/issues", + "source": "https://github.com/stellarwp/harbor/tree/v1.0.2" + }, + "time": "2026-05-01T17:17:09+00:00" + }, + { + "name": "stellarwp/licensing-api-client", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/stellarwp/licensing-api-client.git", + "reference": "6f9e0b3e49831f49b735a9544c5fb2fea4eeedeb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stellarwp/licensing-api-client/zipball/6f9e0b3e49831f49b735a9544c5fb2fea4eeedeb", + "reference": "6f9e0b3e49831f49b735a9544c5fb2fea4eeedeb", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.4", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LiquidWeb\\LicensingApiClient\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "A PHP client for the Liquid Web Licensing API.", + "support": { + "source": "https://github.com/stellarwp/licensing-api-client/tree/2.0.0" }, - "time": "2025-11-10T10:55:50+00:00" + "time": "2026-04-23T03:36:42+00:00" + }, + { + "name": "stellarwp/licensing-api-client-wordpress", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/stellarwp/licensing-api-client-wordpress.git", + "reference": "f4ece66587cd6de175ffd35d0fbc3dc06c76a1f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stellarwp/licensing-api-client-wordpress/zipball/f4ece66587cd6de175ffd35d0fbc3dc06c76a1f8", + "reference": "f4ece66587cd6de175ffd35d0fbc3dc06c76a1f8", + "shasum": "" + }, + "require": { + "nyholm/psr7": "^1.8", + "php": ">=7.4", + "stellarwp/licensing-api-client": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LiquidWeb\\LicensingApiClientWordPress\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "WordPress transport and factory integration for the Liquid Web Licensing API client.", + "support": { + "source": "https://github.com/stellarwp/licensing-api-client-wordpress/tree/2.0.0" + }, + "time": "2026-04-23T03:38:52+00:00" }, { "name": "stellarwp/prophecy-container", @@ -1059,16 +1448,16 @@ }, { "name": "stellarwp/telemetry", - "version": "2.3.4", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/stellarwp/telemetry.git", - "reference": "74c7b819d574aa5fc1392f982fb32cedc18d4c6f" + "reference": "c1b3a43359475460a17589dd0442310a81f51b24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stellarwp/telemetry/zipball/74c7b819d574aa5fc1392f982fb32cedc18d4c6f", - "reference": "74c7b819d574aa5fc1392f982fb32cedc18d4c6f", + "url": "https://api.github.com/repos/stellarwp/telemetry/zipball/c1b3a43359475460a17589dd0442310a81f51b24", + "reference": "c1b3a43359475460a17589dd0442310a81f51b24", "shasum": "" }, "require": { @@ -1102,9 +1491,9 @@ "description": "Telemetry library for StellarWP plugins.", "support": { "issues": "https://github.com/stellarwp/telemetry/issues", - "source": "https://github.com/stellarwp/telemetry/tree/2.3.4" + "source": "https://github.com/stellarwp/telemetry/tree/2.4.1" }, - "time": "2025-04-25T18:58:09+00:00" + "time": "2026-04-10T15:47:09+00:00" }, { "name": "stellarwp/uplink", @@ -1642,16 +2031,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -1701,7 +2090,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" }, "funding": [ { @@ -1721,20 +2110,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", "shasum": "" }, "require": { @@ -1783,7 +2172,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" }, "funding": [ { @@ -1803,11 +2192,11 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -1870,7 +2259,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.36.0" }, "funding": [ { @@ -1894,7 +2283,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -1955,7 +2344,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" }, "funding": [ { @@ -1979,16 +2368,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { @@ -2040,7 +2429,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0" }, "funding": [ { @@ -2060,11 +2449,11 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -2120,7 +2509,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.36.0" }, "funding": [ { @@ -2144,16 +2533,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { @@ -2204,7 +2593,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.36.0" }, "funding": [ { @@ -2224,7 +2613,7 @@ "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/service-contracts", @@ -2782,27 +3171,27 @@ }, { "name": "brain/monkey", - "version": "2.6.2", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/Brain-WP/BrainMonkey.git", - "reference": "d95a9d895352c30f47604ad1b825ab8fa9d1a373" + "reference": "ea3aeb3d559ba3c0930b3f4d210b665a4c044d83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Brain-WP/BrainMonkey/zipball/d95a9d895352c30f47604ad1b825ab8fa9d1a373", - "reference": "d95a9d895352c30f47604ad1b825ab8fa9d1a373", + "url": "https://api.github.com/repos/Brain-WP/BrainMonkey/zipball/ea3aeb3d559ba3c0930b3f4d210b665a4c044d83", + "reference": "ea3aeb3d559ba3c0930b3f4d210b665a4c044d83", "shasum": "" }, "require": { "antecedent/patchwork": "^2.1.17", - "mockery/mockery": "^1.3.5 || ^1.4.4", + "mockery/mockery": "~1.3.6 || ~1.4.4 || ~1.5.1 || ^1.6.10", "php": ">=5.6.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0.0", "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" + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.49 || ^9.6.30" }, "type": "library", "extra": { @@ -2848,7 +3237,7 @@ "issues": "https://github.com/Brain-WP/BrainMonkey/issues", "source": "https://github.com/Brain-WP/BrainMonkey" }, - "time": "2024-08-29T20:15:04+00:00" + "time": "2026-02-05T09:22:14+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -3582,16 +3971,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.10", + "version": "1.5.11", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63" + "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/961a5e4056dd2e4a2eedcac7576075947c28bf63", - "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/68ff39175e8e94a4bb1d259407ce51a6a60f09e6", + "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6", "shasum": "" }, "require": { @@ -3638,7 +4027,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.10" + "source": "https://github.com/composer/ca-bundle/tree/1.5.11" }, "funding": [ { @@ -3650,20 +4039,20 @@ "type": "github" } ], - "time": "2025-12-08T15:06:51+00:00" + "time": "2026-03-30T09:16:10+00:00" }, { "name": "composer/class-map-generator", - "version": "1.7.1", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "8f5fa3cc214230e71f54924bd0197a3bcc705eb1" + "reference": "6a9c2f0970022ab00dc58c07d0685dd712f2231b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/8f5fa3cc214230e71f54924bd0197a3bcc705eb1", - "reference": "8f5fa3cc214230e71f54924bd0197a3bcc705eb1", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/6a9c2f0970022ab00dc58c07d0685dd712f2231b", + "reference": "6a9c2f0970022ab00dc58c07d0685dd712f2231b", "shasum": "" }, "require": { @@ -3707,7 +4096,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.7.1" + "source": "https://github.com/composer/class-map-generator/tree/1.7.2" }, "funding": [ { @@ -3719,20 +4108,20 @@ "type": "github" } ], - "time": "2025-12-29T13:15:25+00:00" + "time": "2026-03-30T15:36:56+00:00" }, { "name": "composer/composer", - "version": "2.9.3", + "version": "2.9.7", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "fb3bee27676fd852a8a11ebbb1de19b4dada5aba" + "reference": "82a2fbd1372a98d7915cfb092acf05207d9b4113" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/fb3bee27676fd852a8a11ebbb1de19b4dada5aba", - "reference": "fb3bee27676fd852a8a11ebbb1de19b4dada5aba", + "url": "https://api.github.com/repos/composer/composer/zipball/82a2fbd1372a98d7915cfb092acf05207d9b4113", + "reference": "82a2fbd1372a98d7915cfb092acf05207d9b4113", "shasum": "" }, "require": { @@ -3820,7 +4209,7 @@ "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", "security": "https://github.com/composer/composer/security/policy", - "source": "https://github.com/composer/composer/tree/2.9.3" + "source": "https://github.com/composer/composer/tree/2.9.7" }, "funding": [ { @@ -3832,7 +4221,7 @@ "type": "github" } ], - "time": "2025-12-30T12:40:17+00:00" + "time": "2026-04-14T11:31:52+00:00" }, { "name": "composer/metadata-minifier", @@ -4061,24 +4450,24 @@ }, { "name": "composer/spdx-licenses", - "version": "1.5.9", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f" + "reference": "5ecd0cb4177696f9fd48f1605dda81db3dee7889" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/edf364cefe8c43501e21e88110aac10b284c3c9f", - "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/5ecd0cb4177696f9fd48f1605dda81db3dee7889", + "reference": "5ecd0cb4177696f9fd48f1605dda81db3dee7889", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" + "symfony/phpunit-bridge": "^6.4.25 || ^7.3.3 || ^8.0" }, "type": "library", "extra": { @@ -4121,7 +4510,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.9" + "source": "https://github.com/composer/spdx-licenses/tree/1.6.0" }, "funding": [ { @@ -4131,13 +4520,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2025-05-12T21:07:07+00:00" + "time": "2026-04-08T20:18:39+00:00" }, { "name": "composer/xdebug-handler", @@ -4645,16 +5030,16 @@ }, { "name": "gettext/languages", - "version": "2.12.1", + "version": "2.12.2", "source": { "type": "git", "url": "https://github.com/php-gettext/Languages.git", - "reference": "0b0b0851c55168e1dfb14305735c64019732b5f1" + "reference": "079d6f4842cbcbf5673a70d8e93169a684e7aadd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-gettext/Languages/zipball/0b0b0851c55168e1dfb14305735c64019732b5f1", - "reference": "0b0b0851c55168e1dfb14305735c64019732b5f1", + "url": "https://api.github.com/repos/php-gettext/Languages/zipball/079d6f4842cbcbf5673a70d8e93169a684e7aadd", + "reference": "079d6f4842cbcbf5673a70d8e93169a684e7aadd", "shasum": "" }, "require": { @@ -4704,7 +5089,7 @@ ], "support": { "issues": "https://github.com/php-gettext/Languages/issues", - "source": "https://github.com/php-gettext/Languages/tree/2.12.1" + "source": "https://github.com/php-gettext/Languages/tree/2.12.2" }, "funding": [ { @@ -4716,7 +5101,7 @@ "type": "github" } ], - "time": "2025-03-19T11:14:02+00:00" + "time": "2026-02-23T14:05:50+00:00" }, { "name": "guzzlehttp/guzzle", @@ -4929,16 +5314,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.8.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "21dc724a0583619cd1652f673303492272778051" + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", - "reference": "21dc724a0583619cd1652f673303492272778051", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", "shasum": "" }, "require": { @@ -4954,6 +5339,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", + "jshttp/mime-db": "1.54.0.1", "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { @@ -5025,7 +5411,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.8.0" + "source": "https://github.com/guzzle/psr7/tree/2.9.0" }, "funding": [ { @@ -5041,7 +5427,7 @@ "type": "tidelift" } ], - "time": "2025-08-23T21:21:41+00:00" + "time": "2026-03-10T16:41:02+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -5312,16 +5698,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "6.6.4", + "version": "6.8.0", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "2eeb75d21cf73211335888e7f5e6fd7440723ec7" + "reference": "89ac92bcfe5d0a8a4433c7b89d394553ae7250cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/2eeb75d21cf73211335888e7f5e6fd7440723ec7", - "reference": "2eeb75d21cf73211335888e7f5e6fd7440723ec7", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/89ac92bcfe5d0a8a4433c7b89d394553ae7250cc", + "reference": "89ac92bcfe5d0a8a4433c7b89d394553ae7250cc", "shasum": "" }, "require": { @@ -5381,9 +5767,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.4" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.8.0" }, - "time": "2025-12-19T15:01:32+00:00" + "time": "2026-04-02T12:43:11+00:00" }, { "name": "lucatume/wp-browser", @@ -5571,16 +5957,16 @@ }, { "name": "mck89/peast", - "version": "v1.17.4", + "version": "v1.17.5", "source": { "type": "git", "url": "https://github.com/mck89/peast.git", - "reference": "c6a63f32410d2e4ee2cd20fe94b35af147fb852d" + "reference": "e19a8bd896b7f04941a38fd38a140c9a6531c84f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mck89/peast/zipball/c6a63f32410d2e4ee2cd20fe94b35af147fb852d", - "reference": "c6a63f32410d2e4ee2cd20fe94b35af147fb852d", + "url": "https://api.github.com/repos/mck89/peast/zipball/e19a8bd896b7f04941a38fd38a140c9a6531c84f", + "reference": "e19a8bd896b7f04941a38fd38a140c9a6531c84f", "shasum": "" }, "require": { @@ -5593,7 +5979,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17.4-dev" + "dev-master": "1.17.5-dev" } }, "autoload": { @@ -5614,9 +6000,9 @@ "description": "Peast is PHP library that generates AST for JavaScript code", "support": { "issues": "https://github.com/mck89/peast/issues", - "source": "https://github.com/mck89/peast/tree/v1.17.4" + "source": "https://github.com/mck89/peast/tree/v1.17.5" }, - "time": "2025-10-10T12:53:17+00:00" + "time": "2026-03-15T10:47:07+00:00" }, { "name": "mikehaertl/php-shellcommand", @@ -6656,16 +7042,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.3.1", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374" + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/16dbf9937da8d4528ceb2145c9c7c0bd29e26374", - "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "shasum": "" }, "require": { @@ -6697,9 +7083,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2026-01-12T11:33:04+00:00" + "time": "2026-01-25T14:56:51+00:00" }, { "name": "phpunit/php-code-coverage", @@ -7022,16 +7408,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.31", + "version": "9.6.34", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "945d0b7f346a084ce5549e95289962972c4272e5" + "reference": "b36f02317466907a230d3aa1d34467041271ef4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/945d0b7f346a084ce5549e95289962972c4272e5", - "reference": "945d0b7f346a084ce5549e95289962972c4272e5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b36f02317466907a230d3aa1d34467041271ef4a", + "reference": "b36f02317466907a230d3aa1d34467041271ef4a", "shasum": "" }, "require": { @@ -7053,7 +7439,7 @@ "phpunit/php-timer": "^5.0.3", "sebastian/cli-parser": "^1.0.2", "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.9", + "sebastian/comparator": "^4.0.10", "sebastian/diff": "^4.0.6", "sebastian/environment": "^5.1.5", "sebastian/exporter": "^4.0.8", @@ -7105,7 +7491,7 @@ "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.31" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34" }, "funding": [ { @@ -7129,7 +7515,7 @@ "type": "tidelift" } ], - "time": "2025-12-06T07:45:52+00:00" + "time": "2026-01-27T05:45:00+00:00" }, { "name": "psr/clock", @@ -7229,166 +7615,6 @@ }, "time": "2019-01-08T18:20:26+00:00" }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, { "name": "psr/simple-cache", "version": "1.0.1", @@ -7792,16 +8018,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.9", + "version": "4.0.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5" + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/67a2df3a62639eab2cc5906065e9805d4fd5dfc5", - "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e4df00b9b3571187db2831ae9aada2c6efbd715d", + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d", "shasum": "" }, "require": { @@ -7854,7 +8080,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.9" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.10" }, "funding": [ { @@ -7874,7 +8100,7 @@ "type": "tidelift" } ], - "time": "2025-08-10T06:51:50+00:00" + "time": "2026-01-24T09:22:56+00:00" }, { "name": "sebastian/complexity", @@ -9606,7 +9832,7 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -9662,7 +9888,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.36.0" }, "funding": [ { @@ -9686,16 +9912,16 @@ }, { "name": "symfony/polyfill-php84", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { @@ -9742,7 +9968,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0" }, "funding": [ { @@ -9762,7 +9988,7 @@ "type": "tidelift" } ], - "time": "2025-06-24T13:30:11+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { "name": "symfony/translation", @@ -10845,16 +11071,16 @@ }, { "name": "wp-cli/eval-command", - "version": "v2.2.7", + "version": "v2.2.9", "source": { "type": "git", "url": "https://github.com/wp-cli/eval-command.git", - "reference": "2fb2a9d40861741eafaa1df86ed0dbd62de6e5ca" + "reference": "827c7208c74ebd6ab81c6051f515381d4f276e32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/2fb2a9d40861741eafaa1df86ed0dbd62de6e5ca", - "reference": "2fb2a9d40861741eafaa1df86ed0dbd62de6e5ca", + "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/827c7208c74ebd6ab81c6051f515381d4f276e32", + "reference": "827c7208c74ebd6ab81c6051f515381d4f276e32", "shasum": "" }, "require": { @@ -10897,22 +11123,22 @@ "homepage": "https://github.com/wp-cli/eval-command", "support": { "issues": "https://github.com/wp-cli/eval-command/issues", - "source": "https://github.com/wp-cli/eval-command/tree/v2.2.7" + "source": "https://github.com/wp-cli/eval-command/tree/v2.2.9" }, - "time": "2025-12-02T18:17:50+00:00" + "time": "2026-03-18T09:03:46+00:00" }, { "name": "wp-cli/export-command", - "version": "v2.1.14", + "version": "v2.1.16", "source": { "type": "git", "url": "https://github.com/wp-cli/export-command.git", - "reference": "2af32bf12c1bccd6561a215dbbafc2f272647ee8" + "reference": "cf85ae0105617c106a0c8d6b9f77bc4983140707" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/export-command/zipball/2af32bf12c1bccd6561a215dbbafc2f272647ee8", - "reference": "2af32bf12c1bccd6561a215dbbafc2f272647ee8", + "url": "https://api.github.com/repos/wp-cli/export-command/zipball/cf85ae0105617c106a0c8d6b9f77bc4983140707", + "reference": "cf85ae0105617c106a0c8d6b9f77bc4983140707", "shasum": "" }, "require": { @@ -10925,7 +11151,7 @@ "wp-cli/extension-command": "^1.2 || ^2", "wp-cli/import-command": "^1 || ^2", "wp-cli/media-command": "^1 || ^2", - "wp-cli/wp-cli-tests": "^4" + "wp-cli/wp-cli-tests": "^5" }, "type": "wp-cli-package", "extra": { @@ -10960,9 +11186,9 @@ "homepage": "https://github.com/wp-cli/export-command", "support": { "issues": "https://github.com/wp-cli/export-command/issues", - "source": "https://github.com/wp-cli/export-command/tree/v2.1.14" + "source": "https://github.com/wp-cli/export-command/tree/v2.1.16" }, - "time": "2025-04-02T15:29:08+00:00" + "time": "2026-03-17T08:25:40+00:00" }, { "name": "wp-cli/extension-command", @@ -11064,16 +11290,16 @@ }, { "name": "wp-cli/i18n-command", - "version": "v2.6.6", + "version": "v2.7.0", "source": { "type": "git", "url": "https://github.com/wp-cli/i18n-command.git", - "reference": "94f72ddc4be8919f2cea181ba39cd140dd480d64" + "reference": "e91e6903d212486e32ed2c916171f661bfc539ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/94f72ddc4be8919f2cea181ba39cd140dd480d64", - "reference": "94f72ddc4be8919f2cea181ba39cd140dd480d64", + "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/e91e6903d212486e32ed2c916171f661bfc539ce", + "reference": "e91e6903d212486e32ed2c916171f661bfc539ce", "shasum": "" }, "require": { @@ -11095,6 +11321,7 @@ "bundled": true, "commands": [ "i18n", + "i18n audit", "i18n make-pot", "i18n make-json", "i18n make-mo", @@ -11127,22 +11354,22 @@ "homepage": "https://github.com/wp-cli/i18n-command", "support": { "issues": "https://github.com/wp-cli/i18n-command/issues", - "source": "https://github.com/wp-cli/i18n-command/tree/v2.6.6" + "source": "https://github.com/wp-cli/i18n-command/tree/v2.7.0" }, - "time": "2025-11-21T04:23:34+00:00" + "time": "2026-03-16T17:13:39+00:00" }, { "name": "wp-cli/import-command", - "version": "v2.0.15", + "version": "v2.0.16", "source": { "type": "git", "url": "https://github.com/wp-cli/import-command.git", - "reference": "277de5a245cbf846ec822e23067703c7e3b9cb48" + "reference": "64033264b9f4b9c9a32d14e33b365a58de6f3bf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/import-command/zipball/277de5a245cbf846ec822e23067703c7e3b9cb48", - "reference": "277de5a245cbf846ec822e23067703c7e3b9cb48", + "url": "https://api.github.com/repos/wp-cli/import-command/zipball/64033264b9f4b9c9a32d14e33b365a58de6f3bf6", + "reference": "64033264b9f4b9c9a32d14e33b365a58de6f3bf6", "shasum": "" }, "require": { @@ -11188,9 +11415,9 @@ "homepage": "https://github.com/wp-cli/import-command", "support": { "issues": "https://github.com/wp-cli/import-command/issues", - "source": "https://github.com/wp-cli/import-command/tree/v2.0.15" + "source": "https://github.com/wp-cli/import-command/tree/v2.0.16" }, - "time": "2025-12-09T15:41:55+00:00" + "time": "2026-03-16T15:17:43+00:00" }, { "name": "wp-cli/language-command", @@ -11335,16 +11562,16 @@ }, { "name": "wp-cli/media-command", - "version": "v2.2.2", + "version": "v2.2.5", "source": { "type": "git", "url": "https://github.com/wp-cli/media-command.git", - "reference": "a810ea0e68473fce6a234e67c6c5f19bb820a753" + "reference": "5696bba2e8c7d5c373fa20024edb1a4b682d1511" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/media-command/zipball/a810ea0e68473fce6a234e67c6c5f19bb820a753", - "reference": "a810ea0e68473fce6a234e67c6c5f19bb820a753", + "url": "https://api.github.com/repos/wp-cli/media-command/zipball/5696bba2e8c7d5c373fa20024edb1a4b682d1511", + "reference": "5696bba2e8c7d5c373fa20024edb1a4b682d1511", "shasum": "" }, "require": { @@ -11353,13 +11580,14 @@ "require-dev": { "wp-cli/entity-command": "^1.3 || ^2", "wp-cli/extension-command": "^2.0", - "wp-cli/wp-cli-tests": "^4" + "wp-cli/wp-cli-tests": "^5" }, "type": "wp-cli-package", "extra": { "bundled": true, "commands": [ "media", + "media fix-orientation", "media import", "media regenerate", "media image-size" @@ -11391,9 +11619,9 @@ "homepage": "https://github.com/wp-cli/media-command", "support": { "issues": "https://github.com/wp-cli/media-command/issues", - "source": "https://github.com/wp-cli/media-command/tree/v2.2.2" + "source": "https://github.com/wp-cli/media-command/tree/v2.2.5" }, - "time": "2025-04-11T09:28:29+00:00" + "time": "2026-03-04T13:53:32+00:00" }, { "name": "wp-cli/mustache", @@ -11449,16 +11677,16 @@ }, { "name": "wp-cli/mustangostang-spyc", - "version": "0.6.3", + "version": "0.6.6", "source": { "type": "git", "url": "https://github.com/wp-cli/spyc.git", - "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7" + "reference": "30f25baaaba939caaff1f4b8c7ed998632f59fe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7", - "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7", + "url": "https://api.github.com/repos/wp-cli/spyc/zipball/30f25baaaba939caaff1f4b8c7ed998632f59fe2", + "reference": "30f25baaaba939caaff1f4b8c7ed998632f59fe2", "shasum": "" }, "require": { @@ -11494,9 +11722,9 @@ "description": "A simple YAML loader/dumper class for PHP (WP-CLI fork)", "homepage": "https://github.com/mustangostang/spyc/", "support": { - "source": "https://github.com/wp-cli/spyc/tree/autoload" + "source": "https://github.com/wp-cli/spyc/tree/0.6.6" }, - "time": "2017-04-25T11:26:20+00:00" + "time": "2026-03-12T12:30:41+00:00" }, { "name": "wp-cli/package-command", @@ -11565,16 +11793,16 @@ }, { "name": "wp-cli/php-cli-tools", - "version": "v0.12.6", + "version": "v0.12.9", "source": { "type": "git", "url": "https://github.com/wp-cli/php-cli-tools.git", - "reference": "f12b650d3738e471baed6dd47982d53c5c0ab1c3" + "reference": "c3d25138ce46a66647ec0dc9b17bf300338494aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/f12b650d3738e471baed6dd47982d53c5c0ab1c3", - "reference": "f12b650d3738e471baed6dd47982d53c5c0ab1c3", + "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/c3d25138ce46a66647ec0dc9b17bf300338494aa", + "reference": "c3d25138ce46a66647ec0dc9b17bf300338494aa", "shasum": "" }, "require": { @@ -11587,7 +11815,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "0.12.x-dev" + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -11622,9 +11850,9 @@ ], "support": { "issues": "https://github.com/wp-cli/php-cli-tools/issues", - "source": "https://github.com/wp-cli/php-cli-tools/tree/v0.12.6" + "source": "https://github.com/wp-cli/php-cli-tools/tree/v0.12.9" }, - "time": "2025-09-11T12:43:04+00:00" + "time": "2026-03-29T11:12:54+00:00" }, { "name": "wp-cli/process", @@ -11871,16 +12099,16 @@ }, { "name": "wp-cli/search-replace-command", - "version": "v2.1.9", + "version": "v2.1.11", "source": { "type": "git", "url": "https://github.com/wp-cli/search-replace-command.git", - "reference": "14aea81eca68effbc651d5fca4891a89c0667b2e" + "reference": "a04ff12b2077aae88ebb4075f8bab7f959c08927" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/14aea81eca68effbc651d5fca4891a89c0667b2e", - "reference": "14aea81eca68effbc651d5fca4891a89c0667b2e", + "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/a04ff12b2077aae88ebb4075f8bab7f959c08927", + "reference": "a04ff12b2077aae88ebb4075f8bab7f959c08927", "shasum": "" }, "require": { @@ -11925,9 +12153,9 @@ "homepage": "https://github.com/wp-cli/search-replace-command", "support": { "issues": "https://github.com/wp-cli/search-replace-command/issues", - "source": "https://github.com/wp-cli/search-replace-command/tree/v2.1.9" + "source": "https://github.com/wp-cli/search-replace-command/tree/v2.1.11" }, - "time": "2025-11-11T13:31:01+00:00" + "time": "2026-03-18T08:50:38+00:00" }, { "name": "wp-cli/server-command", @@ -12107,16 +12335,16 @@ }, { "name": "wp-cli/widget-command", - "version": "v2.1.12", + "version": "v2.2.1", "source": { "type": "git", "url": "https://github.com/wp-cli/widget-command.git", - "reference": "73084053f7b32d92583e44d870b81f287beea6a9" + "reference": "d5faa8f5b47828b2c103e9411fb52d4a63b53b99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/73084053f7b32d92583e44d870b81f287beea6a9", - "reference": "73084053f7b32d92583e44d870b81f287beea6a9", + "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/d5faa8f5b47828b2c103e9411fb52d4a63b53b99", + "reference": "d5faa8f5b47828b2c103e9411fb52d4a63b53b99", "shasum": "" }, "require": { @@ -12124,7 +12352,7 @@ }, "require-dev": { "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^4" + "wp-cli/wp-cli-tests": "^5" }, "type": "wp-cli-package", "extra": { @@ -12136,9 +12364,12 @@ "widget delete", "widget list", "widget move", + "widget patch", "widget reset", "widget update", "sidebar", + "sidebar exists", + "sidebar get", "sidebar list" ], "branch-alias": { @@ -12168,9 +12399,9 @@ "homepage": "https://github.com/wp-cli/widget-command", "support": { "issues": "https://github.com/wp-cli/widget-command/issues", - "source": "https://github.com/wp-cli/widget-command/tree/v2.1.12" + "source": "https://github.com/wp-cli/widget-command/tree/v2.2.1" }, - "time": "2025-04-11T09:29:37+00:00" + "time": "2026-03-17T12:28:44+00:00" }, { "name": "wp-cli/wp-cli", @@ -12317,16 +12548,16 @@ }, { "name": "wp-cli/wp-config-transformer", - "version": "v1.4.3", + "version": "v1.4.6", "source": { "type": "git", "url": "https://github.com/wp-cli/wp-config-transformer.git", - "reference": "5ade4e70349a1d5cd07efc33880ceb5eebb9e9fa" + "reference": "1ef18784990b85b35202c2d68dbbc4a8fe6615b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-config-transformer/zipball/5ade4e70349a1d5cd07efc33880ceb5eebb9e9fa", - "reference": "5ade4e70349a1d5cd07efc33880ceb5eebb9e9fa", + "url": "https://api.github.com/repos/wp-cli/wp-config-transformer/zipball/1ef18784990b85b35202c2d68dbbc4a8fe6615b6", + "reference": "1ef18784990b85b35202c2d68dbbc4a8fe6615b6", "shasum": "" }, "require": { @@ -12360,9 +12591,9 @@ "homepage": "https://github.com/wp-cli/wp-config-transformer", "support": { "issues": "https://github.com/wp-cli/wp-config-transformer/issues", - "source": "https://github.com/wp-cli/wp-config-transformer/tree/v1.4.3" + "source": "https://github.com/wp-cli/wp-config-transformer/tree/v1.4.6" }, - "time": "2025-11-11T13:31:09+00:00" + "time": "2026-04-10T07:32:03+00:00" }, { "name": "wp-coding-standards/wpcs", @@ -12497,9 +12728,9 @@ "platform": { "ext-json": "*" }, - "platform-dev": {}, + "platform-dev": [], "platform-overrides": { "php": "7.4" }, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } diff --git a/includes/assets/js/kb-header-block.min.js b/includes/assets/js/kb-header-block.min.js index 5a1174340..14410e410 100644 --- a/includes/assets/js/kb-header-block.min.js +++ b/includes/assets/js/kb-header-block.min.js @@ -1 +1 @@ -class KBHeader{components={};_state;root;rootID;autoTransparentSpacing;sticky;stickyTablet;stickyMobile;transparent;transparentTablet;transparentMobile;stickySection;stickySectionTablet;stickySectionMobile;activeSize="mobile";lastScrollTop=0;activeOffsetTop=0;shrinkMain=!1;shrinkMainHeight=0;shrinkMainHeightTablet=0;shrinkMainHeightMobile=0;shrinkStartHeight=0;mobileBreakpoint=0;currentTopPosition=0;anchorOffset=0;placeholderWrapper;stickyWrapper;isSticking=!1;isTransparent=!1;activeHeaderContainer;constructor(a,b={}){this.root="string"==typeof a?document.querySelector(a):a,this.activeHeaderContainer=this.root.querySelector(".wp-block-kadence-header-desktop"),this.rootID="aaa",this.autoTransparentSpacing="1"===this.root.dataset?.autoTransparentSpacing,this.sticky="1"==this.root.dataset?.sticky,this.stickyTablet="1"==this.root.dataset?.stickyTablet,this.stickyMobile="1"==this.root.dataset?.stickyMobile,this.transparent="1"==this.root.dataset?.transparent,this.transparentTablet="1"==this.root.dataset?.transparentTablet,this.transparentMobile="1"==this.root.dataset?.transparentMobile,this.stickySection=this.root.dataset?.stickySection,this.stickySectionTablet=this.root.dataset?.stickySectionTablet,this.stickySectionMobile=this.root.dataset?.stickySectionMobile,this.shrinkMain="1"===this.root.dataset?.shrinkMain,this.shrinkMainHeight=this.root.dataset?.shrinkMainHeight,this.shrinkMainHeightTablet=this.root.dataset?.shrinkMainHeightTablet,this.shrinkMainHeightMobile=this.root.dataset?.shrinkMainHeightMobile,this.revealScrollUp="1"===this.root.dataset?.revealScrollUp,this.mobileBreakpoint=this.root.dataset?.mobileBreakpoint,this._state="CREATED",(this.sticky||this.stickyTablet||this.stickyMobile)&&this.initStickyHeader(),this.mobileBreakpoint&&0!==this.mobileBreakpoint&&this.initMobileBreakpoint();var c=new Event("MOUNTED",{bubbles:!0});c.ID=this.rootID,this.root.dispatchEvent(c),this._state="IDLE"}initMobileBreakpoint(){this.mobileBreakpoint&&0!==this.mobileBreakpoint&&(window.addEventListener("resize",this.updateMobileBreakpoint.bind(this),!1),window.addEventListener("hashchange",this.updateMobileBreakpoint.bind(this),!1),window.addEventListener("scroll",this.updateMobileBreakpoint.bind(this),!1),window.addEventListener("load",this.updateMobileBreakpoint.bind(this),!1),window.addEventListener("orientationchange",this.updateMobileBreakpoint.bind(this)))}updateMobileBreakpoint(){this.setActiveSize(),"desktop"==this.activeSize?(this.root.querySelector(".wp-block-kadence-header-tablet").style.display="none",this.root.querySelector(".wp-block-kadence-header-desktop").style.display="block"):(this.root.querySelector(".wp-block-kadence-header-desktop").style.display="none",this.root.querySelector(".wp-block-kadence-header-tablet").style.display="block")}initStickyHeader(){this.sticky&&this.createAndSetPlaceholderAndStickyWrappers("desktop"),(this.stickyTablet||this.stickyMobile)&&this.createAndSetPlaceholderAndStickyWrappers("tablet"),this.placeholderWrapper&&this.stickyWrapper&&(this.setActiveSize(),this.updatePlaceholderAndStickyWrappers(),"desktop"==this.activeSize?this.sticky&&(this.activeOffsetTop=this.getOffset(this.placeholderWrapper).top):"tablet"==this.activeSize?this.stickyTablet&&(this.activeOffsetTop=this.getOffset(this.placeholderWrapper).top):this.stickyMobile&&(this.activeOffsetTop=this.getOffset(this.placeholderWrapper).top),window.addEventListener("resize",this.updateSticky.bind(this),!1),window.addEventListener("hashchange",this.updateSticky.bind(this),!1),window.addEventListener("scroll",this.updateSticky.bind(this),!1),window.addEventListener("load",this.updateSticky.bind(this),!1),window.addEventListener("orientationchange",this.updateSticky.bind(this)),"complete"===document.readyState&&this.updateSticky("updateActive"),document.body.classList.contains("woocommerce-demo-store")&&document.body.classList.contains("kadence-store-notice-placement-above")&&this.respondToVisibility(document.querySelector(".woocommerce-store-notice"),()=>{this.updateSticky("updateActive").bind(this)}))}setActiveSize(){const a=this.mobileBreakpoint&&0!==this.mobileBreakpoint?this.mobileBreakpoint:kadenceHeaderConfig.breakPoints.desktop;this.activeSize=parseInt(a){b.appendChild(a)})),b}respondToVisibility(a,b){var c={root:document.documentElement},d=new IntersectionObserver(a=>{a.forEach(a=>{b(0 .kb-nav-sub-menu");if(p.length){var q=this.getOffset(p[0]).top;this.stickyWrapper.style.setProperty("--kb-sticky-mega-overflow-header-offset",q-d+"px")}const r=c,s=c-e,t=this.currentTopPosition+e;var u=this.stickyWrapper.parentNode;if(this.shrinkMain){const b="mobile"===this.activeSize?this.shrinkMainHeightMobile:"tablet"===this.activeSize?this.shrinkMainHeightTablet:this.shrinkMainHeight;if(b){const c=this.activeHeaderContainer.querySelectorAll(".kb-img, .wp-block-kadence-identity img, .wp-block-image img"),d=this.activeHeaderContainer.querySelector(".wp-block-kadence-header-row-center .kadence-header-row-inner");(!this.shrinkStartHeight||a&&void 0!==a.type&&"orientationchange"===a.type)&&(this.shrinkStartHeight=d.offsetHeight);const e=Math.max(b,this.shrinkStartHeight-window.scrollY);if(d.style.height=e+"px",d.style.minHeight=e+"px",d.style.maxHeight=e+"px",0==window.scrollY){if(c)for(let a=0;athis.lastScrollTop,w=Math.floor(this.anchorOffset+e);d<=this.anchorOffset-c?(this.currentTopPosition=0,this.setStickyChanged(!1)):d<=w?v?(this.currentTopPosition=0,this.setStickyChanged(!1)):(this.stickyWrapper.classList.remove("item-hidden-above"),this.currentTopPosition=r,this.setStickyChanged(!0)):d>=this.currentTopPosition&&d<=t?this.setStickyChanged(!1):(v?(this.stickyWrapper.classList.add("item-hidden-above"),this.stickyWrapper.style.top=s+"px",this.currentTopPosition=s):(this.stickyWrapper.classList.remove("item-hidden-above"),this.currentTopPosition=r),this.setStickyChanged(!0))}else{var w=Math.floor(this.anchorOffset-c);d<=w?(this.currentTopPosition=0,this.setStickyChanged(!1)):(this.currentTopPosition=r,this.setStickyChanged(!0))}this.lastScrollTop=d,window.scrollY==w?(this.stickyWrapper.classList.add("item-is-fixed"),this.stickyWrapper.classList.add("item-at-start"),this.stickyWrapper.classList.remove("item-is-stuck"),u.classList.add("child-is-fixed"),document.body.classList.add("header-is-fixed")):window.scrollY>w?this.revealScrollUp?window.scrollY{window.KBHeaderBlocks=[];var a=document.querySelectorAll(".wp-block-kadence-header");for(let c=0;c{this.updateSticky("updateActive").bind(this)}))}setActiveSize(){const a=this.mobileBreakpoint&&0!==this.mobileBreakpoint?this.mobileBreakpoint:kadenceHeaderConfig.breakPoints.desktop;this.activeSize=parseInt(a){b.appendChild(a)})),b}respondToVisibility(a,b){var c={root:document.documentElement},d=new IntersectionObserver(a=>{a.forEach(a=>{b(0 .kb-nav-sub-menu");if(p.length){var q=this.getOffset(p[0]).top;this.stickyWrapper.style.setProperty("--kb-sticky-mega-overflow-header-offset",q-d+"px")}const r=c,s=c-e,t=this.currentTopPosition+e;var u=this.stickyWrapper.parentNode;if(this.shrinkMain){const b="mobile"===this.activeSize?this.shrinkMainHeightMobile:"tablet"===this.activeSize?this.shrinkMainHeightTablet:this.shrinkMainHeight;if(b){const c=this.activeHeaderContainer.querySelectorAll(".kb-img, .wp-block-kadence-identity img, .wp-block-image img"),d=this.activeHeaderContainer.querySelector(".wp-block-kadence-header-row-center .kadence-header-row-inner");(!this.shrinkStartHeight||a&&void 0!==a.type&&"orientationchange"===a.type)&&(this.shrinkStartHeight=d.offsetHeight);const e=Math.max(b,this.shrinkStartHeight-window.scrollY);if(d.style.height=e+"px",d.style.minHeight=e+"px",d.style.maxHeight=e+"px",0==window.scrollY){if(c)for(let a=0;athis.lastScrollTop,w=Math.floor(this.anchorOffset+e);d<=this.anchorOffset-c?(this.currentTopPosition=0,this.setStickyChanged(!1)):d<=w?v?(this.currentTopPosition=0,this.setStickyChanged(!1)):(this.stickyWrapper.classList.remove("item-hidden-above"),this.currentTopPosition=r,this.setStickyChanged(!0)):d>=this.currentTopPosition&&d<=t?this.setStickyChanged(!1):(v?(this.stickyWrapper.classList.add("item-hidden-above"),this.stickyWrapper.style.top=s+"px",this.currentTopPosition=s):(this.stickyWrapper.classList.remove("item-hidden-above"),this.currentTopPosition=r),this.setStickyChanged(!0))}else{var w=Math.floor(this.anchorOffset-c);d<=w?(this.currentTopPosition=0,this.setStickyChanged(!1)):(this.currentTopPosition=r,this.setStickyChanged(!0))}this.lastScrollTop=d,window.scrollY==w?(this.stickyWrapper.classList.add("item-is-fixed"),this.stickyWrapper.classList.add("item-at-start"),this.stickyWrapper.classList.remove("item-is-stuck"),u.classList.add("child-is-fixed"),document.body.classList.add("header-is-fixed")):window.scrollY>w?this.revealScrollUp?window.scrollY{window.KBHeaderBlocks=[];var a=document.querySelectorAll(".wp-block-kadence-header");for(let c=0;c $name, 'context' => $context, - ] + ] ), ] ); diff --git a/includes/class-kadence-blocks-editor-assets.php b/includes/class-kadence-blocks-editor-assets.php index a774b162d..978f7f49c 100644 --- a/includes/class-kadence-blocks-editor-assets.php +++ b/includes/class-kadence-blocks-editor-assets.php @@ -8,12 +8,12 @@ namespace KadenceWP\KadenceBlocks; use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_license_domain; -use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_authorization_token; -use function KadenceWP\KadenceBlocks\StellarWP\Uplink\is_authorized; use function kadence_blocks_get_asset_file; +use function kadence_blocks_is_legacy_license_authorized; use function kadence_blocks_get_current_license_data; use function kadence_blocks_get_post_types; use function kadence_blocks_is_ai_disabled; +use function kadence_blocks_get_ai_disabled_message; use function rcp_get_membership_levels; use function rcp_get_access_levels; @@ -172,6 +172,8 @@ public function show_editor_width() { } /** * Enqueue block settings for backend editor. + * + * @since 3.7.0 added aiDisabledMessage */ public function editor_assets_variables() { $sidebar_size = 750; @@ -293,11 +295,7 @@ public function editor_assets_variables() { if ( ! empty( $pro_data['email'] ) ) { $pro_data['api_email'] = $pro_data['email']; } - $token = ! kadence_blocks_is_ai_disabled() ? get_authorization_token( 'kadence-blocks' ) : ''; - $is_authorized = false; - if ( ! empty( $pro_data['key'] ) && ! kadence_blocks_is_ai_disabled() ) { - $is_authorized = is_authorized( $pro_data['key'], 'kadence-blocks', ( ! empty( $token ) ? $token : '' ), get_license_domain() ); - } + $is_authorized = ! kadence_blocks_is_ai_disabled() && kadence_blocks_is_legacy_license_authorized(); if ( empty( $pro_data['domain'] ) ) { $pro_data['domain'] = get_license_domain(); } @@ -316,7 +314,7 @@ public function editor_assets_variables() { 'numberposts' => 4, 'post_type' => 'product', 'fields' => 'ids', - ] + ] ); $prophecy_data = json_decode( get_option( 'kadence_blocks_prophecy' ), true ); wp_localize_script( @@ -339,6 +337,7 @@ public function editor_assets_variables() { 'proData' => $pro_data, 'isAuthorized' => $is_authorized, 'isAIDisabled' => kadence_blocks_is_ai_disabled(), + 'aiDisabledMessage' => kadence_blocks_get_ai_disabled_message(), 'homeLink' => admin_url( 'admin.php?page=kadence-blocks-home' ), 'pro' => ( class_exists( 'Kadence_Blocks_Pro' ) ? 'true' : 'false' ), 'creativeKit' => ( class_exists( 'KadenceWP\CreativeKit' ) ? 'true' : 'false' ), diff --git a/includes/helper-functions.php b/includes/helper-functions.php index cecc0ecbd..acfb0b8fe 100644 --- a/includes/helper-functions.php +++ b/includes/helper-functions.php @@ -11,7 +11,10 @@ exit; } +use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_authorization_token; +use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_license_domain; use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_license_key; +use function KadenceWP\KadenceBlocks\StellarWP\Uplink\is_authorized; /** * Check if we are in AMP Mode. @@ -204,7 +207,7 @@ function kadence_blocks_get_current_env() { return 'dev'; case 'https://licensing-staging.stellarwp.com': return 'staging'; - + } } return ''; @@ -232,14 +235,98 @@ function kadence_blocks_get_current_license_data(): array { return $cache = $license_data; } +/** + * Whether the current site has an authorized Kadence license. + * + * Checks the legacy StellarWP Uplink license first, then falls back to + * Harbor's unified license as the final check. + * + * @since 3.7.0 + * + * @return bool + */ +function kadence_blocks_is_license_authorized(): bool { + if ( kadence_blocks_is_legacy_license_authorized() ) { + return true; + } + + return lw_harbor_is_product_license_active( 'kadence' ); +} + +/** + * Check if a legacy (Uplink) Kadence license is authorized. + * + * AI features are not currently supported under Harbor licensing, so this + * function gates AI-specific UI and functionality. Harbor-only customers and + * customers with no license will return false. + * + * @since 3.7.0 + * + * @return bool + */ +function kadence_blocks_is_legacy_license_authorized(): bool { + static $cache = null; + + if ( $cache !== null ) { + return $cache; + } + + $license_key = kadence_blocks_get_current_license_key(); + + if ( empty( $license_key ) ) { + $cache = false; + return $cache; + } + + $slug = kadence_blocks_get_current_product_slug(); + $token = get_authorization_token( $slug ); + $cache = is_authorized( $license_key, $slug, $token ?? '', get_license_domain() ); + + return $cache; +} + /** * Check if ai is enabled. + * + * @since 3.7.0 Added the {@see 'kadence_blocks_ai_disabled'} filter. */ function kadence_blocks_is_ai_disabled() { if ( defined( 'KADENCE_BLOCKS_AI_DISABLED' ) && KADENCE_BLOCKS_AI_DISABLED ) { return true; } - return false; + + /** + * Filters whether Kadence AI is disabled. + * + * @since 3.7.0 + * + * @param bool $disabled Whether AI is disabled. + */ + return (bool) apply_filters( 'kadence_blocks_ai_disabled', false ); +} + +/** + * Get the message shown when Kadence AI is disabled. + * + * Applies the `kadence_blocks_ai_disabled_message` filter so hosting + * environments (e.g. Harbor) can surface a context-specific reason. + * + * @since 3.7.0 + * + * @return string + */ +function kadence_blocks_get_ai_disabled_message(): string { + /** + * Filters the message shown when Kadence AI is disabled. + * + * @since 3.7.0 + * + * @param string $message The default disabled message. + */ + return apply_filters( + 'kadence_blocks_ai_disabled_message', + __( 'Kadence AI is disabled by site admin.', 'kadence-blocks' ) + ); } /** diff --git a/includes/init.php b/includes/init.php index bf13790e5..9635780af 100644 --- a/includes/init.php +++ b/includes/init.php @@ -14,10 +14,6 @@ use KadenceWP\KadenceBlocks\App; use KadenceWP\KadenceBlocks\StellarWP\ContainerContract\ContainerInterface; -use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_license_domain; -use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_authorization_token; -use function KadenceWP\KadenceBlocks\StellarWP\Uplink\is_authorized; - /** * Setup the post type options for post blocks. diff --git a/includes/resources/App.php b/includes/resources/App.php index 08dec39aa..91cc30cfe 100644 --- a/includes/resources/App.php +++ b/includes/resources/App.php @@ -16,6 +16,7 @@ use KadenceWP\KadenceBlocks\StellarWP\ContainerContract\ContainerInterface; use KadenceWP\KadenceBlocks\StellarWP\ProphecyMonorepo\Container\Contracts\Container; use KadenceWP\KadenceBlocks\StellarWP\ProphecyMonorepo\Container\Contracts\Providable; +use KadenceWP\KadenceBlocks\Harbor\Harbor_Provider; use KadenceWP\KadenceBlocks\Uplink\Uplink_Provider; use RuntimeException; @@ -43,6 +44,7 @@ final class App { Database_Provider::class, Asset_Provider::class, Uplink_Provider::class, + Harbor_Provider::class, Health_Provider::class, Admin_Provider::class, Image_Downloader_Provider::class, diff --git a/includes/resources/Harbor/Actions/Get_Known_Plugins.php b/includes/resources/Harbor/Actions/Get_Known_Plugins.php new file mode 100644 index 000000000..e47c93f9c --- /dev/null +++ b/includes/resources/Harbor/Actions/Get_Known_Plugins.php @@ -0,0 +1,69 @@ + + */ + public function __invoke(): array { + $default_page = admin_url( 'admin.php?page=kadence-blocks' ); + + return [ + 'kadence-blocks' => [ + 'name' => 'Kadence Blocks', + 'page_url' => $default_page, + ], + 'kadence-blocks-pro' => [ + 'name' => 'Kadence Blocks Pro', + 'page_url' => $default_page, + ], + 'kadence-creative-kit' => [ + 'name' => 'Kadence Creative Kit', + 'page_url' => admin_url( 'admin.php?page=kadence-blocks-home&license=show' ), + ], + 'kadence-insights' => [ + 'name' => 'Kadence Insights', + 'page_url' => admin_url( 'admin.php?page=kadence-insights-settings&license=show' ), + ], + 'kadence-shop-kit' => [ + 'name' => 'Kadence Shop Kit', + 'page_url' => admin_url( 'admin.php?page=kadence-shop-kit-settings&license=show' ), + ], + 'kadence-galleries' => [ + 'name' => 'Kadence Galleries', + 'page_url' => admin_url('edit.php?post_type=kt_gallery&page=kadence-galleries-settings'), + ], + 'kadence-conversions' => [ + 'name' => 'Kadence Conversions', + 'page_url' => admin_url('admin.php?page=kadence-conversion-settings'), + ], + 'kadence-captcha' => [ + 'name' => 'Kadence Captcha', + 'page_url' => admin_url( 'admin.php?page=kadence-recaptcha-settings&license=show' ), + ], + 'kadence-pattern-hub' => [ + 'name' => 'Kadence Pattern Hub', + 'page_url' => admin_url('edit.php?post_type=kadence_cloud&page=kadence-cloud-settings&license=show'), + ], + 'kadence-white-label' => [ + 'name' => 'Kadence White Label', + 'page_url' => admin_url( 'admin.php?page=kadence-white-label-settings' ), + ], + ]; + } + +} diff --git a/includes/resources/Harbor/Actions/Render_Harbor_License_Notice.php b/includes/resources/Harbor/Actions/Render_Harbor_License_Notice.php new file mode 100644 index 000000000..5590797de --- /dev/null +++ b/includes/resources/Harbor/Actions/Render_Harbor_License_Notice.php @@ -0,0 +1,51 @@ +product_name = $product_name; + } + + /** + * Renders a Harbor notice below the save button on a Kadence Uplink license field. + * + * @since 3.7.0 + * + * @return void + */ + public function __invoke(): void { + $url = lw_harbor_get_license_page_url(); + if ( empty( $url ) ) { + return; + } + ?> +
+

+

Liquid Web Software Manager.', 'kadence-blocks' ), + esc_html( $this->product_name ), + esc_url( $url ) + ), + [ 'a' => [ 'href' => [] ] ] + ); ?>

+ $plugin ) { + $key = get_license_key( $slug ); + + if ( empty( $key ) || isset( $reported_keys[ $key ] ) ) { + continue; + } + + $resource = get_resource( $slug ); + + if ( ! $resource ) { + continue; + } + + $reported_keys[ $key ] = true; + + $is_active = $resource->has_valid_license(); + + $licenses[] = [ + 'key' => $key, + 'slug' => $slug, + 'name' => $plugin['name'], + 'product' => 'kadence', + 'is_active' => $is_active, + 'page_url' => esc_url( $plugin['page_url'] ), + ]; + } + + return $licenses; + } + +} diff --git a/includes/resources/Harbor/Actions/Suppress_Legacy_Inactive_Notices.php b/includes/resources/Harbor/Actions/Suppress_Legacy_Inactive_Notices.php new file mode 100644 index 000000000..b2031a35d --- /dev/null +++ b/includes/resources/Harbor/Actions/Suppress_Legacy_Inactive_Notices.php @@ -0,0 +1,48 @@ +callbacks as $priority => $callbacks ) { + foreach ( $callbacks as $key => $callback ) { + $function = $callback['function']; + + if ( ! is_array( $function ) + || ! is_object( $function[0] ) + || $function[1] !== 'inactive_notice' + ) { + continue; + } + + if ( strpos( get_class( $function[0] ), 'KadenceWP\\' ) === 0 ) { + unset( $wp_filter['admin_notices']->callbacks[ $priority ][ $key ] ); + } + } + } + } + +} diff --git a/includes/resources/Harbor/Harbor_Provider.php b/includes/resources/Harbor/Harbor_Provider.php new file mode 100644 index 000000000..bb7a05c27 --- /dev/null +++ b/includes/resources/Harbor/Harbor_Provider.php @@ -0,0 +1,94 @@ +container ); + Harbor::init(); + + lw_harbor_register_submenu( 'kadence-blocks' ); + + add_filter( 'lw-harbor/legacy_licenses', new Report_Legacy_Licenses() ); + add_filter( 'kadence_blocks_ai_disabled', [ $this, 'is_ai_disabled' ] ); + add_filter( 'kadence_blocks_ai_disabled_message', [ $this, 'ai_disabled_message' ] ); + + foreach ( ( new Get_Known_Plugins() )() as $slug => $plugin ) { + add_action( + "stellarwp/uplink/{$slug}/license_field_after_form", + new Render_Harbor_License_Notice( $plugin['name'] ) + ); + + add_filter( "stellarwp/uplink/{$slug}/plugin_notices", [ $this, 'suppress_inline_license_notices' ] ); + } + + add_action( 'admin_init', new Suppress_Legacy_Inactive_Notices() ); + } + + /** + * Disables Kadence AI for new Harbor customers who don't have legacy AI access. + * + * @param bool $disabled Whether AI is already disabled. + * + * @return bool + */ + public function is_ai_disabled( bool $disabled ): bool { + if ( $disabled ) { + return true; + } + + return ! kadence_blocks_is_legacy_license_authorized() && lw_harbor_is_product_license_active( 'kadence' ); + } + + /** + * Overrides the AI disabled message for Harbor-licensed customers. + * + * @param string $message The default disabled message. + * + * @return string + */ + public function ai_disabled_message( string $message ): string { + if ( kadence_blocks_is_legacy_license_authorized() ) { + return $message; + } + + if ( lw_harbor_is_product_license_active( 'kadence' ) ) { + return __( 'We\'re building something new. Kadence AI as you know it is no longer available for new activations — but great things are on the way. Stay tuned for what\'s next.', 'kadence-blocks' ); + } + + return $message; + } + + /** + * Suppresses the StellarWP Uplink inline license notice on the WP plugins + * page for LiquidWeb customers, who manage licensing through the unified key. + * + * This was intentionally kept simple for any unified key instead of Kadence specific so that plugins can continue offloading notices to the Harbor library. + * + * @param array $notices + * + * @return array + */ + public function suppress_inline_license_notices( array $notices ): array { + return lw_harbor_has_unified_license_key() ? [] : $notices; + } + +} diff --git a/includes/resources/Home/Home_Content_View_Model.php b/includes/resources/Home/Home_Content_View_Model.php new file mode 100644 index 000000000..8c1d435e4 --- /dev/null +++ b/includes/resources/Home/Home_Content_View_Model.php @@ -0,0 +1,256 @@ + $this->banner_config( $is_authorized, $is_liquid_web ), + 'actionCards' => $this->action_cards( $is_authorized ), + 'knowledgeBase' => $this->knowledge_base( $is_authorized ), + ]; + } + + /** + * @since 3.7.0 + * + * @param bool $is_authorized Whether the current site has an authorized Kadence license. + * @param bool $is_liquid_web Whether the current site is a Liquid Web customer. + * + * @return array{ + * heading: string, + * body: string, + * primaryCtaText: string, + * primaryCtaUrl: string, + * secondaryCtaText?: string, + * secondaryCtaUrl?: string, + * } + */ + private function banner_config( bool $is_authorized, bool $is_liquid_web ): array { + // (new) customer scenario (liquid web). + if ( $is_liquid_web ) { + return [ + 'heading' => __( 'Kadence AI is evolving.', 'kadence-blocks' ), + 'body' => __( "We're building something new. Kadence AI as you know it is no longer available for new activations — but great things are on the way. Stay tuned for what's next.", 'kadence-blocks' ), + 'primaryCtaText' => __( 'Learn More', 'kadence-blocks' ), + 'primaryCtaUrl' => 'https://www.kadencewp.com/kadence-blocks/', + ]; + } + + // legacy customer scenario. + if ( $is_authorized ) { + return [ + 'heading' => __( 'Kadence is better with AI.', 'kadence-blocks' ), + 'body' => __( "Elevate your web development game with Kadence AI. Supercharge your pattern and page library's potential with tailored content — get building pages in no time. You have AI credits remaining on your account.", 'kadence-blocks' ), + 'primaryCtaText' => __( 'Get Started with Kadence AI', 'kadence-blocks' ), + 'primaryCtaUrl' => '', + 'secondaryCtaText' => __( 'Manage AI Credits', 'kadence-blocks' ), + 'secondaryCtaUrl' => esc_url( build_auth_url( apply_filters( 'kadence-blocks-auth-slug', 'kadence-blocks' ), get_license_domain() ) ), + ]; + } + + // unknown customer scenario. + return [ + 'heading' => __( 'Kadence AI is evolving.', 'kadence-blocks' ), + 'body' => __("If you're using a legacy Kadence plan, activate your license to access your included features. If you're on a new plan, Kadence AI is currently being reimagined to deliver a more powerful experience. During this transition, it's only available on previous Kadence plans.", 'kadence-blocks' ), + 'primaryCtaText' => __( 'Activate License Key', 'kadence-blocks' ), + 'primaryCtaUrl' => esc_url( build_auth_url( apply_filters( 'kadence-blocks-auth-slug', 'kadence-blocks' ), get_license_domain() ) ), + 'secondaryCtaText' => __( 'Learn More', 'kadence-blocks' ), + 'secondaryCtaUrl' => 'https://www.kadencewp.com/kadence-blocks/', + ]; + } + + /** + * @since 3.7.0 + * + * @param bool $is_authorized Whether the current site has an authorized Kadence license. + * + * @return array{ + * title: string, + * showAiIcon: bool, + * cards: array, + * } + */ + private function action_cards( bool $is_authorized ): array { + if ( $is_authorized ) { + return [ + 'title' => __( 'Start building with Kadence AI.', 'kadence-blocks' ), + 'showAiIcon' => true, + 'cards' => [ + [ + 'heading' => __( 'Build a page with AI-powered patterns', 'kadence-blocks' ), + 'content' => __( 'Take your site further with hundreds of beautiful patterns filled with custom content developed just for your site.', 'kadence-blocks' ), + 'link' => admin_url( 'post-new.php?post_type=page' ), + 'variant' => 'blue', + ], + [ + 'heading' => __( 'Get started with full pages', 'kadence-blocks' ), + 'content' => __( 'Choose from a variety of pages featuring exclusively tailored content for your site.', 'kadence-blocks' ), + 'link' => admin_url( 'post-new.php?post_type=page' ), + 'variant' => 'green', + ], + [ + 'heading' => __( 'Fine-tune your content', 'kadence-blocks' ), + 'content' => __( 'Write your own prompts to generate AI content from scratch or fine-tune existing copy.', 'kadence-blocks' ), + 'link' => '', + 'variant' => 'yellow', + ], + ], + ]; + } + + return [ + 'title' => __( 'Start building with Kadence', 'kadence-blocks' ), + 'showAiIcon' => false, + 'cards' => [ + [ + 'heading' => __( 'Build a page using pre-designed patterns', 'kadence-blocks' ), + 'content' => __( "Elevate your site's design with hundreds of beautiful patterns, customized with your site's style.", 'kadence-blocks' ), + // TODO: add query param to open Design Library on Patterns tab once URL param is established. + 'link' => admin_url( 'post-new.php?post_type=page' ), + 'variant' => 'blue', + ], + [ + 'heading' => __( 'Get started with full pages', 'kadence-blocks' ), + 'content' => __( "Kickstart your site with a variety of pre-designed page layouts, customized with your site's style.", 'kadence-blocks' ), + // TODO: add query param to open Design Library on Pages tab once URL param is established. + 'link' => admin_url( 'post-new.php?post_type=page' ), + 'variant' => 'green', + ], + [ + 'heading' => __( 'Start from scratch', 'kadence-blocks' ), + 'content' => __( "Build your website from scratch, using Kadence's blocks for layout, content and interactions.", 'kadence-blocks' ), + 'link' => admin_url( 'post-new.php?post_type=page' ), + 'variant' => 'yellow', + ], + ], + ]; + } + + /** + * @since 3.7.0 + * + * @param bool $is_authorized Whether the current site has an authorized Kadence license. + * + * @return array{ + * heading: string, + * articles: array, + * } + */ + private function knowledge_base( bool $is_authorized ): array { + return [ + 'heading' => __( 'Need Help Getting Started?', 'kadence-blocks' ), + 'articles' => $is_authorized ? $this->knowledge_base_authorized() : $this->knowledge_base_default(), + ]; + } + + /** + * @since 3.7.0 + * + * @return array + */ + private function knowledge_base_authorized(): array { + return [ + [ + 'category' => __( 'Kadence AI', 'kadence-blocks' ), + 'heading' => __( 'Update AI Settings', 'kadence-blocks' ), + 'description' => __( 'Update Kadence AI settings. Regenerate contexts for patterns and pages to reflect your updated needs.', 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/docs/kadence-blocks/design-libary-changing-ai-details/', + 'linkTarget' => '_blank', + ], + [ + 'category' => __( 'Kadence AI', 'kadence-blocks' ), + 'heading' => __( 'Customize Image Collections', 'kadence-blocks' ), + 'description' => __( 'Update your Design Library imagery using premade collections or create and customize your own.', 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/docs/kadence-blocks/design-library-changing-ai-image-collections/', + 'linkTarget' => '_blank', + ], + [ + 'category' => __( 'Kadence Blocks', 'kadence-blocks' ), + 'heading' => __( 'Row Layout Block', 'kadence-blocks' ), + 'description' => __( 'Use the Row Layout block to improve the column functionality and create responsive post/page layouts.', 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/docs/kadence-blocks/row-layout-block-2/', + 'linkTarget' => '_blank', + ], + [ + 'category' => __( 'Kadence Blocks', 'kadence-blocks' ), + 'heading' => __( 'Advanced Text Block', 'kadence-blocks' ), + 'description' => __( 'Use the Advanced Text block to add text to your page/post with advanced customization - now with AI.', 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/docs/kadence-blocks/advanced-heading-block/', + 'linkTarget' => '_blank', + ], + [ + 'category' => __( 'Support', 'kadence-blocks' ), + 'heading' => __( 'Need more help?', 'kadence-blocks' ), + 'description' => __( "Didn't find what you were looking for? Find more articles in our knowledge base.", 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/', + 'linkTarget' => '_blank', + ], + ]; + } + + /** + * @since 3.7.0 + * + * @return array + */ + private function knowledge_base_default(): array { + return [ + [ + 'category' => __( 'Kadence Blocks', 'kadence-blocks' ), + 'heading' => __( 'Using the Design Library', 'kadence-blocks' ), + 'description' => __( 'Use fully designed patterns and pages on your site with your own customizer settings - now with AI.', 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/docs/kadence-blocks/how-to-control-the-kadence-design-library/', + 'linkTarget' => '_blank', + ], + [ + 'category' => __( 'Kadence Blocks', 'kadence-blocks' ), + 'heading' => __( 'Row Layout Block', 'kadence-blocks' ), + 'description' => __( 'Use the Row Layout block to improve the column functionality and create responsive post/page layouts.', 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/docs/kadence-blocks/row-layout-block-2/', + 'linkTarget' => '_blank', + ], + [ + 'category' => __( 'Kadence Blocks', 'kadence-blocks' ), + 'heading' => __( 'Advanced Text Block', 'kadence-blocks' ), + 'description' => __( 'Use the Advanced Text block to add text to your page/post with advanced customization - now with AI.', 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/docs/kadence-blocks/advanced-heading-block/', + 'linkTarget' => '_blank', + ], + [ + 'category' => __( 'Kadence Blocks Pro', 'kadence-blocks' ), + 'heading' => __( 'Kadence Blocks Pro Plugin', 'kadence-blocks' ), + 'description' => __( 'Install and activate the Kadence Blocks Pro plugin, and get an overview of the Pro features available.', 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/docs/kadence-blocks/kadence-blocks-pro-plugin/', + 'linkTarget' => '_blank', + ], + [ + 'category' => __( 'Support', 'kadence-blocks' ), + 'heading' => __( 'Need more help?', 'kadence-blocks' ), + 'description' => __( "Didn't find what you were looking for? Find more articles in our knowledge base.", 'kadence-blocks' ), + 'link' => 'https://www.kadencewp.com/help-center/', + 'linkTarget' => '_blank', + ], + ]; + } + +} diff --git a/includes/settings/class-kadence-blocks-settings.php b/includes/settings/class-kadence-blocks-settings.php index a0cff5889..3b0fdc9ca 100644 --- a/includes/settings/class-kadence-blocks-settings.php +++ b/includes/settings/class-kadence-blocks-settings.php @@ -9,11 +9,10 @@ exit; } -use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_authorization_token; use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_disconnect_url; use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_license_domain; -use function KadenceWP\KadenceBlocks\StellarWP\Uplink\is_authorized; use function KadenceWP\KadenceBlocks\StellarWP\Uplink\build_auth_url; +use KadenceWP\KadenceBlocks\Home\Home_Content_View_Model; /** * Build Welcome Page class @@ -588,7 +587,7 @@ public function add_color_palette_css_to_block_editor(array $settings) { private function get_color_palette_css() { $palette = json_decode( get_option( 'kadence_blocks_colors' ) ); - + if ( $palette && is_object( $palette ) && isset( $palette->palette ) && is_array( $palette->palette ) ) { $san_palette = []; foreach ( $palette->palette as $item ) { @@ -796,6 +795,8 @@ public function scripts() { } /** * Loads admin style sheets and scripts + * + * @since 3.7.0 added homeContent, aiDisabledMessage */ public function home_scripts() { $using_network_enabled = false; @@ -804,18 +805,15 @@ public function home_scripts() { if ( $network_enabled && function_exists( 'is_plugin_active_for_network' ) && is_plugin_active_for_network( 'kadence-blocks/kadence-blocks.php' ) ) { $using_network_enabled = true; } - $token = get_authorization_token( 'kadence-blocks' ); $auth_url = build_auth_url( apply_filters( 'kadence-blocks-auth-slug', 'kadence-blocks' ), get_license_domain() ); $license_key = kadence_blocks_get_current_license_key(); $disconnect_url = ''; - $is_authorized = false; - if ( ! empty( $license_key ) && ! kadence_blocks_is_ai_disabled() ) { - $is_authorized = is_authorized( $license_key, 'kadence-blocks', ( ! empty( $token ) ? $token : '' ), get_license_domain() ); - } + $is_authorized = ! kadence_blocks_is_ai_disabled() && kadence_blocks_is_legacy_license_authorized(); if ( $is_authorized ) { $disconnect_url = get_disconnect_url( 'kadence-blocks' ); } + // Icons Scripts & Styles. $kadence_icons_meta = kadence_blocks_get_asset_file( 'dist/icons' ); wp_register_script( 'kadence-icons', KADENCE_BLOCKS_URL . 'dist/icons.js', array_merge( $kadence_icons_meta['dependencies'], [ 'wp-api' ] ), $kadence_icons_meta['version'], true ); @@ -842,6 +840,10 @@ public function home_scripts() { $kadence_home_meta = kadence_blocks_get_asset_file( 'dist/admin-kadence-home' ); wp_enqueue_script( 'admin-kadence-home', KADENCE_BLOCKS_URL . 'dist/admin-kadence-home.js', $kadence_home_meta['dependencies'], $kadence_home_meta['version'], true ); wp_enqueue_style( 'admin-kadence-home', KADENCE_BLOCKS_URL . 'dist/admin-kadence-home.css', [ 'wp-edit-blocks', 'kadence-components' ], $kadence_home_meta['version'] ); + + // Banner Config. + $home_content = new Home_Content_View_Model(); + wp_localize_script( 'admin-kadence-home', 'kadenceHomeParams', @@ -851,6 +853,8 @@ public function home_scripts() { 'site_name' => sanitize_title( get_bloginfo( 'name' ) ), 'pSlug' => apply_filters( 'kadence-blocks-auth-slug', 'kadence-blocks' ), 'isAIDisabled' => kadence_blocks_is_ai_disabled(), + 'homeContent' => $home_content->exports(), + 'aiDisabledMessage' => kadence_blocks_get_ai_disabled_message(), 'pVersion' => KADENCE_BLOCKS_VERSION, 'isAuthorized' => $is_authorized, 'licenseKey' => $license_key, @@ -1223,7 +1227,7 @@ public function load_fonts_local_callback() { echo ''; echo ''; } - + /** * Outputs admin bar settings field */ @@ -1495,7 +1499,7 @@ public function blocks_array() { 'linkText' => __( 'Manage Lottie Animations', 'kadence-blocks' ), ], 'kadence/vector' => [ - 'slug' => 'kadence/vector', + 'slug' => 'kadence/vector', 'name' => __( 'Vector Graphics', 'kadence-blocks' ), 'desc' => __( 'Add custom vector icons and SVGs to enhance your site design.', 'kadence-blocks' ), 'link' => admin_url( 'edit.php?post_type=kadence_vector' ), diff --git a/kadence-blocks.php b/kadence-blocks.php index 8066fb99e..db7f5ac63 100644 --- a/kadence-blocks.php +++ b/kadence-blocks.php @@ -5,7 +5,7 @@ * Description: Advanced Page Building Blocks for Gutenberg. Create custom column layouts, backgrounds, dual buttons, icons etc. * Author: Kadence WP * Author URI: https://www.kadencewp.com - * Version: 3.6.7 + * Version: 3.7.0 * Requires PHP: 7.4 * Text Domain: kadence-blocks * License: GPL2+ @@ -20,7 +20,16 @@ } define( 'KADENCE_BLOCKS_PATH', realpath( plugin_dir_path( __FILE__ ) ) . DIRECTORY_SEPARATOR ); define( 'KADENCE_BLOCKS_URL', plugin_dir_url( __FILE__ ) ); -define( 'KADENCE_BLOCKS_VERSION', '3.6.7' ); +define( 'KADENCE_BLOCKS_VERSION', '3.7.0' ); + +/** + * Plugin basename, e.g. "kadence-blocks/kadence-blocks.php". + * + * @since 3.7.0 + */ +if ( ! defined('KADENCE_BLOCKS_PLUGIN_BASENAME') ) { + define( 'KADENCE_BLOCKS_PLUGIN_BASENAME', plugin_basename( __FILE__ ) ); +} require_once plugin_dir_path( __FILE__ ) . 'vendor/vendor-prefixed/autoload.php'; require_once plugin_dir_path( __FILE__ ) . 'vendor/autoload.php'; diff --git a/readme.txt b/readme.txt index b6f7a8dcd..e2a49bd62 100644 --- a/readme.txt +++ b/readme.txt @@ -4,24 +4,20 @@ Tags: gutenberg, blocks, page builder, editor, gutenberg blocks Donate link: https://www.kadencewp.com/about-us/ Requires at least: 6.6 Tested up to: 6.9.4 -Stable tag: 3.6.7 +Stable tag: 3.7.0 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html -20+ AI-powered Gutenberg Blocks with endless options, enabling top-notch efficiency for high-performance dynamic website creation. +20+ Gutenberg Blocks with endless options, enabling top-notch efficiency for high-performance dynamic website creation. == Description == -Kadence Blocks, now enhanced with AI tools, elevates Gutenberg’s editing capabilities with custom blocks and options so you can effortlessly craft stunning, high-performance websites. Each block is crafted with care in regard to performance, accessibility, and extensibility. +Kadence Blocks extends the WordPress block editor with powerful custom blocks and advanced design controls, helping you build fast, accessible, and professional websites, without writing code. -This toolkit extends the WordPress block editor's functionality, rivaling traditional page builders in creating visually impressive and engaging content without requiring any coding. +Each block is built with performance, accessibility, and flexibility in mind, giving you the tools to create visually impressive layouts while maintaining clean, optimized output. -With the integration of Kadence AI, enjoy features like AI-powered text generation, smart keyword optimization, and customizable design patterns, making web design more intuitive and efficient than ever before. Kadence AI also includes an inline editor within Kadence blocks so you can edit your content at any time using AI to tailor length, tone, and more. - -= Try Kadence Blocks = -[Try Kadence Blocks](https://www.kadencewp.com/kadence-blocks/try/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) on a free demo site. -[Try Kadence AI](https://www.kadencewp.com/wordpress-solutions/try-kadence-ai/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) on a free demo site. +Whether you’re building landing pages, blogs, or full websites, Kadence Blocks provides a streamlined, modern workflow that rivals traditional page builders, directly inside the native WordPress editor. = Custom Blocks Include = * Accordion – Create [beautiful accordions!](https://www.kadencewp.com/kadence-blocks/custom-blocks/accordion-block/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) Each panel can contain any other block and customized title styles, content background, and borders. @@ -49,12 +45,12 @@ With the integration of Kadence AI, enjoy features like AI-powered text generati https://www.youtube.com/watch?v=46P3kMrpFkQ = Key Block Features = -* Inline AI Content Editor – Generate and [improve text on the fly with AI](https://www.kadencewp.com/kadence-ai-wordpress-website-builder/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks). Easily tailor your message and tone to ensure your content stays polished, impactful, and error-free. -* Design Library with AI – Overcome creative blocks and assemble a site in no time. Our [AI-powered Design Library](https://www.kadencewp.com/help-center/docs/kadence-blocks/how-to-control-the-kadence-design-library/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) offers hundreds of pre-built patterns and pages tailored to your unique brand +* Content & Layout Flexibility: Build complex layouts with nested rows, responsive controls, and advanced spacing options, all within the block editor. +* Design Library: Overcome creative blocks and assemble a site in no time. Our Design Library offers hundreds of pre-built patterns and pages tailored to your unique brand * Intelligent Load: Kadence Blocks won’t slow down your website because it only loads CSS or Javascript when you need it- and only for the blocks you are using on a specific page. * Responsive Controls: Tweak your design for each screen size. Edit tablet and mobile settings while previewing in WordPress editor. * Typography Controls: Choose from 900+ Google fonts and design your site with complete typography control. -* Color & Background Controls: Gradients, overlays, parallax backgrounds, borders, etc. You can control all the design settings! +* Color & Background Controls: Gradients, overlays, parallax backgrounds, borders, etc. You can control all the design settings\! * Configurable Defaults: Make development a breeze. Once the default settings are defined, every time you add a block those settings will automatically be applied. * Setting Visibility Controls: Hide block settings from certain user roles so they can focus on content and you can keep them out of the block designs. * Spacing Controls: Control paddings and margins for your blocks in whatever units you like. Customize responsively for precision spacing and design. @@ -72,7 +68,6 @@ Check out some tutorials by creators who love Kadence (and think you should, too * [Kadence Blocks Tutorials](https://youtube.com/playlist?list=PLV0AfjbtxNdrAg6ynj2PGSGZ--IAiluxJ&si=ZbIhYyFGn6YOrQm6) by StartBlogging101 * [The Ultimate Kadence Guide for Beginners](https://youtu.be/ZWavuOtC5Yw?si=n9D5BZ8AbptHiwtO) by CliftonWP -* [First look at the New Kadence AI Starter Templates](https://youtu.be/2iOyifwwuCY?si=24Hw5RXGcLBAPhy1) by Easy WordPress Tricks = Get More from Kadence WP = Enhance your page building experience even more with these additional [Pro Blocks](https://www.kadencewp.com/kadence-blocks/pro/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks): @@ -93,12 +88,11 @@ Get over creative blocks and engage your viewers further with these [Premium Fea * [Custom Fonts](https://www.kadencewp.com/help-center/docs/kadence-blocks/kadence-custom-fonts/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) * [Dynamic Content](https://www.kadencewp.com/help-center/docs/kadence-blocks/dynamic-content/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) * Page Specific Scripts -* 400+ [Design Library](https://www.kadencewp.com/introducing-the-innovative-kadence-design-library-revolutionizing-the-world-of-design-patterns/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) patterns with custom AI-powered content -* Up to 8,000 [AI Credits](https://www.kadencewp.com/wordpress-solutions/kadence-ai/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) per year for starter templates, design library and inline text editing +* 800+ [Design Library](https://www.kadencewp.com/introducing-the-innovative-kadence-design-library-revolutionizing-the-world-of-design-patterns/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) patterns Power-up your WordPress site with the comprehensive [Kadence WP suite](https://www.kadencewp.com/wordpress-solutions/all-individual-premium-products/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks): * Start with the [Kadence Theme](https://www.kadencewp.com/kadence-theme/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) for a flexible, fast, and lightweight foundation. -* Create personalized, professionally designed websites in minutes with [AI-powered starter templates](https://www.kadencewp.com/wordpress-solutions/kadence-ai/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks). +* Create personalized, professionally designed websites in minutes with pre-designed Starter Templates. * Seamlessly integrate powerful WooCommerce capabilities through [ShopKit](https://www.kadencewp.com/kadence-shopkit/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks). * Upgrade your marketing strategy and boost revenue with [Kadence Conversions](https://www.kadencewp.com/kadence-conversions/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks). * Create a custom library of templates on [Kadence Pattern Hub](https://www.kadencewp.com/kadence-cloud/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) and commoditize your design talents. @@ -146,10 +140,11 @@ Kadence Blocks are advanced Gutenberg blocks that extend the capabilities of the Yes, Kadence Blocks is a robust free plugin that offers a range of custom blocks and tools. There is a Premium addon for those who are looking for even more features. You can see a detailed list outlining what is in [Kadence Blocks vs Kadence Blocks Pro on our site](https://www.kadencewp.com/kadence-blocks/pro/#compare). = Can I use Kadence Blocks with my current WordPress theme? = -Absolutely! Kadence Blocks is designed to work seamlessly with most WordPress themes, enhancing your current design capabilities. We recommend using our free theme, [Kadence Theme](https://www.kadencewp.com/kadence-theme/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) with 300,000+ active installs. +Absolutely! Kadence Blocks is designed to work seamlessly with most WordPress themes, enhancing your current design capabilities. We recommend using our free theme, [Kadence Theme](https://www.kadencewp.com/kadence-theme/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) with 500,000+ active installs. = What unique features does Kadence Blocks offer? = -Kadence Blocks offers plenty of [unique, easy-to-use features](https://www.kadencewp.com/kadence-blocks/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) like our Design Library which is complete with hundreds of unique patterns that can be tailored to your brand with AI. We offer advanced gallery options, configurable block defaults, and visibility controls for block settings. +Kadence Blocks offers plenty of [unique, easy-to-use features](https://www.kadencewp.com/kadence-blocks/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks) like our Design Library which is complete with hundreds of unique patterns that can be tailored to your branding style. We offer advanced gallery options, configurable block defaults, and visibility controls for block settings. + = Does Kadence Blocks support dynamic content for my website? = Yes, our [Pro addon supports dynamic content](https://www.kadencewp.com/kadence-blocks/pro/?utm_source=wordpress&utm_medium=referral&utm_campaign=read-me&utm_content=kadence-blocks), allowing you to create highly dynamic and interactive websites easily when you upgrade to Pro. Use your own meta fields from ACF and MetaBox as well as custom fields from WooCommerce, The Events Calendar, and other third party plugins. @@ -174,10 +169,14 @@ Please report security bugs found in the Kadence Blocks plugin's source code thr == Changelog == += 3.7.0 = +Release Date: 11th May 2026 +* Feature - Integrate with Nexcess Licensing and Portal. + = 3.6.7 = Release Date: 8th April 2026 * Fix: Fatal TypeError in Optimizer meta handler during WooCommerce product meta updates. -* Fix: Fatal Error when updating Kadence Blocks. +* Fix: Fatal Error when updating Kadence Blocks. = 3.6.6 = Release Date: 11th March 2026 @@ -207,10 +206,10 @@ Release Date: 11th February 2026 * Add: Aria-label options for the Table(Adv) block * Update: Show More: Button is not keyboard operable * Update: Show More: Hidden content accessible via keyboard -* Update: Show More: Hidden elements are exposed to screen readers +* Update: Show More: Hidden elements are exposed to screen readers * Update: Countdown: Missing Pause button for Animated element longer than 5 seconds * Fix: Countdown: Status message not announced by screen readers -* Fix: Countdown missing timer role +* Fix: Countdown missing timer role * Fix: Navigation Submenu hides right away when spacing is added * Add: Overlay Color settings to Nav Link Images diff --git a/src/dashboard/components/large-banner/ai-banner.js b/src/dashboard/components/large-banner/ai-banner.js new file mode 100644 index 000000000..f6fe33704 --- /dev/null +++ b/src/dashboard/components/large-banner/ai-banner.js @@ -0,0 +1,170 @@ +import { Button, SVG, Popover, Spinner } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import { aiIcon } from '@kadence/icons'; +import { SafeParseJSON } from '@kadence/helpers'; +import { useState } from '@wordpress/element'; +import { getAsyncData } from '../../../plugins/prebuilt-library/data-fetch/get-async-data'; + +const kbLogo = ( + + + + + + + + + + +); + +/** + * Banner driven entirely by server-side config from kadenceHomeParams.bannerConfig. + * + * Props: + * onUpdateWizard — callback to open the AI wizard (used when primaryCtaUrl is empty) + * showControls — whether the current user can control AI activation + * isNetworkAdmin — whether this is a network admin context + * isUserAuthenticated — whether the user has an active legacy AI connection + */ +export function AiBanner({ onUpdateWizard, showControls, isNetworkAdmin, isUserAuthenticated, aiStatus }) { + const { + heading = '', + body = '', + primaryCtaText = '', + primaryCtaUrl = '', + secondaryCtaText = '', + secondaryCtaUrl = '', + } = window?.kadenceHomeParams?.homeContent?.bannerConfig || {}; + + const [isVisible, setIsVisible] = useState(false); + const [availableCredits, setAvailableCredits] = useState(false); + const { getAvailableCredits } = getAsyncData(); + + const toggleVisible = () => { + if (availableCredits === false) { + getRemoteAvailableCredits(); + } + setIsVisible((state) => !state); + }; + + async function getRemoteAvailableCredits() { + const response = await getAvailableCredits(); + const tempActiveStorage = SafeParseJSON(localStorage.getItem('kadenceBlocksPrebuilt'), true); + if (response === 'error') { + tempActiveStorage.credits = 'fetch'; + localStorage.setItem('kadenceBlocksPrebuilt', JSON.stringify(tempActiveStorage)); + setAvailableCredits(0); + } else if (response === '') { + tempActiveStorage.credits = 0; + localStorage.setItem('kadenceBlocksPrebuilt', JSON.stringify(tempActiveStorage)); + setAvailableCredits(0); + } else { + tempActiveStorage.credits = parseInt(response); + localStorage.setItem('kadenceBlocksPrebuilt', JSON.stringify(tempActiveStorage)); + setAvailableCredits(parseInt(response)); + } + } + + const renderPrimaryCta = () => { + if (!primaryCtaText) { + return null; + } + // External/internal link — render as anchor. + if (primaryCtaUrl) { + return ( + + {primaryCtaText} + + ); + } + // No URL — open the AI wizard. Respect network-admin restriction. + if (!showControls) { + return ( +

+ {__('Authorization needed from network admin', 'kadence-blocks')} +

+ ); + } + if (isNetworkAdmin) { + return null; + } + return ( + + + )} + + ); +} diff --git a/src/dashboard/components/large-banner/disabled-banner.js b/src/dashboard/components/large-banner/disabled-banner.js deleted file mode 100644 index a52896d3c..000000000 --- a/src/dashboard/components/large-banner/disabled-banner.js +++ /dev/null @@ -1,56 +0,0 @@ -import { Button, Icon, Tooltip, SVG, Popover, Spinner } from '@wordpress/components'; -import { __ } from '@wordpress/i18n'; -import { kadenceNewIcon, aiIcon, aiSettings } from '@kadence/icons'; -import { SafeParseJSON } from '@kadence/helpers'; -import { DashboardButton } from '../dashboard-button'; -import { useEffect, useState } from '@wordpress/element'; - -import './large-banner.scss'; -import { getAsyncData } from '../../../plugins/prebuilt-library/data-fetch/get-async-data'; - -const kbLogo = ( - - - - - - - - - - -); - -export function DisabledBanner() { - return ( -
-
{kbLogo}
-
-
- {__('Kadence is better with AI.', 'kadence-blocks')} {aiIcon} -
- <> -
- {__( - "Elevate your web development game with Kadence AI. Supercharge your pattern and page library's potential with tailored content - get building pages in no time.", - 'kadence-blocks' - )} -
-

- {__('Kadence AI is disabled by site admin.', 'kadence-blocks')} -

- -
-
- ); -} diff --git a/src/dashboard/components/large-banner/index.js b/src/dashboard/components/large-banner/index.js index 0f2cb4718..40200659d 100644 --- a/src/dashboard/components/large-banner/index.js +++ b/src/dashboard/components/large-banner/index.js @@ -150,7 +150,7 @@ export function LargeBanner({ > {availableCredits === false ? : ''} {availableCredits === false - ? __('Fetching Available Credits') + ? __('Fetching Available Credits', 'kadence-blocks') : availableCredits + ' ' + __('Credits Available', 'kadence-blocks')} )} diff --git a/src/dashboard/components/large-banner/large-banner.scss b/src/dashboard/components/large-banner/large-banner.scss index 2a97a56b9..d6034f44a 100644 --- a/src/dashboard/components/large-banner/large-banner.scss +++ b/src/dashboard/components/large-banner/large-banner.scss @@ -36,6 +36,32 @@ opacity: .8; } } + .kadence-open-ai-button { + &.components-button { + background: #0073E6; + color: #fff; + border-radius: 4px; + padding: 12px 24px; + height: auto; + font-size: 14px; + &:not(:disabled,[aria-disabled=true]):hover { + background: #005bb5; + color: #fff; + } + } + } + .kb-large-banner__secondary-link { + display: inline-block; + margin-top: 12px; + margin-left: 16px; + color: rgba(255, 255, 255, 0.75); + font-size: 14px; + text-decoration: underline; + text-underline-offset: 3px; + &:hover { + color: #fff; + } + } .disabled-authorize-note { background: #891c23; padding: 0.5em 1em; diff --git a/src/dashboard/constants.js b/src/dashboard/constants.js index 33a17dd33..c186cb580 100644 --- a/src/dashboard/constants.js +++ b/src/dashboard/constants.js @@ -1,7 +1,4 @@ -import { SectionTitle } from './components'; -import { Icon, SVG } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; -import { aiIcon } from '@kadence/icons'; /** * Images @@ -10,117 +7,6 @@ import blocksPro from './images/blocks-pro.png'; import bundles from './images/bundles.png'; export const AUTHENTICATED_CONTENT = { - largeBanner: { - heading: <>{__("Let's build,", 'kadence-blocks')}, - subHeading: '', - imageSrc: '', - }, - actionCards: { - title: , - cards: [ - { - icon: ( - - - - - - - - - - - } - /> - ), - heading: __('Build a page with AI-powered patterns', 'kadence-blocks'), - content: __( - 'Take your site further with hundreds of beautiful patterns filled with custom content developed just for your site.', - 'kadence-blocks' - ), - variant: 'blue', - link: '/wp-admin/post-new.php?post_type=page', - }, - { - icon: ( - - - - - - - - - - - } - /> - ), - heading: __('Get started with full pages', 'kadence-blocks'), - content: __( - 'Choose from a variety of pages featuring exclusively tailored content for your site.', - 'kadence-blocks' - ), - variant: 'green', - link: '/wp-admin/post-new.php?post_type=page', - }, - { - icon: ( - - - - - - - - - - - } - /> - ), - heading: __('Fine-tune your content', 'kadence-blocks'), - content: __( - 'Write your own prompts to generate AI content from scratch or fine-tune existing copy.', - 'kadence-blocks' - ), - variant: 'yellow', - }, - ], - }, upsellContents: [ { image: blocksPro, @@ -146,153 +32,9 @@ export const AUTHENTICATED_CONTENT = { flip: true, }, ], - knowledgeBase: { - heading: __('Need Help Getting Started?', 'kadence-blocks'), - articles: [ - { - category: __('Kadence AI', 'kadence-blocks'), - heading: __('Update AI Settings', 'kadence-blocks'), - description: __( - 'Update Kadence AI settings. Regenerate contexts for patterns and pages to reflect your updated needs.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/design-libary-changing-ai-details/', - linkTarget: '_blank', - }, - { - category: __('Kadence AI', 'kadence-blocks'), - heading: __('Customize Image Collections', 'kadence-blocks'), - description: __( - 'Update your Design Library imagery using premade collections or create and customize your own.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/design-library-changing-ai-image-collections/', - linkTarget: '_blank', - }, - { - category: __('Kadence Blocks', 'kadence-blocks'), - heading: __('Row Layout Block', 'kadence-blocks'), - description: __( - 'Use the Row Layout block to improve the column functionality and create responsive post/page layouts.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/row-layout-block-2/', - linkTarget: '_blank', - }, - { - category: __('Kadence Blocks', 'kadence-blocks'), - heading: __('Advanced Text Block', 'kadence-blocks'), - description: __( - 'Use the Advanced Text block to add text to your page/post with advanced customization - now with AI.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/advanced-heading-block/', - linkTarget: '_blank', - }, - { - category: __('Support', 'kadence-blocks'), - heading: __('Need more help?', 'kadence-blocks'), - description: __( - "Didn't find what you were looking for? Find more articles in our knowledge base.", - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/', - linkTarget: '_blank', - }, - ], - }, }; export const UNAUTHENTICATED_CONTENT = { - largeBanner: { - heading: ( - <> - {__('Kadence is better with AI.', 'kadence-blocks')} {aiIcon} - - ), - subHeading: __( - "Elevate your web development game with Kadence AI. Supercharge your pattern and page library's potential with tailored content - get building pages in no time. Try Kadence AI today with 250 free credits!", - 'kadence-blocks' - ), - subHeadingPro: __( - "Elevate your web development game with Kadence AI. Supercharge your pattern and page library's potential with tailored content - get building pages in no time. Connect to your account to use Kadence AI with Kadence Blocks Pro", - 'kadence-blocks' - ), - buttonText: __('Get Started with Kadence AI', 'kadence-blocks'), - }, - actionCards: { - title: , - cards: [ - { - icon: ( - - - - - - - - - - - } - /> - ), - heading: __('A content-rich design library that is uniquely yours', 'kadence-blocks'), - content: __( - 'Jump-start your site-building process with unique content and gorgeous designs. Learn more about the AI-Powered Design Library.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/wordpress-solutions/kadence-ai/', - variant: 'blue', - }, - { - icon: ( - - - - - - - - - - - } - /> - ), - heading: __('Fine-Tuned Editing', 'kadence-blocks'), - content: __( - 'Get your messaging on point with in-line AI-assisted editing. Learn More about the inline AI.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/wordpress-solutions/kadence-ai/', - variant: 'green', - }, - ], - }, upsellContents: [ { image: blocksPro, @@ -318,69 +60,4 @@ export const UNAUTHENTICATED_CONTENT = { flip: true, }, ], - knowledgeBase: { - heading: __('Need Help Getting Started?', 'kadence-blocks'), - articles: [ - { - category: __('Kadence Blocks', 'kadence-blocks'), - heading: __('Using the Design Library', 'kadence-blocks'), - description: __( - 'Use fully designed patterns and pages on your site with your own customizer settings - now with AI.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/how-to-control-the-kadence-design-library/', - linkTarget: '_blank', - }, - { - category: __('Kadence Blocks', 'kadence-blocks'), - heading: __('Row Layout Block', 'kadence-blocks'), - description: __( - 'Use the Row Layout block to improve the column functionality and create responsive post/page layouts.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/row-layout-block-2/', - linkTarget: '_blank', - }, - { - category: __('Kadence Blocks', 'kadence-blocks'), - heading: __('Advanced Text Block', 'kadence-blocks'), - description: __( - 'Use the Advanced Text block to add text to your page/post with advanced customization - now with AI.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/advanced-heading-block/', - linkTarget: '_blank', - }, - { - category: __('Kadence Blocks Pro', 'kadence-blocks'), - heading: __('Kadence Blocks Pro Plugin', 'kadence-blocks'), - description: __( - 'Install and activate the Kadence Blocks Pro plugin, and get an overview of the Pro features available.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/kadence-blocks-pro-plugin/', - linkTarget: '_blank', - }, - { - category: __('Kadence Blocks Pro', 'kadence-blocks'), - heading: __('Advanced Slider', 'kadence-blocks'), - description: __( - 'Showcase products or highlight important visual content using the Advanced Slider block.', - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/docs/kadence-blocks/advanced-slider/', - linkTarget: '_blank', - }, - { - category: __('Support', 'kadence-blocks'), - heading: __('Need more help?', 'kadence-blocks'), - description: __( - "Didn't find what you were looking for? Find more articles in our knowledge base.", - 'kadence-blocks' - ), - link: 'https://www.kadencewp.com/help-center/', - linkTarget: '_blank', - }, - ], - }, }; diff --git a/src/dashboard/index.js b/src/dashboard/index.js index 972bedf1b..8ffde3ca2 100644 --- a/src/dashboard/index.js +++ b/src/dashboard/index.js @@ -4,9 +4,10 @@ import { AiWizard } from '../plugins/prebuilt-library/ai-wizard'; import { getAsyncData } from '../plugins/prebuilt-library/data-fetch/get-async-data'; import Notices from './notices'; -import { ActionCard, ArticleSlider, LargeBanner, SectionTitle, UpsellContent } from './components'; +import { ActionCard, ArticleSlider, SectionTitle, UpsellContent } from './components'; import { AUTHENTICATED_CONTENT, UNAUTHENTICATED_CONTENT } from './constants'; -import { DisabledBanner } from './components/large-banner/disabled-banner'; +import { AiBanner } from './components/large-banner/ai-banner'; +import { aiIcon } from '@kadence/icons'; /** * Import Css @@ -19,7 +20,7 @@ import { useEffect, useState } from '@wordpress/element'; import { __, _n, sprintf } from '@wordpress/i18n'; import { store as noticesStore } from '@wordpress/notices'; import { useDispatch } from '@wordpress/data'; -import { Button, Spinner } from '@wordpress/components'; +import { Icon, SVG, Spinner } from '@wordpress/components'; export default function KadenceBlocksHome() { const [wizardState, setWizardState] = useState(false); @@ -32,11 +33,30 @@ export default function KadenceBlocksHome() { const authenticated = kadenceHomeParams.isAuthorized ? true : false; const isNetworkAdmin = kadenceHomeParams.isNetworkAdmin ? true : false; const isNetworkEnabled = kadenceHomeParams.isNetworkEnabled ? true : false; - const isAIDisabled = kadenceHomeParams.isAIDisabled ? true : false; const hasPro = window?.kadenceHomeParams?.pro && kadenceHomeParams.pro === 'true' ? true : false; const showControls = (isNetworkAdmin && isNetworkEnabled) || (!isNetworkAdmin && !isNetworkEnabled) ? true : false; const content = authenticated ? AUTHENTICATED_CONTENT : UNAUTHENTICATED_CONTENT; + const homeContent = window?.kadenceHomeParams?.homeContent || {}; + const cardIcon = ( + + + + + + + + + + + } + /> + ); const getInitialAIStatus = () => { if (authenticated && 'start' === aiStatus) { checkAIStatus(); @@ -133,29 +153,14 @@ export default function KadenceBlocksHome() { {__('Disconnect?', 'kadence-blocks')} ); - if (isAIDisabled) { - return ( - <> - - -
-
- - -
-
- - ); - } return ( <> - setWizardState(true)} isUserAuthenticated={authenticated} showControls={showControls} isNetworkAdmin={isNetworkAdmin} + aiStatus={aiStatus} /> {aiStatus === 'getInitial' && (
@@ -171,12 +176,15 @@ export default function KadenceBlocksHome() {
- {content.actionCards.title} - {content.actionCards.cards.length > 0 && ( + + {homeContent?.actionCards?.cards?.length > 0 && (
- {content.actionCards.cards.map((card) => { - return ; - })} + {homeContent.actionCards.cards.map((card) => ( + + ))}
)}
@@ -203,8 +211,8 @@ export default function KadenceBlocksHome() {
- - + +
diff --git a/src/plugins/prebuilt-library/page-list.js b/src/plugins/prebuilt-library/page-list.js index d7ba23022..95a780994 100644 --- a/src/plugins/prebuilt-library/page-list.js +++ b/src/plugins/prebuilt-library/page-list.js @@ -528,7 +528,8 @@ function PageList({ return (

- {__('Kadence AI is disabled by site admin.', 'kadence-blocks')} + {window?.kadence_blocks_params?.aiDisabledMessage || + __('Kadence AI is disabled by site admin.', 'kadence-blocks')}

); diff --git a/src/plugins/prebuilt-library/pattern-library.js b/src/plugins/prebuilt-library/pattern-library.js index 499ac2d1c..a75847d36 100644 --- a/src/plugins/prebuilt-library/pattern-library.js +++ b/src/plugins/prebuilt-library/pattern-library.js @@ -253,7 +253,7 @@ function PatternLibrary({ importContent, clientId, reload = false, onReload }) { const selectedReplaceImages = replaceImages ? replaceImages : savedReplaceImages; const selectedFontSize = fontSize ? fontSize : savedFontSize; const selectedSubTab = subTab ? subTab : savedTab; - const selectedContextTab = contextTab ? contextTab : savedContextTab; + const selectedContextTab = isAIDisabled ? 'design' : contextTab ? contextTab : savedContextTab; const selectedContext = context ? context : savedContext; const selectedContextLabel = contextOptions?.[selectedContext]; const { createErrorNotice } = useDispatch(noticesStore); @@ -1131,27 +1131,27 @@ function PatternLibrary({ importContent, clientId, reload = false, onReload }) { )}
-
- - {!isAIDisabled && ( + {!isAIDisabled && ( +
+
+
+ )}
);