diff --git a/.ddev/commands/web/install-magento b/.ddev/commands/web/install-magento index 2ead7166..473f48fc 100755 --- a/.ddev/commands/web/install-magento +++ b/.ddev/commands/web/install-magento @@ -45,11 +45,10 @@ composer create-project \ magento-temp # Create Magento Folder if not exist -if [[ ! -d "${MAGENTO_FOLDER}" ]]; then +if [[ ! -d ${MAGENTO_FOLDER} ]]; then mkdir -p "${MAGENTO_FOLDER}" fi - # copy everything from magento-temp into magento folder cp -a magento-temp/. "${MAGENTO_FOLDER}/" @@ -127,9 +126,9 @@ bin/magento setup:upgrade HYVA_THEME_ID=$(mysql --host=db --user=db --password=db db \ --skip-column-names --silent \ --execute="SELECT theme_id FROM theme WHERE theme_path = 'Hyva/default' LIMIT 1" 2>/dev/null) || HYVA_THEME_ID="" -if [[ -n "$HYVA_THEME_ID" ]]; then +if [[ -n ${HYVA_THEME_ID} ]]; then echo "Setting Hyvä Default (ID: ${HYVA_THEME_ID}) as storefront theme..." - bin/magento config:set design/theme/theme_id "$HYVA_THEME_ID" + bin/magento config:set design/theme/theme_id "${HYVA_THEME_ID}" bin/magento cache:clean config else echo "WARNING: Hyvä Default theme not found in database, skipping theme activation." diff --git a/.ddev/commands/web/mago b/.ddev/commands/web/mago index 96a5acbe..5db35919 100755 --- a/.ddev/commands/web/mago +++ b/.ddev/commands/web/mago @@ -1,19 +1,19 @@ #!/usr/bin/env bash -## Description: Run Mago (PHP analysis, formatting, and linting) +set -euo pipefail + +## Description: Run Mago (PHP linter and formatter) ## Usage: mago [options] -## Example: "ddev mago" +## Example: ddev mago lint +## Example: ddev mago fmt +## Example: ddev mago fmt --dry-run -set -e +cd /var/www/html -# Require Mago to be installed (avoid executing remote install scripts automatically) -if ! command -v mago >/dev/null 2>&1; then - echo "mago is not installed. Please install it first: https://carthage.software/mago" - exit 1 +# Mago is a require-dev dependency of the module itself. +if [[ ! -x vendor/bin/mago ]]; then + echo "mago not found. Installing module dev dependencies..." + composer install --no-interaction fi -# Change to module root where mago.toml is found -cd /var/www/html - -# Run Mago with provided arguments -mago "$@" +vendor/bin/mago "$@" diff --git a/.ddev/commands/web/phpcbf b/.ddev/commands/web/phpcbf index 9a6899be..0a5265df 100755 --- a/.ddev/commands/web/phpcbf +++ b/.ddev/commands/web/phpcbf @@ -1,42 +1,19 @@ #!/usr/bin/env bash -## Description: Run phpcbf (auto-fix coding standard issues) -## Usage: phpcbf [path] +set -euo pipefail + +## Description: Run PHP Code Beautifier (auto-fix Magento2 standard violations) +## Usage: phpcbf [path] [flags] ## Example: ddev phpcbf ## Example: ddev phpcbf src/Service/StaticContentCleaner.php -## Example: ddev phpcbf vendor/openforgeproject/mageforge/src/Block - -cd /var/www/html/magento || exit 1 - -PHPCBF_BIN="vendor-bin/coding-standard/vendor/bin/phpcbf" -PHPCBF_FALLBACK="vendor-bin/coding-standard/vendor/squizlabs/php_codesniffer/bin/phpcbf" - -if [[ ! -x "${PHPCBF_BIN}" ]]; then - PHPCBF_BIN="${PHPCBF_FALLBACK}" -fi - -if [[ ! -x "${PHPCBF_BIN}" ]]; then - echo "phpcbf not found. Installing coding-standard toolchain..." - composer bin coding-standard install || exit 1 - PHPCBF_BIN="${PHPCBF_FALLBACK}" -fi - -if [[ ! -x "${PHPCBF_BIN}" ]]; then - echo "phpcbf binary still missing. Expected ${PHPCBF_FALLBACK}." - exit 1 -fi -# Set target path - default to vendor/openforgeproject/mageforge/src if not provided -TARGET_PATH="vendor/openforgeproject/mageforge/src" -if [[ $# -gt 0 ]] && [[ ! "$1" =~ ^- ]]; then - TARGET_PATH="$1" - shift # Remove the first argument +cd /var/www/html - # If path doesn't exist from magento dir, try from workspace root - if [[ ! -e "${TARGET_PATH}" ]] && [[ -e "../${TARGET_PATH}" ]]; then - TARGET_PATH="../${TARGET_PATH}" - fi +# The coding standard is a require-dev dependency of the module itself. +if [[ ! -x vendor/bin/phpcbf ]]; then + echo "phpcbf not found. Installing module dev dependencies..." + composer install --no-interaction fi -# Run PHPCBF with optional additional flags -"${PHPCBF_BIN}" -p -s --standard=Magento2 "$@" "${TARGET_PATH}" +# The ruleset (phpcs.xml.dist) defines the standard and default file list. +vendor/bin/phpcbf -p "$@" diff --git a/.ddev/commands/web/phpcs b/.ddev/commands/web/phpcs index f2b80066..f5c50b5f 100755 --- a/.ddev/commands/web/phpcs +++ b/.ddev/commands/web/phpcs @@ -1,45 +1,19 @@ #!/usr/bin/env bash -## Description: Run phpcs -## Usage: phpcs [path] +set -euo pipefail + +## Description: Run PHP CodeSniffer (Magento2 standard) on the module source +## Usage: phpcs [path] [flags] ## Example: ddev phpcs ## Example: ddev phpcs src/Service/StaticContentCleaner.php -## Example: ddev phpcs vendor/openforgeproject/mageforge/src/Block - -cd /var/www/html/magento || exit 1 - -PHPCS_BIN="vendor-bin/coding-standard/vendor/bin/phpcs" -PHPCS_FALLBACK="vendor-bin/coding-standard/vendor/squizlabs/php_codesniffer/bin/phpcs" - -if [[ ! -x "${PHPCS_BIN}" ]]; then - PHPCS_BIN="${PHPCS_FALLBACK}" -fi - -if [[ ! -x "${PHPCS_BIN}" ]]; then - echo "phpcs not found. Installing coding-standard toolchain..." - composer bin coding-standard install || exit 1 - PHPCS_BIN="${PHPCS_FALLBACK}" -fi - -if [[ ! -x "${PHPCS_BIN}" ]]; then - echo "phpcs binary still missing. Expected ${PHPCS_FALLBACK}." - exit 1 -fi -# Set target path - default to vendor/openforgeproject/mageforge/src if not provided -TARGET_PATH="vendor/openforgeproject/mageforge/src" -if [[ $# -gt 0 ]] && [[ ! "$1" =~ ^- ]]; then - TARGET_PATH="$1" - shift # Remove the first argument +cd /var/www/html - # If path starts with 'src/', convert to vendor path - if [[ "${TARGET_PATH}" =~ ^src/ ]]; then - TARGET_PATH="vendor/openforgeproject/mageforge/${TARGET_PATH}" - # If path doesn't exist from magento dir, try from workspace root - elif [[ ! -e "${TARGET_PATH}" ]] && [[ -e "../${TARGET_PATH}" ]]; then - TARGET_PATH="../${TARGET_PATH}" - fi +# The coding standard is a require-dev dependency of the module itself. +if [[ ! -x vendor/bin/phpcs ]]; then + echo "phpcs not found. Installing module dev dependencies..." + composer install --no-interaction fi -# Run PHPCS with optional additional flags -"${PHPCS_BIN}" -p -s --standard=Magento2 "$@" "${TARGET_PATH}" +# The ruleset (phpcs.xml.dist) defines the standard and default file list. +vendor/bin/phpcs -p -s "$@" diff --git a/.ddev/commands/web/phpstan b/.ddev/commands/web/phpstan index 889bd54d..de70ef59 100755 --- a/.ddev/commands/web/phpstan +++ b/.ddev/commands/web/phpstan @@ -11,45 +11,40 @@ cd /var/www/html/magento || exit 1 # Check if PHPStan is installed if [[ ! -f vendor/bin/phpstan ]]; then - echo "PHPStan not found. Installing PHPStan with Magento extension..." + echo "PHPStan not found. Installing PHPStan with Magento extension..." - # Allow PHPStan extension installer - composer config --no-plugins allow-plugins.phpstan/extension-installer true + # Allow PHPStan extension installer + composer config --no-plugins allow-plugins.phpstan/extension-installer true - # Install PHPStan and Magento extension - composer require --dev --no-update bitexpert/phpstan-magento phpstan/phpstan:^2.0 phpstan/extension-installer + # Install PHPStan and Magento extension + composer require --dev --no-update bitexpert/phpstan-magento phpstan/phpstan:^2.0 phpstan/extension-installer - # Update dependencies (limit scope to PHPStan packages) - composer update bitexpert/phpstan-magento phpstan/phpstan phpstan/extension-installer --with-dependencies + # Update dependencies (limit scope to PHPStan packages) + composer update bitexpert/phpstan-magento phpstan/phpstan phpstan/extension-installer --with-dependencies - echo "PHPStan installation complete." + echo "PHPStan installation complete." fi -# Set target path - prefer app/code mount over vendor copy if not provided or if it's a flag -if [[ -d "app/code/OpenForgeProject" ]]; then - DEFAULT_TARGET_PATH="app/code/OpenForgeProject" -else - DEFAULT_TARGET_PATH="vendor/openforgeproject/mageforge/src" -fi -TARGET_PATH="${DEFAULT_TARGET_PATH}" -if [[ $# -gt 0 ]] && [[ ! "$1" =~ ^- ]]; then +# Default target: the module source, symlinked into vendor via the Composer path repository +TARGET_PATH="vendor/openforgeproject/mageforge/src" +if [[ $# -gt 0 ]] && [[ ! $1 =~ ^- ]]; then TARGET_PATH="$1" shift # Remove the first argument # If path doesn't exist from magento dir, try from workspace root - if [[ ! -e "${TARGET_PATH}" ]] && [[ -e "../${TARGET_PATH}" ]]; then + if [[ ! -e ${TARGET_PATH} ]] && [[ -e "../${TARGET_PATH}" ]]; then TARGET_PATH="../${TARGET_PATH}" fi fi # Determine config file location if [[ -f "vendor/openforgeproject/mageforge/phpstan.neon" ]]; then - PHPSTAN_CONFIG="vendor/openforgeproject/mageforge/phpstan.neon" + PHPSTAN_CONFIG="vendor/openforgeproject/mageforge/phpstan.neon" elif [[ -f "../phpstan.neon" ]]; then - PHPSTAN_CONFIG="../phpstan.neon" + PHPSTAN_CONFIG="../phpstan.neon" else - echo "PHPStan config not found at vendor/openforgeproject/mageforge/phpstan.neon or ../phpstan.neon" - exit 1 + echo "PHPStan config not found at vendor/openforgeproject/mageforge/phpstan.neon or ../phpstan.neon" + exit 1 fi # Run PHPStan with the same configuration as CI pipeline diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..cc2ba22b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,24 @@ +# EditorConfig: https://editorconfig.org +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +# Match Prettier's output (2-space indent) for everything it formats +[*.{js,mjs,css,json,yml,yaml,md}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[Makefile] +indent_style = tab + +# DDEV command scripts are formatted by shfmt with tabs +[.ddev/commands/**] +indent_style = tab diff --git a/.gitattributes b/.gitattributes index ca0c2489..0589acd0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,6 +6,8 @@ /docs/ export-ignore /phpstan.neon export-ignore /mago.toml export-ignore +/phpcs.xml.dist export-ignore +/.editorconfig export-ignore /CONTRIBUTING.md export-ignore /context7.json export-ignore /release-please-config.json export-ignore diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 0934522b..b7f850c8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,10 +1,9 @@ --- name: Bug report about: Create a report to help us improve -title: 'Bug Report: ' +title: "Bug Report: " labels: bug -assignees: '' - +assignees: "" --- **Describe the bug** @@ -12,6 +11,7 @@ A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. ... @@ -22,11 +22,12 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Environment (please complete the following information):** - - MageForge Version - - Magento Version - - Hyva Version - - OS: [e.g. MacOS, Linux, ... ] - - Terminal Name [e.G. Iterm, Powershell, ... ] + +- MageForge Version +- Magento Version +- Hyva Version +- OS: [e.g. MacOS, Linux, ... ] +- Terminal Name [e.G. Iterm, Powershell, ... ] **Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 1ebc1e90..5e437c39 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,10 +1,9 @@ --- name: Feature request about: Suggest an idea for this project -title: 'Feature-Request: ' +title: "Feature-Request: " labels: feature-request -assignees: '' - +assignees: "" --- **Magento 2 Version** diff --git a/.github/assets/cli-chooser.png b/.github/assets/cli-chooser.png index 8593bbe4..ddf2abbd 100644 Binary files a/.github/assets/cli-chooser.png and b/.github/assets/cli-chooser.png differ diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 4a52d610..18c12c10 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -2,7 +2,7 @@ ## Structure -``` +```text magento/ # Magento 2 installation (DDEV) src/ Console/Command # CLI commands (extend AbstractCommand) @@ -105,7 +105,7 @@ When adding an admin config field, all steps must be done together: Standalone Alpine.js component (`mageforgeToolbar`), separate from Inspector. -``` +```text src/view/frontend/web/js/ toolbar.js # Entry point toolbar/ @@ -136,7 +136,7 @@ Trunk also runs checkov (see `.trunk/trunk.yaml`). ## Git -``` +```text fix/ feature/ # - diff --git a/.github/labeler.yml b/.github/labeler.yml index e925d028..50bc53fc 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,27 +1,29 @@ +# actions/labeler v5 config. +# Only changed-files, head-branch and base-branch are supported here; head-branch +# values are regexes (not globs). Labeling by PR title is handled by a separate +# step in .github/workflows/label.yml, since the action cannot match titles. + Documentation: -- changed-files: - - any-glob-to-any-file: '**/*.md' + - changed-files: + - any-glob-to-any-file: "**/*.md" Feature: - - branch: ['add-*', 'featuere-*', 'feature/**', 'feat-*', 'feature*'] - - title: ['feat:', 'feature:', 'Feature:'] + - head-branch: ["^(add|feat|feature)[/-]"] Fix: - - branch: ['fix-*', 'bugfix-*', 'fix/**', 'bugfix/**', 'fix*', 'bugfix*'] - - title: ['fix:', 'bugfix:', 'Fix:'] + - head-branch: ["^(fix|bugfix)[/-]"] Next-Release: - - branch: ['chore: release*', 'release-please*'] - - title: ['chore: release', 'Release'] + - head-branch: [^release-please] Command: -- changed-files: - - any-glob-to-any-file: 'src/Console/Command/**' + - changed-files: + - any-glob-to-any-file: src/Console/Command/** Frontend: -- changed-files: - - any-glob-to-any-file: 'src/view/frontend/**' + - changed-files: + - any-glob-to-any-file: src/view/frontend/** Theme-Builder: -- changed-files: - - any-glob-to-any-file: 'src/Service/ThemeBuilder/**' + - changed-files: + - any-glob-to-any-file: src/Service/ThemeBuilder/** diff --git a/.github/workflows/functional-tests.yml b/.github/workflows/functional-tests.yml index dac6c47d..e9d17254 100644 --- a/.github/workflows/functional-tests.yml +++ b/.github/workflows/functional-tests.yml @@ -56,7 +56,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af with: - node-version: '20' + node-version: "20" - name: Cache Composer packages id: composer-cache diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml index 7cfcc2fc..93002363 100644 --- a/.github/workflows/label.yml +++ b/.github/workflows/label.yml @@ -1,22 +1,45 @@ -# This workflow will triage pull requests and apply a label based on the -# paths that are modified in the pull request. -# -# To use this workflow, you will need to set up a .github/labeler.yml -# file with configuration. For more information, see: +# Triages pull requests and applies labels based on the changed files and the +# head-branch name (.github/labeler.yml), plus the PR title (Conventional Commits) +# in the dedicated step below. # https://github.com/actions/labeler name: Labeler on: [pull_request_target] +permissions: + contents: read + jobs: label: - runs-on: ubuntu-latest permissions: contents: read pull-requests: write steps: - - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" + - name: Label by changed files and branch name + uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + + # actions/labeler cannot match the PR title, so map Conventional Commits + # prefixes to labels here. The title is passed via env (never interpolated + # into the script) and only used as regex match data, so it cannot inject + # shell commands. + - name: Label by PR title + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} + PR_TITLE: ${{ github.event.pull_request.title }} + run: | + shopt -s nocasematch + if [[ "$PR_TITLE" =~ ^(feat|feature)(\(.+\))?!?: ]]; then + gh pr edit "$PR_NUMBER" --add-label Feature + fi + if [[ "$PR_TITLE" =~ ^(fix|bugfix)(\(.+\))?!?: ]]; then + gh pr edit "$PR_NUMBER" --add-label Fix + fi + if [[ "$PR_TITLE" =~ ^chore(\(.+\))?!?:[[:space:]]release ]]; then + gh pr edit "$PR_NUMBER" --add-label Next-Release + fi diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..8442c71e --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,54 @@ +name: Lint + +on: + pull_request: + push: + branches: [main] + +permissions: + contents: read + +jobs: + mago: + name: Mago (PHP lint + format check) + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Set up PHP + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2 + with: + php-version: "8.4" + tools: composer:v2 + + - name: Cache Composer packages + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + with: + path: ~/.composer/cache/files + key: ${{ runner.os }}-composer-lint-${{ hashFiles('composer.json') }} + restore-keys: ${{ runner.os }}-composer-lint + + - name: Install dev dependencies + run: composer install --no-interaction --no-progress + + - name: Mago lint + run: vendor/bin/mago lint + + - name: Mago format check + run: vendor/bin/mago fmt --dry-run + + trunk: + name: Trunk Check (yaml, markdown, shell, actions, …) + runs-on: ubuntu-latest + permissions: + contents: read + checks: write + + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Trunk Check + uses: trunk-io/trunk-action@04ba50e7658c81db7356da96657e6e77f220bfa3 # v1.3.1 diff --git a/.github/workflows/magento-compatibility.yml b/.github/workflows/magento-compatibility.yml index 6a0f5543..a4b8fdf6 100644 --- a/.github/workflows/magento-compatibility.yml +++ b/.github/workflows/magento-compatibility.yml @@ -18,15 +18,15 @@ jobs: fail-fast: false matrix: include: - - magento-version: "2.4.7-p10" + - magento-version: 2.4.7-p10 php-version: "8.3" - search-engine-name: "opensearch" - - magento-version: "2.4.8-p5" + search-engine-name: opensearch + - magento-version: 2.4.8-p5 php-version: "8.4" - search-engine-name: "opensearch" - - magento-version: "2.4.9" + search-engine-name: opensearch + - magento-version: 2.4.9 php-version: "8.5" - search-engine-name: "opensearch" + search-engine-name: opensearch services: mysql: diff --git a/.github/workflows/phpcs.yml b/.github/workflows/phpcs.yml index 891a0270..b81655e5 100644 --- a/.github/workflows/phpcs.yml +++ b/.github/workflows/phpcs.yml @@ -22,8 +22,18 @@ jobs: php-version: ${{ env.PHP_VERSION }} tools: composer:v2 - - name: Install Magento Coding Standard - run: composer create-project magento/magento-coding-standard --stability=dev /tmp/magento-coding-standard + - name: Cache Composer packages + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + with: + path: ~/.composer/cache/files + key: ${{ runner.os }}-composer-phpcs-${{ hashFiles('composer.json') }} + restore-keys: ${{ runner.os }}-composer-phpcs + + # The coding standard is a require-dev dependency of the module, so CI and + # local development (ddev phpcs) use the same pinned tool versions. + - name: Install dev dependencies + run: composer install --no-interaction --no-progress + # Standard and file list come from phpcs.xml.dist - name: Run PHPCS - run: /tmp/magento-coding-standard/vendor/bin/phpcs -p -s --standard=Magento2 src/ + run: vendor/bin/phpcs -p -s diff --git a/.gitignore b/.gitignore index bc7704f3..732980ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,10 @@ # AI Skills /.agents +# Composer (module dev tooling) +/vendor/ +/composer.lock + .vscode /magento/ /magento-temp/ diff --git a/.trunk/configs/.markdownlint.yaml b/.trunk/configs/.markdownlint.yaml index b40ee9d7..311401b7 100644 --- a/.trunk/configs/.markdownlint.yaml +++ b/.trunk/configs/.markdownlint.yaml @@ -1,2 +1,6 @@ # Prettier friendly markdownlint config (all formatting rules disabled) extends: markdownlint/style/prettier + +# Allow repeated headings like "### Added" across CHANGELOG release sections +MD024: + siblings_only: true diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index b0fc6613..4e078e1b 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -21,6 +21,11 @@ lint: - linters: [yamllint, prettier] paths: - .ddev/** + # Local-dev container images (ddev-generated); health checks are defined in + # the compose files, and the images run as the upstream default user. + - linters: [checkov] + paths: + - .ddev/** enabled: - checkov@3.2.499 - actionlint@1.7.10 diff --git a/CHANGELOG.md b/CHANGELOG.md index 3efaaeae..46882a42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file. ### Changed -* **Inspector CSS Migration**: Migrated Inspector component from Tailwind CSS to pure Vanilla CSS for universal compatibility +- **Inspector CSS Migration**: Migrated Inspector component from Tailwind CSS to pure Vanilla CSS for universal compatibility - All CSS classes now use `mageforge-*` prefix for namespace isolation - Removed Tailwind build dependency (`tailwind/` directory deprecated) - No npm build step required - direct CSS editing @@ -19,389 +19,340 @@ All notable changes to this project will be documented in this file. ## [0.22.0](https://github.com/OpenForgeProject/mageforge/compare/0.21.1...0.22.0) (2026-06-01) - ### Added -* add CMS block identifier support in InspectorHints and tabs ([dcce46d](https://github.com/OpenForgeProject/mageforge/commit/dcce46d48b9b9deedb02ee82014719da70468561)) -* add Escaper dependency and improve JSON escaping in InspectorHints ([adaa5db](https://github.com/OpenForgeProject/mageforge/commit/adaa5db94326136ebaa9269ffde1a9b58a0ca3f9)) -* add magewire support for Inspector Hints ([f47d497](https://github.com/OpenForgeProject/mageforge/commit/f47d4976315c0be2e9b5a23b08da4ad1fc679b66)) -* add new color group styles to toolbar ([#188](https://github.com/OpenForgeProject/mageforge/issues/188)) ([fc4b7ee](https://github.com/OpenForgeProject/mageforge/commit/fc4b7ee8f6ae90a0d9d560c727339b6f56b83db8)) -* add new color group styles to toolbar ([#188](https://github.com/OpenForgeProject/mageforge/issues/188)) ([3cf6803](https://github.com/OpenForgeProject/mageforge/commit/3cf68032c635820abfa04912116b90a6999f23ab)) -* data-mageforge attribute handling ([35975ac](https://github.com/OpenForgeProject/mageforge/commit/35975ac997b7e107d774e666ee3f7f1e78f19ef6)) -* enable phpcs annotations for method arguments in InspectorHintsFactory ([e8c2ee3](https://github.com/OpenForgeProject/mageforge/commit/e8c2ee3d3d4efd98af21b2b85be1c465cd340b4a)) -* enhance block detection for PageBuilder elements in inspector ([0121ec8](https://github.com/OpenForgeProject/mageforge/commit/0121ec8174e1e98d09e85832216b91ed1ef499b6)) -* enhance InspectorHints to inject data attributes into root HTML elements ([0a9cf42](https://github.com/OpenForgeProject/mageforge/commit/0a9cf42980a7f95627ce3cf0a5a9a18b128624a4)) -* implement InspectorHintsFactory for creating InspectorHints instances ([3a27262](https://github.com/OpenForgeProject/mageforge/commit/3a2726230749ba25c56c13d102c763e42ff68c4d)) -* improve accessibility and functionality of inspector and toolbar components ([2873970](https://github.com/OpenForgeProject/mageforge/commit/287397062c19afa157f8e7b486319db7fca62e39)) -* improve accessibility and styling for inspector and toolbar buttons ([68b6bea](https://github.com/OpenForgeProject/mageforge/commit/68b6beacdf6743f2bd26addbdfc108a21d4a8ff4)) -* update CompatibilityCheckCommand to handle summary directly ([57a0263](https://github.com/OpenForgeProject/mageforge/commit/57a0263144329bd8e29f61ce8e2d894d534ec94e)) - +- add CMS block identifier support in InspectorHints and tabs ([dcce46d](https://github.com/OpenForgeProject/mageforge/commit/dcce46d48b9b9deedb02ee82014719da70468561)) +- add Escaper dependency and improve JSON escaping in InspectorHints ([adaa5db](https://github.com/OpenForgeProject/mageforge/commit/adaa5db94326136ebaa9269ffde1a9b58a0ca3f9)) +- add magewire support for Inspector Hints ([f47d497](https://github.com/OpenForgeProject/mageforge/commit/f47d4976315c0be2e9b5a23b08da4ad1fc679b66)) +- add new color group styles to toolbar ([#188](https://github.com/OpenForgeProject/mageforge/issues/188)) ([fc4b7ee](https://github.com/OpenForgeProject/mageforge/commit/fc4b7ee8f6ae90a0d9d560c727339b6f56b83db8)) +- add new color group styles to toolbar ([#188](https://github.com/OpenForgeProject/mageforge/issues/188)) ([3cf6803](https://github.com/OpenForgeProject/mageforge/commit/3cf68032c635820abfa04912116b90a6999f23ab)) +- data-mageforge attribute handling ([35975ac](https://github.com/OpenForgeProject/mageforge/commit/35975ac997b7e107d774e666ee3f7f1e78f19ef6)) +- enable phpcs annotations for method arguments in InspectorHintsFactory ([e8c2ee3](https://github.com/OpenForgeProject/mageforge/commit/e8c2ee3d3d4efd98af21b2b85be1c465cd340b4a)) +- enhance block detection for PageBuilder elements in inspector ([0121ec8](https://github.com/OpenForgeProject/mageforge/commit/0121ec8174e1e98d09e85832216b91ed1ef499b6)) +- enhance InspectorHints to inject data attributes into root HTML elements ([0a9cf42](https://github.com/OpenForgeProject/mageforge/commit/0a9cf42980a7f95627ce3cf0a5a9a18b128624a4)) +- implement InspectorHintsFactory for creating InspectorHints instances ([3a27262](https://github.com/OpenForgeProject/mageforge/commit/3a2726230749ba25c56c13d102c763e42ff68c4d)) +- improve accessibility and functionality of inspector and toolbar components ([2873970](https://github.com/OpenForgeProject/mageforge/commit/287397062c19afa157f8e7b486319db7fca62e39)) +- improve accessibility and styling for inspector and toolbar buttons ([68b6bea](https://github.com/OpenForgeProject/mageforge/commit/68b6beacdf6743f2bd26addbdfc108a21d4a8ff4)) +- update CompatibilityCheckCommand to handle summary directly ([57a0263](https://github.com/OpenForgeProject/mageforge/commit/57a0263144329bd8e29f61ce8e2d894d534ec94e)) ### Fixed -* simplify warning display logic in CompatibilityChecker ([41a895f](https://github.com/OpenForgeProject/mageforge/commit/41a895f44097e0d8122201f72155dfe16485819f)) +- simplify warning display logic in CompatibilityChecker ([41a895f](https://github.com/OpenForgeProject/mageforge/commit/41a895f44097e0d8122201f72155dfe16485819f)) ## [0.21.1](https://github.com/OpenForgeProject/mageforge/compare/0.21.0...0.21.1) (2026-05-15) - ### Fixed -* cast render result to string in InspectorHints ([#187](https://github.com/OpenForgeProject/mageforge/issues/187)) ([c857129](https://github.com/OpenForgeProject/mageforge/commit/c8571298a7958aaa4e8d921d5a999897d1a08cb0)) -* update shas and update to node24 workflows ([36bd346](https://github.com/OpenForgeProject/mageforge/commit/36bd346ad8fc7944de19505796fafc890016b0e3)) +- cast render result to string in InspectorHints ([#187](https://github.com/OpenForgeProject/mageforge/issues/187)) ([c857129](https://github.com/OpenForgeProject/mageforge/commit/c8571298a7958aaa4e8d921d5a999897d1a08cb0)) +- update shas and update to node24 workflows ([36bd346](https://github.com/OpenForgeProject/mageforge/commit/36bd346ad8fc7944de19505796fafc890016b0e3)) ## [0.21.0](https://github.com/OpenForgeProject/mageforge/compare/0.20.0...0.21.0) (2026-05-11) - ### Added -* add toolbar position configuration and implement in UI ([3f331bf](https://github.com/OpenForgeProject/mageforge/commit/3f331bf0f0cdd8e9b3fd5be6e9d41506dc281db5)) -* health scoring ([#182](https://github.com/OpenForgeProject/mageforge/issues/182)) ([89bba7c](https://github.com/OpenForgeProject/mageforge/commit/89bba7c62b3755729d1ec169026c72aa18691f7b)) - +- add toolbar position configuration and implement in UI ([3f331bf](https://github.com/OpenForgeProject/mageforge/commit/3f331bf0f0cdd8e9b3fd5be6e9d41506dc281db5)) +- health scoring ([#182](https://github.com/OpenForgeProject/mageforge/issues/182)) ([89bba7c](https://github.com/OpenForgeProject/mageforge/commit/89bba7c62b3755729d1ec169026c72aa18691f7b)) ### Fixed -* exclude toolbar elements from tab-order & mark overflow-clipped focusables as unreachable ([1484347](https://github.com/OpenForgeProject/mageforge/commit/1484347108235591ae5e1798e232fa7af7ee6c11)) - +- exclude toolbar elements from tab-order & mark overflow-clipped focusables as unreachable ([1484347](https://github.com/OpenForgeProject/mageforge/commit/1484347108235591ae5e1798e232fa7af7ee6c11)) ### Changed -* centralize inspector configuration constants in Inspector class ([b7c9027](https://github.com/OpenForgeProject/mageforge/commit/b7c9027c242ba23dcf2c69214ce52a41f7dbcfa3)) - +- centralize inspector configuration constants in Inspector class ([b7c9027](https://github.com/OpenForgeProject/mageforge/commit/b7c9027c242ba23dcf2c69214ce52a41f7dbcfa3)) ### Documentation -* add frontend toolbar section and image to README ([1a2fb75](https://github.com/OpenForgeProject/mageforge/commit/1a2fb756ecbd0003704e0d5a6fa62bc267624f5e)) -* update toolbar image from PNG to JPEG format ([1e1bafd](https://github.com/OpenForgeProject/mageforge/commit/1e1bafd824e62ce1ac4603346d5738684997b95b)) +- add frontend toolbar section and image to README ([1a2fb75](https://github.com/OpenForgeProject/mageforge/commit/1a2fb756ecbd0003704e0d5a6fa62bc267624f5e)) +- update toolbar image from PNG to JPEG format ([1e1bafd](https://github.com/OpenForgeProject/mageforge/commit/1e1bafd824e62ce1ac4603346d5738684997b95b)) ## [0.20.0](https://github.com/OpenForgeProject/mageforge/compare/0.19.1...0.20.0) (2026-04-26) - ### Added -* add additional audits for accessibility and usability checks ([2dfea0d](https://github.com/OpenForgeProject/mageforge/commit/2dfea0de47b1e9b59f92260448ff5c679bdc2577)) -* add additional audits for accessibility and usability checks ([ad30fe9](https://github.com/OpenForgeProject/mageforge/commit/ad30fe9461e8f31b7258e877ae7771829f530eb3)) -* add additional check for elements within the toolbar ([877edcd](https://github.com/OpenForgeProject/mageforge/commit/877edcd5269bdee8eb04429d1b493479113722b5)) -* add warning styles and enhance audit checks for toolbar elements ([cfab08a](https://github.com/OpenForgeProject/mageforge/commit/cfab08ac520451ddefac021f4594f433917bdf2f)) -* clarify description for unsafe target="_blank" audit ([2df5ff2](https://github.com/OpenForgeProject/mageforge/commit/2df5ff2f5ce91adbd48ed8d094da5ecfc5f8036a)) -* enhance audits for duplicate IDs and interactive elements ([002d30f](https://github.com/OpenForgeProject/mageforge/commit/002d30fda814240cbb1122f2823521eb12c64607)) -* exclude toolbar elements from highlight application ([bfdcc29](https://github.com/OpenForgeProject/mageforge/commit/bfdcc29a6362cb0b8a2085f66228b30aaa9d9236)) -* update minimum size for small touch targets audit ([d492c1e](https://github.com/OpenForgeProject/mageforge/commit/d492c1edcb7dc99389f3fadfb59fe8aa5cc6827c)) -* update touch target size description for accessibility audit ([81ae5e4](https://github.com/OpenForgeProject/mageforge/commit/81ae5e42b782c2a619503a6ee9c0e8dc598af7ea)) - +- add additional audits for accessibility and usability checks ([2dfea0d](https://github.com/OpenForgeProject/mageforge/commit/2dfea0de47b1e9b59f92260448ff5c679bdc2577)) +- add additional audits for accessibility and usability checks ([ad30fe9](https://github.com/OpenForgeProject/mageforge/commit/ad30fe9461e8f31b7258e877ae7771829f530eb3)) +- add additional check for elements within the toolbar ([877edcd](https://github.com/OpenForgeProject/mageforge/commit/877edcd5269bdee8eb04429d1b493479113722b5)) +- add warning styles and enhance audit checks for toolbar elements ([cfab08a](https://github.com/OpenForgeProject/mageforge/commit/cfab08ac520451ddefac021f4594f433917bdf2f)) +- clarify description for unsafe target="\_blank" audit ([2df5ff2](https://github.com/OpenForgeProject/mageforge/commit/2df5ff2f5ce91adbd48ed8d094da5ecfc5f8036a)) +- enhance audits for duplicate IDs and interactive elements ([002d30f](https://github.com/OpenForgeProject/mageforge/commit/002d30fda814240cbb1122f2823521eb12c64607)) +- exclude toolbar elements from highlight application ([bfdcc29](https://github.com/OpenForgeProject/mageforge/commit/bfdcc29a6362cb0b8a2085f66228b30aaa9d9236)) +- update minimum size for small touch targets audit ([d492c1e](https://github.com/OpenForgeProject/mageforge/commit/d492c1edcb7dc99389f3fadfb59fe8aa5cc6827c)) +- update touch target size description for accessibility audit ([81ae5e4](https://github.com/OpenForgeProject/mageforge/commit/81ae5e42b782c2a619503a6ee9c0e8dc598af7ea)) ### Fixed -* add aria-expanded attribute for burger button accessibility ([363403b](https://github.com/OpenForgeProject/mageforge/commit/363403b0252c79db27d8d3e6367cae13cd8ecac9)) -* cast show labels to integer for consistent data attribute ([37658fb](https://github.com/OpenForgeProject/mageforge/commit/37658fb5e1c3e98dd800722f2c95761da4612d42)) -* disable inspector in config and update layout reference ([#175](https://github.com/OpenForgeProject/mageforge/issues/175)) ([99c71a9](https://github.com/OpenForgeProject/mageforge/commit/99c71a9d4566bf90782e7e26a72edc3ff3ab5486)) -* enhance constructor PHPDoc for Inspector and ThemeSuggester classes ([ad2eb35](https://github.com/OpenForgeProject/mageforge/commit/ad2eb35a77dfef3a93689cd0b26d5ad4cfa8e201)) -* ensure audits are deactivated on toolbar destruction ([b1a16fd](https://github.com/OpenForgeProject/mageforge/commit/b1a16fd2770b62e7524da5139f30ab85148e31f5)) -* improve type safety and clean up PHPDoc in Inspector block ([0c63ac3](https://github.com/OpenForgeProject/mageforge/commit/0c63ac316f32e8f8b74892f8b53f85988eefe883)) -* normalise opacity visibility check across all toolbar audits ([0fb1642](https://github.com/OpenForgeProject/mageforge/commit/0fb16422ef56c406c3d053a6145c2ebadda417ec)) -* refine theme path matching and enhance theme suggestion logic ([3484f34](https://github.com/OpenForgeProject/mageforge/commit/3484f349bf7ab660b9f5574811d675de2ca75f3f)) -* refine theme path matching and enhance theme suggestion logic ([fc1747b](https://github.com/OpenForgeProject/mageforge/commit/fc1747b90cba6a28176225aee7631a1d1744df70)) -* streamline toolbar destruction process and clean up references ([65221fe](https://github.com/OpenForgeProject/mageforge/commit/65221fe830848b823b63c3d0806864e28309f2d0)) -* toolbar fixes ([#177](https://github.com/OpenForgeProject/mageforge/issues/177)) ([f4382b5](https://github.com/OpenForgeProject/mageforge/commit/f4382b52420954e039820b96cc55fa5c8bbecf29)) -* update aria-expanded attribute for collapsible menu groups ([96ac5e1](https://github.com/OpenForgeProject/mageforge/commit/96ac5e17591ce181484d0bbbb8f3237adb21accd)) - +- add aria-expanded attribute for burger button accessibility ([363403b](https://github.com/OpenForgeProject/mageforge/commit/363403b0252c79db27d8d3e6367cae13cd8ecac9)) +- cast show labels to integer for consistent data attribute ([37658fb](https://github.com/OpenForgeProject/mageforge/commit/37658fb5e1c3e98dd800722f2c95761da4612d42)) +- disable inspector in config and update layout reference ([#175](https://github.com/OpenForgeProject/mageforge/issues/175)) ([99c71a9](https://github.com/OpenForgeProject/mageforge/commit/99c71a9d4566bf90782e7e26a72edc3ff3ab5486)) +- enhance constructor PHPDoc for Inspector and ThemeSuggester classes ([ad2eb35](https://github.com/OpenForgeProject/mageforge/commit/ad2eb35a77dfef3a93689cd0b26d5ad4cfa8e201)) +- ensure audits are deactivated on toolbar destruction ([b1a16fd](https://github.com/OpenForgeProject/mageforge/commit/b1a16fd2770b62e7524da5139f30ab85148e31f5)) +- improve type safety and clean up PHPDoc in Inspector block ([0c63ac3](https://github.com/OpenForgeProject/mageforge/commit/0c63ac316f32e8f8b74892f8b53f85988eefe883)) +- normalise opacity visibility check across all toolbar audits ([0fb1642](https://github.com/OpenForgeProject/mageforge/commit/0fb16422ef56c406c3d053a6145c2ebadda417ec)) +- refine theme path matching and enhance theme suggestion logic ([3484f34](https://github.com/OpenForgeProject/mageforge/commit/3484f349bf7ab660b9f5574811d675de2ca75f3f)) +- refine theme path matching and enhance theme suggestion logic ([fc1747b](https://github.com/OpenForgeProject/mageforge/commit/fc1747b90cba6a28176225aee7631a1d1744df70)) +- streamline toolbar destruction process and clean up references ([65221fe](https://github.com/OpenForgeProject/mageforge/commit/65221fe830848b823b63c3d0806864e28309f2d0)) +- toolbar fixes ([#177](https://github.com/OpenForgeProject/mageforge/issues/177)) ([f4382b5](https://github.com/OpenForgeProject/mageforge/commit/f4382b52420954e039820b96cc55fa5c8bbecf29)) +- update aria-expanded attribute for collapsible menu groups ([96ac5e1](https://github.com/OpenForgeProject/mageforge/commit/96ac5e17591ce181484d0bbbb8f3237adb21accd)) ### Styling -* adjust toolbar dimensions for better usability on small devices ([d41c6e2](https://github.com/OpenForgeProject/mageforge/commit/d41c6e2bfb8eb1659d9dd23a37e40aaf79b9f278)) -* update toolbar CSS for improved visibility ([84f80de](https://github.com/OpenForgeProject/mageforge/commit/84f80de1ab7884fe057e27d7356d4e9c31b815a5)) -* update toolbar for improved design ([4871193](https://github.com/OpenForgeProject/mageforge/commit/48711932074ec8867cfb63bd97addccf389b4783)) +- adjust toolbar dimensions for better usability on small devices ([d41c6e2](https://github.com/OpenForgeProject/mageforge/commit/d41c6e2bfb8eb1659d9dd23a37e40aaf79b9f278)) +- update toolbar CSS for improved visibility ([84f80de](https://github.com/OpenForgeProject/mageforge/commit/84f80de1ab7884fe057e27d7356d4e9c31b815a5)) +- update toolbar for improved design ([4871193](https://github.com/OpenForgeProject/mageforge/commit/48711932074ec8867cfb63bd97addccf389b4783)) ## [0.19.1](https://github.com/OpenForgeProject/mageforge/compare/0.19.0...0.19.1) (2026-04-22) - ### Fixed -* remove cacheable attribute from inspector block ([#174](https://github.com/OpenForgeProject/mageforge/issues/174)) ([e12e44e](https://github.com/OpenForgeProject/mageforge/commit/e12e44ecaf5b1372705fe90ef01f476e554e1639)) - +- remove cacheable attribute from inspector block ([#174](https://github.com/OpenForgeProject/mageforge/issues/174)) ([e12e44e](https://github.com/OpenForgeProject/mageforge/commit/e12e44ecaf5b1372705fe90ef01f476e554e1639)) ### Documentation -* Fix commands.md numbering, missing sections, and flag inconsistencies ([#172](https://github.com/OpenForgeProject/mageforge/issues/172)) ([ba5498f](https://github.com/OpenForgeProject/mageforge/commit/ba5498fe8d5741d03da2fb5350003c2f5085d07f)) +- Fix commands.md numbering, missing sections, and flag inconsistencies ([#172](https://github.com/OpenForgeProject/mageforge/issues/172)) ([ba5498f](https://github.com/OpenForgeProject/mageforge/commit/ba5498fe8d5741d03da2fb5350003c2f5085d07f)) ## [0.19.0](https://github.com/OpenForgeProject/mageforge/compare/0.18.0...0.19.0) (2026-04-13) - ### Added -* defer page timing caching until load event and add global metrics ([6721e60](https://github.com/OpenForgeProject/mageforge/commit/6721e60a7ac25118154f3a79ee1704f39ee2bd51)) - +- defer page timing caching until load event and add global metrics ([6721e60](https://github.com/OpenForgeProject/mageforge/commit/6721e60a7ac25118154f3a79ee1704f39ee2bd51)) ### Fixed -* clamp badge dragging within viewport boundaries ([03aee99](https://github.com/OpenForgeProject/mageforge/commit/03aee99cc88b178caf97573c4bdccb7e3f1cbc4b)) -* ensure drag end handler is removed on draggable removal ([8957129](https://github.com/OpenForgeProject/mageforge/commit/8957129173c01ccc506507f90e7cdbab1e9f141d)) - +- clamp badge dragging within viewport boundaries ([03aee99](https://github.com/OpenForgeProject/mageforge/commit/03aee99cc88b178caf97573c4bdccb7e3f1cbc4b)) +- ensure drag end handler is removed on draggable removal ([8957129](https://github.com/OpenForgeProject/mageforge/commit/8957129173c01ccc506507f90e7cdbab1e9f141d)) ### Changed -* enhance toolbar menu display logic with CSS transitions ([e150700](https://github.com/OpenForgeProject/mageforge/commit/e1507005803446c859a9dfa21ba25f40ee95ba63)) -* simplify connector management in draggable methods ([c995694](https://github.com/OpenForgeProject/mageforge/commit/c99569479244263108368d19f63a3fca155996bc)) -* update audit overlay styles and improve highlight logic ([27f1588](https://github.com/OpenForgeProject/mageforge/commit/27f15881db9d30c18e5eb78ea480d86bb0bef15e)) +- enhance toolbar menu display logic with CSS transitions ([e150700](https://github.com/OpenForgeProject/mageforge/commit/e1507005803446c859a9dfa21ba25f40ee95ba63)) +- simplify connector management in draggable methods ([c995694](https://github.com/OpenForgeProject/mageforge/commit/c99569479244263108368d19f63a3fca155996bc)) +- update audit overlay styles and improve highlight logic ([27f1588](https://github.com/OpenForgeProject/mageforge/commit/27f15881db9d30c18e5eb78ea480d86bb0bef15e)) ## [0.18.0](https://github.com/OpenForgeProject/mageforge/compare/0.17.0...0.18.0) (2026-04-13) - ### Added -* toolbar audit highlighting ([4fcfc7d](https://github.com/OpenForgeProject/mageforge/commit/4fcfc7d5cda0c813906dadb2060e1496e90d4504)) +- toolbar audit highlighting ([4fcfc7d](https://github.com/OpenForgeProject/mageforge/commit/4fcfc7d5cda0c813906dadb2060e1496e90d4504)) ## [0.17.0](https://github.com/OpenForgeProject/mageforge/compare/0.16.0...0.17.0) (2026-04-12) - ### Added -* add MageForge Toolbar with basic audits ([#167](https://github.com/OpenForgeProject/mageforge/issues/167)) ([2a8a8ba](https://github.com/OpenForgeProject/mageforge/commit/2a8a8ba02f53befd2b290e06f19f89480571f27e)) - +- add MageForge Toolbar with basic audits ([#167](https://github.com/OpenForgeProject/mageforge/issues/167)) ([2a8a8ba](https://github.com/OpenForgeProject/mageforge/commit/2a8a8ba02f53befd2b290e06f19f89480571f27e)) ### Fixed -* adjust initial badge position and add scroll handler for connector ([#162](https://github.com/OpenForgeProject/mageforge/issues/162)) ([84baaf0](https://github.com/OpenForgeProject/mageforge/commit/84baaf07e328ecec143f1dbae6db5fec504375df)) -* enhance role determination for input elements in accessibility analysis ([adb7996](https://github.com/OpenForgeProject/mageforge/commit/adb799637aab11b040934738f2f47326d2249c0c)) -* enhance structure rendering with additional properties ([109418b](https://github.com/OpenForgeProject/mageforge/commit/109418bb1cd5060fbd56bce30717520eeffef1cd)) -* handle click outside inspector overlay correctly when pinned ([c885f81](https://github.com/OpenForgeProject/mageforge/commit/c885f8133ca6c74292248b17bbe2cbf2da805d05)) -* improve badge update logic to prevent flickering ([5526e15](https://github.com/OpenForgeProject/mageforge/commit/5526e1541ec4eca0a403b1095f975d509d6da866)) -* improve CSS resource matching in element resource categorization ([a1dba6a](https://github.com/OpenForgeProject/mageforge/commit/a1dba6af5557831626f91f12f6833b4282e821b4)) -* remove INP metric tracking from performance and vitals modules ([#165](https://github.com/OpenForgeProject/mageforge/issues/165)) ([6c78a39](https://github.com/OpenForgeProject/mageforge/commit/6c78a399f78f1b13a56db5a96098e3ff7a5a1a1c)) -* remove unused badge offset in position calculation for info badge ([686387b](https://github.com/OpenForgeProject/mageforge/commit/686387b2fad00af960249b329362bdcd8b470da4)) -* update cursor check for interactive elements in accessibility analysis ([c430f99](https://github.com/OpenForgeProject/mageforge/commit/c430f99d7c8b2decb4a494df7cc721ca2bfd1b21)) -* update pull request header for clarity on changes ([ccd5a47](https://github.com/OpenForgeProject/mageforge/commit/ccd5a47c6c50093194cfd14ab8645c0b18415ac9)) -* update pull request title and header formatting in config ([0dbab2e](https://github.com/OpenForgeProject/mageforge/commit/0dbab2ecf6b233b0534e8106d0e9a5951708b144)) - +- adjust initial badge position and add scroll handler for connector ([#162](https://github.com/OpenForgeProject/mageforge/issues/162)) ([84baaf0](https://github.com/OpenForgeProject/mageforge/commit/84baaf07e328ecec143f1dbae6db5fec504375df)) +- enhance role determination for input elements in accessibility analysis ([adb7996](https://github.com/OpenForgeProject/mageforge/commit/adb799637aab11b040934738f2f47326d2249c0c)) +- enhance structure rendering with additional properties ([109418b](https://github.com/OpenForgeProject/mageforge/commit/109418bb1cd5060fbd56bce30717520eeffef1cd)) +- handle click outside inspector overlay correctly when pinned ([c885f81](https://github.com/OpenForgeProject/mageforge/commit/c885f8133ca6c74292248b17bbe2cbf2da805d05)) +- improve badge update logic to prevent flickering ([5526e15](https://github.com/OpenForgeProject/mageforge/commit/5526e1541ec4eca0a403b1095f975d509d6da866)) +- improve CSS resource matching in element resource categorization ([a1dba6a](https://github.com/OpenForgeProject/mageforge/commit/a1dba6af5557831626f91f12f6833b4282e821b4)) +- remove INP metric tracking from performance and vitals modules ([#165](https://github.com/OpenForgeProject/mageforge/issues/165)) ([6c78a39](https://github.com/OpenForgeProject/mageforge/commit/6c78a399f78f1b13a56db5a96098e3ff7a5a1a1c)) +- remove unused badge offset in position calculation for info badge ([686387b](https://github.com/OpenForgeProject/mageforge/commit/686387b2fad00af960249b329362bdcd8b470da4)) +- update cursor check for interactive elements in accessibility analysis ([c430f99](https://github.com/OpenForgeProject/mageforge/commit/c430f99d7c8b2decb4a494df7cc721ca2bfd1b21)) +- update pull request header for clarity on changes ([ccd5a47](https://github.com/OpenForgeProject/mageforge/commit/ccd5a47c6c50093194cfd14ab8645c0b18415ac9)) +- update pull request title and header formatting in config ([0dbab2e](https://github.com/OpenForgeProject/mageforge/commit/0dbab2ecf6b233b0534e8106d0e9a5951708b144)) ### Changed -* remove feature views and new badge logic from inspector ([#164](https://github.com/OpenForgeProject/mageforge/issues/164)) ([3bf7143](https://github.com/OpenForgeProject/mageforge/commit/3bf714332cd1d85d3ca5235318a7e3adbc72f47a)) -* use WeakMap for block data storage in inspector ([#166](https://github.com/OpenForgeProject/mageforge/issues/166)) ([5c383fd](https://github.com/OpenForgeProject/mageforge/commit/5c383fd7e099b8ebe684129cc5e9b07646d3b9eb)) +- remove feature views and new badge logic from inspector ([#164](https://github.com/OpenForgeProject/mageforge/issues/164)) ([3bf7143](https://github.com/OpenForgeProject/mageforge/commit/3bf714332cd1d85d3ca5235318a7e3adbc72f47a)) +- use WeakMap for block data storage in inspector ([#166](https://github.com/OpenForgeProject/mageforge/issues/166)) ([5c383fd](https://github.com/OpenForgeProject/mageforge/commit/5c383fd7e099b8ebe684129cc5e9b07646d3b9eb)) ## [0.16.0](https://github.com/OpenForgeProject/mageforge/compare/0.15.1...0.16.0) (2026-04-10) - ### Added -* add CSP whitelist and update Alpine.js to version 3.15.11 with hash security ([#159](https://github.com/OpenForgeProject/mageforge/issues/159)) ([fa811bd](https://github.com/OpenForgeProject/mageforge/commit/fa811bddbf48d531b528163eb210335a3c01eeca)) -* update PHP and Magento framework requirements in composer.json [#155](https://github.com/OpenForgeProject/mageforge/issues/155) ([#156](https://github.com/OpenForgeProject/mageforge/issues/156)) ([9a3f92d](https://github.com/OpenForgeProject/mageforge/commit/9a3f92dc102a9d7e2671d8b8330a276a18d8b042)) - +- add CSP whitelist and update Alpine.js to version 3.15.11 with hash security ([#159](https://github.com/OpenForgeProject/mageforge/issues/159)) ([fa811bd](https://github.com/OpenForgeProject/mageforge/commit/fa811bddbf48d531b528163eb210335a3c01eeca)) +- update PHP and Magento framework requirements in composer.json [#155](https://github.com/OpenForgeProject/mageforge/issues/155) ([#156](https://github.com/OpenForgeProject/mageforge/issues/156)) ([9a3f92d](https://github.com/OpenForgeProject/mageforge/commit/9a3f92dc102a9d7e2671d8b8330a276a18d8b042)) ### Fixed -* add keydownHandler and impove performance observers to inspector ([#160](https://github.com/OpenForgeProject/mageforge/issues/160)) ([5639b87](https://github.com/OpenForgeProject/mageforge/commit/5639b87ecc92277ca429055f37382997fd48aefb)) -* Refactor inspector.js into ES modules ([#161](https://github.com/OpenForgeProject/mageforge/issues/161)) ([f3fb74d](https://github.com/OpenForgeProject/mageforge/commit/f3fb74dc7e6090de172d0f1350bef713c1803ad5)) -* updated advanced_usage.md for better understanding ([#158](https://github.com/OpenForgeProject/mageforge/issues/158)) ([956efe4](https://github.com/OpenForgeProject/mageforge/commit/956efe4053d6ac75de5cc04b89c685da46e94bf6)) +- add keydownHandler and impove performance observers to inspector ([#160](https://github.com/OpenForgeProject/mageforge/issues/160)) ([5639b87](https://github.com/OpenForgeProject/mageforge/commit/5639b87ecc92277ca429055f37382997fd48aefb)) +- Refactor inspector.js into ES modules ([#161](https://github.com/OpenForgeProject/mageforge/issues/161)) ([f3fb74d](https://github.com/OpenForgeProject/mageforge/commit/f3fb74dc7e6090de172d0f1350bef713c1803ad5)) +- updated advanced_usage.md for better understanding ([#158](https://github.com/OpenForgeProject/mageforge/issues/158)) ([956efe4](https://github.com/OpenForgeProject/mageforge/commit/956efe4053d6ac75de5cc04b89c685da46e94bf6)) ## [0.15.1](https://github.com/OpenForgeProject/mageforge/compare/0.15.0...0.15.1) (2026-03-18) - ### Fixed -* update phpstan to level 9 ([#152](https://github.com/OpenForgeProject/mageforge/issues/152)) ([c57f6c7](https://github.com/OpenForgeProject/mageforge/commit/c57f6c71c4c15a738b115b667db744b395553e5a)) +- update phpstan to level 9 ([#152](https://github.com/OpenForgeProject/mageforge/issues/152)) ([c57f6c7](https://github.com/OpenForgeProject/mageforge/commit/c57f6c71c4c15a738b115b667db744b395553e5a)) ## [0.15.0](https://github.com/OpenForgeProject/mageforge/compare/0.14.1...0.15.0) (2026-03-18) - ### Added -* add wildcard theme resolution to build and clean commands ([#150](https://github.com/OpenForgeProject/mageforge/issues/150)) ([ec4316d](https://github.com/OpenForgeProject/mageforge/commit/ec4316def7318a88395e3566eb1415757990b181)) +- add wildcard theme resolution to build and clean commands ([#150](https://github.com/OpenForgeProject/mageforge/issues/150)) ([ec4316d](https://github.com/OpenForgeProject/mageforge/commit/ec4316def7318a88395e3566eb1415757990b181)) ## [0.14.1](https://github.com/OpenForgeProject/mageforge/compare/0.14.0...0.14.1) (2026-03-12) - ### Fixed -* ensure theme codes are indexed correctly in commands ([#149](https://github.com/OpenForgeProject/mageforge/issues/149)) ([f9175a7](https://github.com/OpenForgeProject/mageforge/commit/f9175a75e017965a0014cd71b940ce354ce64633)) -* update Magento requirement to 2.4.7 with PHP 8.3 in README ([3b4cfca](https://github.com/OpenForgeProject/mageforge/commit/3b4cfca7a041f0dca8b9c3c88f2114789628471c)) -* update Magento version to 2.4.7-p9 in compatibility workflow ([79eb0b2](https://github.com/OpenForgeProject/mageforge/commit/79eb0b264918d662f7e2308c022ea3f6ddd5ea94)) -* update PHP version and Magento version in compatibility matrix ([8d662f6](https://github.com/OpenForgeProject/mageforge/commit/8d662f6864f9a8a7f5a78ab508dc59fe54712adb)) +- ensure theme codes are indexed correctly in commands ([#149](https://github.com/OpenForgeProject/mageforge/issues/149)) ([f9175a7](https://github.com/OpenForgeProject/mageforge/commit/f9175a75e017965a0014cd71b940ce354ce64633)) +- update Magento requirement to 2.4.7 with PHP 8.3 in README ([3b4cfca](https://github.com/OpenForgeProject/mageforge/commit/3b4cfca7a041f0dca8b9c3c88f2114789628471c)) +- update Magento version to 2.4.7-p9 in compatibility workflow ([79eb0b2](https://github.com/OpenForgeProject/mageforge/commit/79eb0b264918d662f7e2308c022ea3f6ddd5ea94)) +- update PHP version and Magento version in compatibility matrix ([8d662f6](https://github.com/OpenForgeProject/mageforge/commit/8d662f6864f9a8a7f5a78ab508dc59fe54712adb)) ## [0.14.0](https://github.com/OpenForgeProject/mageforge/compare/0.13.0...0.14.0) (2026-03-06) - ### Added -* replace MultiSelectPrompt with MultiSearchPrompt for theme selection ([bc89442](https://github.com/OpenForgeProject/mageforge/commit/bc89442fa6f9d77043462c02e842437211065cd7)) +- replace MultiSelectPrompt with MultiSearchPrompt for theme selection ([bc89442](https://github.com/OpenForgeProject/mageforge/commit/bc89442fa6f9d77043462c02e842437211065cd7)) ## [0.13.0](https://github.com/OpenForgeProject/mageforge/compare/0.12.0...0.13.0) (2026-03-03) - ### Added -* add NodeSetupValidator for validating Magento default setup files ([#142](https://github.com/OpenForgeProject/mageforge/issues/142)) ([3f36d43](https://github.com/OpenForgeProject/mageforge/commit/3f36d433a04ac31be0ca84f04cd4495245ecf52e)) - +- add NodeSetupValidator for validating Magento default setup files ([#142](https://github.com/OpenForgeProject/mageforge/issues/142)) ([3f36d43](https://github.com/OpenForgeProject/mageforge/commit/3f36d433a04ac31be0ca84f04cd4495245ecf52e)) ### Fixed -* resolve phpcs errors ([#145](https://github.com/OpenForgeProject/mageforge/issues/145)) ([cb90564](https://github.com/OpenForgeProject/mageforge/commit/cb905645175d6dd49d79b787b5545e1b6c0df422)) -* run mago format ([#146](https://github.com/OpenForgeProject/mageforge/issues/146)) ([fa34cd8](https://github.com/OpenForgeProject/mageforge/commit/fa34cd8c8edc2453ec4b446b56ac16f51cd4858f)) +- resolve phpcs errors ([#145](https://github.com/OpenForgeProject/mageforge/issues/145)) ([cb90564](https://github.com/OpenForgeProject/mageforge/commit/cb905645175d6dd49d79b787b5545e1b6c0df422)) +- run mago format ([#146](https://github.com/OpenForgeProject/mageforge/issues/146)) ([fa34cd8](https://github.com/OpenForgeProject/mageforge/commit/fa34cd8c8edc2453ec4b446b56ac16f51cd4858f)) ## [0.12.0](https://github.com/OpenForgeProject/mageforge/compare/0.11.0...0.12.0) (2026-02-14) - ### Added -* **actions:** replace elasticsearch with opensearch ([#137](https://github.com/OpenForgeProject/mageforge/issues/137)) ([cc8c534](https://github.com/OpenForgeProject/mageforge/commit/cc8c53428288a45b8ad645baf87623bf4a8b9a1f)) - +- **actions:** replace elasticsearch with opensearch ([#137](https://github.com/OpenForgeProject/mageforge/issues/137)) ([cc8c534](https://github.com/OpenForgeProject/mageforge/commit/cc8c53428288a45b8ad645baf87623bf4a8b9a1f)) ### Fixed -* correct font size and border radius in inspector CSS ([7bb3348](https://github.com/OpenForgeProject/mageforge/commit/7bb334806a134687bd06cf55e5f27682947f3c84)) -* phpcs errors ([#138](https://github.com/OpenForgeProject/mageforge/issues/138)) ([625c6da](https://github.com/OpenForgeProject/mageforge/commit/625c6da89882d19605713e4c295af713700890aa)) -* **phpcs:** refactor environment variable handling in commands ([#135](https://github.com/OpenForgeProject/mageforge/issues/135)) ([9c01ce5](https://github.com/OpenForgeProject/mageforge/commit/9c01ce5fe269c0b917c95b5804542c7ee7840af3)) -* update font settings and sizes in inspector CSS ([986ded6](https://github.com/OpenForgeProject/mageforge/commit/986ded6aeafe628c0549dc6d72f6ae119421d9df)) - +- correct font size and border radius in inspector CSS ([7bb3348](https://github.com/OpenForgeProject/mageforge/commit/7bb334806a134687bd06cf55e5f27682947f3c84)) +- phpcs errors ([#138](https://github.com/OpenForgeProject/mageforge/issues/138)) ([625c6da](https://github.com/OpenForgeProject/mageforge/commit/625c6da89882d19605713e4c295af713700890aa)) +- **phpcs:** refactor environment variable handling in commands ([#135](https://github.com/OpenForgeProject/mageforge/issues/135)) ([9c01ce5](https://github.com/OpenForgeProject/mageforge/commit/9c01ce5fe269c0b917c95b5804542c7ee7840af3)) +- update font settings and sizes in inspector CSS ([986ded6](https://github.com/OpenForgeProject/mageforge/commit/986ded6aeafe628c0549dc6d72f6ae119421d9df)) ### Documentation -* update README with custom theme details and add inspector section ([084b528](https://github.com/OpenForgeProject/mageforge/commit/084b52815adb78b4292d748fc100a8be3994844c)) +- update README with custom theme details and add inspector section ([084b528](https://github.com/OpenForgeProject/mageforge/commit/084b52815adb78b4292d748fc100a8be3994844c)) ## [0.11.0](https://github.com/OpenForgeProject/mageforge/compare/0.10.3...0.11.0) (2026-02-10) - ### Added -* add cache and webvitals tabs to inspector and improve ux with dragable overlay ([#127](https://github.com/OpenForgeProject/mageforge/issues/127)) ([eea755d](https://github.com/OpenForgeProject/mageforge/commit/eea755d1b38fe9e736a49157192babc5b98fbb10)) -* implement dark/light mode theme selection and admin configuration section ([#131](https://github.com/OpenForgeProject/mageforge/issues/131)) ([0a95280](https://github.com/OpenForgeProject/mageforge/commit/0a952808b6a5f7102aa5ad4b874e576d67f77bd1)) - +- add cache and webvitals tabs to inspector and improve ux with dragable overlay ([#127](https://github.com/OpenForgeProject/mageforge/issues/127)) ([eea755d](https://github.com/OpenForgeProject/mageforge/commit/eea755d1b38fe9e736a49157192babc5b98fbb10)) +- implement dark/light mode theme selection and admin configuration section ([#131](https://github.com/OpenForgeProject/mageforge/issues/131)) ([0a95280](https://github.com/OpenForgeProject/mageforge/commit/0a952808b6a5f7102aa5ad4b874e576d67f77bd1)) ### Fixed -* remove metric icons and rename metric titles for better ux ([#129](https://github.com/OpenForgeProject/mageforge/issues/129)) ([11d3c45](https://github.com/OpenForgeProject/mageforge/commit/11d3c45991684e5936862386e5a6e731ce7962ff)) +- remove metric icons and rename metric titles for better ux ([#129](https://github.com/OpenForgeProject/mageforge/issues/129)) ([11d3c45](https://github.com/OpenForgeProject/mageforge/commit/11d3c45991684e5936862386e5a6e731ce7962ff)) ## [0.10.3](https://github.com/OpenForgeProject/mageforge/compare/0.10.2...0.10.3) (2026-02-05) - ### Fixed -* update phpcs errors ([#124](https://github.com/OpenForgeProject/mageforge/issues/124)) ([a19e23d](https://github.com/OpenForgeProject/mageforge/commit/a19e23d6bfc61bb255057ed739b3904855971e2f)) +- update phpcs errors ([#124](https://github.com/OpenForgeProject/mageforge/issues/124)) ([a19e23d](https://github.com/OpenForgeProject/mageforge/commit/a19e23d6bfc61bb255057ed739b3904855971e2f)) ## [0.10.2](https://github.com/OpenForgeProject/mageforge/compare/0.10.1...0.10.2) (2026-02-02) - ### Fixed -* return theme parts as array in parseThemeName ([#122](https://github.com/OpenForgeProject/mageforge/issues/122)) ([94aef44](https://github.com/OpenForgeProject/mageforge/commit/94aef44bbc92ef6506ef6cd306ce010f1d6b6ef8)) +- return theme parts as array in parseThemeName ([#122](https://github.com/OpenForgeProject/mageforge/issues/122)) ([94aef44](https://github.com/OpenForgeProject/mageforge/commit/94aef44bbc92ef6506ef6cd306ce010f1d6b6ef8)) ## [0.10.1](https://github.com/OpenForgeProject/mageforge/compare/0.10.0...0.10.1) (2026-01-30) - ### Fixed -* correct spacing and formatting in multiple files ([#120](https://github.com/OpenForgeProject/mageforge/issues/120)) ([3f9048a](https://github.com/OpenForgeProject/mageforge/commit/3f9048abc0b0f2785aa5be3858704037ad14ce5a)) -* update phpstan level to 8 and improve commands ([#119](https://github.com/OpenForgeProject/mageforge/issues/119)) ([e24e138](https://github.com/OpenForgeProject/mageforge/commit/e24e138ae2e5fcdb0013639cdb573da782fcb3fd)) +- correct spacing and formatting in multiple files ([#120](https://github.com/OpenForgeProject/mageforge/issues/120)) ([3f9048a](https://github.com/OpenForgeProject/mageforge/commit/3f9048abc0b0f2785aa5be3858704037ad14ce5a)) +- update phpstan level to 8 and improve commands ([#119](https://github.com/OpenForgeProject/mageforge/issues/119)) ([e24e138](https://github.com/OpenForgeProject/mageforge/commit/e24e138ae2e5fcdb0013639cdb573da782fcb3fd)) ## [0.10.0](https://github.com/OpenForgeProject/mageforge/compare/0.9.0...0.10.0) (2026-01-30) - ### Added -* update phpstan level and add type hints ([#116](https://github.com/OpenForgeProject/mageforge/issues/116)) ([0a4a5fa](https://github.com/OpenForgeProject/mageforge/commit/0a4a5fa45ca77396a87569eca3491b569e3d3539)) - +- update phpstan level and add type hints ([#116](https://github.com/OpenForgeProject/mageforge/issues/116)) ([0a4a5fa](https://github.com/OpenForgeProject/mageforge/commit/0a4a5fa45ca77396a87569eca3491b569e3d3539)) ### Fixed -* update phpstan level to 7 and improve error handling ([#118](https://github.com/OpenForgeProject/mageforge/issues/118)) ([7c84ae7](https://github.com/OpenForgeProject/mageforge/commit/7c84ae75580037b6764c4e570cdca06fc5a3a970)) +- update phpstan level to 7 and improve error handling ([#118](https://github.com/OpenForgeProject/mageforge/issues/118)) ([7c84ae7](https://github.com/OpenForgeProject/mageforge/commit/7c84ae75580037b6764c4e570cdca06fc5a3a970)) ## [0.9.0](https://github.com/OpenForgeProject/mageforge/compare/0.8.1...0.9.0) (2026-01-30) - ### Added -* Node.js/Grunt setup detection for improved build process ([#114](https://github.com/OpenForgeProject/mageforge/issues/114)) ([5330e17](https://github.com/OpenForgeProject/mageforge/commit/5330e1702acc470276bd8c6ea508b0c35ac18a2f)) - +- Node.js/Grunt setup detection for improved build process ([#114](https://github.com/OpenForgeProject/mageforge/issues/114)) ([5330e17](https://github.com/OpenForgeProject/mageforge/commit/5330e1702acc470276bd8c6ea508b0c35ac18a2f)) ### Fixed -* phpstan level 5 errors [#84](https://github.com/OpenForgeProject/mageforge/issues/84) ([#100](https://github.com/OpenForgeProject/mageforge/issues/100)) ([154d15e](https://github.com/OpenForgeProject/mageforge/commit/154d15eba0db013b99cb4141dc0b2cd059147fb0)) +- phpstan level 5 errors [#84](https://github.com/OpenForgeProject/mageforge/issues/84) ([#100](https://github.com/OpenForgeProject/mageforge/issues/100)) ([154d15e](https://github.com/OpenForgeProject/mageforge/commit/154d15eba0db013b99cb4141dc0b2cd059147fb0)) ## [0.8.1](https://github.com/OpenForgeProject/mageforge/compare/0.8.0...0.8.1) (2026-01-27) - ### Fixed -* improve node module installation fallback logic ([#107](https://github.com/OpenForgeProject/mageforge/issues/107)) ([c400732](https://github.com/OpenForgeProject/mageforge/commit/c400732d5dfec183adc7fde9e42ad6b99f573f0e)) +- improve node module installation fallback logic ([#107](https://github.com/OpenForgeProject/mageforge/issues/107)) ([c400732](https://github.com/OpenForgeProject/mageforge/commit/c400732d5dfec183adc7fde9e42ad6b99f573f0e)) ## [0.8.0](https://github.com/OpenForgeProject/mageforge/compare/0.7.0...0.8.0) (2026-01-23) - ### Added -* add functional-tests badge to readme.md ([#95](https://github.com/OpenForgeProject/mageforge/issues/95)) ([7108ef0](https://github.com/OpenForgeProject/mageforge/commit/7108ef0d4408b82f3010acaa00cf6f257880809d)) -* add npm sync validation to NodePackageManager and theme builders ([#93](https://github.com/OpenForgeProject/mageforge/issues/93)) ([5fcbdaf](https://github.com/OpenForgeProject/mageforge/commit/5fcbdaf7ceb19136f4b86fbffd33b44cee1469d6)) -* add phpstan & phpcs ([#96](https://github.com/OpenForgeProject/mageforge/issues/96)) ([06bcfdc](https://github.com/OpenForgeProject/mageforge/commit/06bcfdc82b1a8e0a58ad8712f7a120dc215e850f)) -* add pinning functionality for inspector badge ([#104](https://github.com/OpenForgeProject/mageforge/issues/104)) ([69f7328](https://github.com/OpenForgeProject/mageforge/commit/69f73287754b572ea27349fcbb248f351dd7bc0d)) -* enhance inspector with JSON metadata and comment parsing ([#105](https://github.com/OpenForgeProject/mageforge/issues/105)) ([a2f9ebf](https://github.com/OpenForgeProject/mageforge/commit/a2f9ebf4a188e01576d980866c92b7d9e7bf55f1)) -* separate functional tests from compatibility tests ([effac26](https://github.com/OpenForgeProject/mageforge/commit/effac2637837efa4814b93bc1b09eb8cef306544)) -* update feature request link to direct to new issue template ([7e0b57e](https://github.com/OpenForgeProject/mageforge/commit/7e0b57eb33f927ba307b008af504de42c4a2a5af)) - +- add functional-tests badge to readme.md ([#95](https://github.com/OpenForgeProject/mageforge/issues/95)) ([7108ef0](https://github.com/OpenForgeProject/mageforge/commit/7108ef0d4408b82f3010acaa00cf6f257880809d)) +- add npm sync validation to NodePackageManager and theme builders ([#93](https://github.com/OpenForgeProject/mageforge/issues/93)) ([5fcbdaf](https://github.com/OpenForgeProject/mageforge/commit/5fcbdaf7ceb19136f4b86fbffd33b44cee1469d6)) +- add phpstan & phpcs ([#96](https://github.com/OpenForgeProject/mageforge/issues/96)) ([06bcfdc](https://github.com/OpenForgeProject/mageforge/commit/06bcfdc82b1a8e0a58ad8712f7a120dc215e850f)) +- add pinning functionality for inspector badge ([#104](https://github.com/OpenForgeProject/mageforge/issues/104)) ([69f7328](https://github.com/OpenForgeProject/mageforge/commit/69f73287754b572ea27349fcbb248f351dd7bc0d)) +- enhance inspector with JSON metadata and comment parsing ([#105](https://github.com/OpenForgeProject/mageforge/issues/105)) ([a2f9ebf](https://github.com/OpenForgeProject/mageforge/commit/a2f9ebf4a188e01576d980866c92b7d9e7bf55f1)) +- separate functional tests from compatibility tests ([effac26](https://github.com/OpenForgeProject/mageforge/commit/effac2637837efa4814b93bc1b09eb8cef306544)) +- update feature request link to direct to new issue template ([7e0b57e](https://github.com/OpenForgeProject/mageforge/commit/7e0b57eb33f927ba307b008af504de42c4a2a5af)) ### Fixed -* correct head-branch regex and add new changed-files sections ([53777ea](https://github.com/OpenForgeProject/mageforge/commit/53777eac19920e4de175b2a52704ff8b0c9982de)) -* labeler.yml to simplify Documentation labels ([2d96502](https://github.com/OpenForgeProject/mageforge/commit/2d96502e697fb6bc0c262867163d93086c75c9aa)) -* labeler.yml to update label rules ([79c3fc0](https://github.com/OpenForgeProject/mageforge/commit/79c3fc05b8a468c76b3e69ee9b555e0460bc3928)) -* remove deprecated environment retrieval method ([#98](https://github.com/OpenForgeProject/mageforge/issues/98)) ([3e11ae7](https://github.com/OpenForgeProject/mageforge/commit/3e11ae7a572dff28875167043d5f9e64e7cc67b5)) -* remove unnecessary blank lines in functional tests workflow ([f1e9bb7](https://github.com/OpenForgeProject/mageforge/commit/f1e9bb7ce8ea96f20f5c23b1b4ae78138388ab53)) -* update head-branch patterns and file globbing in labeler.yml ([#103](https://github.com/OpenForgeProject/mageforge/issues/103)) ([bd48b7c](https://github.com/OpenForgeProject/mageforge/commit/bd48b7ced59e405002897e595972bebf97a34bc4)) -* update validateHyvaTheme to include output parameter ([#99](https://github.com/OpenForgeProject/mageforge/issues/99)) ([9b53f8d](https://github.com/OpenForgeProject/mageforge/commit/9b53f8d270df9c56ab13488c2d7c60b367e3fa47)) -* Workflow permissions ([#101](https://github.com/OpenForgeProject/mageforge/issues/101)) ([c0c4c3d](https://github.com/OpenForgeProject/mageforge/commit/c0c4c3dbccda41befc7107b38279dbb11dc77db2)) +- correct head-branch regex and add new changed-files sections ([53777ea](https://github.com/OpenForgeProject/mageforge/commit/53777eac19920e4de175b2a52704ff8b0c9982de)) +- labeler.yml to simplify Documentation labels ([2d96502](https://github.com/OpenForgeProject/mageforge/commit/2d96502e697fb6bc0c262867163d93086c75c9aa)) +- labeler.yml to update label rules ([79c3fc0](https://github.com/OpenForgeProject/mageforge/commit/79c3fc05b8a468c76b3e69ee9b555e0460bc3928)) +- remove deprecated environment retrieval method ([#98](https://github.com/OpenForgeProject/mageforge/issues/98)) ([3e11ae7](https://github.com/OpenForgeProject/mageforge/commit/3e11ae7a572dff28875167043d5f9e64e7cc67b5)) +- remove unnecessary blank lines in functional tests workflow ([f1e9bb7](https://github.com/OpenForgeProject/mageforge/commit/f1e9bb7ce8ea96f20f5c23b1b4ae78138388ab53)) +- update head-branch patterns and file globbing in labeler.yml ([#103](https://github.com/OpenForgeProject/mageforge/issues/103)) ([bd48b7c](https://github.com/OpenForgeProject/mageforge/commit/bd48b7ced59e405002897e595972bebf97a34bc4)) +- update validateHyvaTheme to include output parameter ([#99](https://github.com/OpenForgeProject/mageforge/issues/99)) ([9b53f8d](https://github.com/OpenForgeProject/mageforge/commit/9b53f8d270df9c56ab13488c2d7c60b367e3fa47)) +- Workflow permissions ([#101](https://github.com/OpenForgeProject/mageforge/issues/101)) ([c0c4c3d](https://github.com/OpenForgeProject/mageforge/commit/c0c4c3dbccda41befc7107b38279dbb11dc77db2)) ## [0.7.0](https://github.com/OpenForgeProject/mageforge/compare/0.6.0...0.7.0) (2026-01-20) - ### Added -* add context7 configuration file with URL and public key ([977bee0](https://github.com/OpenForgeProject/mageforge/commit/977bee0d2b2c4301bd2764b07ef82eefb92e29fb)) -* add NodePackageManager service for npm dependency management ([#91](https://github.com/OpenForgeProject/mageforge/issues/91)) ([1ab623f](https://github.com/OpenForgeProject/mageforge/commit/1ab623f5d858c272b6f692acb98edd35bf15ed3d)) -* implement SymlinkCleaner service and integrate into theme builders [#88](https://github.com/OpenForgeProject/mageforge/issues/88) ([#89](https://github.com/OpenForgeProject/mageforge/issues/89)) ([3f40ef6](https://github.com/OpenForgeProject/mageforge/commit/3f40ef64174686fd3c75944d00773ef83515f0f9)) +- add context7 configuration file with URL and public key ([977bee0](https://github.com/OpenForgeProject/mageforge/commit/977bee0d2b2c4301bd2764b07ef82eefb92e29fb)) +- add NodePackageManager service for npm dependency management ([#91](https://github.com/OpenForgeProject/mageforge/issues/91)) ([1ab623f](https://github.com/OpenForgeProject/mageforge/commit/1ab623f5d858c272b6f692acb98edd35bf15ed3d)) +- implement SymlinkCleaner service and integrate into theme builders [#88](https://github.com/OpenForgeProject/mageforge/issues/88) ([#89](https://github.com/OpenForgeProject/mageforge/issues/89)) ([3f40ef6](https://github.com/OpenForgeProject/mageforge/commit/3f40ef64174686fd3c75944d00773ef83515f0f9)) ## [0.6.0](https://github.com/OpenForgeProject/mageforge/compare/0.5.0...0.6.0) (2026-01-19) - ### Added -* dev Inspector Overlay (Frontend) ([#85](https://github.com/OpenForgeProject/mageforge/issues/85)) ([806d04a](https://github.com/OpenForgeProject/mageforge/commit/806d04a252eb70f6f76131a672296d62a7c5372b)) +- dev Inspector Overlay (Frontend) ([#85](https://github.com/OpenForgeProject/mageforge/issues/85)) ([806d04a](https://github.com/OpenForgeProject/mageforge/commit/806d04a252eb70f6f76131a672296d62a7c5372b)) ## [0.5.0](https://github.com/OpenForgeProject/mageforge/compare/0.4.0...0.5.0) (2026-01-17) - ### ⚠ BREAKING CHANGES -* create theme:clean command for cleaning theme static files and cache, remove old mageforge:static:clean command ([#80](https://github.com/OpenForgeProject/mageforge/issues/80)) +- create theme:clean command for cleaning theme static files and cache, remove old mageforge:static:clean command ([#80](https://github.com/OpenForgeProject/mageforge/issues/80)) ### Added -* implement StaticContentCleaner and update theme build commands ([#83](https://github.com/OpenForgeProject/mageforge/issues/83)) ([80a6abf](https://github.com/OpenForgeProject/mageforge/commit/80a6abf8b63dfdf25233f884d3fc3c6a2648b05c)) - +- implement StaticContentCleaner and update theme build commands ([#83](https://github.com/OpenForgeProject/mageforge/issues/83)) ([80a6abf](https://github.com/OpenForgeProject/mageforge/commit/80a6abf8b63dfdf25233f884d3fc3c6a2648b05c)) ### Fixed -* create theme:clean command for cleaning theme static files and cache, remove old mageforge:static:clean command ([#80](https://github.com/OpenForgeProject/mageforge/issues/80)) ([ffd5ec8](https://github.com/OpenForgeProject/mageforge/commit/ffd5ec89e87eb8aa3a1f19eb957bd3f95a5c50b1)) -* update command aliases for consistency and clarity ([#82](https://github.com/OpenForgeProject/mageforge/issues/82)) ([34640fa](https://github.com/OpenForgeProject/mageforge/commit/34640fa88f0b622780b7257f7a74a2b469453391)) +- create theme:clean command for cleaning theme static files and cache, remove old mageforge:static:clean command ([#80](https://github.com/OpenForgeProject/mageforge/issues/80)) ([ffd5ec8](https://github.com/OpenForgeProject/mageforge/commit/ffd5ec89e87eb8aa3a1f19eb957bd3f95a5c50b1)) +- update command aliases for consistency and clarity ([#82](https://github.com/OpenForgeProject/mageforge/issues/82)) ([34640fa](https://github.com/OpenForgeProject/mageforge/commit/34640fa88f0b622780b7257f7a74a2b469453391)) ## [0.4.0](https://github.com/OpenForgeProject/mageforge/compare/0.3.1...0.4.0) (2026-01-17) - ### Added -* add theme suggestion service and integrate with commands [#75](https://github.com/OpenForgeProject/mageforge/issues/75) ([#76](https://github.com/OpenForgeProject/mageforge/issues/76)) ([1347782](https://github.com/OpenForgeProject/mageforge/commit/13477823e82b81bda5412a7f8d4cbd747254d6c5)) -* implement Release Please workflow and update configuration ([d814853](https://github.com/OpenForgeProject/mageforge/commit/d814853c220dd098ad11340ea179ad66f9fb01f7)) - +- add theme suggestion service and integrate with commands [#75](https://github.com/OpenForgeProject/mageforge/issues/75) ([#76](https://github.com/OpenForgeProject/mageforge/issues/76)) ([1347782](https://github.com/OpenForgeProject/mageforge/commit/13477823e82b81bda5412a7f8d4cbd747254d6c5)) +- implement Release Please workflow and update configuration ([d814853](https://github.com/OpenForgeProject/mageforge/commit/d814853c220dd098ad11340ea179ad66f9fb01f7)) ### Fixed -* adjust command argument order and clean up whitespace ([9c4fb73](https://github.com/OpenForgeProject/mageforge/commit/9c4fb7356d23c38096e798d797fdfcb4ec455ff5)) -* enhance interactive mode for compatibility checks and prompts ([#79](https://github.com/OpenForgeProject/mageforge/issues/79)) ([428a133](https://github.com/OpenForgeProject/mageforge/commit/428a1338479a2ad1642ea7a353d0c73e37ef155b)) -* improve theme selection and validation in TokensCommand ([#77](https://github.com/OpenForgeProject/mageforge/issues/77)) ([9167e95](https://github.com/OpenForgeProject/mageforge/commit/9167e956ddd1faebc03f39a26cf9a8434ecbe99a)) - +- adjust command argument order and clean up whitespace ([9c4fb73](https://github.com/OpenForgeProject/mageforge/commit/9c4fb7356d23c38096e798d797fdfcb4ec455ff5)) +- enhance interactive mode for compatibility checks and prompts ([#79](https://github.com/OpenForgeProject/mageforge/issues/79)) ([428a133](https://github.com/OpenForgeProject/mageforge/commit/428a1338479a2ad1642ea7a353d0c73e37ef155b)) +- improve theme selection and validation in TokensCommand ([#77](https://github.com/OpenForgeProject/mageforge/issues/77)) ([9167e95](https://github.com/OpenForgeProject/mageforge/commit/9167e956ddd1faebc03f39a26cf9a8434ecbe99a)) ### Documentation -* update community support links to GitHub Discussions ([c67380e](https://github.com/OpenForgeProject/mageforge/commit/c67380ea8366a364ab5161b7e01c1a66872d3e24)) -* update dependencies and naming conventions in Copilot instructions ([cf98266](https://github.com/OpenForgeProject/mageforge/commit/cf98266c331d41516c96eddaa32983038adc8ee4)) -* update README for command list and support section ([f4fb886](https://github.com/OpenForgeProject/mageforge/commit/f4fb886ca698a8f6d4ed3800bb60937f0f88331f)) +- update community support links to GitHub Discussions ([c67380e](https://github.com/OpenForgeProject/mageforge/commit/c67380ea8366a364ab5161b7e01c1a66872d3e24)) +- update dependencies and naming conventions in Copilot instructions ([cf98266](https://github.com/OpenForgeProject/mageforge/commit/cf98266c331d41516c96eddaa32983038adc8ee4)) +- update README for command list and support section ([f4fb886](https://github.com/OpenForgeProject/mageforge/commit/f4fb886ca698a8f6d4ed3800bb60937f0f88331f)) ### [0.3.1] - 2026-01-12 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e5a6dfc5..5ecb69ed 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,7 @@ We use [Conventional Commits](https://www.conventionalcommits.org/) for automate **PR Title Format** (Required): Your PR title **must** follow Conventional Commits format: -``` +```text : Examples: @@ -36,6 +36,7 @@ Examples: ``` **Commit Types**: + - `feat:` - New feature (minor version bump: 0.3.0 → 0.4.0) - `fix:` - Bug fix (patch version bump: 0.3.0 → 0.3.1) - `refactor:` - Code refactoring (no version bump by default) @@ -46,7 +47,8 @@ Examples: - `chore:` - Maintenance tasks (no version bump) **Breaking Changes**: Add `!` after the type for major version bumps: -``` + +```text feat!: remove legacy theme builder API fix!: change command argument order ``` @@ -74,6 +76,7 @@ git commit -m "chore: update GitHub Actions to latest versions" ### Merge Strategy All pull requests are merged using **squash-merge** to maintain a clean, linear git history. This means: + - ✅ Only one commit per PR in `main` branch - ✅ PR title becomes the commit message - ✅ All PR commits are squashed into a single commit @@ -104,7 +107,8 @@ All pull requests are merged using **squash-merge** to maintain a clean, linear - **Indentation**: Use 4 spaces for indentation. - **Naming Conventions**: Choose meaningful names for variables and functions. - **Line Length**: Keep lines under 80 characters wherever possible. -- **Linting**: Run `trunk check` to lint your code before submission. +- **Linting**: Run `trunk check` (non-PHP files) and `ddev mago lint` (PHP) before submission. +- **Formatting**: Run `trunk fmt` (non-PHP files) and `ddev mago fmt` (PHP) to auto-format. --- diff --git a/README.md b/README.md index 8839c806..6cc85e03 100644 --- a/README.md +++ b/README.md @@ -31,15 +31,15 @@ MageForge is a powerful CLI toolkit for Magento 2 front-end development. It simp ![Mageforge Hero](./.github/assets/cli-chooser.png) -| Theme Type | Support Status | -| ------------------------------- | ---------------------------------------------------------- | -| Magento Standard | ✅ Supported | -| Hyvä (TailwindCSS 3.x / 4.x) | ✅ Supported | -| Hyvä Checkout | ✅ Supported | -| Hyvä Fallback | ✅ Supported | -| Custom TailwindCSS (no Hyvä) | ✅ Supported | -| Avanta B2B | ✅ Supported | -| Your Custom Theme | [Create your own Builder](./docs/custom_theme_builders.md) | +| Theme Type | Support Status | +| ---------------------------- | ---------------------------------------------------------- | +| Magento Standard | ✅ Supported | +| Hyvä (TailwindCSS 3.x / 4.x) | ✅ Supported | +| Hyvä Checkout | ✅ Supported | +| Hyvä Fallback | ✅ Supported | +| Custom TailwindCSS (no Hyvä) | ✅ Supported | +| Avanta B2B | ✅ Supported | +| Your Custom Theme | [Create your own Builder](./docs/custom_theme_builders.md) | ## Installation @@ -76,21 +76,26 @@ See [Commands Reference](./docs/commands_reference.md) for the full command list The MageForge Inspector lets you inspect Magento blocks, templates, and performance metrics directly in your browser. **Features:** + - Template paths, block classes, and module names - PHP render times and cache status (lifetime, tags) - Web Vitals: LCP, CLS, INP per element - Accessibility checks: ARIA roles, contrast ratios, alt text -#### Screenshot +### Screenshot + ![Mageforge Toolbar](./.github/assets/toolbar.jpeg) **Enable:** + ```bash bin/magento mageforge:theme:inspector enable ``` -*(Requires Developer Mode. Can also be enabled in Admin: `Stores > Configuration > MageForge > Frontend Inspector`)* + +_(Requires Developer Mode. Can also be enabled in Admin: `Stores > Configuration > MageForge > Frontend Inspector`)_ **Use in Browser:** + - Toggle: `Ctrl+Shift+I` (Windows/Linux) or `Cmd+Option+I` (macOS) - Hover over elements to inspect; click to lock on a specific block @@ -121,13 +126,12 @@ See the dedicated [Commands Reference](./docs/commands_reference.md) for complet - **Discussions:** [GitHub Discussions](https://github.com/OpenForgeProject/mageforge/discussions) - **Contributing:** See [Contributing Guidelines](./CONTRIBUTING.md) - ## Credits MageForge uses the following third-party libraries: -| Library | Author | License | -| ------- | ------ | ------- | +| Library | Author | License | +| --------------------------------------- | -------- | --------------------------------------------------------------- | | [Tabler Icons](https://tabler.io/icons) | codecalm | [MIT](https://github.com/tabler/tabler-icons/blob/main/LICENSE) | --- diff --git a/composer.json b/composer.json index 724d1773..526b47ae 100644 --- a/composer.json +++ b/composer.json @@ -16,5 +16,29 @@ "php": "~8.3.0||~8.4.0||~8.5.0", "magento/framework": "103.0.*", "laravel/prompts": "^0.3.5" + }, + "require-dev": { + "carthage-software/mago": "^1.30", + "magento/magento-coding-standard": "^40" + }, + "repositories": [ + { + "type": "composer", + "url": "https://mirror.mage-os.org/" + } + ], + "config": { + "sort-packages": true, + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true, + "magento/composer-dependency-version-audit-plugin": true + } + }, + "scripts": { + "lint": "mago lint", + "fmt": "mago fmt", + "fmt:check": "mago fmt --dry-run", + "phpcs": "phpcs -p -s", + "phpcbf": "phpcbf -p" } } diff --git a/docs/commands_reference.md b/docs/commands_reference.md index 84ab196d..118a1f5a 100644 --- a/docs/commands_reference.md +++ b/docs/commands_reference.md @@ -4,17 +4,17 @@ Complete reference of all CLI commands provided by the MageForge module. ## Quick Overview -| Group | Command | Description | Aliases | -|-------|---------|-------------|---------| -| **Theme** | `mageforge:theme:list` | List all available Magento themes | `frontend:list` | -| **Theme** | `mageforge:theme:build` | Build selected themes (CSS/TailwindCSS) | `frontend:build` | -| **Theme** | `mageforge:theme:watch` | Watch theme files and auto-rebuild | `frontend:watch` | -| **Theme** | `mageforge:theme:clean` | Clean static files and cache directories | `frontend:clean` | -| **Theme** | `mageforge:theme:inspector` | Manage Frontend Inspector (enable/disable/status) | — | -| **Hyvä** | `mageforge:hyva:tokens` | Generate Hyvä design tokens | `hyva:tokens` | -| **Hyvä** | `mageforge:hyva:compatibility:check` | Check modules for Hyvä compatibility issues | `hyva:check` | -| **System** | `mageforge:system:version` | Show current and latest module version | `system:version` | -| **System** | `mageforge:system:check` | Display system information (PHP, Node.js, DB, etc.) | `system:check` | +| Group | Command | Description | Aliases | +| ---------- | ------------------------------------ | --------------------------------------------------- | ---------------- | +| **Theme** | `mageforge:theme:list` | List all available Magento themes | `frontend:list` | +| **Theme** | `mageforge:theme:build` | Build selected themes (CSS/TailwindCSS) | `frontend:build` | +| **Theme** | `mageforge:theme:watch` | Watch theme files and auto-rebuild | `frontend:watch` | +| **Theme** | `mageforge:theme:clean` | Clean static files and cache directories | `frontend:clean` | +| **Theme** | `mageforge:theme:inspector` | Manage Frontend Inspector (enable/disable/status) | — | +| **Hyvä** | `mageforge:hyva:tokens` | Generate Hyvä design tokens | `hyva:tokens` | +| **Hyvä** | `mageforge:hyva:compatibility:check` | Check modules for Hyvä compatibility issues | `hyva:check` | +| **System** | `mageforge:system:version` | Show current and latest module version | `system:version` | +| **System** | `mageforge:system:check` | Display system information (PHP, Node.js, DB, etc.) | `system:check` | --- @@ -44,9 +44,11 @@ bin/magento frontend:build Magento/luma Magento/blank ``` **Arguments:** + - `themeCodes` — One or more theme codes in format `Vendor/theme`. Accepts wildcards like `Magento/*`. **Behavior:** + - If no theme codes are provided, an interactive prompt lets you select themes. - For each theme, the appropriate builder is determined automatically (Hyvä, TailwindCSS, Magento Standard, etc.). - Displays a summary of built themes and execution time. @@ -63,12 +65,15 @@ bin/magento frontend:watch Magento/luma ``` **Arguments:** + - `themeCode` — Optional. Theme to watch in format `Vendor/theme`. If omitted, an interactive prompt appears. **Options:** + - `-t, --theme=VALUE` — Alternative way to specify the theme code. **Behavior:** + - Runs indefinitely until interrupted (Ctrl+C). - Monitors source files (SCSS, JS, etc.) and triggers rebuilds on change. - Useful for active theme development. @@ -86,9 +91,11 @@ bin/magento mageforge:theme:clean --dry-run ``` **Arguments:** + - `themeCodes` — Optional. One or more theme codes to clean. **Options:** + - `-a, --all` — Clean all themes. - `--dry-run` — Show what would be cleaned without actually deleting anything. @@ -105,9 +112,11 @@ bin/magento mageforge:theme:inspector status ``` **Arguments:** + - `action` — Required. One of: `enable`, `disable`, `status`. **Notes:** + - Requires Magento Developer Mode for enabling. - Can also be toggled via Admin: `Stores > Configuration > MageForge > Frontend Inspector`. - Browser shortcut: `Ctrl+Shift+I` (Windows/Linux) or `Cmd+Option+I` (macOS). @@ -127,6 +136,7 @@ bin/magento hyva:tokens Hyva/default ``` **Arguments:** + - `themeCode` — Optional. Theme code in format `Vendor/theme`. If omitted, an interactive prompt appears. **Output:** Creates a `generated/hyva-tokens.css` file from the design tokens configuration. @@ -143,8 +153,9 @@ bin/magento hyva:check ``` **Options:** + - `-a, --show-all` — Show all modules including compatible ones. -- `-t, --third-party-only` — Check only third-party modules (exclude Magento_*). +- `-t, --third-party-only` — Check only third-party modules (exclude Magento\_\*). - `--include-vendor` — Include Magento core modules in the check. - `--detailed` — Show detailed compatibility information. @@ -177,6 +188,7 @@ bin/magento system:check ``` **Reports:** + - PHP version and extensions - Magento version - Database type and version (MySQL/MariaDB) @@ -192,7 +204,7 @@ bin/magento system:check ## Command Groups Summary -``` +```text mageforge:theme:list → List available themes mageforge:theme:build → Build theme assets mageforge:theme:watch → Watch & auto-rebuild diff --git a/docs/custom_theme_builders.md b/docs/custom_theme_builders.md index 7afcd5b6..b75240e0 100644 --- a/docs/custom_theme_builders.md +++ b/docs/custom_theme_builders.md @@ -18,7 +18,7 @@ The ThemeBuilder architecture consists of the following components: To create your own ThemeBuilder, you'll need to set up a custom Magento 2 module with the following structure: -``` +```text app/code/YourCompany/YourModule/ ├── Console/ │ └── Command/ @@ -43,6 +43,7 @@ First, create the basic module structure as shown above: 1. Create the module directory: `app/code/YourCompany/YourModule/` 2. Create a registration.php file: + ```php