diff --git a/.github/workflows/build-plugin-zip.yml b/.github/workflows/build-plugin-zip.yml index 40d7507fb..1d4da02c3 100644 --- a/.github/workflows/build-plugin-zip.yml +++ b/.github/workflows/build-plugin-zip.yml @@ -118,6 +118,19 @@ jobs: git fetch --depth=1 origin "${{ steps.get_version.outputs.release_branch }}" git checkout "${{ steps.get_version.outputs.release_branch }}" + - name: Setup Node.js and install dependencies + uses: ./.github/setup-node + + - name: Update the changelog of packages + id: update_packages + run: | + npm run update:changelogs -- --version="${{ steps.get_version.outputs.new_version }}" + CHANGELOG=$(cat changelog.txt | awk '{printf "%s\\n", $0}') + echo "changelog=$CHANGELOG" >> $GITHUB_OUTPUT + git add . + git commit -m "Update Changelog for ${{ steps.get_version.outputs.new_version }}" + echo "has_commit=$(git rev-parse --verify --short HEAD)" >> $GITHUB_OUTPUT + - name: Update plugin version env: VERSION: ${{ steps.get_version.outputs.new_version }} @@ -145,6 +158,7 @@ jobs: git pull MASTER_VERSION=$(jq --raw-output '.version' package.json) if [[ ${{ steps.get_version.outputs.old_version }} == "$MASTER_VERSION" ]]; then + git cherry-pick "${{ steps.update_packages.outputs.has_commit }}" git cherry-pick "${{ steps.get_version.outputs.release_branch }}" git push echo "version_bump_commit=$(git rev-parse --verify --short HEAD)" >> $GITHUB_OUTPUT @@ -194,8 +208,8 @@ jobs: run: | IFS='.' read -r -a VERSION_ARRAY <<< "${VERSION}" MILESTONE="Blockera ${VERSION_ARRAY[0]}.${VERSION_ARRAY[1]}" - npm run update:changelogs - npm run other:changelog -- --milestone="$MILESTONE" --unreleased > release-notes.txt + echo ${{needs.update_packages.outputs.changelog}} >> release-note.txt + npm run other:changelog -- --milestone="$MILESTONE" --unreleased --file="release-note.txt" --version="${{ needs.bump-version.outputs.new_version }}" > release-notes.txt sed -ie '1,6d' release-notes.txt if [[ ${{ needs.bump-version.outputs.new_version }} != *"rc"* ]]; then # Include previous RCs' release notes, if any diff --git a/.github/workflows/upload-release-to-plugin-repo.yml b/.github/workflows/upload-release-to-plugin-repo.yml index f3c09f787..774360c6b 100644 --- a/.github/workflows/upload-release-to-plugin-repo.yml +++ b/.github/workflows/upload-release-to-plugin-repo.yml @@ -78,85 +78,11 @@ jobs: RELEASE_BRANCH="release/${VERSION_ARRAY[0]}.${VERSION_ARRAY[1]}" echo "release_branch=${RELEASE_BRANCH}" >> $GITHUB_OUTPUT - update-changelog: - name: Update Changelog on ${{ matrix.branch }} branch - runs-on: ubuntu-latest - if: | - github.event.release.assets[0] - needs: get-release-branch - env: - TAG: ${{ github.event.release.tag_name }} - strategy: - matrix: - include: - - branch: trunk - label: trunk - - branch: ${{ needs.get-release-branch.outputs.release_branch }} - label: release - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: ${{ matrix.branch }} - token: ${{ secrets.BLOCKERA_TOKEN }} - show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - - - name: Update the Changelog to include the release notes - run: | - # First, determine where to insert the new Changelog entry. - SERIES="${RELEASE_BRANCH#release/}" - SERIES_REGEX="=\s${SERIES}\.[0-9]+\s=" - CUT_MARKS=$( grep -nP -m 1 "${SERIES_REGEX}" changelog.txt | cut -d: -f1 ) - if [[ -z "${CUT_MARKS}" ]]; then - CHANGELOG_REGEX="=\s[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?\s=" - RC_REGEX="=\s${TAG#v}(-rc\.[0-9]+)?\s=" - CUT_MARKS=$( awk "/${RC_REGEX}/ {print NR; next}; /${CHANGELOG_REGEX}/ {print NR; exit}" changelog.txt ) - fi - BEFORE=$( echo "$CUT_MARKS" | head -n 1 ) - AFTER=$( echo "$CUT_MARKS" | tail -n 1 ) - # Okay, we have all we need to build the new Changelog. - head -n $(( "${BEFORE}" - 1 )) changelog.txt > new_changelog.txt - printf '= %s =\n\n' "${TAG#v}" >> new_changelog.txt - # Need to use a heredoc in order to preserve special characters. - cat <<- "EOF" > release_notes.txt - ${{ github.event.release.body }} - EOF - # Normalize empty lines: Trim them from beginning and end of file... - awk 'NF {p=1} p' <<< "$(< release_notes.txt)" >> new_changelog.txt - # ...then add two empty lines at the end. - printf '\n\n' >> new_changelog.txt - tail -n +"${AFTER}" changelog.txt >> new_changelog.txt - mv new_changelog.txt changelog.txt - - - name: Configure git user name and email - run: | - git config user.name "blockerabot" - git config user.email blockeraai+githubbot@gmail.com - - - name: Commit the Changelog update - run: | - git add changelog.txt - # Remove files that are not meant to be committed - # ie. release_notes.txt created on the previous step. - git clean -fd - # Only attempt to commit changelog if it has been modified. - if ! git diff-index --quiet HEAD --; then - git commit -m "Update Changelog for ${TAG#v}" - git push --set-upstream origin "${{ matrix.branch }}" - fi - - - name: Upload Changelog artifact - uses: actions/upload-artifact@v4 - with: - name: changelog ${{ matrix.label }} - path: ./changelog.txt - upload: name: Publish as trunk (and tag) runs-on: ubuntu-latest environment: wp.org plugin - needs: [compute-should-update-trunk, update-changelog] + needs: [compute-should-update-trunk] if: | needs.compute-should-update-trunk.outputs.should_update_trunk == 'true' && github.event.release.assets[0] env: @@ -220,7 +146,7 @@ jobs: name: Publish as tag runs-on: ubuntu-latest environment: wp.org plugin - needs: [compute-should-update-trunk, update-changelog] + needs: [compute-should-update-trunk] if: | needs.compute-should-update-trunk.outputs.should_update_trunk == 'false' && github.event.release.assets[0] env: diff --git a/README.md b/README.md index 2c09dcb40..97ed994a6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

Blockera

-

The Advanced Mode for Gutenberg

+

The Advanced Mode for Block Editor

Transform WordPress Block Editor into a Powerful Page Builder with Blockera diff --git a/bin/plugin/cli.js b/bin/plugin/cli.js index df499c2ba..0f255cfe9 100755 --- a/bin/plugin/cli.js +++ b/bin/plugin/cli.js @@ -23,6 +23,7 @@ const { updatePackagesChangelog } = require('./commands/packages'); program .command('update-packages-changelog') + .option('-v, --version ', 'Version') .option(...releaseType) .description('Blockera plugin and packages changelogs publishes to git.') .action(catchException(updatePackagesChangelog)); @@ -30,6 +31,8 @@ program program .command('release-plugin-changelog') .alias('changelog') + .option('-f, --file ', 'File') + .option('-v, --version ', 'Version') .option('-m, --milestone ', 'Milestone') .option('-t, --token ', 'GitHub token') .option( diff --git a/bin/plugin/commands/changelog.js b/bin/plugin/commands/changelog.js index 768f809d5..10ef58cd2 100644 --- a/bin/plugin/commands/changelog.js +++ b/bin/plugin/commands/changelog.js @@ -17,6 +17,9 @@ const { log, formats } = require('../lib/logger'); const config = require('../config'); // @ts-ignore const manifest = require('../../../package.json'); +const fs = require('fs'); +const glob = require('fast-glob'); +const path = require('path'); const UNKNOWN_FEATURE_FALLBACK_NAME = 'Uncategorized'; @@ -120,6 +123,8 @@ const GROUP_TITLE_ORDER = [ 'Features', 'Enhancements', 'New APIs', + 'New Features', + 'Improvements', 'Bug Fixes', `Accessibility`, 'Performance', @@ -137,6 +142,8 @@ const GROUP_TITLE_ORDER = [ * @type {Map} */ const TITLE_TYPE_PATTERNS = new Map([ + [/feat?(:|\/ )?/i, 'New Features'], + [/improve?\s*ment(s)?(:|\/ )?/i, 'Improvements'], [/^(\w+:)?(bug)?\s*fix(es)?(:|\/ )?/i, 'Bug Fixes'], ]); @@ -475,6 +482,7 @@ const createOmitByLabelPrefix = (prefixes) => (text, issue) => ) ? undefined : text; + /** * Given an issue title and issue, returns the title with redundant grouping * type details removed. The prefix is redundant since it would already be clear @@ -692,14 +700,144 @@ async function fetchAllPullRequests(octokit, settings) { } /** - * Formats the changelog string for a given list of pull requests. + * Combines repeated sections in a changelog string. + * + * @param {string} changelog the changelog text. + * + * @returns {string} the combined changelog same sections. + */ +function combineChangelogSections(changelog) { + // Split the changelog into lines + const lines = changelog.split('\n'); + + // Initialize an object to hold each section's content + const sections = {}; + let currentSection = ''; + + // Loop through each line + lines.forEach((line) => { + // Check if the line starts with a section heading (e.g., ### Bug Fixes) + const sectionMatch = line.match(/^### (.+)$/); + if (sectionMatch) { + currentSection = sectionMatch[1]; + // Initialize the section in the object if it doesn't exist + if (!sections[currentSection]) { + sections[currentSection] = []; + } + } else if (currentSection) { + // Add the line to the current section + sections[currentSection].push(line); + } + }); + + // Define the priority order for sections + const priorityOrder = ['New Features', 'Improvements', 'Bug Fixes']; + + // Reconstruct the changelog by priority + let combinedChangelog = ''; + + // Add sections based on priority first + priorityOrder.forEach((section) => { + if (sections[section]) { + combinedChangelog += `\n### ${section}\n`; + combinedChangelog += sections[section] + .filter((line) => line.trim() !== '') + .join('\n'); + combinedChangelog += '\n'; + } + }); + + // Add any other sections that were not prioritized + Object.keys(sections).forEach((section) => { + if (!priorityOrder.includes(section)) { + combinedChangelog += `\n### ${section}\n`; + combinedChangelog += sections[section] + .filter((line) => line.trim() !== '') + .join('\n'); + combinedChangelog += '\n'; + } + }); + + return combinedChangelog.trim(); +} + +/** + * Formats the changelog string for a given list of packages. + * + * @param {string[]} changelogPath the changelog path. + * @param {string} version The version number if it has value to update changelog.txt! + * + * @return {string} The formatted changelog string. + */ +function getMainChangelog(changelogPath, version = '') { + let start = + '

\n' + '\n\n' + '## Changelog\n\n' + '\n\n'; + let changelog = ''; + const end = '\n\n
'; + + // Read the changelog file + const content = fs.readFileSync(changelogPath, 'utf8'); + + // Remove redundant headings or descriptions of changelog. + changelog = content + .replace(/== Changelog ==/g, '') + .replace(/=\s[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?\s=/g, '') + .trim(); + + return start + changelog + end; +} + +/** + * Formats the changelog string for a given list of packages. + * + * @param {string[]} changelogs List of pull requests. + * @param {string} version The version number to update changelog.txt! + * + * @return {string} The formatted changelog string. + */ +function updateChangelog(changelogs, version) { + const start = '== Changelog ==\n\n= ' + version.trim() + ' =\n\n'; + let changelog = ''; + const end = + '\n\n## More\n\nTo read the changelog for older Blockera releases, please navigate to the [[release page](https://community.blockera.ai/changelog-9l8hbrv0)].'; + + for (const changelogPath of changelogs) { + // Read the changelog file + const content = fs.readFileSync(changelogPath, 'utf8'); + + // Use a regular expression to extract the ## Unreleased section + const unreleasedSection = content.match( + /## Unreleased[\s\S]+?(?=\n## |\n$)/ + ); + + if (unreleasedSection) { + changelog += unreleasedSection[0].replace(/##\sUnreleased/g, ''); + } + } + + // Combine same sections. + changelog = combineChangelogSections(changelog); + + // Update the changelog.txt file to include combined changes of all packages. + fs.writeFileSync( + path.resolve(process.cwd(), 'changelog.txt'), + start + changelog + end + ); +} + +/** + * Formats the development changelog string for a given list of pull requests. * * @param {IssuesListForRepoResponseItem[]} pullRequests List of pull requests. * * @return {string} The formatted changelog string. */ -function getChangelog(pullRequests) { - let changelog = '## Changelog\n\n'; +function getDevelopmentChangelog(pullRequests) { + let changelog = + '
\n' + + '\n\n' + + '## Development Changelog\n\n' + + '\n\n'; const groupedPullRequests = skipCreatedByBots(pullRequests).reduce( ( @@ -784,7 +922,7 @@ function getChangelog(pullRequests) { changelog += '\n'; } - return changelog; + return changelog + '\n\n
'; } /** @@ -984,12 +1122,16 @@ async function createChangelog(settings) { try { const pullRequests = await fetchAllPullRequests(octokit, settings); - const changelog = getChangelog(pullRequests); + const developmentChangelog = getDevelopmentChangelog(pullRequests); const contributorProps = getContributorProps(pullRequests); const contributorsList = getContributorsList(pullRequests); releaselog = releaselog.concat( - changelog, + getMainChangelog( + path.resolve(process.cwd(), settings.file), + settings.version + ), + developmentChangelog, contributorProps, contributorsList ); @@ -1024,6 +1166,8 @@ async function getReleaseChangelog(options) { }) : options.milestone, unreleased: options.unreleased, + file: options?.file || '', + version: options?.version || '', }); } @@ -1044,7 +1188,8 @@ async function getReleaseChangelog(options) { getFormattedItemDescription, getContributorProps, getContributorsList, - getChangelog, + updateChangelog, + getDevelopmentChangelog, getUniqueByUsername, skipCreatedByBots, mapLabelsToFeatures, diff --git a/bin/plugin/commands/packages.js b/bin/plugin/commands/packages.js index 27cc7c941..8c080213d 100644 --- a/bin/plugin/commands/packages.js +++ b/bin/plugin/commands/packages.js @@ -26,6 +26,7 @@ const { } = require('./common'); const { join } = require('path'); const pluginConfig = require('../config'); +const { updateChangelog } = require('./changelog'); /** * Release type names. @@ -108,18 +109,14 @@ async function checkoutNpmReleaseBranch({ * @return {?string} The optional commit's hash when changelog files updated. */ async function updatePackages(config) { - const { - abortMessage, - gitWorkingDirectoryPath, - interactive, - minimumVersionBump, - releaseType, - } = config; + const { minimumVersionBump, releaseType, version } = config; const changelogFiles = await glob( path.resolve(process.cwd(), 'packages/*/CHANGELOG.md') ); + updateChangelog(changelogFiles, version); + const processedPackages = await Promise.all( changelogFiles.map(async (changelogPath) => { const fileStream = fs.createReadStream(changelogPath); @@ -152,16 +149,31 @@ async function updatePackages(config) { 'CHANGELOG.md', 'package.json' ); - const { version } = readJSONFile(packageJSONPath); + const composerJSONPath = changelogPath.replace( + 'CHANGELOG.md', + 'composer.json' + ); + + let jsonData; + + if (fs.existsSync(packageJSONPath)) { + jsonData = readJSONFile(packageJSONPath); + } else { + jsonData = readJSONFile(composerJSONPath); + } + + const { version } = jsonData; + const nextVersion = versionBump !== null ? semverInc(version, versionBump) : null; return { + version, + nextVersion, + packageName, changelogPath, packageJSONPath, - packageName, - nextVersion, - version, + composerJSONPath, }; }) ); @@ -184,11 +196,12 @@ async function updatePackages(config) { await Promise.all( packagesToUpdate.map( async ({ + version, + nextVersion, + packageName, changelogPath, packageJSONPath, - packageName, - nextVersion, - version, + composerJSONPath, }) => { // Update changelog. const content = fs.readFileSync(changelogPath, 'utf8'); @@ -204,16 +217,33 @@ async function updatePackages(config) { ) ); - // Update package.json. - const packageJson = readJSONFile(packageJSONPath); - const newPackageJson = { - ...packageJson, - version: nextVersion + '-prerelease', - }; - fs.writeFileSync( - packageJSONPath, - JSON.stringify(newPackageJson, null, '\t') + '\n' - ); + if (fs.existsSync(packageJSONPath)) { + // Update package.json. + const packageJson = readJSONFile(packageJSONPath); + const newPackageJson = { + ...packageJson, + version: nextVersion, + }; + + fs.writeFileSync( + packageJSONPath, + JSON.stringify(newPackageJson, null, '\t') + '\n' + ); + } + + if (fs.existsSync(composerJSONPath)) { + // Update composer.json + const composerJson = readJSONFile(composerJSONPath); + const newComposerJson = { + ...composerJson, + version: nextVersion, + }; + + fs.writeFileSync( + composerJSONPath, + JSON.stringify(newComposerJson, null, '\t') + '\n' + ); + } log( ` - ${packageName}: ${version} -> ${ @@ -225,26 +255,6 @@ async function updatePackages(config) { } ) ); - - if (interactive) { - await askForConfirmation( - `All corresponding files were updated. Commit the changes?`, - true, - abortMessage - ); - } - - const { commit: commitHash } = await SimpleGit(gitWorkingDirectoryPath) - .add(['./*']) - .commit('docs: create release changelogs'); - - if (commitHash) { - await runPushGitChangesStep(config); - } - - log('>> Changelog files have been updated successfully.'); - - return commitHash; } /** diff --git a/bin/plugin/commands/test/__snapshots__/changelog.spec.js.snap b/bin/plugin/commands/test/__snapshots__/changelog.spec.js.snap index 7ebe7e2cf..e8afdd80e 100644 --- a/bin/plugin/commands/test/__snapshots__/changelog.spec.js.snap +++ b/bin/plugin/commands/test/__snapshots__/changelog.spec.js.snap @@ -1,7 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`getChangelog verify that the changelog is properly formatted 1`] = ` -"## Changelog +"
+ + +## Development Changelog + + ### Bug Fixes @@ -41,7 +46,9 @@ exports[`getChangelog verify that the changelog is properly formatted 1`] = ` - refactor: Remove redundant utilities. ([135](https://github.com/blockeraai/blockera/pull/135)) -" + + +
" `; exports[`getContributorList verify that the contributors list is properly formatted 1`] = ` diff --git a/blockera.php b/blockera.php index 37c485cf2..f90eccd62 100644 --- a/blockera.php +++ b/blockera.php @@ -2,7 +2,7 @@ /** * Plugin Name: Blockera * Plugin URI: https://blockera.ai/blockera-page-builder/ - * Description: The Advanced Mode for Gutenberg + * Description: The Advanced Mode for Block Editor * Requires at least: 6.6 * Tested up to: 6.6 * Requires PHP: 7.4 diff --git a/changelog.txt b/changelog.txt index afbb881ca..49f5a2b20 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,8 +2,6 @@ = 0.9.2 = -## Changelog - - Tweak: Optimized the style generator for faster processing. - Tweak: General improvements across various functionalities. - Tweak: Updated breakpoint handling to ensure full compatibility with WordPress 6.5.2 and later versions. @@ -13,22 +11,16 @@ = 0.9.1 = -## Changelog - - Fix: Breakpoints not showing in Site Editor. = 0.9.0 = -## Changelog - - Public beta 1 release. = 0.8 = -## Changelog - - Tweak: Add more E2E, component, and PHP unit tests. - Tweak: Design improvements. - Tweak: Border feature functionality + WP data compatibility. @@ -41,8 +33,6 @@ = 0.7 = -## Changelog - - Tweak: PHP requirement decreased to PHP v7.4. - Tweak: WP requirement decreased to v6.4.5. - Tweak: Custom aspect ratio compatibility in WP 6.6 Data. @@ -63,8 +53,6 @@ = 0.6 = -## Changelog - - New: Experimental feature infrastructure is being developed to enable the shipment of experimental features in upcoming updates. @@ -82,8 +70,6 @@ = 0.5 = -## Changelog - - Tweak: 🔥 Reduce the final plugin package file size from 4MB to 1.4MB. - Tweak: Refactor, redesign, and compress all icons. - Tweak: Enhance the design. @@ -98,8 +84,6 @@ = 0.4 = -## Changelog - - Tweak: 🔥 Reduce 50% of the final package. - Tweak: Improve build script. - Tweak: Add more E2E tests. @@ -113,8 +97,6 @@ = 0.3 = -## Changelog - - New: add Github repository link to readme.txt - New: add composer.json to build zip because the WP.org review team asked @@ -131,8 +113,6 @@ = 0.2.2 = -## Changelog - - New: Indicator for current responsive breakpoint. - Tweak: Blocks and admin panel design improvement. @@ -147,8 +127,6 @@ = 0.2.1 = -## Changelog - - New: Option to disable Blockera power up for user roles (Pro Version). - New: Advanced option panel reset functionality. @@ -164,8 +142,6 @@ = 0.2 = -## Changelog - - New: Settings panel to change Blockera behaviors. - New: Block Manager panel to enable/disable Blockera blocks power up on blocks. - New: Setting for disabling Pro version hints in setting panel. @@ -175,14 +151,10 @@ = 0.1.1 = -## Changelog - - Tweak: Smaller build version size (Assets and packages size). - Tweak: Block inspector control compatibility. = 0.1 = -## Changelog - - Initial version for WP.org review diff --git a/composer.lock b/composer.lock index b4669486e..7cd759e10 100644 --- a/composer.lock +++ b/composer.lock @@ -8,11 +8,11 @@ "packages": [ { "name": "blockera/blockera", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/blockera", - "reference": "5f542a3fc2fe8f5512f0af4ffe27bf7eff533301" + "reference": "4d08c7bf0eb402e719d02777b53474d87478d37c" }, "type": "library", "autoload": { @@ -35,11 +35,11 @@ }, { "name": "blockera/blockera-admin", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/blockera-admin", - "reference": "1cdc3b332a40f8290ce3938d0f320ad75b63cc96" + "reference": "6bc2464ebe489df7ee3d96956c42ff2875695dfd" }, "type": "library", "autoload": { @@ -57,11 +57,11 @@ }, { "name": "blockera/blocks-core", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/blocks/core", - "reference": "bed2b76f7e9529d0a396dfba22be3707a25563f2" + "reference": "7f2d8743c6330bd5c755dd20fbbf729afe61dff7" }, "type": "library", "autoload": { @@ -79,11 +79,11 @@ }, { "name": "blockera/bootstrap", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/bootstrap", - "reference": "1284b59da551a797ef87d75ec8e97ee2aab9fe61" + "reference": "2dea55d0335d92fe63781af3318ecdee6f6ce396" }, "type": "library", "autoload": { @@ -98,11 +98,11 @@ }, { "name": "blockera/data", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/data", - "reference": "655ad1b29be83400e43fab3412b611b161f6e4de" + "reference": "27983d62451c2a7b19c04f0ed3d7c5a32b09a022" }, "type": "library", "autoload": { @@ -117,11 +117,11 @@ }, { "name": "blockera/data-editor", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/data-editor", - "reference": "e9cf17547de8bf3f08e78fdd1a8bb060b8172f02" + "reference": "a7230af21431cd8a03c2461c7d9fa03c833f17a3" }, "type": "library", "autoload": { @@ -136,11 +136,11 @@ }, { "name": "blockera/dev-phpunit", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/dev-phpunit", - "reference": "44f240028fe3b4adf9a55efba31d5d7ed7ca8d4e" + "reference": "ab468206741ab35323b0c2ca50a13ffcfed34120" }, "type": "library", "autoload-dev": { @@ -155,11 +155,11 @@ }, { "name": "blockera/editor", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/editor", - "reference": "ef6bbc6acd14110044796c2de4a462e8bcf90f98" + "reference": "823e5eba3788597e164e58b842727ec4b3463627" }, "type": "library", "autoload": { @@ -182,11 +182,11 @@ }, { "name": "blockera/env", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/env", - "reference": "3a04174b2a568f521e104e8d33d86258f98acd9d" + "reference": "1845318bb7e948ad02ce53f3e6dcad62ea15c646" }, "type": "library", "autoload": { @@ -204,11 +204,11 @@ }, { "name": "blockera/exceptions", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/exceptions", - "reference": "6fe7db41a858f925b262b457ed9f0a421e42cf34" + "reference": "431bbaf6e478bddf8b01e22efc10459dea3f1010" }, "type": "library", "autoload": { @@ -223,11 +223,11 @@ }, { "name": "blockera/freemius-sdk", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/freemius-sdk", - "reference": "43f936a583396c750cbc01d00bc9096395a4cdf6" + "reference": "c366cd1374a31f71ca2b85a9bb961c3d87815193" }, "type": "library", "autoload": { @@ -242,11 +242,11 @@ }, { "name": "blockera/http", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/http", - "reference": "c198b013edb63ef73abe1c7b6a80d184e9513cb4" + "reference": "3be77d10351026b4198f47ca7c2daf7fd74635b5" }, "type": "library", "autoload": { @@ -261,11 +261,11 @@ }, { "name": "blockera/utils", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/utils", - "reference": "685d33104f94ade181dd764f82b2c6ffafc5d049" + "reference": "bebe2129dbb0c3a66f17968803a13983a1fcd220" }, "type": "library", "autoload": { @@ -285,11 +285,11 @@ }, { "name": "blockera/wordpress", - "version": "dev-refactor/blocks-selectors", + "version": "0.9.2", "dist": { "type": "path", "url": "packages/wordpress", - "reference": "b2783c3a056b57c4495f24f62d9291922ca41149" + "reference": "e098d386c95e2672ebe3b9d4136ef89eff5e128c" }, "type": "library", "autoload": { @@ -653,16 +653,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -709,7 +709,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -725,7 +725,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -733,16 +733,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8740a072b86292957feb42703edde77fcfca84fb" + "reference": "2369cb908b33d7b7518cce042615de430142497f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8740a072b86292957feb42703edde77fcfca84fb", - "reference": "8740a072b86292957feb42703edde77fcfca84fb", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2369cb908b33d7b7518cce042615de430142497f", + "reference": "2369cb908b33d7b7518cce042615de430142497f", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -806,7 +806,7 @@ "type": "tidelift" } ], - "time": "2024-06-20T08:18:00+00:00" + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-php80", @@ -814,16 +814,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "default-branch": true, "type": "library", @@ -871,7 +871,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -887,7 +887,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "vlucas/phpdotenv", @@ -982,12 +982,12 @@ "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a" + "reference": "068387cab2f88507f98051c9e3f0a10366966e8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/063d9aa8696582f5a41dffbbaf3c81024f0a604a", - "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/068387cab2f88507f98051c9e3f0a10366966e8c", + "reference": "068387cab2f88507f98051c9e3f0a10366966e8c", "shasum": "" }, "require": { @@ -997,8 +997,8 @@ }, "require-dev": { "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8 || ^9", "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^4.2 || ^5", "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "default-branch": true, @@ -1035,7 +1035,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.1" + "source": "https://github.com/composer/ca-bundle/tree/main" }, "funding": [ { @@ -1051,7 +1051,7 @@ "type": "tidelift" } ], - "time": "2024-07-08T15:28:20+00:00" + "time": "2024-08-23T14:36:22+00:00" }, { "name": "composer/class-map-generator", @@ -1059,12 +1059,12 @@ "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3" + "reference": "465b1b0a7a5f3f73e7e4ab1aed3e529ff9bcfb76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", - "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/465b1b0a7a5f3f73e7e4ab1aed3e529ff9bcfb76", + "reference": "465b1b0a7a5f3f73e7e4ab1aed3e529ff9bcfb76", "shasum": "" }, "require": { @@ -1077,8 +1077,8 @@ "phpstan/phpstan-deprecation-rules": "^1", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6" }, "default-branch": true, "type": "library", @@ -1109,7 +1109,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.3.4" + "source": "https://github.com/composer/class-map-generator/tree/main" }, "funding": [ { @@ -1125,7 +1125,7 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:13:04+00:00" + "time": "2024-08-23T13:24:05+00:00" }, { "name": "composer/composer", @@ -1133,16 +1133,16 @@ "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "d3d378184bf1ae88abb1c3c9f8d0c26de5ea2744" + "reference": "e4038e5e3bffe22cb815dc1663ea76be96d4222e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/d3d378184bf1ae88abb1c3c9f8d0c26de5ea2744", - "reference": "d3d378184bf1ae88abb1c3c9f8d0c26de5ea2744", + "url": "https://api.github.com/repos/composer/composer/zipball/e4038e5e3bffe22cb815dc1663ea76be96d4222e", + "reference": "e4038e5e3bffe22cb815dc1663ea76be96d4222e", "shasum": "" }, "require": { - "composer/ca-bundle": "^1.0", + "composer/ca-bundle": "^1.5", "composer/class-map-generator": "^1.3.3", "composer/metadata-minifier": "^1.0", "composer/pcre": "^2.2 || ^3.2", @@ -1152,17 +1152,17 @@ "justinrainbow/json-schema": "^5.3", "php": "^7.2.5 || ^8.0", "psr/log": "^1.0 || ^2.0 || ^3.0", - "react/promise": "^2.8 || ^3", + "react/promise": "^3.2", "seld/jsonlint": "^1.4", "seld/phar-utils": "^1.2", "seld/signal-handler": "^2.0", - "symfony/console": "^5.4.11 || ^6.0.11 || ^7", - "symfony/filesystem": "^5.4 || ^6.0 || ^7", - "symfony/finder": "^5.4 || ^6.0 || ^7", + "symfony/console": "^5.4.35 || ^6.3.12 || ^7.0.3", + "symfony/filesystem": "^5.4.35 || ^6.3.12 || ^7.0.3", + "symfony/finder": "^5.4.35 || ^6.3.12 || ^7.0.3", "symfony/polyfill-php73": "^1.24", "symfony/polyfill-php80": "^1.24", "symfony/polyfill-php81": "^1.24", - "symfony/process": "^5.4 || ^6.0 || ^7" + "symfony/process": "^5.4.35 || ^6.3.12 || ^7.0.3" }, "require-dev": { "phpstan/phpstan": "^1.11.8", @@ -1170,7 +1170,7 @@ "phpstan/phpstan-phpunit": "^1.4.0", "phpstan/phpstan-strict-rules": "^1.6.0", "phpstan/phpstan-symfony": "^1.4.0", - "symfony/phpunit-bridge": "^6.4.1 || ^7.0.1" + "symfony/phpunit-bridge": "^6.4.3 || ^7.0.1" }, "suggest": { "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", @@ -1240,7 +1240,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T14:21:02+00:00" + "time": "2024-09-04T12:43:28+00:00" }, { "name": "composer/metadata-minifier", @@ -1248,12 +1248,12 @@ "source": { "type": "git", "url": "https://github.com/composer/metadata-minifier.git", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207" + "reference": "20554d4accbd0734deca18fa5075ba48fd5e8e57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207", + "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/20554d4accbd0734deca18fa5075ba48fd5e8e57", + "reference": "20554d4accbd0734deca18fa5075ba48fd5e8e57", "shasum": "" }, "require": { @@ -1294,7 +1294,7 @@ ], "support": { "issues": "https://github.com/composer/metadata-minifier/issues", - "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" + "source": "https://github.com/composer/metadata-minifier/tree/main" }, "funding": [ { @@ -1310,7 +1310,7 @@ "type": "tidelift" } ], - "time": "2021-04-07T13:37:33+00:00" + "time": "2024-08-22T15:54:53+00:00" }, { "name": "composer/pcre", @@ -1318,22 +1318,22 @@ "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", - "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "conflict": { - "phpstan/phpstan": "<1.11.8" + "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "phpstan/phpstan": "^1.11.8", + "phpstan/phpstan": "^1.11.10", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8 || ^9" }, @@ -1374,7 +1374,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.2.0" + "source": "https://github.com/composer/pcre/tree/3.3.1" }, "funding": [ { @@ -1390,7 +1390,7 @@ "type": "tidelift" } ], - "time": "2024-07-25T09:36:02+00:00" + "time": "2024-08-27T18:44:43+00:00" }, { "name": "composer/semver", @@ -1398,20 +1398,20 @@ "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + "reference": "66560258514d406a04b08f12488769936cf1248d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "url": "https://api.github.com/repos/composer/semver/zipball/66560258514d406a04b08f12488769936cf1248d", + "reference": "66560258514d406a04b08f12488769936cf1248d", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "default-branch": true, "type": "library", @@ -1456,7 +1456,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.2" + "source": "https://github.com/composer/semver/tree/main" }, "funding": [ { @@ -1472,7 +1472,7 @@ "type": "tidelift" } ], - "time": "2024-07-12T11:35:52+00:00" + "time": "2024-08-26T15:05:29+00:00" }, { "name": "composer/spdx-licenses", @@ -1480,20 +1480,20 @@ "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "9befc2a0c2b0a1e08712b60f700596b17ed14368" + "reference": "614a1b86ff628ca7e0713f733ee09f94569548b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/9befc2a0c2b0a1e08712b60f700596b17ed14368", - "reference": "9befc2a0c2b0a1e08712b60f700596b17ed14368", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/614a1b86ff628ca7e0713f733ee09f94569548b0", + "reference": "614a1b86ff628ca7e0713f733ee09f94569548b0", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "default-branch": true, "type": "library", @@ -1553,7 +1553,7 @@ "type": "tidelift" } ], - "time": "2023-11-20T07:47:23+00:00" + "time": "2024-08-26T15:22:11+00:00" }, { "name": "composer/xdebug-handler", @@ -2708,28 +2708,28 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "328a747f499cca790acff5634a4e55b957f40634" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/328a747f499cca790acff5634a4e55b957f40634", - "reference": "328a747f499cca790acff5634a4e55b957f40634", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { "phpunit/phpunit": "^9.6" @@ -2770,7 +2770,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -2778,7 +2778,7 @@ "type": "github" } ], - "time": "2024-07-17T05:19:21+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -3027,12 +3027,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "846c7cefad8824f281f521b9625dd301064ead88" + "reference": "ea71f89be82e7fa940ee0bb9500722a6dfafeb71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/846c7cefad8824f281f521b9625dd301064ead88", - "reference": "846c7cefad8824f281f521b9625dd301064ead88", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea71f89be82e7fa940ee0bb9500722a6dfafeb71", + "reference": "ea71f89be82e7fa940ee0bb9500722a6dfafeb71", "shasum": "" }, "require": { @@ -3047,7 +3047,7 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.31", + "phpunit/php-code-coverage": "^9.2.32", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.4", @@ -3122,7 +3122,7 @@ "type": "tidelift" } ], - "time": "2024-08-14T08:16:04+00:00" + "time": "2024-09-07T13:09:31+00:00" }, { "name": "psr/log", @@ -4330,24 +4330,24 @@ "source": { "type": "git", "url": "https://github.com/Seldaek/signal-handler.git", - "reference": "a6ce6557ca047be383a1a45b23b7668f9b8b31c2" + "reference": "606a192bf4783dd811b906e4a64b0866d16e61a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/a6ce6557ca047be383a1a45b23b7668f9b8b31c2", - "reference": "a6ce6557ca047be383a1a45b23b7668f9b8b31c2", + "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/606a192bf4783dd811b906e4a64b0866d16e61a9", + "reference": "606a192bf4783dd811b906e4a64b0866d16e61a9", "shasum": "" }, "require": { "php": ">=7.2.0" }, "require-dev": { - "phpstan/phpstan": "^1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^7.5.20 || ^8.5.23", - "psr/log": "^1 || ^2 || ^3" + "phpstan/phpstan": "^1.11.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "^8.5.38 || ^9.6.20", + "psr/log": "^1.1.4 || ^2 || ^3" }, "default-branch": true, "type": "library", @@ -4384,7 +4384,7 @@ "issues": "https://github.com/Seldaek/signal-handler/issues", "source": "https://github.com/Seldaek/signal-handler/tree/main" }, - "time": "2024-07-05T06:51:42+00:00" + "time": "2024-08-23T08:24:29+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -4392,12 +4392,12 @@ "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "41a426cac70d410183189bc31c63f474f6f53548" + "reference": "c0e8f4de2884a52af95ee4f516e247ff1048413b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/41a426cac70d410183189bc31c63f474f6f53548", - "reference": "41a426cac70d410183189bc31c63f474f6f53548", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/c0e8f4de2884a52af95ee4f516e247ff1048413b", + "reference": "c0e8f4de2884a52af95ee4f516e247ff1048413b", "shasum": "" }, "require": { @@ -4465,7 +4465,7 @@ "type": "open_collective" } ], - "time": "2024-08-17T17:43:40+00:00" + "time": "2024-09-09T20:17:06+00:00" }, { "name": "symfony/console", @@ -4473,12 +4473,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e86f8554de667c16dde8aeb89a3990cfde924df9" + "reference": "7a7ce2c8b4246fdfc8bd42dff781298edeb54dd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e86f8554de667c16dde8aeb89a3990cfde924df9", - "reference": "e86f8554de667c16dde8aeb89a3990cfde924df9", + "url": "https://api.github.com/repos/symfony/console/zipball/7a7ce2c8b4246fdfc8bd42dff781298edeb54dd2", + "reference": "7a7ce2c8b4246fdfc8bd42dff781298edeb54dd2", "shasum": "" }, "require": { @@ -4564,7 +4564,7 @@ "type": "tidelift" } ], - "time": "2024-08-13T16:31:56+00:00" + "time": "2024-09-05T16:13:22+00:00" }, { "name": "symfony/css-selector", @@ -4910,16 +4910,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -4965,7 +4965,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -4981,7 +4981,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", @@ -4989,16 +4989,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -5047,7 +5047,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -5063,7 +5063,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", @@ -5071,16 +5071,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1", - "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "default-branch": true, "type": "library", @@ -5124,7 +5124,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -5140,7 +5140,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php81", @@ -5148,16 +5148,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af", - "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "default-branch": true, "type": "library", @@ -5201,7 +5201,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -5217,7 +5217,7 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", @@ -5225,12 +5225,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046" + "reference": "32354f62488486b6efcbcd61a1dc8a619287fd29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/deedcb3bb4669cae2148bc920eafd2b16dc7c046", - "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046", + "url": "https://api.github.com/repos/symfony/process/zipball/32354f62488486b6efcbcd61a1dc8a619287fd29", + "reference": "32354f62488486b6efcbcd61a1dc8a619287fd29", "shasum": "" }, "require": { @@ -5279,7 +5279,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-05T16:13:22+00:00" }, { "name": "symfony/service-contracts", @@ -5456,12 +5456,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "5051452846348f5d2fb77ca7a66aa340b5ef14ce" + "reference": "6be6a6a8af4818564e3726fc65cf936f34743cef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5051452846348f5d2fb77ca7a66aa340b5ef14ce", - "reference": "5051452846348f5d2fb77ca7a66aa340b5ef14ce", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6be6a6a8af4818564e3726fc65cf936f34743cef", + "reference": "6be6a6a8af4818564e3726fc65cf936f34743cef", "shasum": "" }, "require": { @@ -5537,7 +5537,7 @@ "type": "tidelift" } ], - "time": "2024-08-13T13:55:12+00:00" + "time": "2024-08-30T16:01:46+00:00" }, { "name": "theseer/tokenizer", @@ -5595,12 +5595,12 @@ "source": { "type": "git", "url": "https://github.com/voku/simple_html_dom.git", - "reference": "716822ed52ed3a1881542be07a786270de390e99" + "reference": "61beaaa809d3c598e1310d32080b2ebbe6ff91d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/simple_html_dom/zipball/716822ed52ed3a1881542be07a786270de390e99", - "reference": "716822ed52ed3a1881542be07a786270de390e99", + "url": "https://api.github.com/repos/voku/simple_html_dom/zipball/61beaaa809d3c598e1310d32080b2ebbe6ff91d1", + "reference": "61beaaa809d3c598e1310d32080b2ebbe6ff91d1", "shasum": "" }, "require": { @@ -5649,7 +5649,7 @@ ], "support": { "issues": "https://github.com/voku/simple_html_dom/issues", - "source": "https://github.com/voku/simple_html_dom/tree/4.8.10" + "source": "https://github.com/voku/simple_html_dom/tree/master" }, "funding": [ { @@ -5669,7 +5669,7 @@ "type": "tidelift" } ], - "time": "2024-07-03T16:05:14+00:00" + "time": "2024-09-06T07:48:36+00:00" }, { "name": "wp-cli/cache-command", @@ -5753,12 +5753,12 @@ "source": { "type": "git", "url": "https://github.com/wp-cli/checksum-command.git", - "reference": "3313a6bd5510113c649fae4e657a4407346970d3" + "reference": "149438e6305662e44ec6261fba2cf6e1d3e09efa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/checksum-command/zipball/3313a6bd5510113c649fae4e657a4407346970d3", - "reference": "3313a6bd5510113c649fae4e657a4407346970d3", + "url": "https://api.github.com/repos/wp-cli/checksum-command/zipball/149438e6305662e44ec6261fba2cf6e1d3e09efa", + "reference": "149438e6305662e44ec6261fba2cf6e1d3e09efa", "shasum": "" }, "require": { @@ -5805,7 +5805,7 @@ "issues": "https://github.com/wp-cli/checksum-command/issues", "source": "https://github.com/wp-cli/checksum-command/tree/main" }, - "time": "2024-08-07T09:42:53+00:00" + "time": "2024-08-20T12:25:32+00:00" }, { "name": "wp-cli/config-command", @@ -7726,12 +7726,12 @@ "source": { "type": "git", "url": "https://github.com/wp-cli/wp-cli-bundle.git", - "reference": "94de2d46ae0cbb4c88f2b2c872b84d143dae3fe6" + "reference": "4d74dc1ce884c6c543ffc5304f05c2b74f143a2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-cli-bundle/zipball/94de2d46ae0cbb4c88f2b2c872b84d143dae3fe6", - "reference": "94de2d46ae0cbb4c88f2b2c872b84d143dae3fe6", + "url": "https://api.github.com/repos/wp-cli/wp-cli-bundle/zipball/4d74dc1ce884c6c543ffc5304f05c2b74f143a2b", + "reference": "4d74dc1ce884c6c543ffc5304f05c2b74f143a2b", "shasum": "" }, "require": { @@ -7792,7 +7792,7 @@ "issues": "https://github.com/wp-cli/wp-cli-bundle/issues", "source": "https://github.com/wp-cli/wp-cli-bundle" }, - "time": "2024-08-08T04:38:01+00:00" + "time": "2024-08-19T16:19:16+00:00" }, { "name": "wp-cli/wp-config-transformer", @@ -7940,16 +7940,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "dev-main", + "version": "2.x-dev", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "4a088f125c970d6d6ea52c927f96fe39b330d0f1" + "reference": "562f449a2ec8ab92fe7b30d94da9622c7b1345fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/4a088f125c970d6d6ea52c927f96fe39b330d0f1", - "reference": "4a088f125c970d6d6ea52c927f96fe39b330d0f1", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/562f449a2ec8ab92fe7b30d94da9622c7b1345fe", + "reference": "562f449a2ec8ab92fe7b30d94da9622c7b1345fe", "shasum": "" }, "require": { @@ -7964,7 +7964,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -7999,7 +7999,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-04-05T16:36:44+00:00" + "time": "2024-09-06T22:38:28+00:00" } ], "aliases": [], @@ -8023,5 +8023,5 @@ "platform-overrides": { "php": "7.4" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/packages/blockera-admin/composer.json b/packages/blockera-admin/composer.json index ca70e21bc..f1302eb3e 100644 --- a/packages/blockera-admin/composer.json +++ b/packages/blockera-admin/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/blockera-admin", + "version": "0.9.2", "description": "The blockera admin menus on WordPress admin dashboard.", "autoload": { "psr-4": { diff --git a/packages/blockera-admin/package.json b/packages/blockera-admin/package.json index 9a18fe802..0ef52d662 100644 --- a/packages/blockera-admin/package.json +++ b/packages/blockera-admin/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/blockera-admin", - "version": "1.0.0", + "version": "0.9.2", "description": "The blockera admin menus on WordPress admin dashboard.", "author": "The Blockera Contributors", "license": "ISC", diff --git a/packages/blockera/CHANGELOG.md b/packages/blockera/CHANGELOG.md index 738d515af..3cba79093 100644 --- a/packages/blockera/CHANGELOG.md +++ b/packages/blockera/CHANGELOG.md @@ -9,6 +9,7 @@ - Prevent of generated duplicate css props - Background feature CSS generator issues. - Some PHP warnings and errors. +- Fix: editor bootstrapper e2e test problems. ### New Features diff --git a/packages/blockera/composer.json b/packages/blockera/composer.json index dce53cd00..9287a7e88 100644 --- a/packages/blockera/composer.json +++ b/packages/blockera/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/blockera", + "version": "0.9.2", "description": "The bootstrapper for blockera php application for WordPress in admin and front-end sides.", "autoload": { "psr-4": { diff --git a/packages/blockera/js/test/editor.bootstrap.e2e.cy.js b/packages/blockera/js/test/editor.bootstrap.e2e.cy.js index 004502c05..9491cdc88 100644 --- a/packages/blockera/js/test/editor.bootstrap.e2e.cy.js +++ b/packages/blockera/js/test/editor.bootstrap.e2e.cy.js @@ -1,13 +1,7 @@ /** * Blockera dependencies */ -import { - createPost, - getBlockType, - addBlockToPost, - getWPDataObject, - getWindowProperty, -} from '@blockera/dev-cypress/js/helpers'; +import { createPost } from '@blockera/dev-cypress/js/helpers'; /** * Blockera editor bootstrap scenarios. @@ -19,14 +13,19 @@ describe('Blockera editor bootstrapper', () => { it('should available store apis on blockera editor global variable', () => { createPost(); - getWindowProperty('blockeraEditor_1_0_0').then((data) => { + cy.window().then((win) => { + const blockeraEditorKey = Object.keys(win).filter((key) => + /blockeraEditor_/.test(key) + ); + const blockeraEditor = win[blockeraEditorKey]; + expect(true).to.eq( - data.editor.hasOwnProperty( + blockeraEditor.editor.hasOwnProperty( 'unstableRegistrationBlockTypeAttributes' ) ); expect(true).to.eq( - data.editor.hasOwnProperty( + blockeraEditor.editor.hasOwnProperty( 'unstableRegistrationSharedBlockAttributes' ) ); diff --git a/packages/blockera/js/test/editor.woocommerce.e2e.cy.js b/packages/blockera/js/test/editor.woocommerce.e2e.cy.js index dd62cf7b4..9a8be20fe 100644 --- a/packages/blockera/js/test/editor.woocommerce.e2e.cy.js +++ b/packages/blockera/js/test/editor.woocommerce.e2e.cy.js @@ -29,7 +29,8 @@ describe('Blockera editor bootstrapper', () => { cy.getBlock('woocommerce/all-products').click(); cy.getByAriaLabel(`Edit the layout of each product`).click(); - cy.get(`[data-type="woocommerce/product-price"]`).click(); + + cy.getBlock('woocommerce/product-price').should('be.visible').click(); cy.getByAriaLabel('Add New Background').should('exist'); diff --git a/packages/blockera/package.json b/packages/blockera/package.json index fbec61aac..a54cda547 100644 --- a/packages/blockera/package.json +++ b/packages/blockera/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/blockera", - "version": "1.0.0", + "version": "0.9.2", "description": "The bootstrapper for blockera react application for WordPress site and block editors.", "author": "The Blockera Core Contributors", "license": "ISC", diff --git a/packages/blocks/core/composer.json b/packages/blocks/core/composer.json index 504577747..075977340 100644 --- a/packages/blocks/core/composer.json +++ b/packages/blocks/core/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/blocks-core", + "version": "0.9.2", "description": "The WordPress core blocks package for Blockera editor.", "autoload": { "psr-4": { diff --git a/packages/blocks/core/js/wordpress/columns/test/block-attributes.blocks.e2e.cy.js b/packages/blocks/core/js/wordpress/columns/test/block-attributes.blocks.e2e.cy.js index 783317646..4ec6057d8 100644 --- a/packages/blocks/core/js/wordpress/columns/test/block-attributes.blocks.e2e.cy.js +++ b/packages/blocks/core/js/wordpress/columns/test/block-attributes.blocks.e2e.cy.js @@ -17,7 +17,7 @@ describe('Testing core/columns block registered default attributes value', () => it('should valid sets default blockeraDisplay attribute value', () => { addBlockToPost('core/columns'); - cy.getBlock('core/columns').first().click(); + cy.getBlock('core/columns').first().click({ force: true }); getWPDataObject().then((data) => { const attributes = getBlockType(data, 'core/columns').attributes; diff --git a/packages/blocks/core/js/wordpress/group/test/gap-type-gap-and-margin.e2e.cy.js b/packages/blocks/core/js/wordpress/group/test/gap-type-gap-and-margin.e2e.cy.js index 81f5261ea..f5e8f1bc7 100644 --- a/packages/blocks/core/js/wordpress/group/test/gap-type-gap-and-margin.e2e.cy.js +++ b/packages/blocks/core/js/wordpress/group/test/gap-type-gap-and-margin.e2e.cy.js @@ -188,6 +188,8 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { cy.getByAriaLabel('Row').click(); }); + cy.getByDataTest('matrix-top-left-normal').click(); + cy.getParentContainer('Gap').within(() => { cy.get('input').type(100); }); @@ -203,11 +205,17 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { cy.getBlock('core/paragraph') .first() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); cy.getBlock('core/paragraph') .last() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); //Check frontend savePage(); @@ -226,9 +234,19 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { // // Assert child block to have valid property for gap // + cy.get('.wp-block-group.blockera-block p') + .first() + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + cy.get('.wp-block-group.blockera-block p') .last() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); }); it('Unlocked gap - the css property should be gap', () => { @@ -261,6 +279,8 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { cy.getByAriaLabel('Row').click(); }); + cy.getByDataTest('matrix-top-left-normal').click(); + cy.getParentContainer('Gap').within(() => { cy.get('input').type(100); @@ -279,11 +299,17 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { cy.getBlock('core/paragraph') .first() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); cy.getBlock('core/paragraph') .last() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); //Check frontend savePage(); @@ -302,9 +328,202 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { // // Assert child block to have valid property for gap // + cy.get('.wp-block-group.blockera-block p') + .first() + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + cy.get('.wp-block-group.blockera-block p') .last() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + }); + + it('Nested group + dynamic change in CSS selector - the css property should be gap', () => { + appendBlocks( + ` +
+

Paragraph 1

+ + + +

Paragraph 2

+ + + +
+

Paragraph 3

+ + + +

Paragraph 4

+
+ +
+` + ); + + // + // Parent Group + // + + // Select target block + cy.getBlock('core/paragraph').first().click(); + + // Switch to parent block + cy.getByAriaLabel('Select parent block: Group').click(); + + // switch to style tab + cy.getByDataTest('style-tab').click(); + + cy.getParentContainer('Display').within(() => { + cy.getByAriaLabel('Flex').click(); + }); + + cy.getParentContainer('Flex Layout').within(() => { + cy.getByAriaLabel('Row').click(); + }); + + cy.getByDataTest('matrix-top-left-normal').click(); + + cy.getParentContainer('Gap').within(() => { + cy.get('input').type(100); + }); + + // + // Asset group block CSS + // + cy.getBlock('core/group').should('have.css', 'gap', '100px'); + + // + // Assert child block to have valid property for gap + // + + cy.getBlock('core/paragraph') + .eq(0) + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + + cy.getBlock('core/paragraph') + .eq(1) + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + + // + // Inner Group + // + + cy.getBlock('core/paragraph').eq(3).click(); + + // Switch to parent block + cy.getByAriaLabel('Select parent block: Group').click(); + + // switch to style tab + cy.getByDataTest('style-tab').click(); + + cy.getParentContainer('Display').within(() => { + cy.getByAriaLabel('Flex').click(); + }); + + cy.getParentContainer('Flex Layout').within(() => { + cy.getByAriaLabel('Row').click(); + }); + + cy.getByDataTest('matrix-top-right-normal').click(); + + cy.getParentContainer('Gap').within(() => { + cy.get('input').type(200); + }); + + // + // Asset group block CSS + // + cy.getBlock('core/group').eq(1).should('have.css', 'gap', '200px'); + + // + // Assert child block to have valid property for gap + // + + cy.getBlock('core/paragraph') + .eq(2) + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + + cy.getBlock('core/paragraph') + .eq(3) + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-end'); + + //Check frontend + savePage(); + + redirectToFrontPage(); + + // + // Asset group block CSS + // + + // + // Parent Group + // + + cy.get('.wp-block-group.blockera-block') + .eq(0) + .should('have.css', 'gap', '100px'); + + // + // Assert child block to have valid property for gap + // + cy.get('.wp-block-group.blockera-block p') + .eq(0) + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + + cy.get('.wp-block-group.blockera-block p') + .eq(1) + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + + // + // Inner Group + // + + cy.get('.wp-block-group.blockera-block') + .eq(1) + .should('have.css', 'gap', '200px'); + + // + // Assert child block to have valid property for gap + // + cy.get('.wp-block-group.blockera-block p') + .eq(2) + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-end'); + + cy.get('.wp-block-group.blockera-block p') + .eq(3) + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-end'); }); }); @@ -339,6 +558,8 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { cy.getByAriaLabel('Column').click(); }); + cy.getByDataTest('matrix-top-left-normal').click(); + cy.getParentContainer('Gap').within(() => { cy.get('input').type(100); }); @@ -354,11 +575,17 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { cy.getBlock('core/paragraph') .first() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); cy.getBlock('core/paragraph') .last() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); //Check frontend savePage(); @@ -377,9 +604,19 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { // // Assert child block to have valid property for gap // + cy.get('.wp-block-group.blockera-block p') + .first() + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + cy.get('.wp-block-group.blockera-block p') .last() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); }); it('Unlocked gap - the css property should be gap', () => { @@ -412,6 +649,8 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { cy.getByAriaLabel('Column').click(); }); + cy.getByDataTest('matrix-top-left-normal').click(); + cy.getParentContainer('Gap').within(() => { cy.get('input').type(100); @@ -430,11 +669,17 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { cy.getBlock('core/paragraph') .first() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); cy.getBlock('core/paragraph') .last() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); //Check frontend savePage(); @@ -453,9 +698,19 @@ describe('Gap → Functionality (Type: gap-and-margin)', () => { // // Assert child block to have valid property for gap // + cy.get('.wp-block-group.blockera-block p') + .first() + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); + cy.get('.wp-block-group.blockera-block p') .last() - .should('have.css', 'margin-block-start', '0px'); + .should('have.css', 'margin-block-start', '0px') + .should('not.have.css', 'flex-direction', 'column') + .should('not.have.css', 'align-items', 'flex-start') + .should('not.have.css', 'justify-content', 'flex-start'); }); }); diff --git a/packages/blocks/core/package.json b/packages/blocks/core/package.json index 36b34ff20..ce10ec739 100644 --- a/packages/blocks/core/package.json +++ b/packages/blocks/core/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/blocks-core", - "version": "1.0.0", + "version": "0.9.2", "description": "A blocks package to includes all core blocks and third-party blocks to compatible with blockera extensions.", "author": "The Blockera Contributors", "license": "ISC", diff --git a/packages/bootstrap/composer.json b/packages/bootstrap/composer.json index 61982d579..c5239d881 100644 --- a/packages/bootstrap/composer.json +++ b/packages/bootstrap/composer.json @@ -1,9 +1,10 @@ { "name": "blockera/bootstrap", + "version": "0.9.2", "description": "The initializer blockera any application on wordpress site.", "autoload": { "psr-4": { - "Blockera\\Bootstrap\\": "php/" + "Blockera\\Bootstrap\\": "php/" } } -} \ No newline at end of file +} diff --git a/packages/bootstrap/package.json b/packages/bootstrap/package.json index 7899f2043..5210e069f 100644 --- a/packages/bootstrap/package.json +++ b/packages/bootstrap/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/bootstrap", - "version": "1.0.0", + "version": "0.9.2", "description": "The initializer react application on wordpress site and block editor.", "author": "The Blockera Core Contributors", "license": "ISC", @@ -8,7 +8,7 @@ "blockera", "core", "bootstrap", - "initliazer" + "initliazer" ], "homepage": "https://github.com/blockeraai/blockera/blob/master/packages/bootstrap/README.md", "repository": { @@ -23,4 +23,4 @@ "node": ">=12" }, "main": "js/index.js" -} \ No newline at end of file +} diff --git a/packages/classnames/package.json b/packages/classnames/package.json index 5b9a8f7a8..6200e2a16 100644 --- a/packages/classnames/package.json +++ b/packages/classnames/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/classnames", - "version": "1.0.0", + "version": "0.9.2", "description": "Css classnames generator for Blockera Core.", "author": "The Blockera Contributors", "license": "ISC", @@ -12,11 +12,11 @@ "homepage": "https://github.com/blockeraai/blockera/blob/master/packages/classnames/README.md", "repository": { "type": "git", - "url": "https://github.com/blockeraai/blockera", + "url": "https://github.com/blockeraai/blockera", "directory": "packages/classnames" }, "bugs": { - "url": "https://github.com/blockeraai/blockera/issues" + "url": "https://github.com/blockeraai/blockera/issues" }, "engines": { "node": ">=12" diff --git a/packages/controls/CHANGELOG.md b/packages/controls/CHANGELOG.md index 86bc0ebe1..6ede73136 100644 --- a/packages/controls/CHANGELOG.md +++ b/packages/controls/CHANGELOG.md @@ -7,3 +7,4 @@ ### Improvements - Improve transform controls popover design. +- Notice control design improvement. diff --git a/packages/controls/js/libs/base-control/style.scss b/packages/controls/js/libs/base-control/style.scss index 397f3519f..a01bf657e 100644 --- a/packages/controls/js/libs/base-control/style.scss +++ b/packages/controls/js/libs/base-control/style.scss @@ -97,9 +97,13 @@ } } -*:not(.blockera-field):not(.blockera-component-flex):not(.blockera-component-grid) > .blockera-field + .blockera-component-feature-wrapper, -*:not(.blockera-field):not(.blockera-component-flex):not(.blockera-component-grid) > .blockera-component-feature-wrapper + .blockera-component-feature-wrapper, -*:not(.blockera-field):not(.blockera-component-flex):not(.blockera-component-grid) > .blockera-component-feature-wrapper + .blockera-field, -*:not(.blockera-field):not(.blockera-component-flex):not(.blockera-component-grid) > .blockera-field + .blockera-field { - margin-top: 15px; +*:not(.blockera-field):not(.blockera-component-flex):not(.blockera-component-grid) { + + & > .blockera-field + .blockera-component-feature-wrapper, + & > .blockera-component-feature-wrapper + .blockera-component-feature-wrapper, + & > .blockera-control-notice + .blockera-field, + & > .blockera-component-feature-wrapper + .blockera-field, + & > .blockera-field + .blockera-field { + margin-top: 15px; + } } diff --git a/packages/controls/package.json b/packages/controls/package.json index a25f862dd..f209a9937 100644 --- a/packages/controls/package.json +++ b/packages/controls/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/controls", - "version": "1.0.0", + "version": "0.9.2", "description": "UI react.js components as controls for Blockera Core.", "author": "The Contributors", "license": "ISC", @@ -16,10 +16,10 @@ "directory": "packages/controls" }, "bugs": { - "url": "https://github.com/blockeraai/blockera/issues" + "url": "https://github.com/blockeraai/blockera/issues" }, "engines": { "node": ">=12" }, "main": "js/index.js" -} \ No newline at end of file +} diff --git a/packages/data-editor/composer.json b/packages/data-editor/composer.json index f2801f72c..185b8ae81 100644 --- a/packages/data-editor/composer.json +++ b/packages/data-editor/composer.json @@ -1,9 +1,10 @@ { "name": "blockera/data-editor", + "version": "0.9.2", "description": "Blockera Data Editor package to access all property value with tokenized string.", "autoload": { "psr-4": { - "Blockera\\DataEditor\\": "php/" + "Blockera\\DataEditor\\": "php/" } } -} \ No newline at end of file +} diff --git a/packages/data-editor/package.json b/packages/data-editor/package.json index e8a3dab13..9ebc353c0 100644 --- a/packages/data-editor/package.json +++ b/packages/data-editor/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/data-editor", - "version": "1.0.0", + "version": "0.9.2", "description": "Blockera Data Editor package to access and manipulate all property value with tokenized string.", "author": "The Blockera Contributors", "license": "ISC", @@ -8,7 +8,7 @@ "blockera", "wordpress", "gutenberg", - "data-editor", + "data-editor", "data-extractor" ], "homepage": "https://github.com/blockeraai/blockera/blob/master/packages/data-editor/README.md", diff --git a/packages/data/composer.json b/packages/data/composer.json index b0575c9b3..80df96f4a 100644 --- a/packages/data/composer.json +++ b/packages/data/composer.json @@ -1,9 +1,10 @@ { "name": "blockera/data", + "version": "0.9.2", "description": "Core Data is a data module intended to simplify access and manipulation to core WordPress and entities.", "autoload": { "psr-4": { - "Blockera\\Data\\": "php/" + "Blockera\\Data\\": "php/" } } -} \ No newline at end of file +} diff --git a/packages/data/package.json b/packages/data/package.json index b2f19befb..ff095064f 100644 --- a/packages/data/package.json +++ b/packages/data/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/data", - "version": "1.0.0", + "version": "0.9.2", "description": "Core Data is a data module intended to simplify access and manipulation to core WordPress and entities.", "author": "The Contributors", "license": "ISC", @@ -14,7 +14,7 @@ "directory": "packages/data" }, "bugs": { - "url": "https://github.com/blockeraai/blockera/issues" + "url": "https://github.com/blockeraai/blockera/issues" }, "engines": { "node": ">=12" diff --git a/packages/dev-cypress/package.json b/packages/dev-cypress/package.json index d03bbc126..9868ea0ae 100644 --- a/packages/dev-cypress/package.json +++ b/packages/dev-cypress/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/dev-cypress", - "version": "1.0.0", + "version": "0.9.2", "description": "Blockera Cypress config and helpers", "main": "js/index.js", "keywords": [ diff --git a/packages/dev-jest/package.json b/packages/dev-jest/package.json index c53ce2cda..64f0050d3 100644 --- a/packages/dev-jest/package.json +++ b/packages/dev-jest/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/dev-jest", - "version": "1.0.0", + "version": "0.9.2", "description": "Blockera Jest config and mocks", "main": "js/index.js", "keywords": [ diff --git a/packages/dev-phpunit/composer.json b/packages/dev-phpunit/composer.json index 40c8ef796..770216c50 100644 --- a/packages/dev-phpunit/composer.json +++ b/packages/dev-phpunit/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/dev-phpunit", + "version": "0.9.2", "description": "The development phpunit package of blockera", "autoload-dev": { "psr-4": { diff --git a/packages/dev-phpunit/package.json b/packages/dev-phpunit/package.json index 6d6b51543..eeac01eff 100644 --- a/packages/dev-phpunit/package.json +++ b/packages/dev-phpunit/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/dev-phpunit", - "version": "1.0.0", + "version": "0.9.2", "description": "Blockera PHPUnit package.", "author": "The Blockera Core Contributors", "license": "ISC", diff --git a/packages/dev-storybook/package.json b/packages/dev-storybook/package.json index 066304986..39e708f5e 100644 --- a/packages/dev-storybook/package.json +++ b/packages/dev-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/dev-storybook", - "version": "1.0.0", + "version": "0.9.2", "description": "Blockera Storybook Default Modules", "main": "js/index.js", "keywords": [ diff --git a/packages/dev-tools/package.json b/packages/dev-tools/package.json index 8a5e9e904..847948d58 100644 --- a/packages/dev-tools/package.json +++ b/packages/dev-tools/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/dev-tools", - "version": "1.0.0", + "version": "0.9.2", "description": "Blockera DevTools for developers", "main": "js/index.js", "keywords": [ diff --git a/packages/editor/composer.json b/packages/editor/composer.json index 1b2f01060..3979ad4ab 100644 --- a/packages/editor/composer.json +++ b/packages/editor/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/editor", + "version": "0.9.2", "description": "Blockera Editor php package to implements WordPress block and site editor functionalities on admin and front-end.", "autoload": { "psr-4": { diff --git a/packages/editor/js/canvas-editor/components/preview.js b/packages/editor/js/canvas-editor/components/preview.js index 9ba9d0741..38f5c4c0d 100644 --- a/packages/editor/js/canvas-editor/components/preview.js +++ b/packages/editor/js/canvas-editor/components/preview.js @@ -12,7 +12,7 @@ import { useEffect } from '@wordpress/element'; * Blockera dependencies */ import { Icon } from '@blockera/icons'; -import { Tooltip } from '@blockera/controls'; +import { Tooltip, ConditionalWrapper } from '@blockera/controls'; import { controlInnerClassNames } from '@blockera/classnames'; /** @@ -105,7 +105,17 @@ export const Preview = (): MixedElement => { } return ( - + ( + + {children} + + )} + condition={isSavablePost} + >
{ > {previewButton}
-
+ ); }; diff --git a/packages/editor/js/canvas-editor/style.scss b/packages/editor/js/canvas-editor/style.scss index 6f1856974..12ace41a0 100644 --- a/packages/editor/js/canvas-editor/style.scss +++ b/packages/editor/js/canvas-editor/style.scss @@ -60,7 +60,9 @@ .blockera-control-canvas-editor-preview-link { display: flex; align-items: center; + transition: var(--blockera-controls-transition); + > button, > a { padding: 0; height: 26px !important; @@ -73,6 +75,10 @@ background: none !important; } } + + &.is-disabled-preview-button { + opacity: 0.3; + } } .blockera-component-breakpoint-icon { diff --git a/packages/editor/js/canvas-editor/test/canvas-editor.e2e.cy.js b/packages/editor/js/canvas-editor/test/canvas-editor.e2e.cy.js index 73ebfb704..6a324ad95 100644 --- a/packages/editor/js/canvas-editor/test/canvas-editor.e2e.cy.js +++ b/packages/editor/js/canvas-editor/test/canvas-editor.e2e.cy.js @@ -31,15 +31,6 @@ describe('Canvas editor testing', () => { cy.getByDataTest('blockera-canvas-editor').should('exist'); }); - it('should rendered blockera canvas editor at the header top bar of Site Editor', () => { - goTo('/wp-admin/site-editor.php?canvas=edit').then(() => { - // eslint-disable-next-line - cy.wait(2000); - }); - - cy.getByDataTest('blockera-canvas-editor').should('exist'); - }); - // TODO: temporary skip! // We should double check this test suite because this is flaky test! // After fix this, we need to update Jira ISSUE status: https://blockera.atlassian.net/browse/BPB-138 @@ -67,4 +58,13 @@ describe('Canvas editor testing', () => { cy.getByDataTest('blockera-canvas-editor').should('exist'); }); }); + + it('should rendered blockera canvas editor at the header top bar of Site Editor', () => { + goTo('/wp-admin/site-editor.php?canvas=edit').then(() => { + // eslint-disable-next-line + cy.wait(2000); + }); + + cy.getByDataTest('blockera-canvas-editor').should('exist'); + }); }); diff --git a/packages/editor/js/extensions/components/block-dropdown-all-menu.js b/packages/editor/js/extensions/components/block-dropdown-all-menu.js index b1f7beb7a..f60f03598 100644 --- a/packages/editor/js/extensions/components/block-dropdown-all-menu.js +++ b/packages/editor/js/extensions/components/block-dropdown-all-menu.js @@ -39,7 +39,7 @@ export const BlockDropdownAllMenu = ({ return ( { setBlockExtensionsStatus(!isActive); @@ -57,12 +57,12 @@ export const BlockDropdownAllMenu = ({ icon="blockera" iconSize="18" /> - {'Blockera ' + __('Block', 'blockera')} + {__('Advanced Mode', 'blockera')} { setBlockExtensionsStatus(!isActive); @@ -80,7 +80,7 @@ export const BlockDropdownAllMenu = ({ icon="wordpress" iconSize="18" /> - {__('WordPress Core Block', 'blockera')} + {__('Basic Mode', 'blockera')} diff --git a/packages/editor/js/extensions/components/block-icon.js b/packages/editor/js/extensions/components/block-icon.js index ec2d6c2f1..13ce283ca 100644 --- a/packages/editor/js/extensions/components/block-icon.js +++ b/packages/editor/js/extensions/components/block-icon.js @@ -32,6 +32,9 @@ export const BlockIcon = ({ className={'blockera-block-icon blockera-main-icon'} data-test={ariaLabel} aria-label={ariaLabel} + style={{ + display: 'none', + }} /> diff --git a/packages/editor/js/extensions/components/style.scss b/packages/editor/js/extensions/components/style.scss index c3ea77f49..304454814 100644 --- a/packages/editor/js/extensions/components/style.scss +++ b/packages/editor/js/extensions/components/style.scss @@ -86,7 +86,7 @@ .block-editor-inserter__panel-content { .blockera-block-icon { - display: block; + display: block !important; top: 15px; right: 20px; margin-right: -7px; @@ -119,7 +119,7 @@ .blockera-block-icon.blockera-main-icon { color: currentColor; - display: block; + display: block !important; opacity: 0.2; top: -10px; right: -10px; @@ -136,7 +136,7 @@ position: relative; .blockera-block-icon.blockera-main-icon { - display: block; + display: block !important; opacity: 0.2; --icon-size: 20px; top: 50%; @@ -155,7 +155,7 @@ position: relative; .blockera-block-icon { - display: block; + display: block !important; opacity: 0.2; --icon-size: 20px; top: 50%; diff --git a/packages/editor/js/extensions/components/test/block-partials.e2e.cy.js b/packages/editor/js/extensions/components/test/block-partials.e2e.cy.js index ce74aebb8..bcde25195 100644 --- a/packages/editor/js/extensions/components/test/block-partials.e2e.cy.js +++ b/packages/editor/js/extensions/components/test/block-partials.e2e.cy.js @@ -41,7 +41,7 @@ describe('Block Partials Testing ...', () => { cy.get('.components-popover') .last() .within(() => { - cy.getByDataTest('Gutenberg Block').click(); + cy.getByDataTest('basic-mode-block').click(); }); cy.getByAriaLabel('Styles').click(); diff --git a/packages/editor/js/extensions/libs/flex-child/extension.js b/packages/editor/js/extensions/libs/flex-child/extension.js index 23436f9ea..b0ce1ee49 100644 --- a/packages/editor/js/extensions/libs/flex-child/extension.js +++ b/packages/editor/js/extensions/libs/flex-child/extension.js @@ -375,7 +375,7 @@ export const FlexChildExtension: ComponentType = memo( columns="1fr 2.65fr" label={__('Self Order', 'blockera')} className={ - 'items-flex-direction-' + + 'items-flex-gap items-flex-direction-' + values.blockeraFlexDirection } options={[ diff --git a/packages/editor/js/extensions/libs/flex-child/style.scss b/packages/editor/js/extensions/libs/flex-child/style.scss index 4a6eb1f68..0cbf734fb 100644 --- a/packages/editor/js/extensions/libs/flex-child/style.scss +++ b/packages/editor/js/extensions/libs/flex-child/style.scss @@ -21,4 +21,14 @@ transform: rotate(0deg); } } + + &.items-flex-direction-column.items-flex-gap { + + .blockera-control-toggle-select { + + svg { + transform: rotate(90deg); + } + } + } } diff --git a/packages/editor/js/extensions/libs/shared/index.js b/packages/editor/js/extensions/libs/shared/index.js index 8883b1c2e..f0ca781aa 100644 --- a/packages/editor/js/extensions/libs/shared/index.js +++ b/packages/editor/js/extensions/libs/shared/index.js @@ -591,7 +591,7 @@ export const SharedBlockExtension: ComponentType = memo( setSettings={handleOnChangeSettings} /> - {directParentBlock?.innerBlocks.length && + {directParentBlock?.innerBlocks?.length > 0 && directParentBlock?.attributes .blockeraDisplay === 'flex' && ( { expect(undefined).to.be.equal(getSelectedBlock(data, 'align')); }); }); + + it('Changing align from block toolbar affects the Blockera text align', () => { + appendBlocks( + ` +

Test paragraph...

+` + ); + + // Select target block + cy.getBlock('core/paragraph').click(); + + // + // Change align to left + // + cy.get('button[aria-label="Align text"]').click(); + cy.get('div[aria-label="Align text"] button').eq(0).click(); + + // + // assert values + // + + // WP data should come to Blockera + getWPDataObject().then((data) => { + expect('left').to.be.equal( + getSelectedBlock(data, 'blockeraTextAlign') + ); + + expect('left').to.be.equal(getSelectedBlock(data, 'align')); + }); + + // + // Change align to center + // + cy.get('button[aria-label="Align text"]').click(); + cy.get('div[aria-label="Align text"] button').eq(1).click(); + + // + // assert values + // + + // WP data should come to Blockera + getWPDataObject().then((data) => { + expect('center').to.be.equal( + getSelectedBlock(data, 'blockeraTextAlign') + ); + + expect('center').to.be.equal(getSelectedBlock(data, 'align')); + }); + + // + // Change align to center + // + cy.get('button[aria-label="Align text"]').click(); + cy.get('div[aria-label="Align text"] button').eq(2).click(); + + // + // assert values + // + + // WP data should come to Blockera + getWPDataObject().then((data) => { + expect('right').to.be.equal( + getSelectedBlock(data, 'blockeraTextAlign') + ); + + expect('right').to.be.equal(getSelectedBlock(data, 'align')); + }); + }); }); describe('Heading Block', () => { @@ -178,5 +246,77 @@ describe('Text Align → WP Compatibility', () => { ); }); }); + + it('Changing align from block toolbar affects the Blockera text align', () => { + appendBlocks( + ` +

A commitment to innovation and sustainability

+` + ); + + // Select target block + cy.getBlock('core/heading').click(); + + // + // Change align to left + // + cy.get('button[aria-label="Align text"]').click(); + cy.get('div[aria-label="Align text"] button').eq(0).click(); + + // + // assert values + // + + // WP data should come to Blockera + getWPDataObject().then((data) => { + expect('left').to.be.equal( + getSelectedBlock(data, 'blockeraTextAlign') + ); + + expect('left').to.be.equal(getSelectedBlock(data, 'textAlign')); + }); + + // + // Change align to center + // + cy.get('button[aria-label="Align text"]').click(); + cy.get('div[aria-label="Align text"] button').eq(1).click(); + + // + // assert values + // + + // WP data should come to Blockera + getWPDataObject().then((data) => { + expect('center').to.be.equal( + getSelectedBlock(data, 'blockeraTextAlign') + ); + + expect('center').to.be.equal( + getSelectedBlock(data, 'textAlign') + ); + }); + + // + // Change align to center + // + cy.get('button[aria-label="Align text"]').click(); + cy.get('div[aria-label="Align text"] button').eq(2).click(); + + // + // assert values + // + + // WP data should come to Blockera + getWPDataObject().then((data) => { + expect('right').to.be.equal( + getSelectedBlock(data, 'blockeraTextAlign') + ); + + expect('right').to.be.equal( + getSelectedBlock(data, 'textAlign') + ); + }); + }); }); }); diff --git a/packages/editor/package.json b/packages/editor/package.json index b26d38eef..12f88ef85 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/editor", - "version": "1.0.0", + "version": "0.9.2", "description": "A editor package to includes high level components inside WordPress Block Editor.", "author": "The Blockera Contributors", "license": "ISC", @@ -14,7 +14,7 @@ "directory": "packages/editor" }, "bugs": { - "url": "https://github.com/blockeraai/blockera/issues" + "url": "https://github.com/blockeraai/blockera/issues" }, "engines": { "node": ">=12" diff --git a/packages/editor/php/StyleDefinitions/Layout.php b/packages/editor/php/StyleDefinitions/Layout.php index 4e8474187..34ed4c029 100644 --- a/packages/editor/php/StyleDefinitions/Layout.php +++ b/packages/editor/php/StyleDefinitions/Layout.php @@ -171,8 +171,6 @@ protected function css( array $setting ): array { break; } - $this->setCss( $declaration ); - /** * If gap type is both and the current display is flex or grid * then we use gap property to but still WP is creating gap with `margin-block-start` and we have to remove it. @@ -186,6 +184,10 @@ protected function css( array $setting ): array { 'margin-block-start' => '0', ] ); + + } else { + + $this->setCss( $declaration ); } return $this->css; @@ -254,7 +256,7 @@ public function setSelector( string $support ): void { parent::setSelector( 'margin-block-start' ); - $this->selector .= ' > * + *'; + $this->selector = blockera_append_css_selector_suffix( $this->selector, ' > * + *' ); return; } diff --git a/packages/editor/php/helpers.php b/packages/editor/php/helpers.php index 3d33b18a9..ff733f289 100644 --- a/packages/editor/php/helpers.php +++ b/packages/editor/php/helpers.php @@ -411,6 +411,38 @@ function blockera_get_compatible_block_css_selector( array $selectors, string $f } } +if ( ! function_exists( 'blockera_append_css_selector_suffix' ) ) { + + /** + * Concat block css selector with suffix. + * + * @param string $selector The css selector. + * @param string $suffix The suffix string to concat with recieved selector. + * + * @return string the css selector. + */ + function blockera_append_css_selector_suffix( string $selector, string $suffix ): string { + + if ( empty( trim( $selector ) ) || empty( trim( $suffix ) ) ) { + + return $selector; + } + + $selectors = explode( ',', $selector ); + + return implode( + ', ', + array_map( + function ( string $item ) use ( $suffix ): string { + + return trim( $item ) . $suffix; + }, + $selectors + ) + ); + } +} + if ( ! function_exists( 'blockera_append_root_block_css_selector' ) ) { /** diff --git a/packages/editor/php/tests/TestHelpers.php b/packages/editor/php/tests/TestHelpers.php index 38b2a9032..5391985fc 100644 --- a/packages/editor/php/tests/TestHelpers.php +++ b/packages/editor/php/tests/TestHelpers.php @@ -329,6 +329,78 @@ public function testSelectorStartingWithDot() { $this->assertEquals( '.my-root.my-class', $result ); } + /** + * Test single selector with a suffix. + */ + public function testSingleSelectorWithSuffix() { + + $selector = '.my-class'; + $suffix = '-active'; + $expected = '.my-class-active'; + + $this->assertSame( $expected, blockera_append_css_selector_suffix( $selector, $suffix ) ); + } + + /** + * Test multiple selectors with a suffix. + */ + public function testMultipleSelectorsWithSuffix() { + + $selector = '.my-class, #my-id'; + $suffix = '-hover'; + $expected = '.my-class-hover, #my-id-hover'; + + $this->assertSame( $expected, blockera_append_css_selector_suffix( $selector, $suffix ) ); + } + + /** + * Test empty selector. + */ + public function testItShouldAppendSuffixIntoEmptySelector() { + + $selector = ''; + $suffix = '-test'; + $expected = ''; + + $this->assertSame( $expected, blockera_append_css_selector_suffix( $selector, $suffix ) ); + } + + /** + * Test empty suffix. + */ + public function testEmptySuffix() { + + $selector = '.my-class, #my-id'; + $suffix = ''; + $expected = '.my-class, #my-id'; + + $this->assertSame( $expected, blockera_append_css_selector_suffix( $selector, $suffix ) ); + } + + /** + * Test with whitespace in selectors. + */ + public function testWhitespaceInSelectors() { + + $selector = '.my-class , #my-id'; + $suffix = '-modified'; + $expected = '.my-class-modified, #my-id-modified'; + + $this->assertSame( $expected, blockera_append_css_selector_suffix( $selector, $suffix ) ); + } + + /** + * Test complex selectors with a suffix. + */ + public function testComplexSelectorsWithSuffix() { + + $selector = '.my-class > .inner-class, #my-id + .another-class'; + $suffix = '-active'; + $expected = '.my-class > .inner-class-active, #my-id + .another-class-active'; + + $this->assertSame( $expected, blockera_append_css_selector_suffix( $selector, $suffix ) ); + } + public function tear_down() { // Removes test block types registered by test cases. diff --git a/packages/env/composer.json b/packages/env/composer.json index fa3dd6a2f..4f1204dd8 100644 --- a/packages/env/composer.json +++ b/packages/env/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/env", + "version": "0.9.2", "description": "The env package to read environment variables of json related files at the root of any project.", "autoload": { "psr-4": { diff --git a/packages/env/package.json b/packages/env/package.json index c3b8f1f9f..ef3c777bc 100644 --- a/packages/env/package.json +++ b/packages/env/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/env", - "version": "1.0.0", + "version": "0.9.2", "description": "The env package to read environment variables of json related files at the root of any project.", "author": "The Blockera Contributors", "license": "ISC", diff --git a/packages/exceptions/composer.json b/packages/exceptions/composer.json index c25cdb1e2..af252fc75 100644 --- a/packages/exceptions/composer.json +++ b/packages/exceptions/composer.json @@ -1,9 +1,10 @@ { "name": "blockera/exceptions", + "version": "0.9.2", "description": "The blockera exceptions package.", "autoload": { "psr-4": { - "Blockera\\Exceptions\\": "php/" + "Blockera\\Exceptions\\": "php/" } } -} \ No newline at end of file +} diff --git a/packages/exceptions/package.json b/packages/exceptions/package.json index abd9740b9..7fdb85811 100644 --- a/packages/exceptions/package.json +++ b/packages/exceptions/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/exceptions", - "version": "1.0.0", + "version": "0.9.2", "description": "Blockera exceptions package.", "author": "The Blockera Core Contributors", "license": "ISC", diff --git a/packages/freemius-sdk/composer.json b/packages/freemius-sdk/composer.json index dfc8c23b0..80686bd79 100644 --- a/packages/freemius-sdk/composer.json +++ b/packages/freemius-sdk/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/freemius-sdk", + "version": "0.9.2", "description": "The Blockera Freemius SDK.", "autoload": { "psr-4": { diff --git a/packages/http/composer.json b/packages/http/composer.json index 26d2bd0fe..4d941f440 100644 --- a/packages/http/composer.json +++ b/packages/http/composer.json @@ -1,9 +1,10 @@ { "name": "blockera/http", + "version": "0.9.2", "description": "The blockera http abstraction package.", "autoload": { "psr-4": { - "Blockera\\Http\\": "php/" + "Blockera\\Http\\": "php/" } } -} \ No newline at end of file +} diff --git a/packages/http/package.json b/packages/http/package.json index 1a995147b..4a89ba263 100644 --- a/packages/http/package.json +++ b/packages/http/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/http", - "version": "1.0.0", + "version": "0.9.2", "description": "Blockera http package.", "author": "The Blockera Core Contributors", "license": "ISC", diff --git a/packages/icons/package.json b/packages/icons/package.json index 7f5e5f4c1..f45693af9 100644 --- a/packages/icons/package.json +++ b/packages/icons/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/icons", - "version": "1.0.0", + "version": "0.9.2", "description": "The blockera icons package.", "author": "The Blockera Contributors", "license": "ISC", diff --git a/packages/utils/composer.json b/packages/utils/composer.json index 2bf66e640..9c3b7d03b 100644 --- a/packages/utils/composer.json +++ b/packages/utils/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/utils", + "version": "0.9.2", "description": "The utilities for JavaScript and PHP blockera applications.", "autoload": { "psr-4": { diff --git a/packages/utils/package.json b/packages/utils/package.json index 6a8d33df7..5dd00bd40 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/utils", - "version": "1.0.0", + "version": "0.9.2", "description": "The utilities for JavaScript and PHP blockera applications.", "author": "The Blockera Contributors", "license": "ISC", diff --git a/packages/wordpress/composer.json b/packages/wordpress/composer.json index 88ae29351..b348a6c07 100644 --- a/packages/wordpress/composer.json +++ b/packages/wordpress/composer.json @@ -1,5 +1,6 @@ { "name": "blockera/wordpress", + "version": "0.9.2", "description": "The utilities for blockera on WordPress CMS.", "autoload": { "psr-4": { diff --git a/packages/wordpress/package.json b/packages/wordpress/package.json index 43c6c1803..862a236a5 100644 --- a/packages/wordpress/package.json +++ b/packages/wordpress/package.json @@ -1,6 +1,6 @@ { "name": "@blockera/wordpress", - "version": "1.0.0", + "version": "0.9.2", "description": "The utilities for blockera on WordPress CMS.", "author": "The Blockera Contributors", "license": "ISC",